services: allow switching STT language and mdoel at the same time
This commit is contained in:
@@ -462,9 +462,12 @@ class TTSLanguageUpdateFrame(ControlFrame):
|
|||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class STTModelUpdateFrame(ControlFrame):
|
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
|
model: str
|
||||||
|
language: Language | None = None
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
|
|||||||
@@ -310,7 +310,7 @@ class STTService(AIService):
|
|||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
async def set_model(self, model: str):
|
async def set_model(self, model: str, language: Language | None):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
@@ -334,7 +334,7 @@ class STTService(AIService):
|
|||||||
# push a TextFrame. We don't really want to push audio frames down.
|
# push a TextFrame. We don't really want to push audio frames down.
|
||||||
await self.process_audio_frame(frame)
|
await self.process_audio_frame(frame)
|
||||||
elif isinstance(frame, STTModelUpdateFrame):
|
elif isinstance(frame, STTModelUpdateFrame):
|
||||||
await self.set_model(frame.model)
|
await self.set_model(frame.model, frame.language)
|
||||||
elif isinstance(frame, STTLanguageUpdateFrame):
|
elif isinstance(frame, STTLanguageUpdateFrame):
|
||||||
await self.set_language(frame.language)
|
await self.set_language(frame.language)
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -123,6 +123,7 @@ class CartesiaTTSService(TTSService):
|
|||||||
cartesia_language = language_to_cartesia_language(language)
|
cartesia_language = language_to_cartesia_language(language)
|
||||||
self._language = cartesia_language
|
self._language = cartesia_language
|
||||||
if voice:
|
if voice:
|
||||||
|
logger.debug(f"Switching TTS voice to: [{voice}]")
|
||||||
self._voice_id = voice
|
self._voice_id = voice
|
||||||
|
|
||||||
async def start(self, frame: StartFrame):
|
async def start(self, frame: StartFrame):
|
||||||
|
|||||||
@@ -134,9 +134,12 @@ class DeepgramSTTService(STTService):
|
|||||||
self._connection: AsyncListenWebSocketClient = self._client.listen.asyncwebsocket.v("1")
|
self._connection: AsyncListenWebSocketClient = self._client.listen.asyncwebsocket.v("1")
|
||||||
self._connection.on(LiveTranscriptionEvents.Transcript, self._on_message)
|
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}]")
|
logger.debug(f"Switching STT model to: [{model}]")
|
||||||
self._live_options.model = 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._disconnect()
|
||||||
await self._connect()
|
await self._connect()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user