From 4fe0836cf9619852c3505f193b28f0fe1d8b4bef Mon Sep 17 00:00:00 2001 From: Mark Backman Date: Fri, 9 Jan 2026 09:00:36 -0500 Subject: [PATCH] Add reconnect logic to WebsocketService in the event of ConnectionClosedError --- src/pipecat/services/websocket_service.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/pipecat/services/websocket_service.py b/src/pipecat/services/websocket_service.py index e9b93af65..d23079bd6 100644 --- a/src/pipecat/services/websocket_service.py +++ b/src/pipecat/services/websocket_service.py @@ -138,9 +138,18 @@ class WebsocketService(ABC): logger.debug(f"{self} connection closed normally: {e}") break except ConnectionClosedError as e: - # Error closure, don't retry - logger.warning(f"{self} connection closed, but with an error: {e}") - break + # Connection closed with error (e.g., no close frame received/sent) + # This often indicates network issues, server problems, or abrupt disconnection + message = f"{self} connection closed, but with an error: {e}" + logger.warning(message) + + if self._reconnect_on_error: + success = await self._try_reconnect(report_error=report_error) + if not success: + break + else: + await report_error(ErrorFrame(message)) + break except Exception as e: message = f"{self} error receiving messages: {e}" logger.error(message)