services: apply service language code before using service
This commit is contained in:
@@ -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 = "<speak>"
|
||||
|
||||
if self._settings["language"]:
|
||||
ssml += f"<lang xml:lang='{self._settings['language']}'>"
|
||||
language = language_to_aws_language(self._settings["language"])
|
||||
ssml += f"<lang xml:lang='{language}'>"
|
||||
|
||||
prosody_attrs = []
|
||||
# Prosody tags are only supported for standard and neural engines
|
||||
@@ -158,8 +158,7 @@ class AWSTTSService(TTSService):
|
||||
if prosody_attrs:
|
||||
ssml += "</prosody>"
|
||||
|
||||
if self._settings["language"]:
|
||||
ssml += "</lang>"
|
||||
ssml += "</lang>"
|
||||
|
||||
ssml += "</speak>"
|
||||
|
||||
|
||||
@@ -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"<speak version='1.0' xml:lang='{self._settings['language']}' "
|
||||
f"<speak version='1.0' xml:lang='{language}' "
|
||||
"xmlns='http://www.w3.org/2001/10/synthesis' "
|
||||
"xmlns:mstts='http://www.w3.org/2001/mstts'>"
|
||||
f"<voice name='{self._voice_id}'>"
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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"],
|
||||
|
||||
@@ -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"<voice {' '.join(voice_attrs)}>"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user