From fb7fe540f52e1602b8fe5aa1d3c676e8f2fc6467 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aleix=20Conchillo=20Flaqu=C3=A9?= Date: Mon, 24 Feb 2025 22:33:13 -0800 Subject: [PATCH] tts: don't connect to websocket if already connected --- src/pipecat/services/cartesia.py | 2 ++ src/pipecat/services/elevenlabs.py | 3 +++ src/pipecat/services/fish.py | 3 +++ src/pipecat/services/lmnt.py | 3 +++ src/pipecat/services/playht.py | 3 +++ src/pipecat/services/rime.py | 3 +++ 6 files changed, 17 insertions(+) diff --git a/src/pipecat/services/cartesia.py b/src/pipecat/services/cartesia.py index 3aafb4023..04a35087b 100644 --- a/src/pipecat/services/cartesia.py +++ b/src/pipecat/services/cartesia.py @@ -194,6 +194,8 @@ class CartesiaTTSService(AudioContextWordTTSService): async def _connect_websocket(self): try: + if self._websocket: + return logger.debug("Connecting to Cartesia") self._websocket = await websockets.connect( f"{self._url}?api_key={self._api_key}&cartesia_version={self._cartesia_version}" diff --git a/src/pipecat/services/elevenlabs.py b/src/pipecat/services/elevenlabs.py index 6c808f66b..3dc42975e 100644 --- a/src/pipecat/services/elevenlabs.py +++ b/src/pipecat/services/elevenlabs.py @@ -308,6 +308,9 @@ class ElevenLabsTTSService(InterruptibleWordTTSService): async def _connect_websocket(self): try: + if self._websocket: + return + logger.debug("Connecting to ElevenLabs") voice_id = self._voice_id diff --git a/src/pipecat/services/fish.py b/src/pipecat/services/fish.py index 645ee1496..e61579bfb 100644 --- a/src/pipecat/services/fish.py +++ b/src/pipecat/services/fish.py @@ -118,6 +118,9 @@ class FishAudioTTSService(InterruptibleTTSService): async def _connect_websocket(self): try: + if self._websocket: + return + logger.debug("Connecting to Fish Audio") headers = {"Authorization": f"Bearer {self._api_key}"} self._websocket = await websockets.connect(self._base_url, extra_headers=headers) diff --git a/src/pipecat/services/lmnt.py b/src/pipecat/services/lmnt.py index 4b3a3ce34..8d4ca4803 100644 --- a/src/pipecat/services/lmnt.py +++ b/src/pipecat/services/lmnt.py @@ -124,6 +124,9 @@ class LmntTTSService(InterruptibleTTSService): async def _connect_websocket(self): """Connect to LMNT websocket.""" try: + if self._websocket: + return + logger.debug("Connecting to LMNT") # Build initial connection message diff --git a/src/pipecat/services/playht.py b/src/pipecat/services/playht.py index 4b4bd6b10..56179e34c 100644 --- a/src/pipecat/services/playht.py +++ b/src/pipecat/services/playht.py @@ -171,6 +171,9 @@ class PlayHTTTSService(InterruptibleTTSService): async def _connect_websocket(self): try: + if self._websocket: + return + logger.debug("Connecting to PlayHT") if not self._websocket_url: diff --git a/src/pipecat/services/rime.py b/src/pipecat/services/rime.py index b9a2d20da..60d2d67ef 100644 --- a/src/pipecat/services/rime.py +++ b/src/pipecat/services/rime.py @@ -180,6 +180,9 @@ class RimeTTSService(AudioContextWordTTSService): async def _connect_websocket(self): """Connect to Rime websocket API with configured settings.""" try: + if self._websocket: + return + params = "&".join(f"{k}={v}" for k, v in self._settings.items()) url = f"{self._url}?{params}" headers = {"Authorization": f"Bearer {self._api_key}"}