services: allow switching STT language and mdoel at the same time
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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):
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user