From 8467058e48e8206961598b1e5f991cb20cd19d33 Mon Sep 17 00:00:00 2001 From: Mark Backman Date: Fri, 13 Mar 2026 10:56:33 -0400 Subject: [PATCH] Fix Language enum conversion at init time in base TTS/STT services When a Language enum (e.g. Language.ES) is passed via settings=Service.Settings(language=Language.ES), it gets stored as-is without conversion to the service-specific code. The base _update_settings() handles this for runtime updates, but at init time apply_update() copies the raw enum. This causes API errors because services send the unconverted enum value. Add language conversion in TTSService.__init__ and STTService.__init__ after super().__init__(), using the subclass language_to_service_language() via normal method resolution. --- src/pipecat/services/stt_service.py | 9 +++++++++ src/pipecat/services/tts_service.py | 8 ++++++++ 2 files changed, 17 insertions(+) diff --git a/src/pipecat/services/stt_service.py b/src/pipecat/services/stt_service.py index a16aa0eaa..c442c41eb 100644 --- a/src/pipecat/services/stt_service.py +++ b/src/pipecat/services/stt_service.py @@ -120,6 +120,15 @@ class STTService(AIService): or STTSettings(), **kwargs, ) + + # Convert Language enum to service-specific format at init time. + # Runtime updates are handled by _update_settings(), but init-time + # settings bypass that path and need explicit conversion. + if isinstance(self._settings.language, Language): + converted = self.language_to_service_language(self._settings.language) + if converted is not None: + self._settings.language = converted + self._audio_passthrough = audio_passthrough self._init_sample_rate = sample_rate self._sample_rate = 0 diff --git a/src/pipecat/services/tts_service.py b/src/pipecat/services/tts_service.py index 44fb98826..e2a9190ab 100644 --- a/src/pipecat/services/tts_service.py +++ b/src/pipecat/services/tts_service.py @@ -245,6 +245,14 @@ class TTSService(AIService): **kwargs, ) + # Convert Language enum to service-specific format at init time. + # Runtime updates are handled by _update_settings(), but init-time + # settings bypass that path and need explicit conversion. + if isinstance(self._settings.language, Language): + converted = self.language_to_service_language(self._settings.language) + if converted is not None: + self._settings.language = converted + # Resolve text_aggregation_mode from the new param or deprecated aggregate_sentences if aggregate_sentences is not None: import warnings