Paul Kompfner 1fe8cf5289 Add RealtimeServiceModeConfig to LLMContextAggregatorPair
Decouple context management from turn frames and transcripts when a
realtime LLM service drives the conversation. Three problems with today's
behavior:

  - Some realtime services (Gemini Live, AWS Nova Sonic, Ultravox) emit
    no UserStarted/StoppedSpeakingFrame at all, so the aggregator — which
    writes user messages on those frames — doesn't write to context
    correctly without them.
  - The workaround (local VAD on the aggregator) generates turn
    boundaries that don't match the provider's server-side ground truth,
    and the per-service "do I need it?" rule is hard to keep straight.
  - When local turn detection is the intended driver, turn-end strategies
    still wait for transcripts on the latency critical path.

Add a realtime_service_mode: RealtimeServiceModeConfig | None = None
kwarg on LLMContextAggregatorPair. When set, the pair switches both
halves to trailing context writes: user messages are flushed on the first
assistant content frame, assistant messages on the next user transcript,
both halves on EndFrame. Turn-end strategies stop waiting for transcripts
by default. Two fine-grained boolean fields (context_writes_await_turns,
turns_await_transcripts) let callers dial back to cascade-style behavior
selectively; their invalid combination is rejected in __post_init__.

The bifurcation is dispatch-only: seven branch points across the two
halves, each at method entry, each delegating to a mode-pure private
method. Cross-half coordination uses an asyncio.Lock and a back-reference
shared by both halves; the assistant signals user.flush() on
LLMFullResponseStartFrame, and the user signals assistant.flush() on the
first new transcript after the assistant turn. The mechanism reuses the
existing push_aggregation() — no parallel write path.

Two new events fire when messages are flushed to context:
on_user_message_added and on_assistant_message_added. In cascade mode
they coincide with the existing turn-stopped events; in realtime mode
(where the turn-stopped event fires before the message is finalized)
they're the canonical way to subscribe to "context just updated, here's
the text."

UserTurnStoppedMessage.content is now typed str | None to reflect that
realtime mode fires the event with None.

When a RealtimeServiceMetadataFrame arrives and realtime_service_mode is
None, the aggregator logs a one-time INFO recommendation pointing users
at the option.
2026-05-21 11:25:29 -04:00
2026-05-11 15:27:49 -04:00
2026-05-09 12:30:20 -07:00
2025-02-11 23:46:19 -08:00
2026-05-18 14:40:49 +02:00
2024-05-12 17:44:10 -07:00
2026-05-18 14:40:56 +02:00
2025-10-05 13:24:47 -05:00
2026-05-19 16:33:38 +02:00

pipecat

PyPI Tests codecov Docs Discord Ask DeepWiki

🎙️ Pipecat: Real-Time Voice & Multimodal AI Agents

Pipecat is an open-source Python framework for building real-time voice and multimodal conversational agents. Orchestrate audio and video, AI services, different transports, and conversation pipelines effortlessly—so you can focus on what makes your agent unique.

Want to dive right in? Run pipecat init quickstart or follow the quickstart guide.

🚀 What You Can Build

  • Voice Assistants natural, streaming conversations with AI
  • AI Companions coaches, meeting assistants, characters
  • Multimodal Interfaces voice, video, images, and more
  • Interactive Storytelling creative tools with generative media
  • Business Agents customer intake, support bots, guided flows
  • Complex Dialog Systems design logic with structured conversations

🧠 Why Pipecat?

  • Voice-first: Integrates speech recognition, text-to-speech, and conversation handling
  • Pluggable: Supports many AI services and tools
  • Composable Pipelines: Build complex behavior from modular components
  • Real-Time: Ultra-low latency interaction with different transports (e.g. WebSockets or WebRTC)

🌐 Pipecat Ecosystem

🧩 Multi-agent systems

Need multiple AI agents working together? Pipecat Subagents lets you build distributed multi-agent systems where each agent runs its own pipeline and communicates through a shared message bus. Hand off conversations between specialists, dispatch background tasks, and scale agents across processes or machines.

📱 Client SDKs

Building client applications? You can connect to Pipecat from any platform using our official SDKs:

JavaScript | React | React Native | Swift | Kotlin | C++ | ESP32

🧭 Structured conversations

Looking to build structured conversations? Check out Pipecat Flows for managing complex conversational states and transitions.

🪄 Beautiful UIs

Want to build beautiful and engaging experiences? Checkout the Voice UI Kit, a collection of components, hooks and templates for building voice AI applications quickly.

🛠️ Create and deploy projects

Create a new project in under a minute with the Pipecat CLI. Then use the CLI to monitor and deploy your agent to production.

🔍 Debugging

Looking for help debugging your pipeline and processors? Check out Whisker, a real-time Pipecat debugger.

🖥️ Terminal

Love terminal applications? Check out Tail, a terminal dashboard for Pipecat.

🤖 Claude Code Skills

Use Pipecat Skills with Claude Code to scaffold projects, deploy to Pipecat Cloud, and more. Install the marketplace with:

claude plugin marketplace add pipecat-ai/skills

and install any of the available plugins.

🧩 Community Integrations

Build and share your own Pipecat service integrations! Browse existing community integrations or check out our guide to create your own.

📺 Pipecat TV Channel

Catch new features, interviews, and how-tos on our Pipecat TV channel.

🎬 See it in action

 
 

🧩 Available services

Category Services
Speech-to-Text AssemblyAI, AWS, Azure, Cartesia, Deepgram, ElevenLabs, Fal Wizper, Gladia, Google, Gradium, Groq (Whisper), Mistral, NVIDIA, OpenAI (Whisper), Sarvam, Soniox, Speechmatics, Whisper, xAI
LLMs Anthropic, AWS, Azure, Cerebras, DeepSeek, Fireworks AI, Gemini, Grok, Groq, Mistral, Nebius, Novita, NVIDIA NIM, Ollama, OpenAI, OpenAI Responses, OpenRouter, Perplexity, Qwen, SambaNova, Sarvam, Together AI
Text-to-Speech Async, AWS, Azure, Camb AI, Cartesia, Deepgram, ElevenLabs, Fish, Google, Gradium, Groq, Hume, Inworld, Kokoro, LMNT, MiniMax, Mistral, Neuphonic, NVIDIA, OpenAI, Piper, Resemble, Rime, Sarvam, Smallest, Soniox, Speechmatics, xAI, XTTS
Speech-to-Speech AWS Nova Sonic, Gemini Multimodal Live, Grok Voice Agent, OpenAI Realtime, Ultravox,
Transport Daily (WebRTC), FastAPI Websocket, LiveKit (WebRTC), SmallWebRTCTransport, Vonage (WebRTC), WebSocket Server, WhatsApp, Local
Serializers Exotel, Genesys, Plivo, Twilio, Telnyx, Vonage
Video HeyGen, LemonSlice, Tavus, Simli
Memory mem0
Vision & Image fal, Google Imagen, Moondream
Audio Processing Silero VAD, Krisp Viva, Koala, ai-coustics, RNNoise
Analytics & Metrics OpenTelemetry, Sentry
Community Browse community integrations →

📚 View full services documentation →

Getting started

You can get started with Pipecat running on your local machine, then move your agent processes to the cloud when you're ready.

  1. Install uv

    curl -LsSf https://astral.sh/uv/install.sh | sh
    

    Need help? Refer to the uv install documentation.

  2. Install the module

    # For new projects
    uv init my-pipecat-app
    cd my-pipecat-app
    uv add pipecat-ai
    
    # Or for existing projects
    uv add pipecat-ai
    
  3. Set up your environment

    cp env.example .env
    
  4. To keep things lightweight, only the core framework is included by default. If you need support for third-party AI services, you can add the necessary dependencies with:

    uv add "pipecat-ai[option,...]"
    

Using pip? You can still use pip install pipecat-ai and pip install "pipecat-ai[option,...]" to get set up.

🧪 Code examples

  • Foundational — small snippets that build on each other, introducing one or two concepts at a time
  • Example apps — complete applications that you can use as starting points for development

🛠️ Contributing to the framework

Prerequisites

Minimum Python Version: 3.11 Recommended Python Version: >= 3.12

Setup Steps

  1. Clone the repository and navigate to it:

    git clone https://github.com/pipecat-ai/pipecat.git
    cd pipecat
    
  2. Install development and testing dependencies:

    uv sync --group dev --all-extras \
      --no-extra gstreamer \
      --no-extra local \
    
  3. Install the git pre-commit hooks:

    uv run pre-commit install
    

Note

: Some extras (local, gstreamer) require system dependencies. See documentation if you encounter build errors.

Claude Code Skills

Install development workflow skills for contributing to Pipecat with Claude Code:

claude plugin marketplace add pipecat-ai/pipecat
claude plugin install pipecat-dev@pipecat-dev-skills

Running tests

To run all tests, from the root directory:

uv run pytest

Run a specific test suite:

uv run pytest tests/test_name.py

🤝 Contributing

We welcome contributions from the community! Whether you're fixing bugs, improving documentation, or adding new features, here's how you can help:

  • Found a bug? Open an issue
  • Have a feature idea? Start a discussion
  • Want to contribute code? Check our CONTRIBUTING.md guide
  • Documentation improvements? Docs PRs are always welcome

Before submitting a pull request, please check existing issues and PRs to avoid duplicates.

We aim to review all contributions promptly and provide constructive feedback to help get your changes merged.

🛟 Getting help

➡️ Join our Discord

➡️ Read the docs

➡️ Reach us on X

Description
Open Source framework for voice and multimodal conversational AI
Readme BSD-2-Clause 414 MiB
Languages
Python 100%