I found this which helped me understand what is going on: Realtime transcription messages flow is wrong - #16 by 6r0m
It seems that no transcription is returned until the accumulated audio is deemed ready. This happens if the client sends an input_audio_buffer.commit message or the server decides it’s time based on the server_vad or semantic_vad config. I tried sending commit messages more often and the accuracy was awful… maybe because I was committing partial words? I also tried server_vad with a small silence_duration_ms and semantic_vad with eagerness = high. Slightly better, but not the experience I am going for. I have seen UIs where the text is built as the user speaks and that’s what I want. I don’t see how that’s possible with the realtime API, but I would be very happy to be proven wrong!