[build-system] requires = ["setuptools>=64", "setuptools_scm>=8"] build-backend = "setuptools.build_meta" [project] name = "pipecat-ai" dynamic = ["version"] description = "An open source framework for voice (and multimodal) assistants" license = "BSD-2-Clause" license-files = ["LICENSE"] readme = "README.md" requires-python = ">=3.10" 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" ] dependencies = [ "aiohttp~=3.11.12", "audioop-lts~=0.2.1; python_version>='3.13'", "loguru~=0.7.3", "Markdown~=3.7", "numpy~=1.26.4", "Pillow~=11.1.0", "protobuf~=5.29.3", "pydantic~=2.10.6", "pyloudnorm~=0.1.1", "resampy~=0.4.3", "soxr~=0.5.0", "openai~=1.70.0" ] [project.urls] Source = "https://github.com/pipecat-ai/pipecat" Website = "https://pipecat.ai" [project.optional-dependencies] anthropic = [ "anthropic~=0.49.0" ] assemblyai = [ "websockets~=13.1" ] aws = [ "boto3~=1.37.16", "websockets~=13.1" ] aws-nova-sonic = [ "aws_sdk_bedrock_runtime~=0.0.2" ] azure = [ "azure-cognitiveservices-speech~=1.42.0"] cartesia = [ "cartesia~=2.0.3", "websockets~=13.1" ] cerebras = [] deepseek = [] daily = [ "daily-python~=0.19.3" ] deepgram = [ "deepgram-sdk~=4.1.0" ] elevenlabs = [ "websockets~=13.1" ] fal = [ "fal-client~=0.5.9" ] fireworks = [] fish = [ "ormsgpack~=1.7.0", "websockets~=13.1" ] gladia = [ "websockets~=13.1" ] google = [ "google-cloud-speech~=2.32.0", "google-cloud-texttospeech~=2.26.0", "google-genai~=1.14.0", "websockets~=13.1" ] grok = [] groq = [ "groq~=0.23.0" ] gstreamer = [ "pygobject~=3.50.0" ] 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~=9.0.0" ] lmnt = [ "websockets~=13.1" ] local = [ "pyaudio~=0.2.14" ] mcp = [ "mcp[cli]~=1.6.0" ] mem0 = [ "mem0ai~=0.1.94" ] mlx-whisper = [ "mlx-whisper~=0.4.2" ] moondream = [ "einops~=0.8.0", "timm~=1.0.13", "transformers~=4.48.0" ] nim = [] neuphonic = [ "pyneuphonic~=1.5.13", "websockets~=13.1" ] noisereduce = [ "noisereduce~=3.0.3" ] openai = [ "websockets~=13.1" ] openpipe = [ "openpipe~=4.50.0" ] openrouter = [] perplexity = [] playht = [ "pyht~=0.1.12", "websockets~=13.1" ] qwen = [] rime = [ "websockets~=13.1" ] riva = [ "nvidia-riva-client~=2.19.1" ] sambanova = [] sentry = [ "sentry-sdk~=2.23.1" ] local-smart-turn = [ "coremltools>=8.0", "transformers", "torch==2.5.0", "torchaudio==2.5.0" ] remote-smart-turn = [] silero = [ "onnxruntime~=1.20.1" ] simli = [ "simli-ai~=0.1.10"] soundfile = [ "soundfile~=0.13.0" ] tavus=[] together = [] tracing = [ "opentelemetry-sdk>=1.33.0", "opentelemetry-api>=1.33.0", "opentelemetry-instrumentation>=0.54b0" ] ultravox = [ "transformers~=4.48.0", "vllm~=0.7.3" ] webrtc = [ "aiortc~=1.11.0", "opencv-python~=4.11.0.86" ] websocket = [ "websockets~=13.1", "fastapi~=0.115.6" ] whisper = [ "faster-whisper~=1.1.1" ] [tool.setuptools.packages.find] where = ["src"] [tool.setuptools.package-data] "pipecat" = ["py.typed"] "pipecat.services.aws_nova_sonic" = ["src/pipecat/services/aws_nova_sonic/ready.wav"] [tool.pytest.ini_options] addopts = "--verbose" testpaths = ["tests"] pythonpath = ["src"] asyncio_default_fixture_loop_scope = "function" filterwarnings = [ "ignore:'audioop' is deprecated:DeprecationWarning", ] [tool.setuptools_scm] local_scheme = "no-local-version" fallback_version = "0.0.0-dev" [tool.ruff] exclude = [".git", "*_pb2.py"] line-length = 100 [tool.ruff.lint] select = [ "D", # Docstring rules "I", # Import rules ] # Ignore requirement for __init__ docstrings ignore = ["D107"] [tool.ruff.lint.pydocstyle] convention = "google" [tool.coverage.run] command_line = "--module pytest" source = ["src"] omit = ["*/tests/*"]