From 3c76917c1e4a0c1c5b71467fb9813e6bfd44ad9e Mon Sep 17 00:00:00 2001 From: Corvin Jaedicke Date: Wed, 12 Nov 2025 13:48:22 +0100 Subject: [PATCH] use async process function --- pyproject.toml | 80 ++++++++++++------------- src/pipecat/audio/filters/aic_filter.py | 2 +- uv.lock | 6 +- 3 files changed, 44 insertions(+), 44 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index a203b47b0..7b382f112 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,23 +1,23 @@ [build-system] -requires = ["setuptools>=64", "setuptools_scm>=8"] +requires = [ "setuptools>=64", "setuptools_scm>=8" ] build-backend = "setuptools.build_meta" [project] name = "pipecat-ai" -dynamic = ["version"] +dynamic = [ "version" ] description = "An open source framework for voice (and multimodal) assistants" license = "BSD-2-Clause" -license-files = ["LICENSE"] +license-files = [ "LICENSE" ] readme = "README.md" requires-python = ">=3.10" -keywords = ["webrtc", "audio", "video", "ai"] +keywords = [ "webrtc", "audio", "video", "ai" ] classifiers = [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Topic :: Communications :: Conferencing", "Topic :: Multimedia :: Sound/Audio", "Topic :: Multimedia :: Video", - "Topic :: Scientific/Engineering :: Artificial Intelligence" + "Topic :: Scientific/Engineering :: Artificial Intelligence", ] dependencies = [ "aiofiles>=24.1.0,<25", @@ -45,30 +45,30 @@ Source = "https://github.com/pipecat-ai/pipecat" Website = "https://pipecat.ai" [project.optional-dependencies] -aic = [ "aic-sdk~=1.0.1" ] +aic = [ "aic-sdk~=1.1.0" ] anthropic = [ "anthropic~=0.49.0" ] assemblyai = [ "pipecat-ai[websockets-base]" ] asyncai = [ "pipecat-ai[websockets-base]" ] aws = [ "aioboto3~=15.0.0", "pipecat-ai[websockets-base]" ] aws-nova-sonic = [ "aws_sdk_bedrock_runtime~=0.1.1; python_version>='3.12'" ] -azure = [ "azure-cognitiveservices-speech~=1.42.0"] +azure = [ "azure-cognitiveservices-speech~=1.42.0" ] cartesia = [ "cartesia~=2.0.3", "pipecat-ai[websockets-base]" ] -cerebras = [] -deepseek = [] +cerebras = [ ] +deepseek = [ ] daily = [ "daily-python~=0.21.0" ] deepgram = [ "deepgram-sdk~=4.7.0" ] elevenlabs = [ "pipecat-ai[websockets-base]" ] fal = [ "fal-client~=0.5.9" ] -fireworks = [] +fireworks = [ ] fish = [ "ormsgpack~=1.7.0", "pipecat-ai[websockets-base]" ] gladia = [ "pipecat-ai[websockets-base]" ] google = [ "google-cloud-speech>=2.33.0,<3", "google-cloud-texttospeech>=2.31.0,<3", "google-genai>=1.41.0,<2", "pipecat-ai[websockets-base]" ] -grok = [] +grok = [ ] groq = [ "groq~=0.23.0" ] gstreamer = [ "pygobject~=3.50.0" ] heygen = [ "livekit>=1.0.13", "pipecat-ai[websockets-base]" ] hume = [ "hume>=0.11.2" ] -inworld = [] +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" ] @@ -77,35 +77,35 @@ lmnt = [ "pipecat-ai[websockets-base]" ] local = [ "pyaudio~=0.2.14" ] mcp = [ "mcp[cli]>=1.11.0,<2" ] mem0 = [ "mem0ai~=0.1.94" ] -mistral = [] +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 = [] +nim = [ ] neuphonic = [ "pipecat-ai[websockets-base]" ] noisereduce = [ "noisereduce~=3.0.3" ] openai = [ "pipecat-ai[websockets-base]" ] openpipe = [ "openpipe>=4.50.0,<6" ] -openrouter = [] -perplexity = [] +openrouter = [ ] +perplexity = [ ] playht = [ "pipecat-ai[websockets-base]" ] -qwen = [] +qwen = [ ] rime = [ "pipecat-ai[websockets-base]" ] 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.122.0", "pipecat-ai-small-webrtc-prebuilt>=1.0.0"] -sambanova = [] +runner = [ "python-dotenv>=1.0.0,<2.0.0", "uvicorn>=0.32.0,<1.0.0", "fastapi>=0.115.6,<0.122.0", "pipecat-ai-small-webrtc-prebuilt>=1.0.0" ] +sambanova = [ ] sarvam = [ "sarvamai==0.1.21", "pipecat-ai[websockets-base]" ] sentry = [ "sentry-sdk>=2.28.0,<3" ] 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 = [] +remote-smart-turn = [ ] silero = [ "onnxruntime>=1.20.1,<2" ] -simli = [ "simli-ai~=0.1.25"] +simli = [ "simli-ai~=0.1.25" ] soniox = [ "pipecat-ai[websockets-base]" ] soundfile = [ "soundfile~=0.13.1" ] speechmatics = [ "speechmatics-rt>=0.5.0" ] strands = [ "strands-agents>=1.9.1,<2" ] -tavus=[] -together = [] +tavus = [ ] +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.13.0,<2", "opencv-python>=4.11.0.86,<5" ] @@ -139,10 +139,10 @@ docs = [ ] [tool.setuptools.packages.find] -where = ["src"] +where = [ "src" ] [tool.setuptools.package-data] -"pipecat" = ["py.typed"] +"pipecat" = [ "py.typed" ] "pipecat.audio.dtmf" = [ "src/pipecat/audio/dtmf/dtmf-0.wav", "src/pipecat/audio/dtmf/dtmf-1.wav", @@ -157,13 +157,13 @@ where = ["src"] "src/pipecat/audio/dtmf/dtmf-pound.wav", "src/pipecat/audio/dtmf/dtmf-star.wav", ] -"pipecat.services.aws_nova_sonic" = ["src/pipecat/services/aws_nova_sonic/ready.wav"] -"pipecat.audio.turn.smart_turn.data" = ["src/pipecat/audio/turn/smart_turn/data/smart-turn-v3.0.onnx"] +"pipecat.services.aws_nova_sonic" = [ "src/pipecat/services/aws_nova_sonic/ready.wav" ] +"pipecat.audio.turn.smart_turn.data" = [ "src/pipecat/audio/turn/smart_turn/data/smart-turn-v3.0.onnx" ] [tool.pytest.ini_options] addopts = "--verbose" -testpaths = ["tests"] -pythonpath = ["src"] +testpaths = [ "tests" ] +pythonpath = [ "src" ] asyncio_default_fixture_loop_scope = "function" filterwarnings = [ "ignore:'audioop' is deprecated:DeprecationWarning", @@ -174,7 +174,7 @@ local_scheme = "no-local-version" fallback_version = "0.0.0-dev" [tool.ruff] -exclude = [".git", "*_pb2.py"] +exclude = [ ".git", "*_pb2.py" ] line-length = 100 [tool.ruff.lint] @@ -183,25 +183,25 @@ select = [ "I", # Import rules ] ignore = [ - "D105", # Missing docstring in magic methods (__str__, __repr__, etc.) + "D105", # Missing docstring in magic methods (__str__, __repr__, etc.) ] [tool.ruff.lint.per-file-ignores] # Skip docstring checks for non-source code -"examples/**/*.py" = ["D"] -"tests/**/*.py" = ["D"] -"scripts/**/*.py" = ["D"] -"docs/**/*.py" = ["D"] +"examples/**/*.py" = [ "D" ] +"tests/**/*.py" = [ "D" ] +"scripts/**/*.py" = [ "D" ] +"docs/**/*.py" = [ "D" ] # Skip D104 (missing docstring in public package) for __init__.py files -"**/__init__.py" = ["D104"] +"**/__init__.py" = [ "D104" ] # Skip specific rules for generated protobuf files -"**/*_pb2.py" = ["D"] -"src/pipecat/services/__init__.py" = ["D"] +"**/*_pb2.py" = [ "D" ] +"src/pipecat/services/__init__.py" = [ "D" ] [tool.ruff.lint.pydocstyle] convention = "google" [tool.coverage.run] command_line = "--module pytest" -source = ["src"] -omit = ["*/tests/*"] +source = [ "src" ] +omit = [ "*/tests/*" ] diff --git a/src/pipecat/audio/filters/aic_filter.py b/src/pipecat/audio/filters/aic_filter.py index 8c2f3e7f4..3f1af2f57 100644 --- a/src/pipecat/audio/filters/aic_filter.py +++ b/src/pipecat/audio/filters/aic_filter.py @@ -185,7 +185,7 @@ class AICFilter(BaseAudioFilter): ) # Process planar in-place; returns ndarray (same shape) - out_f32 = self._aic.process(block_f32) + out_f32 = await self._aic.process_async(block_f32) # Convert back to int16 bytes, planar layout out_i16 = np.clip(out_f32 * 32768.0, -32768, 32767).astype(np.int16) diff --git a/uv.lock b/uv.lock index 0dc6c74f8..eabe03714 100644 --- a/uv.lock +++ b/uv.lock @@ -36,12 +36,12 @@ wheels = [ [[package]] name = "aic-sdk" -version = "1.0.2" +version = "1.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/51/90/b02e853e863c303f8456c689b42ac24ad403b781adc9642d0a91ed4bed7e/aic_sdk-1.0.2.tar.gz", hash = "sha256:239097dd3aaa8a8a0fd7542b75d2510cb34144caec796370639b7c636acbc56e", size = 32059, upload-time = "2025-08-24T09:20:03.9Z" } +sdist = { url = "https://files.pythonhosted.org/packages/99/83/bf38b95d98c67b8ebc574fb4a4f23c07a3740b51992d7522976173d30b98/aic_sdk-1.1.0.tar.gz", hash = "sha256:04e08df695581c8cb4db8acca20e73815e9f449e7bd08e0162fd55518c727963", size = 34954, upload-time = "2025-11-11T20:45:24.25Z" } [[package]] name = "aioboto3" @@ -4647,7 +4647,7 @@ docs = [ [package.metadata] requires-dist = [ { name = "accelerate", marker = "extra == 'moondream'", specifier = "~=1.10.0" }, - { name = "aic-sdk", marker = "extra == 'aic'", specifier = "~=1.0.1" }, + { name = "aic-sdk", marker = "extra == 'aic'", specifier = "~=1.1.0" }, { name = "aioboto3", marker = "extra == 'aws'", specifier = "~=15.0.0" }, { name = "aiofiles", specifier = ">=24.1.0,<25" }, { name = "aiohttp", specifier = ">=3.11.12,<4" },