@@ -40,8 +40,9 @@ public ElevenLabsClient(
4040 ProviderCredentials credentials ,
4141 string providerModelId ,
4242 ILogger < ElevenLabsClient > logger ,
43- IHttpClientFactory ? httpClientFactory = null )
44- : base ( credentials , providerModelId , logger , httpClientFactory , "ElevenLabs" )
43+ IHttpClientFactory ? httpClientFactory = null ,
44+ ProviderDefaultModels ? defaultModels = null )
45+ : base ( credentials , providerModelId , logger , httpClientFactory , "ElevenLabs" , defaultModels )
4546 {
4647 var translatorLogger = logger as ILogger < ElevenLabsRealtimeTranslator >
4748 ?? Microsoft . Extensions . Logging . Abstractions . NullLoggerFactory . Instance . CreateLogger < ElevenLabsRealtimeTranslator > ( ) ;
@@ -92,7 +93,7 @@ public async Task<TextToSpeechResponse> CreateSpeechAsync(
9293
9394 // ElevenLabs uses voice IDs instead of voice names
9495 var voiceId = request . Voice ?? "21m00Tcm4TlvDq8ikWAM" ; // Default voice ID
95- var model = request . Model ?? "eleven_monolingual_v1" ;
96+ var model = request . Model ?? GetDefaultTextToSpeechModel ( ) ;
9697
9798 var requestUrl = $ "{ API_BASE_URL } /text-to-speech/{ voiceId } ";
9899
@@ -149,7 +150,7 @@ public async IAsyncEnumerable<AudioChunk> StreamSpeechAsync(
149150 using var httpClient = CreateHttpClient ( effectiveApiKey ) ;
150151
151152 var voiceId = request . Voice ?? "21m00Tcm4TlvDq8ikWAM" ;
152- var model = request . Model ?? "eleven_monolingual_v1" ;
153+ var model = request . Model ?? GetDefaultTextToSpeechModel ( ) ;
153154
154155 var requestUrl = $ "{ API_BASE_URL } /text-to-speech/{ voiceId } /stream";
155156
@@ -378,6 +379,12 @@ public async Task<RealtimeSession> CreateSessionAsync(
378379
379380 await clientWebSocket . ConnectAsync ( wsUri , cancellationToken ) ;
380381
382+ // Ensure model is set to default if not provided
383+ if ( string . IsNullOrEmpty ( config . Model ) )
384+ {
385+ config . Model = GetDefaultRealtimeModel ( ) ;
386+ }
387+
381388 var session = new ElevenLabsRealtimeSession (
382389 clientWebSocket ,
383390 _translator ,
@@ -506,6 +513,52 @@ private class ElevenLabsVoiceLabels
506513 public string ? Language { get ; set ; }
507514 public string ? Gender { get ; set ; }
508515 }
516+
517+ #region Configuration Helpers
518+
519+ /// <summary>
520+ /// Gets the default text-to-speech model from configuration or falls back to eleven_monolingual_v1.
521+ /// </summary>
522+ private string GetDefaultTextToSpeechModel ( )
523+ {
524+ // Check provider-specific override first
525+ var providerOverride = DefaultModels ? . Audio ? . ProviderOverrides
526+ ? . GetValueOrDefault ( ProviderName . ToLowerInvariant ( ) ) ? . TextToSpeechModel ;
527+
528+ if ( ! string . IsNullOrWhiteSpace ( providerOverride ) )
529+ return providerOverride ;
530+
531+ // Check global default
532+ var globalDefault = DefaultModels ? . Audio ? . DefaultTextToSpeechModel ;
533+ if ( ! string . IsNullOrWhiteSpace ( globalDefault ) )
534+ return globalDefault ;
535+
536+ // Fallback to hardcoded default for backward compatibility
537+ return "eleven_monolingual_v1" ;
538+ }
539+
540+ /// <summary>
541+ /// Gets the default realtime model from configuration or falls back to eleven_conversational_v1.
542+ /// </summary>
543+ private string GetDefaultRealtimeModel ( )
544+ {
545+ // Check provider-specific override first
546+ var providerOverride = DefaultModels ? . Realtime ? . ProviderOverrides
547+ ? . GetValueOrDefault ( ProviderName . ToLowerInvariant ( ) ) ;
548+
549+ if ( ! string . IsNullOrWhiteSpace ( providerOverride ) )
550+ return providerOverride ;
551+
552+ // Check global default
553+ var globalDefault = DefaultModels ? . Realtime ? . DefaultRealtimeModel ;
554+ if ( ! string . IsNullOrWhiteSpace ( globalDefault ) )
555+ return globalDefault ;
556+
557+ // Fallback to hardcoded default for backward compatibility
558+ return "eleven_conversational_v1" ;
559+ }
560+
561+ #endregion
509562 }
510563
511564 /// <summary>
@@ -545,7 +598,7 @@ public async Task ConfigureAsync(RealtimeSessionConfig config, CancellationToken
545598 {
546599 [ "voice_id" ] = config . Voice ?? "21m00Tcm4TlvDq8ikWAM" ,
547600 [ "language" ] = config . Language ?? "en" ,
548- [ "model_id" ] = config . Model ?? "eleven_conversational_v1" ,
601+ [ "model_id" ] = config . Model ?? "eleven_conversational_v1" , // Model should be set in CreateSessionAsync
549602 [ "voice_settings" ] = new Dictionary < string , object >
550603 {
551604 [ "stability" ] = 0.5 ,
0 commit comments