diff --git a/src/pipecat/services/aws.py b/src/pipecat/services/aws.py
index 4a2eceab6..0ae72b968 100644
--- a/src/pipecat/services/aws.py
+++ b/src/pipecat/services/aws.py
@@ -121,7 +121,7 @@ class AWSTTSService(TTSService):
self._settings = {
"sample_rate": sample_rate,
"engine": params.engine,
- "language": language_to_aws_language(params.language) if params.language else "en-US",
+ "language": params.language if params.language else Language.EN,
"pitch": params.pitch,
"rate": params.rate,
"volume": params.volume,
@@ -135,8 +135,8 @@ class AWSTTSService(TTSService):
def _construct_ssml(self, text: str) -> str:
ssml = ""
- if self._settings["language"]:
- ssml += f""
+ language = language_to_aws_language(self._settings["language"])
+ ssml += f""
prosody_attrs = []
# Prosody tags are only supported for standard and neural engines
@@ -158,8 +158,7 @@ class AWSTTSService(TTSService):
if prosody_attrs:
ssml += ""
- if self._settings["language"]:
- ssml += ""
+ ssml += ""
ssml += ""
diff --git a/src/pipecat/services/azure.py b/src/pipecat/services/azure.py
index eff5d333f..190a297a0 100644
--- a/src/pipecat/services/azure.py
+++ b/src/pipecat/services/azure.py
@@ -27,6 +27,7 @@ from pipecat.frames.frames import (
)
from pipecat.services.ai_services import ImageGenService, STTService, TTSService
from pipecat.services.openai import BaseOpenAILLMService
+from pipecat.transcriptions import language
from pipecat.transcriptions.language import Language
from pipecat.utils.time import time_now_iso8601
@@ -191,7 +192,7 @@ class AzureTTSService(TTSService):
self._settings = {
"sample_rate": sample_rate,
"emphasis": params.emphasis,
- "language": language_to_azure_language(params.language) if params.language else "en-US",
+ "language": params.language if params.language else Language.EN,
"pitch": params.pitch,
"rate": params.rate,
"role": params.role,
@@ -206,8 +207,9 @@ class AzureTTSService(TTSService):
return True
def _construct_ssml(self, text: str) -> str:
+ language = language_to_azure_language(self._settings["language"])
ssml = (
- f""
f""
diff --git a/src/pipecat/services/cartesia.py b/src/pipecat/services/cartesia.py
index 464c2d979..b8aab1161 100644
--- a/src/pipecat/services/cartesia.py
+++ b/src/pipecat/services/cartesia.py
@@ -106,7 +106,7 @@ class CartesiaTTSService(WordTTSService):
"encoding": params.encoding,
"sample_rate": params.sample_rate,
},
- "language": language_to_cartesia_language(params.language) if params.language else "en",
+ "language": params.language if params.language else Language.EN,
"speed": params.speed,
"emotion": params.emotion,
}
@@ -146,7 +146,7 @@ class CartesiaTTSService(WordTTSService):
"model_id": self.model_name,
"voice": voice_config,
"output_format": self._settings["output_format"],
- "language": self._settings["language"],
+ "language": language_to_cartesia_language(self._settings["language"]),
"add_timestamps": add_timestamps,
}
return json.dumps(msg)
@@ -303,7 +303,7 @@ class CartesiaHttpTTSService(TTSService):
"encoding": params.encoding,
"sample_rate": params.sample_rate,
},
- "language": language_to_cartesia_language(params.language) if params.language else None,
+ "language": params.language if params.language else Language.EN,
"speed": params.speed,
"emotion": params.emotion,
}
@@ -343,7 +343,7 @@ class CartesiaHttpTTSService(TTSService):
transcript=text,
voice_id=self._voice_id,
output_format=self._settings["output_format"],
- language=self._settings["language"],
+ language=language_to_cartesia_language(self._settings["language"]),
stream=False,
_experimental_voice_controls=voice_controls,
)
diff --git a/src/pipecat/services/elevenlabs.py b/src/pipecat/services/elevenlabs.py
index 723e2f854..95ac5c1f1 100644
--- a/src/pipecat/services/elevenlabs.py
+++ b/src/pipecat/services/elevenlabs.py
@@ -198,9 +198,7 @@ class ElevenLabsTTSService(WordTTSService):
self._url = url
self._settings = {
"sample_rate": sample_rate_from_output_format(params.output_format),
- "language": language_to_elevenlabs_language(params.language)
- if params.language
- else "en",
+ "language": params.language if params.language else Language.EN,
"output_format": params.output_format,
"optimize_streaming_latency": params.optimize_streaming_latency,
"stability": params.stability,
@@ -294,14 +292,14 @@ class ElevenLabsTTSService(WordTTSService):
if self._settings["optimize_streaming_latency"]:
url += f"&optimize_streaming_latency={self._settings['optimize_streaming_latency']}"
- # language can only be used with the 'eleven_turbo_v2_5' model
- if self._settings["language"]:
- if model == "eleven_turbo_v2_5":
- url += f"&language_code={self._settings['language']}"
- else:
- logger.debug(
- f"Language code [{self._settings['language']}] not applied. Language codes can only be used with the 'eleven_turbo_v2_5' model."
- )
+ # Language can only be used with the 'eleven_turbo_v2_5' model
+ language = language_to_elevenlabs_language(self._settings["language"])
+ if model == "eleven_turbo_v2_5":
+ url += f"&language_code={language}"
+ else:
+ logger.debug(
+ f"Language code [{language}] not applied. Language codes can only be used with the 'eleven_turbo_v2_5' model."
+ )
self._websocket = await websockets.connect(url)
self._receive_task = self.get_event_loop().create_task(self._receive_task_handler())
diff --git a/src/pipecat/services/gladia.py b/src/pipecat/services/gladia.py
index 8f270195b..e95329040 100644
--- a/src/pipecat/services/gladia.py
+++ b/src/pipecat/services/gladia.py
@@ -135,7 +135,7 @@ class GladiaSTTService(STTService):
self._url = url
self._settings = {
"sample_rate": params.sample_rate,
- "language": language_to_gladia_language(params.language) if params.language else "en",
+ "language": params.language if params.language else Language.EN,
"transcription_hint": params.transcription_hint,
"endpointing": params.endpointing,
"prosody": params.prosody,
@@ -169,7 +169,7 @@ class GladiaSTTService(STTService):
"model_type": "fast",
"language_behaviour": "manual",
"sample_rate": self._settings["sample_rate"],
- "language": self._settings["language"],
+ "language": language_to_gladia_language(self._settings["language"]),
"transcription_hint": self._settings["transcription_hint"],
"endpointing": self._settings["endpointing"],
"prosody": self._settings["prosody"],
diff --git a/src/pipecat/services/google.py b/src/pipecat/services/google.py
index a8187366a..93c2f2d62 100644
--- a/src/pipecat/services/google.py
+++ b/src/pipecat/services/google.py
@@ -40,7 +40,7 @@ try:
except ModuleNotFoundError as e:
logger.error(f"Exception: {e}")
logger.error(
- "In order to use Google AI, you need to `pip install pipecat-ai[google]`. Also, set `GOOGLE_APPLICATION_CREDENTIALS` environment variable."
+ "In order to use Google AI, you need to `pip install pipecat-ai[google]`. Also, set the environment variable GOOGLE_API_KEY for the GoogleLLMService and GOOGLE_APPLICATION_CREDENTIALS for the GoogleTTSService`."
)
raise Exception(f"Missing module: {e}")
@@ -261,9 +261,7 @@ class GoogleTTSService(TTSService):
"rate": params.rate,
"volume": params.volume,
"emphasis": params.emphasis,
- "language": language_to_google_language(params.language)
- if params.language
- else "en-US",
+ "language": params.language if params.language else Language.EN,
"gender": params.gender,
"google_style": params.google_style,
}
@@ -298,8 +296,10 @@ class GoogleTTSService(TTSService):
# Voice tag
voice_attrs = [f"name='{self._voice_id}'"]
- if self._settings["language"]:
- voice_attrs.append(f"language='{self._settings['language']}'")
+
+ language = language_to_google_language(self._settings["language"])
+ voice_attrs.append(f"language='{language}'")
+
if self._settings["gender"]:
voice_attrs.append(f"gender='{self._settings['gender']}'")
ssml += f""
diff --git a/src/pipecat/services/lmnt.py b/src/pipecat/services/lmnt.py
index eea4fd9db..8f7fe6528 100644
--- a/src/pipecat/services/lmnt.py
+++ b/src/pipecat/services/lmnt.py
@@ -82,7 +82,7 @@ class LmntTTSService(TTSService):
"encoding": "pcm_s16le",
"sample_rate": sample_rate,
},
- "language": language_to_lmnt_language(language) if language else "en",
+ "language": language,
}
self.set_voice(voice_id)
diff --git a/src/pipecat/services/xtts.py b/src/pipecat/services/xtts.py
index d3cea254a..2f842c896 100644
--- a/src/pipecat/services/xtts.py
+++ b/src/pipecat/services/xtts.py
@@ -94,7 +94,7 @@ class XTTSService(TTSService):
super().__init__(**kwargs)
self._settings = {
- "language": language_to_xtts_language(language) if language else "en",
+ "language": language,
"base_url": base_url,
}
self.set_voice(voice_id)
@@ -131,9 +131,11 @@ class XTTSService(TTSService):
url = self._settings["base_url"] + "/tts_stream"
+ language = language_to_xtts_language(self._settings["language"])
+
payload = {
"text": text.replace(".", "").replace("*", ""),
- "language": self._settings["language"],
+ "language": language,
"speaker_embedding": embeddings["speaker_embedding"],
"gpt_cond_latent": embeddings["gpt_cond_latent"],
"add_wav_header": False,