From 728a97ade327c58fa276036ba53cbc61caf4b89c Mon Sep 17 00:00:00 2001 From: Paul Kompfner Date: Wed, 18 Feb 2026 14:11:51 -0500 Subject: [PATCH] Update Deepgram TTS to support updating settings dynamically --- .../55q-update-settings-deepgram-tts.py | 6 ++++++ src/pipecat/services/deepgram/tts.py | 19 ++++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/examples/foundational/55q-update-settings-deepgram-tts.py b/examples/foundational/55q-update-settings-deepgram-tts.py index 4b7f50ae8..636342194 100644 --- a/examples/foundational/55q-update-settings-deepgram-tts.py +++ b/examples/foundational/55q-update-settings-deepgram-tts.py @@ -102,6 +102,12 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): TTSUpdateSettingsFrame(update=DeepgramTTSSettings(voice="aura-2-luna-en")) ) + await asyncio.sleep(10) + logger.info('Updating Deepgram TTS settings: voice="aura-2-aries-en"') + await task.queue_frame( + TTSUpdateSettingsFrame(update=DeepgramTTSSettings(voice="aura-2-aries-en")) + ) + @transport.event_handler("on_client_disconnected") async def on_client_disconnected(transport, client): logger.info(f"Client disconnected") diff --git a/src/pipecat/services/deepgram/tts.py b/src/pipecat/services/deepgram/tts.py index bccbace26..7f4d78f13 100644 --- a/src/pipecat/services/deepgram/tts.py +++ b/src/pipecat/services/deepgram/tts.py @@ -12,7 +12,7 @@ for generating speech from text using various voice models. import json from dataclasses import dataclass, field -from typing import AsyncGenerator, Optional +from typing import Any, AsyncGenerator, Optional import aiohttp from loguru import logger @@ -183,6 +183,23 @@ class DeepgramTTSService(WebsocketTTSService): await self._disconnect_websocket() + async def _update_settings(self, update: TTSSettings) -> dict[str, Any]: + """Apply a settings update. + + Args: + update: A :class:`TTSSettings` (or ``DeepgramTTSSettings``) delta. + + Returns: + Dict mapping changed field names to their previous values. + """ + changed = await super()._update_settings(update) + + if changed: + await self._disconnect() + await self._connect() + + return changed + async def _connect_websocket(self): """Connect to Deepgram WebSocket API with configured settings.""" try: