Pipecat
Pipecat is an open-source Python framework for building real-time voice and multimodal bots. It composes streaming speech/LLM/TTS services into a low-latency pipeline, connected via transports (WebRTC/WebSocket) and client SDKs using the RTVI message standard.
Links
- Documentation
- Changelog
- GitHub
- PyPI (framework)
- PyPI (cloud SDK)
- Full-text extract used for this skill
Quick navigation
- Installation (packages/extras/CLI):
references/installation.md - Migration to 1.0:
references/migration-1-0.md - Concepts & architecture:
references/core-concepts.md - Session initialization (runner/bot/client):
references/session-initialization.md - Pipeline & frames:
references/pipeline-and-frames.md - Transports:
references/transports.md - Speech input & turn detection:
references/speech-input-and-turn-detection.md - Client SDKs + RTVI messaging:
references/client-sdks-rtvi.md - CLI (init/tail/cloud):
references/cli.md - Function calling (server):
references/function-calling.md - Context management:
references/context-management.md - LLM inference:
references/llm-inference.md - Text to speech (TTS):
references/text-to-speech.md - Deployment (pattern/platforms):
references/deployment.md - Server APIs (supported services):
references/server-services.md - Server Utilities (runner):
references/server-runner.md - Server APIs (pipeline/task/params):
references/server-pipeline-apis.md - Pipecat Cloud ops:
references/pipecat-cloud.md - Troubleshooting:
references/troubleshooting.md
Mental model (cheat sheet)
- Pipeline: ordered processors that consume/emit frames.
- Frames: the streaming units (audio/text/video/context/events) flowing through the pipeline.
- Transport: connectivity + media IO + session state (WebRTC/WebSocket/provider realtime).
- Runner: HTTP service that starts sessions and spawns a bot process with transport credentials.
- Client SDK: starts the bot, connects transport, sends messages/requests, receives events.
Recipes
1) Keep secrets server-side
- Put provider API keys (LLM/STT/TTS) only on the server/bot container.
- The client should call a server start endpoint (
startBot/startBotAndConnect) to receive transport credentials (e.g., a room URL + token), not provider keys.
2) Use WebRTC for production voice
- Prefer a WebRTC transport (e.g., Daily) for resilience and media quality.
- Use a WebSocket transport mostly for server↔server, prototypes, or constrained environments.
2b) Design for streaming + overlap
- Keep the pipeline fully streaming (avoid batching whole turns when you can).
- If your services support it, start TTS from partial LLM output to reduce perceived latency.
3) Initialize and evolve context via RTVI
- Initialize the bot’s pipeline context from the server start request payload.
- For ongoing interaction, prefer a dedicated “send text” style API (when available) instead of deprecated context append methods.
4) Function calling: end-to-end flow
- LLM requests a function call.
- Client registers a handler by function name.
- Client returns a function-call result message back to the bot.
5) Pipecat Cloud deployment basics
- Build/push an image that matches the expected platform (Pipecat Cloud requires
linux/arm64in the docs). - Use a deployment config file for repeatability.
- Configure pool sizing with
min_agents(warm capacity) andmax_agents(hard limit).
Critical gotchas / prohibitions
- Do not embed sensitive API keys in client apps.
- Expect and handle “at capacity” responses (HTTP 429) when the pool is exhausted.
- Plan for cold-start latency if
min_agents = 0. - Ensure secrets and image-pull credentials are created in the same region as the deployed agent.
- Do not assume deprecated import shims or service-specific context classes still exist in
1.0.0; audit imports before upgrading. - Do not keep VAD/turn-detection logic on transport params; current releases route that control through
LLMUserAggregatorstrategies. - Do not assume
OpenAIResponsesLLMServiceis HTTP-based anymore; WebSocket is now the default implementation. - Do not send a single
buttonfield in the RTVIdtmfclient message; as of1.6.0it requiresbuttons(a list), andRTVI.PROTOCOL_VERSIONis2.1.0. - Do not filter OTel dashboards on old GenAI span attribute names (
az.ai.openai,xai,mistral,gen_ai.usage.reasoning_tokens, baretokens.*);1.6.0renamed these to standardgen_ai.*conventions.
Release Highlights (1.7.0 -> 1.8.1)
Turn detection and tools (1.8.0)
- Turn detection redesign: every in-repo service with built-in turn detection now emits
ProposedUserStartedSpeakingFrame/ProposedUserStoppedSpeakingFrame, andExternalUserTurnStrategiesresolves them into real turn frames — one subclassable place that decides turns. Third-party services emitting turn frames directly keep working unchanged. - MCP made trivial:
MCPClient.tools()now auto-connects, registers tools, and closes the connection at pipeline end (justLLMContext(tools=await mcp.tools()));MCPClient(tools_arguments=...)injects fixed arguments into every call of a tool, hidden from the model's schema. NewKeenableWebSearchservice (keenableextra) adds live web search + page reading via a hosted MCP server. - MoQ client mode: dial a shared relay instead of serving your own socket — works behind NAT (
--moq-connect <relay>, plusMOQParams.response_path/request_path).
Workers and error handling (1.8.0)
- Workers:
JobParams/JobGroupParamsbundle job dispatch metadata,BaseUIWorkersurfaces jobs on a client UI without an LLM,WorkerRunner.get_worker(name)finds peers by name, andrequest_cancel_job_group()allows external cancellation. - Error/usable-state model:
ErrorCategory(AUTHENTICATION/SERVER/APPLICATION/UNKNOWN),FrameProcessor.is_usable, andon_usable_changedlet handlers tell a briefly-struggling processor from one to retire;PipelineWorker(processor_unusable_policy=CONTINUE|END|CANCEL)decides what happens when a processor goes unusable.AudioVolumeTrackermeasures rolling 400ms volume.
v1.7.0 additions
- STT usage metrics:
STTUsageMetricsDatacarriesaudio_seconds; enable withenable_usage_metrics=True(forwarded to RTVI clients asstt_usage, logged byMetricsLogObserver, attached to OTelsttspans). AWS Nova Sonic LLM addsLLMUsageMetricsDatatoken deltas. - New/updated TTS/STT settings:
PocketTTSService(local CPU-only TTS, 6 languages + voice cloning);XTTSServicedeprecated (removal2.0.0, use Kokoro/Piper);reach_inactive_serviceson settings frames; plus per-service settings such as Google LLMsafety_settings, Azureforce_locale, Cartesiakeyterm, Deepgramnumerals, ElevenLabsfilter_background_audio, and Smolendpointing/keywords/format. - Breaking-behavior changes:
TavusParams.audio_out_faster_than_realtimenow defaults toTrue;GeminiLiveLLMServiceusesGeminiLiveLLMAdapter(hand-craftedLLMSpecificMessages needllm="gemini-live"); LiveKit transport adds inbound SIP DTMF (on_dtmf_event);LLMSettings.filter_incomplete_user_turnsdeprecated.
Context Hub (1.8.0)
pipecat context-hub (alias pipecat ch) lets coding agents query a local index of Pipecat APIs instead of hallucinating them; it ships in the cli extra, and pipecat init offers to register it with the coding agents it finds and to build the index. v1.8.1 fixes pipecat eval run to read .yml scenario files and settles Context Hub staleness-warning behavior.
Release Highlights (1.6.0)
New transport and reasoning
MOQTransport: a Media over QUIC transport giving bots a bidirectional, low-latency audio + RTVI channel over QUIC instead of WebRTC/WebSocket (pip install "pipecat-ai[moq]"). The bot can run as its own MoQ server for local dev; the development runner gained--moq-serve,--moq-bind, and TLS flags.reasoningin OpenAI Responses services:OpenAIResponsesLLMService/OpenAIResponsesHttpLLMServiceaccept aReasoningConfig(effort=..., summary=...); encrypted reasoning round-trips across turns and tool calls automatically, and summaries surface as thought frames /on_assistant_thought.
Flows, evals, and new services
- Pipecat Flows
NO_RESPONSE: a function can return(result, NO_RESPONSE)to finish the call without an LLM run or node transition, letting the next user utterance drive the next response. - Eval scenarios
absent: true: an expectation that passes only if no matching event arrives withinwithin_ms, useful for catching duplicate-output regressions. - New services:
CrusoeLLMServiceandBasetenLLMService(OpenAI-compatible LLM services for Crusoe Cloud and Baseten),DeepgramFluxTTSService(websocket TTS for Deepgram Flux, token-streamed by default). - Audio token usage:
LLMTokenUsagegainsinput_audio_tokens/output_audio_tokens/cache_read_input_audio_tokens, populated byOpenAIRealtimeLLMService(and Azure realtime) andGeminiLiveLLMService.
Breaking changes and deprecations
- RTVI
dtmfclient message usesbuttons(a list) instead ofbutton;RTVI.PROTOCOL_VERSIONis now2.1.0. - OTel GenAI span attributes were renamed to standard conventions:
gen_ai.provider.namevalues for Azure/xAI/Mistral, andgen_ai.usage.reasoning_tokens->gen_ai.usage.reasoning.output_tokens; OpenAI Realtime and Gemini Live token attributes are now standardizedgen_ai.usage.*names instead of ad hoctokens.*. - ElevenLabs services default to TTS model
eleven_flash_v2_5instead of the now-deprecatedeleven_turbo_v2_5. PronunciationDictionaryLocatoris deprecated in favor oftext_transforms/replace_text(removal in2.0.0).- Turn-strategy
reset()is deprecated in favor ofhandle_user_turn_started()/handle_user_turn_stopped()lifecycle callbacks (removal in2.0.0).
Release Highlights (0.0.109 -> 1.2.0)
Runtime and service additions
OpenAIResponsesLLMServicenow defaults to a persistent WebSocket connection; the prior HTTP behavior moved toOpenAIResponsesHttpLLMService.- Inworld Realtime LLM adds a WebSocket cascade STT/LLM/TTS path with semantic VAD and function calling.
MistralTTSServiceadds streaming Voxtral TTS, and TTS/STT services gained more runtime-update and sample-rate options.- The development runner now exports a module-level FastAPI
appfor custom routes beforemain().
Tooling and context changes
- Function calling now supports grouped parallel tool batches, async tool completion after interruption, and streaming intermediate tool results.
- Context editing now has
LLMMessagesTransformFrame, and the framework standardizes on universalLLMContext/LLMContextAggregatorPair. - OpenAI tool schemas can now include provider-specific
custom_tools. 1.2.0addsadd_tool_change_messagesfor LLM aggregators, widenstool_resourcesinto deprecatedapp_resources, and extends async-tool compatibility across more realtime providers.
Turn-taking and client protocol
1.2.0adds explicit inference/finalization turn hooks (on_user_turn_inference_triggered,LLMTurnCompletionUserTurnStopStrategy,FilterIncompleteUserTurnStrategies) for smarter end-of-turn gating.- RTVI grows first-class UI Agent Protocol support with
ui-event,ui-snapshot,ui-cancel-task,ui-command, andui-task, bumping the protocol to1.3.0. - The development runner and runner arguments now carry a stable
session_id, which is useful for per-session tracing across local and cloud-like flows.
Breaking migrations
- Deprecated service-specific context classes, transport params, RTVI shims, frame aliases, and interruption/VAD helpers were removed across the stack.
- Turn detection and mute behavior moved toward
LLMUserAggregatorstrategies instead of transport-level configuration. - Some legacy providers and helpers were removed entirely (
OpenPipeLLMService,TTSService.say(),FrameProcessor.wait_for_task(), older beta/alias modules).
Release Highlights (1.3.0 -> 1.5.0)
- Workers and multi-agent pipelines (
1.3.0):PipelineTask/PipelineRunnerare renamed towardPipelineWorker/WorkerRunner, andpipecat.workersmakes pipelines peers on a typed-message bus for@jobdispatch, handoffs, sidecars, UI workers, and distributed Redis/PGMQ patterns. - UIWorker and RTVI UI protocol (
1.3.0):UIWorkercan observe client accessibility snapshots and drive UI commands over RTVI; the UI worker vocabulary moves fromtask/agenttojob/worker(ui-task->ui-job-group,cancelUITask->cancelUIJobGroup). - Development runner (
1.3.0): one runner can serve WebRTC, Daily, telephony, and plain WebSocket clients;/startaccepts atransportfield,/ws-clientsupports protobuf WebSocket clients,/statusreports enabled transports, and the Daily redirect moved to/daily. - Service surface (
1.3.0): adds Vonage Video Connector transport, Inception Mercury 2 LLM service, Cartesia turn-based STT, RimecodaTTS defaults, Soniox endpoint-delay settings,LLMService.append_system_instruction(), andSTTService.supports_ttfs. Optional service/transport extras now raiseImportErrorwhen their dependency is missing, andtransformersis no longer a base dependency. - Behavioral eval framework (
1.4.0): a testing framework for evaluating bot behavior, pluson_user_turn_message_addedevent handlers and realtime LLM-service metadata frames. - Pipecat Flows in core (
1.5.0): Pipecat Flows is integrated into the main package, so structured conversation flows no longer require a separate install. New services (1.5.0): Together AI STT/TTS services and NVIDIA per-sentence synthesis, with TTFA (time-to-first-audio) metrics for latency tracking.