Skip to content

Commit e3d4a14

Browse files
committed
feat(ai): Add languageCode parameter to SpeechConfig
1 parent 90d2e1f commit e3d4a14

2 files changed

Lines changed: 28 additions & 3 deletions

File tree

packages/firebase_ai/firebase_ai/lib/src/live_api.dart

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,24 +50,33 @@ class VoiceConfig {
5050

5151
/// Configures speech synthesis settings.
5252
///
53-
/// Allows specifying the desired voice for speech synthesis.
53+
/// Allows specifying the desired voice and language for speech synthesis.
5454
class SpeechConfig {
5555
/// Creates a [SpeechConfig] instance.
5656
///
5757
/// [voiceName] See https://cloud.google.com/text-to-speech/docs/chirp3-hd
5858
/// for names and sound demos.
59-
SpeechConfig({String? voiceName})
59+
///
60+
/// [languageCode] The language code (BCP-47) for the speech synthesis,
61+
/// e.g. "en-US", "fr-FR", "de-DE".
62+
SpeechConfig({String? voiceName, this.languageCode})
6063
: voiceConfig = voiceName != null
6164
? VoiceConfig(
6265
prebuiltVoiceConfig: PrebuiltVoiceConfig(voiceName: voiceName))
6366
: null;
6467

6568
/// The voice config to use for speech synthesis.
6669
final VoiceConfig? voiceConfig;
70+
71+
/// The language code (BCP-47) for speech synthesis,
72+
/// e.g. "en-US", "fr-FR", "de-DE".
73+
final String? languageCode;
6774
// ignore: public_member_api_docs
6875
Map<String, Object?> toJson() => {
6976
if (voiceConfig case final voiceConfig?)
70-
'voice_config': voiceConfig.toJson()
77+
'voice_config': voiceConfig.toJson(),
78+
if (languageCode case final languageCode?)
79+
'language_code': languageCode,
7180
};
7281
}
7382

packages/firebase_ai/firebase_ai/test/live_test.dart

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,22 @@ void main() {
3434
expect(speechConfigWithoutVoice.toJson(), {});
3535
});
3636

37+
test('SpeechConfig with languageCode toJson() returns correct JSON', () {
38+
final speechConfigWithLanguage =
39+
SpeechConfig(voiceName: 'Aoede', languageCode: 'en-US');
40+
expect(speechConfigWithLanguage.toJson(), {
41+
'voice_config': {
42+
'prebuilt_voice_config': {'voice_name': 'Aoede'}
43+
},
44+
'language_code': 'en-US',
45+
});
46+
47+
final speechConfigLanguageOnly = SpeechConfig(languageCode: 'fr-FR');
48+
expect(speechConfigLanguageOnly.toJson(), {
49+
'language_code': 'fr-FR',
50+
});
51+
});
52+
3753
test('ResponseModalities enum toJson() returns correct value', () {
3854
expect(ResponseModalities.text.toJson(), 'TEXT');
3955
expect(ResponseModalities.image.toJson(), 'IMAGE');

0 commit comments

Comments
 (0)