From d7c967997753a29c4a4c3d1fee31e523cdc9cef0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aleix=20Conchillo=20Flaqu=C3=A9?= Date: Mon, 26 Aug 2024 12:08:53 -0700 Subject: [PATCH] services: allow TTSModelUpdateFrame to also update language and voice --- src/pipecat/frames/frames.py | 2 ++ src/pipecat/services/ai_services.py | 2 +- src/pipecat/services/cartesia.py | 9 ++++++++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/pipecat/frames/frames.py b/src/pipecat/frames/frames.py index 1f94c75f0..87f2d599d 100644 --- a/src/pipecat/frames/frames.py +++ b/src/pipecat/frames/frames.py @@ -441,6 +441,8 @@ class TTSModelUpdateFrame(ControlFrame): """A control frame containing a request to update the TTS model. """ model: str + voice: str | None = None + language: Language | None = None @dataclass diff --git a/src/pipecat/services/ai_services.py b/src/pipecat/services/ai_services.py index 2048be046..a48afe78a 100644 --- a/src/pipecat/services/ai_services.py +++ b/src/pipecat/services/ai_services.py @@ -179,7 +179,7 @@ class TTSService(AIService): self._current_sentence: str = "" @abstractmethod - async def set_model(self, model: str): + async def set_model(self, model: str, voice: str | None, language: Language | None): pass @abstractmethod diff --git a/src/pipecat/services/cartesia.py b/src/pipecat/services/cartesia.py index 899fb3561..bc7d76dde 100644 --- a/src/pipecat/services/cartesia.py +++ b/src/pipecat/services/cartesia.py @@ -110,9 +110,16 @@ class CartesiaTTSService(TTSService): def can_generate_metrics(self) -> bool: return True - async def set_model(self, model: str): + async def set_model(self, model: str, voice: str | None, language: Language | None): logger.debug(f"Switching TTS model to: [{model}]") self._model_id = model + if language: + logger.debug(f"Switching TTS language to: [{language}]") + cartesia_language = language_to_cartesia_language(language) + self._language = cartesia_language + if voice: + logger.debug(f"Switching TTS voice to: [{voice}]") + self._voice_id = voice async def set_voice(self, voice: str): logger.debug(f"Switching TTS voice to: [{voice}]")