@@ -133,6 +133,12 @@ export type RealtimeSessionConfigCommon = {
133133export type RealtimeSessionConfigDefinition = RealtimeSessionConfigCommon & {
134134 outputModalities ?: ( 'text' | 'audio' ) [ ] ;
135135 audio ?: RealtimeAudioConfig ;
136+ /**
137+ * TODO: We'll eventually migrate to audio.output.voice instead of this property.
138+ * Until we fully migrate to audio.output.voice for all session implementations,
139+ * using this top-level voice property helps with backwards compatibility.
140+ */
141+ voice ?: string ;
136142} ;
137143
138144// Deprecated config (legacy) — cannot be mixed with new fields
@@ -175,7 +181,6 @@ function isDeprecatedConfig(
175181) : config is Partial < RealtimeSessionConfigDeprecated > {
176182 return (
177183 isDefined ( 'modalities' , config ) ||
178- isDefined ( 'voice' , config ) ||
179184 isDefined ( 'inputAudioFormat' , config ) ||
180185 isDefined ( 'outputAudioFormat' , config ) ||
181186 isDefined ( 'inputAudioTranscription' , config ) ||
@@ -193,6 +198,25 @@ export function toNewSessionConfig(
193198 config : Partial < RealtimeSessionConfig > ,
194199) : Partial < RealtimeSessionConfigDefinition > {
195200 if ( ! isDeprecatedConfig ( config ) ) {
201+ const inputConfig = config . audio ?. input
202+ ? {
203+ format : normalizeAudioFormat ( config . audio . input . format ) ,
204+ noiseReduction : config . audio . input . noiseReduction ?? null ,
205+ transcription : config . audio . input . transcription ,
206+ turnDetection : config . audio . input . turnDetection ,
207+ }
208+ : undefined ;
209+
210+ const requestedOutputVoice = config . audio ?. output ?. voice ?? config . voice ;
211+ const outputConfig =
212+ config . audio ?. output || typeof requestedOutputVoice !== 'undefined'
213+ ? {
214+ format : normalizeAudioFormat ( config . audio ?. output ?. format ) ,
215+ voice : requestedOutputVoice ,
216+ speed : config . audio ?. output ?. speed ,
217+ }
218+ : undefined ;
219+
196220 return {
197221 model : config . model ,
198222 instructions : config . instructions ,
@@ -202,25 +226,13 @@ export function toNewSessionConfig(
202226 providerData : config . providerData ,
203227 prompt : config . prompt ,
204228 outputModalities : config . outputModalities ,
205- audio : config . audio
206- ? {
207- input : config . audio . input
208- ? {
209- format : normalizeAudioFormat ( config . audio . input . format ) ,
210- noiseReduction : config . audio . input . noiseReduction ?? null ,
211- transcription : config . audio . input . transcription ,
212- turnDetection : config . audio . input . turnDetection ,
213- }
214- : undefined ,
215- output : config . audio . output
216- ? {
217- format : normalizeAudioFormat ( config . audio . output . format ) ,
218- voice : config . audio . output . voice ,
219- speed : config . audio . output . speed ,
220- }
221- : undefined ,
222- }
223- : undefined ,
229+ audio :
230+ inputConfig || outputConfig
231+ ? {
232+ input : inputConfig ,
233+ output : outputConfig ,
234+ }
235+ : undefined ,
224236 } ;
225237 }
226238
0 commit comments