From 6924850ec439451002b9fe2b79c90d6ee12f2b8c Mon Sep 17 00:00:00 2001 From: Mark Backman Date: Tue, 16 Sep 2025 09:45:51 -0400 Subject: [PATCH] Add support for websockets 15.0 --- CHANGELOG.md | 6 ++++++ pyproject.toml | 34 ++++++++++++++++----------------- src/pipecat/services/aws/stt.py | 4 +--- 3 files changed, 24 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4365a268a..5d6181374 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `torch` and `torchaudio` are no longer required for running Smart Turn locally. This avoids gigabytes of dependencies being installed. +### Changed + +- Updated `websockets` dependency to support version 15.0. Removed deprecated + usage of `ConnectionClosed.code` and `ConnectionClosed.reason` attributes in + `AWSTranscribeSTTService` for compatibility. + ### Deprecated - `PipelineTask` events `on_pipeline_stopped`, `on_pipeline_ended` and diff --git a/pyproject.toml b/pyproject.toml index 1317add97..85b231502 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -47,32 +47,32 @@ Website = "https://pipecat.ai" [project.optional-dependencies] aic = [ "aic-sdk~=1.0.1" ] anthropic = [ "anthropic~=0.49.0" ] -assemblyai = [ "websockets>=13.1,<15.0" ] -asyncai = [ "websockets>=13.1,<15.0" ] -aws = [ "aioboto3~=15.0.0", "websockets>=13.1,<15.0" ] +assemblyai = [ "websockets>=13.1,<16.0" ] +asyncai = [ "websockets>=13.1,<16.0" ] +aws = [ "aioboto3~=15.0.0", "websockets>=13.1,<16.0" ] aws-nova-sonic = [ "aws_sdk_bedrock_runtime~=0.0.2; python_version>='3.12'" ] azure = [ "azure-cognitiveservices-speech~=1.42.0"] -cartesia = [ "cartesia~=2.0.3", "websockets>=13.1,<15.0" ] +cartesia = [ "cartesia~=2.0.3", "websockets>=13.1,<16.0" ] cerebras = [] deepseek = [] daily = [ "daily-python~=0.19.9" ] deepgram = [ "deepgram-sdk~=4.7.0" ] -elevenlabs = [ "websockets>=13.1,<15.0" ] +elevenlabs = [ "websockets>=13.1,<16.0" ] fal = [ "fal-client~=0.5.9" ] fireworks = [] -fish = [ "ormsgpack~=1.7.0", "websockets>=13.1,<15.0" ] -gladia = [ "websockets>=13.1,<15.0" ] -google = [ "google-cloud-speech~=2.32.0", "google-cloud-texttospeech~=2.26.0", "google-genai~=1.24.0", "websockets>=13.1,<15.0" ] +fish = [ "ormsgpack~=1.7.0", "websockets>=13.1,<16.0" ] +gladia = [ "websockets>=13.1,<16.0" ] +google = [ "google-cloud-speech~=2.32.0", "google-cloud-texttospeech~=2.26.0", "google-genai~=1.24.0", "websockets>=13.1,<16.0" ] grok = [] groq = [ "groq~=0.23.0" ] gstreamer = [ "pygobject~=3.50.0" ] -heygen = [ "livekit>=0.22.0", "websockets>=13.1,<15.0" ] +heygen = [ "livekit>=0.22.0", "websockets>=13.1,<16.0" ] inworld = [] krisp = [ "pipecat-ai-krisp~=0.4.0" ] koala = [ "pvkoala~=2.0.3" ] langchain = [ "langchain~=0.3.20", "langchain-community~=0.3.20", "langchain-openai~=0.3.9" ] livekit = [ "livekit~=0.22.0", "livekit-api~=0.8.2", "tenacity>=8.2.3,<10.0.0" ] -lmnt = [ "websockets>=13.1,<15.0" ] +lmnt = [ "websockets>=13.1,<16.0" ] local = [ "pyaudio~=0.2.14" ] mcp = [ "mcp[cli]~=1.9.4" ] mem0 = [ "mem0ai~=0.1.94" ] @@ -80,26 +80,26 @@ mistral = [] mlx-whisper = [ "mlx-whisper~=0.4.2" ] moondream = [ "accelerate~=1.10.0", "einops~=0.8.0", "pyvips[binary]~=3.0.0", "timm~=1.0.13", "transformers>=4.48.0" ] nim = [] -neuphonic = [ "websockets>=13.1,<15.0" ] +neuphonic = [ "websockets>=13.1,<16.0" ] noisereduce = [ "noisereduce~=3.0.3" ] -openai = [ "websockets>=13.1,<15.0" ] +openai = [ "websockets>=13.1,<16.0" ] openpipe = [ "openpipe~=4.50.0" ] openrouter = [] perplexity = [] -playht = [ "websockets>=13.1,<15.0" ] +playht = [ "websockets>=13.1,<16.0" ] qwen = [] -rime = [ "websockets>=13.1,<15.0" ] +rime = [ "websockets>=13.1,<16.0" ] riva = [ "nvidia-riva-client~=2.21.1" ] runner = [ "python-dotenv>=1.0.0,<2.0.0", "uvicorn>=0.32.0,<1.0.0", "fastapi>=0.115.6,<0.117.0", "pipecat-ai-small-webrtc-prebuilt>=1.0.0"] sambanova = [] -sarvam = [ "websockets>=13.1,<15.0" ] +sarvam = [ "websockets>=13.1,<16.0" ] sentry = [ "sentry-sdk~=2.23.1" ] local-smart-turn = [ "coremltools>=8.0", "transformers", "torch>=2.5.0,<3", "torchaudio>=2.5.0,<3" ] local-smart-turn-v3 = [ "transformers", "onnxruntime>=1.20.1, <2" ] remote-smart-turn = [] silero = [ "onnxruntime>=1.20.1, <2" ] simli = [ "simli-ai~=0.1.10"] -soniox = [ "websockets>=13.1,<15.0" ] +soniox = [ "websockets>=13.1,<16.0" ] soundfile = [ "soundfile~=0.13.0" ] speechmatics = [ "speechmatics-rt>=0.4.0" ] tavus=[] @@ -107,7 +107,7 @@ together = [] tracing = [ "opentelemetry-sdk>=1.33.0", "opentelemetry-api>=1.33.0", "opentelemetry-instrumentation>=0.54b0" ] ultravox = [ "transformers>=4.48.0", "vllm>=0.9.0" ] webrtc = [ "aiortc~=1.11.0", "opencv-python~=4.11.0.86" ] -websocket = [ "websockets>=13.1,<15.0", "fastapi>=0.115.6,<0.117.0" ] +websocket = [ "websockets>=13.1,<16.0", "fastapi>=0.115.6,<0.117.0" ] whisper = [ "faster-whisper~=1.1.1" ] [dependency-groups] diff --git a/src/pipecat/services/aws/stt.py b/src/pipecat/services/aws/stt.py index 0267ea0e5..59cda5865 100644 --- a/src/pipecat/services/aws/stt.py +++ b/src/pipecat/services/aws/stt.py @@ -532,9 +532,7 @@ class AWSTranscribeSTTService(STTService): logger.debug(f"{self} Other message type received: {headers}") logger.debug(f"{self} Payload: {payload}") except websockets.exceptions.ConnectionClosed as e: - logger.error( - f"{self} WebSocket connection closed in receive loop with code {e.code}: {e.reason}" - ) + logger.error(f"{self} WebSocket connection closed in receive loop: {e}") break except Exception as e: logger.error(f"{self} Unexpected error in receive loop: {e}")