You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I want to build a live transcription UI - mic in, streaming text out, no assistant, no turns.
OpenAI supports this natively with a realtime session of type: "transcription" and turn_detection: null, which streams conversation.item.input_audio_transcription.delta events continuously instead of emitting one transcript per detected turn. Models like gpt-live-transcribe are only reachable this way.
The realtime layer is hardcoded to conversational voice chat at four points:
src/realtime/token.ts:22: buildClientSecretRequest() always sends { session: { type: 'realtime', model } }. No way to mint a transcription session.
src/realtime/types.ts:24: OpenAIRealtimeModel = 'gpt-realtime' | 'gpt-realtime-mini'. Transcription models aren't in the union (and wouldn't belong there anyway - in a transcription session the model goes under audio.input.transcription.model, not session.model).
src/realtime/session-update.ts:21: buildSessionUpdate() hardcodes transcription: { model: 'whisper-1' } and never forwards RealtimeSessionConfig.providerOptions, so there's no escape hatch to override it.
src/realtime/adapter.ts:247: only conversation.item.input_audio_transcription.completed is handled. There's no …transcription.delta case, so user speech only ever surfaces as isFinal: true, one event per committed turn.
vadMode: 'manual' does send turn_detection: null, but it's still turn-shaped, and still paired with an assistant that responds.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
I want to build a live transcription UI - mic in, streaming text out, no assistant, no turns.
OpenAI supports this natively with a realtime session of
type: "transcription"andturn_detection: null, which streamsconversation.item.input_audio_transcription.deltaevents continuously instead of emitting one transcript per detected turn. Models likegpt-live-transcribeare only reachable this way.The raw session I currently mint by hand:
{ "session": { "type": "transcription", "audio": { "input": { "format": { "type": "audio/pcm", "rate": 24000 }, "transcription": { "model": "gpt-live-transcribe" }, "turn_detection": null } } } }Why it isn't expressible today
The realtime layer is hardcoded to conversational voice chat at four points:
src/realtime/token.ts:22:buildClientSecretRequest()always sends{ session: { type: 'realtime', model } }. No way to mint atranscriptionsession.src/realtime/types.ts:24:OpenAIRealtimeModel = 'gpt-realtime' | 'gpt-realtime-mini'. Transcription models aren't in the union (and wouldn't belong there anyway - in a transcription session the model goes underaudio.input.transcription.model, notsession.model).src/realtime/session-update.ts:21:buildSessionUpdate()hardcodestranscription: { model: 'whisper-1' }and never forwardsRealtimeSessionConfig.providerOptions, so there's no escape hatch to override it.src/realtime/adapter.ts:247: onlyconversation.item.input_audio_transcription.completedis handled. There's no…transcription.deltacase, so user speech only ever surfaces asisFinal: true, one event per committed turn.vadMode: 'manual'does sendturn_detection: null, but it's still turn-shaped, and still paired with an assistant that responds.Proposed API
All reactions