From e3d4a14b62833ec752285de1b4b9b19595cbe266 Mon Sep 17 00:00:00 2001 From: Guillaume Bernos Date: Tue, 14 Apr 2026 14:31:54 +0200 Subject: [PATCH] feat(ai): Add languageCode parameter to SpeechConfig --- .../firebase_ai/lib/src/live_api.dart | 15 ++++++++++++--- .../firebase_ai/firebase_ai/test/live_test.dart | 16 ++++++++++++++++ 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/packages/firebase_ai/firebase_ai/lib/src/live_api.dart b/packages/firebase_ai/firebase_ai/lib/src/live_api.dart index 9db6bd845476..efa01762522a 100644 --- a/packages/firebase_ai/firebase_ai/lib/src/live_api.dart +++ b/packages/firebase_ai/firebase_ai/lib/src/live_api.dart @@ -50,13 +50,16 @@ class VoiceConfig { /// Configures speech synthesis settings. /// -/// Allows specifying the desired voice for speech synthesis. +/// Allows specifying the desired voice and language for speech synthesis. class SpeechConfig { /// Creates a [SpeechConfig] instance. /// /// [voiceName] See https://cloud.google.com/text-to-speech/docs/chirp3-hd /// for names and sound demos. - SpeechConfig({String? voiceName}) + /// + /// [languageCode] The language code (BCP-47) for the speech synthesis, + /// e.g. "en-US", "fr-FR", "de-DE". + SpeechConfig({String? voiceName, this.languageCode}) : voiceConfig = voiceName != null ? VoiceConfig( prebuiltVoiceConfig: PrebuiltVoiceConfig(voiceName: voiceName)) @@ -64,10 +67,16 @@ class SpeechConfig { /// The voice config to use for speech synthesis. final VoiceConfig? voiceConfig; + + /// The language code (BCP-47) for speech synthesis, + /// e.g. "en-US", "fr-FR", "de-DE". + final String? languageCode; // ignore: public_member_api_docs Map toJson() => { if (voiceConfig case final voiceConfig?) - 'voice_config': voiceConfig.toJson() + 'voice_config': voiceConfig.toJson(), + if (languageCode case final languageCode?) + 'language_code': languageCode, }; } diff --git a/packages/firebase_ai/firebase_ai/test/live_test.dart b/packages/firebase_ai/firebase_ai/test/live_test.dart index 8eb09d308476..f071edd22a2b 100644 --- a/packages/firebase_ai/firebase_ai/test/live_test.dart +++ b/packages/firebase_ai/firebase_ai/test/live_test.dart @@ -34,6 +34,22 @@ void main() { expect(speechConfigWithoutVoice.toJson(), {}); }); + test('SpeechConfig with languageCode toJson() returns correct JSON', () { + final speechConfigWithLanguage = + SpeechConfig(voiceName: 'Aoede', languageCode: 'en-US'); + expect(speechConfigWithLanguage.toJson(), { + 'voice_config': { + 'prebuilt_voice_config': {'voice_name': 'Aoede'} + }, + 'language_code': 'en-US', + }); + + final speechConfigLanguageOnly = SpeechConfig(languageCode: 'fr-FR'); + expect(speechConfigLanguageOnly.toJson(), { + 'language_code': 'fr-FR', + }); + }); + test('ResponseModalities enum toJson() returns correct value', () { expect(ResponseModalities.text.toJson(), 'TEXT'); expect(ResponseModalities.image.toJson(), 'IMAGE');