Realtime API Transcription Feedback

Using the envelope model gpt-realtime-2.1, we juxtapose below timing stats over a large sample of relatively short utterances across ordinary final transcription received on the api session v.s. out-of-band transcriptions returned for the same VAD-supported auto-committed utterances:

+------------------------------+-----------------+-----------------+
| Stage after commit | In-band | Out-of-band |
+------------------------------+-----------------+-----------------+
| Request acknowledged | already running | 173 ms median |
| First text received | 240 ms | 556 ms |
| First text → full completion | 274 ms | 89 ms |
| Full completion | 527 ms | 646 ms |
+------------------------------+-----------------+-----------------+

This suggests that the incremental in-band transcription gets a head-start but its final transcription arrives only some 10% faster on average than the out-of-band transcription which is only requested once the auto-commit indication arrives from the server.

The texts spoken (versatile, only rare repeats of the same text) were 1 - 16 words in this aggregate data analysis, and usually only 1-10 words or less.

It’s somewhat intriguing that the incremental transcription’s final transcript hasn’t a more salient advantage in the time it takes for it to reach the client side over the expanse of the Internet; the current difference in final arrival makes the in-band incremental transcription almost useless for a scenario expecting only short utterances ― it arrives mildly faster while its context steering is far less capable than that of the out-of-band api channel.

The last partial preceding the final was usually identical to it and arrives 200ms-300ms earlier, but you don’t know it’s the last before the final unless you wait for the final, so the partials are really not helpful in that scenario.

The partials huddle in a short post-commit burst, as data shows the timeline is typically:

utterance ends → short wait → all partial tokens burst out rapidly → roughly 0.2-second pause → formal final event.

And hence in general partials would have no utility when dealing with a relatively short utterance of just a few words auto-committed, you’d wait for a final not use partials for that in most user interaction designs (or practically all of them).


Tentative Conclusion and Suggestion

  • Maybe a handle for switching off the partials would be very useful for many applications ― if it makes the server faster to send its final.
  • Maybe differently chunking the final transcript would help.

These can potentially help scenarios where relatively short sentences or instructions are expected.

Obviously, for scenarios where a very long dictation is taken, the above doesn’t probably matter, but the vector for improvement would be that partials would arrive every so often and not only bunch up near the end of the dictation’s duration:

When trying a very long dictation with auto-commit off, no partials show up at all up until commit is being requested from the client-side, not even after a sentence is clearly over and there’s even a pause after it, but this deserves more than a quick check in passing.

We’re approximately 4 ms round-trip from the public API edge, which is remarkably close.

From initial exploration following today’s release of the new model gpt-live-transcribe under the Realtime API:

  1. With this newer model partial updates seem to arrive much earlier than before, only gradually approaching the much longer time it takes for the first partial of the previous model, as the delay level chosen is increased. So the delay level being selected determines how fast the partials start arriving and if you don’t select the highest delay level, they begin arriving much faster ― quite (but not smoothly) proportional to the chosen delay level.
  2. The final completion of the transcription when using this new model is at par with the old one, and does not really on average vary by the delay level selected ― the delay level only affects how early partials begin arriving ― according to initial experiments. All experiments using short texts and no user supplied context.

Would be nice to add word/token probabilities in the new model, which the old one had; they were noisy signal but still application-level helpful.