Update ElevenLabsTTSService: reconnect on model and language changes
This commit is contained in:
@@ -9,6 +9,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
### Added
|
||||
|
||||
- `ElevenLabsTTSService` now supports additional runtime changes to the `model`
|
||||
and `language` parameters.
|
||||
|
||||
- Added `MistralLLMService`, using Mistral's chat completion API.
|
||||
|
||||
- For `OpenAILLMService` and its subclasses, added the ability to retry
|
||||
|
||||
@@ -370,11 +370,28 @@ class ElevenLabsTTSService(AudioContextWordTTSService):
|
||||
await self._connect()
|
||||
|
||||
async def _update_settings(self, settings: Mapping[str, Any]):
|
||||
"""Update service settings and reconnect if voice changed."""
|
||||
"""Update service settings and reconnect if voice, model, or language changed."""
|
||||
# Track previous values for settings that require reconnection
|
||||
prev_voice = self._voice_id
|
||||
prev_model = self.model_name
|
||||
prev_language = self._settings.get("language")
|
||||
|
||||
await super()._update_settings(settings)
|
||||
if not prev_voice == self._voice_id:
|
||||
logger.info(f"Switching TTS voice to: [{self._voice_id}]")
|
||||
|
||||
# Update voice settings for the next context creation
|
||||
self._voice_settings = self._set_voice_settings()
|
||||
|
||||
# Check if any key connection-level settings changed
|
||||
settings_changed = (
|
||||
prev_voice != self._voice_id
|
||||
or prev_model != self.model_name
|
||||
or prev_language != self._settings.get("language")
|
||||
)
|
||||
|
||||
if settings_changed:
|
||||
logger.debug(
|
||||
f"Connection-level setting changed (voice/model/language), reconnecting WebSocket"
|
||||
)
|
||||
await self._disconnect()
|
||||
await self._connect()
|
||||
|
||||
|
||||
@@ -258,7 +258,7 @@ class TTSService(AIService):
|
||||
self._settings[key] = self.language_to_service_language(value)
|
||||
elif key == "model":
|
||||
self.set_model_name(value)
|
||||
elif key == "voice":
|
||||
elif key == "voice" or key == "voice_id":
|
||||
self.set_voice(value)
|
||||
elif key == "text_filter":
|
||||
for filter in self._text_filters:
|
||||
|
||||
Reference in New Issue
Block a user