From b3b39626e174a89cf3d78e5b3655060d107716b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aleix=20Conchillo=20Flaqu=C3=A9?= Date: Mon, 26 Aug 2024 11:26:10 -0700 Subject: [PATCH] services: allow switching STT language and mdoel at the same time --- src/pipecat/frames/frames.py | 5 ++++- src/pipecat/services/ai_services.py | 4 ++-- src/pipecat/services/cartesia.py | 1 + src/pipecat/services/deepgram.py | 5 ++++- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/pipecat/frames/frames.py b/src/pipecat/frames/frames.py index 884e1e9eb..1f94c75f0 100644 --- a/src/pipecat/frames/frames.py +++ b/src/pipecat/frames/frames.py @@ -462,9 +462,12 @@ class TTSLanguageUpdateFrame(ControlFrame): @dataclass class STTModelUpdateFrame(ControlFrame): - """A control frame containing a request to update the STT model. + """A control frame containing a request to update the STT model and optional + language. + """ model: str + language: Language | None = None @dataclass diff --git a/src/pipecat/services/ai_services.py b/src/pipecat/services/ai_services.py index 50b73e85b..2048be046 100644 --- a/src/pipecat/services/ai_services.py +++ b/src/pipecat/services/ai_services.py @@ -310,7 +310,7 @@ class STTService(AIService): super().__init__(**kwargs) @abstractmethod - async def set_model(self, model: str): + async def set_model(self, model: str, language: Language | None): pass @abstractmethod @@ -334,7 +334,7 @@ class STTService(AIService): # push a TextFrame. We don't really want to push audio frames down. await self.process_audio_frame(frame) elif isinstance(frame, STTModelUpdateFrame): - await self.set_model(frame.model) + await self.set_model(frame.model, frame.language) elif isinstance(frame, STTLanguageUpdateFrame): await self.set_language(frame.language) else: diff --git a/src/pipecat/services/cartesia.py b/src/pipecat/services/cartesia.py index b267d14c1..899fb3561 100644 --- a/src/pipecat/services/cartesia.py +++ b/src/pipecat/services/cartesia.py @@ -123,6 +123,7 @@ class CartesiaTTSService(TTSService): 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 start(self, frame: StartFrame): diff --git a/src/pipecat/services/deepgram.py b/src/pipecat/services/deepgram.py index 6179bb56d..098392cd6 100644 --- a/src/pipecat/services/deepgram.py +++ b/src/pipecat/services/deepgram.py @@ -134,9 +134,12 @@ class DeepgramSTTService(STTService): self._connection: AsyncListenWebSocketClient = self._client.listen.asyncwebsocket.v("1") self._connection.on(LiveTranscriptionEvents.Transcript, self._on_message) - async def set_model(self, model: str): + async def set_model(self, model: str, language: Language | None): logger.debug(f"Switching STT model to: [{model}]") self._live_options.model = model + if language: + logger.debug(f"Switching STT language to: [{language}]") + self._live_options.language = language.value await self._disconnect() await self._connect()