diff --git a/api/services/configuration/registry.py b/api/services/configuration/registry.py index 0ce0459..758a24d 100644 --- a/api/services/configuration/registry.py +++ b/api/services/configuration/registry.py @@ -443,6 +443,14 @@ class ElevenlabsTTSConfiguration(BaseServiceConfiguration): default="eleven_flash_v2_5", json_schema_extra={"examples": ELEVENLABS_TTS_MODELS}, ) + base_url: str = Field( + default="https://api.elevenlabs.io", + description=( + "ElevenLabs API base URL. Override to use a Data Residency endpoint " + "(e.g. https://api.eu.residency.elevenlabs.io) for GDPR / HIPAA / " + "regional compliance." + ), + ) OPENAI_TTS_MODELS = ["gpt-4o-mini-tts"] diff --git a/api/services/pipecat/service_factory.py b/api/services/pipecat/service_factory.py index 14c73ae..dcd5841 100644 --- a/api/services/pipecat/service_factory.py +++ b/api/services/pipecat/service_factory.py @@ -247,9 +247,16 @@ def create_tts_service(user_config, audio_config: "AudioConfig"): voice_id = user_config.tts.voice.split(" - ")[1] except IndexError: voice_id = user_config.tts.voice + # ElevenLabs TTS uses WebSocket. Users configure base_url with an HTTP + # scheme (matching ElevenLabs documentation, e.g. + # https://api.eu.residency.elevenlabs.io); rewrite it to the WS scheme. + elevenlabs_url = user_config.tts.base_url.replace("https://", "wss://").replace( + "http://", "ws://" + ) return ElevenLabsTTSService( reconnect_on_error=False, api_key=user_config.tts.api_key, + url=elevenlabs_url, settings=ElevenLabsTTSSettings( voice=voice_id, model=user_config.tts.model, diff --git a/sdk/python/src/dograh_sdk/_generated_models.py b/sdk/python/src/dograh_sdk/_generated_models.py index 3e6a05f..6f12f2f 100644 --- a/sdk/python/src/dograh_sdk/_generated_models.py +++ b/sdk/python/src/dograh_sdk/_generated_models.py @@ -1,6 +1,6 @@ # generated by datamodel-codegen: -# filename: dograh-openapi-XXXXXX.json.OGVaBJhIgZ -# timestamp: 2026-05-11T11:41:34+00:00 +# filename: dograh-openapi-XXXXXX.json.Zvc0Wos2dk +# timestamp: 2026-05-12T13:08:52+00:00 from __future__ import annotations