@@ -61,7 +61,7 @@ interface SessionConfig {
6161 tools : unknown [ ] ;
6262 voice : string | null ;
6363 input_audio_format : Record < string , unknown > | null ;
64- output_audio_format : string | null ;
64+ output_audio_format : Record < string , unknown > | null ;
6565 input_audio_noise_reduction : { type : string } | null ;
6666 input_audio_transcription : { model : string ; language ?: string ; prompt ?: string } | null ;
6767 turn_detection : unknown | null ;
@@ -93,7 +93,7 @@ function isLiveTranscriptionModel(model: string): boolean {
9393 ) ;
9494}
9595
96- function normalizeInputAudioFormat ( value : unknown ) : Record < string , unknown > | null {
96+ function normalizeAudioFormat ( value : unknown ) : Record < string , unknown > | null {
9797 if ( value === null ) return null ;
9898 if ( typeof value === "string" ) return { type : value } ;
9999 if (
@@ -137,7 +137,7 @@ function serializeSession(session: SessionConfig, sessionId?: string): Record<st
137137 turn_detection : session . turn_detection ,
138138 } ,
139139 output : {
140- format : session . output_audio_format ? { type : session . output_audio_format } : null ,
140+ format : session . output_audio_format ,
141141 voice : session . voice ,
142142 } ,
143143 } ,
@@ -550,9 +550,9 @@ async function processMessage(
550550 const audio = ( s as Record < string , unknown > ) . audio as Record < string , unknown > ;
551551 if ( audio . voice !== undefined ) session . voice = audio . voice as string | null ;
552552 if ( audio . input_audio_format !== undefined )
553- session . input_audio_format = normalizeInputAudioFormat ( audio . input_audio_format ) ;
553+ session . input_audio_format = normalizeAudioFormat ( audio . input_audio_format ) ;
554554 if ( audio . output_audio_format !== undefined )
555- session . output_audio_format = audio . output_audio_format as string | null ;
555+ session . output_audio_format = normalizeAudioFormat ( audio . output_audio_format ) ;
556556 if ( audio . input_audio_noise_reduction !== undefined )
557557 session . input_audio_noise_reduction = audio . input_audio_noise_reduction as {
558558 type : string ;
@@ -577,14 +577,21 @@ async function processMessage(
577577 session . input_audio_noise_reduction = input . noise_reduction as { type : string } | null ;
578578 if ( input . turn_detection !== undefined ) session . turn_detection = input . turn_detection ;
579579 if ( input . format !== undefined )
580- session . input_audio_format = normalizeInputAudioFormat ( input . format ) ;
580+ session . input_audio_format = normalizeAudioFormat ( input . format ) ;
581+ }
582+ if ( audio . output && typeof audio . output === "object" ) {
583+ const output = audio . output as Record < string , unknown > ;
584+ if ( output . voice !== undefined ) session . voice = output . voice as string | null ;
585+ if ( output . format !== undefined )
586+ session . output_audio_format = normalizeAudioFormat ( output . format ) ;
581587 }
582588 }
583589 // Beta flat fields (backward compat)
584590 if ( s . voice !== undefined ) session . voice = s . voice ;
585591 if ( s . input_audio_format !== undefined )
586- session . input_audio_format = normalizeInputAudioFormat ( s . input_audio_format ) ;
587- if ( s . output_audio_format !== undefined ) session . output_audio_format = s . output_audio_format ;
592+ session . input_audio_format = normalizeAudioFormat ( s . input_audio_format ) ;
593+ if ( s . output_audio_format !== undefined )
594+ session . output_audio_format = normalizeAudioFormat ( s . output_audio_format ) ;
588595 if ( s . input_audio_noise_reduction !== undefined )
589596 session . input_audio_noise_reduction = s . input_audio_noise_reduction ;
590597 if ( s . input_audio_transcription !== undefined )
0 commit comments