fix: WebsocketService retry logic incorrectly handling ConnectionClosedOK exception

This commit is contained in:
Mark Backman
2025-08-10 19:35:05 -04:00
parent 241ab19228
commit 42502a4f3b
2 changed files with 11 additions and 7 deletions

View File

@@ -5,13 +5,18 @@ All notable changes to **Pipecat** will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## Unreleased ## [Unreleased]
### Changed ### Changed
- Updated `pyproject.toml` to once again pin `numba` to `>=0.61.2` in order to - Updated `pyproject.toml` to once again pin `numba` to `>=0.61.2` in order to
resolve package versioning issues. resolve package versioning issues.
### Fixed
- Fixed an issue where retrying a websocket connection error would result in an
error.
### Other ### Other
- Updated `15-switch-voices.py` and `15a-switch-languages.py` examples to show - Updated `15-switch-voices.py` and `15a-switch-languages.py` examples to show

View File

@@ -12,6 +12,7 @@ from typing import Awaitable, Callable, Optional
import websockets import websockets
from loguru import logger from loguru import logger
from websockets.exceptions import ConnectionClosedOK
from websockets.protocol import State from websockets.protocol import State
from pipecat.frames.frames import ErrorFrame from pipecat.frames.frames import ErrorFrame
@@ -82,12 +83,10 @@ class WebsocketService(ABC):
try: try:
await self._receive_messages() await self._receive_messages()
retry_count = 0 # Reset counter on successful message receive retry_count = 0 # Reset counter on successful message receive
if self._websocket and self._websocket.state is State.CLOSED: except ConnectionClosedOK as e:
raise websockets.ConnectionClosedOK( # Normal closure, don't retry
self._websocket.close_rcvd, logger.debug(f"{self} connection closed normally: {e}")
self._websocket.close_sent, break
self._websocket.close_rcvd_then_sent,
)
except Exception as e: except Exception as e:
message = f"{self} error receiving messages: {e}" message = f"{self} error receiving messages: {e}"
logger.error(message) logger.error(message)