From b06b16adb751fa6f32fb37b41287eb215be0cfdc Mon Sep 17 00:00:00 2001 From: Vaibhav159 Date: Mon, 10 Feb 2025 22:55:20 +0530 Subject: [PATCH 1/2] fixing disconnect issue --- CHANGELOG.md | 5 +++++ src/pipecat/services/elevenlabs.py | 5 ++++- src/pipecat/services/websocket_service.py | 2 ++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4ada4e408..36e4c6d7a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -42,6 +42,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 `RTVIBotLLMProcessor`) are now deprecated, instantiate an `RTVIObserver` instead. +### Fixed + +- Fixed an issue[#1192] in 11labs where we are trying to reconnect/disconnect the + websocket connection even when the connection is already closed. + ## [0.0.56] - 2025-02-06 ### Changed diff --git a/src/pipecat/services/elevenlabs.py b/src/pipecat/services/elevenlabs.py index b479759ae..b2805b55a 100644 --- a/src/pipecat/services/elevenlabs.py +++ b/src/pipecat/services/elevenlabs.py @@ -388,7 +388,10 @@ class ElevenLabsTTSService(WordTTSService, WebsocketService): async def _keepalive_task_handler(self): while True: await asyncio.sleep(10) - await self._send_text("") + try: + await self._send_text("") + except websockets.ConnectionClosed as e: + logger.warning(f"{self} keepalive error: {e}") async def _send_text(self, text: str): if self._websocket: diff --git a/src/pipecat/services/websocket_service.py b/src/pipecat/services/websocket_service.py index 7e480f2b7..48ddeadaa 100644 --- a/src/pipecat/services/websocket_service.py +++ b/src/pipecat/services/websocket_service.py @@ -85,6 +85,8 @@ class WebsocketService(ABC): await self._receive_messages() logger.debug(f"{self} connection established successfully") retry_count = 0 # Reset counter on successful message receive + except websockets.ConnectionClosed as e: + logger.warning(f"{self} connection closed: {e}") except Exception as e: retry_count += 1 if retry_count >= MAX_RETRIES: From 2c62d3bf32c92d85275bacacda2801ec04a61f48 Mon Sep 17 00:00:00 2001 From: Vaibhav159 Date: Mon, 10 Feb 2025 23:04:05 +0530 Subject: [PATCH 2/2] break once ConnectionClosed error --- src/pipecat/services/elevenlabs.py | 1 + src/pipecat/services/websocket_service.py | 1 + 2 files changed, 2 insertions(+) diff --git a/src/pipecat/services/elevenlabs.py b/src/pipecat/services/elevenlabs.py index b2805b55a..e0b985411 100644 --- a/src/pipecat/services/elevenlabs.py +++ b/src/pipecat/services/elevenlabs.py @@ -392,6 +392,7 @@ class ElevenLabsTTSService(WordTTSService, WebsocketService): await self._send_text("") except websockets.ConnectionClosed as e: logger.warning(f"{self} keepalive error: {e}") + break async def _send_text(self, text: str): if self._websocket: diff --git a/src/pipecat/services/websocket_service.py b/src/pipecat/services/websocket_service.py index 48ddeadaa..9c942b019 100644 --- a/src/pipecat/services/websocket_service.py +++ b/src/pipecat/services/websocket_service.py @@ -87,6 +87,7 @@ class WebsocketService(ABC): retry_count = 0 # Reset counter on successful message receive except websockets.ConnectionClosed as e: logger.warning(f"{self} connection closed: {e}") + break except Exception as e: retry_count += 1 if retry_count >= MAX_RETRIES: