Added
-
Added
GoogleHttpTTSServicewhich uses Google's HTTP TTS API. -
Added
TavusTransport, a new transport implementation compatible with any Pipecat pipeline. When using theTavusTransportthe Pipecat bot will connect in the same room as the Tavus Avatar and the user. -
Added
PlivoFrameSerializerto support Plivo calls. A full running example has also been added toexamples/plivo-chatbot. -
Added
UserBotLatencyLogObserver. This is an observer that logs the latency between when the user stops speaking and when the bot starts speaking. This gives you an initial idea on how quickly the AI services respond. -
Added
SarvamTTSService, which implements Sarvam AI's TTS API:
https://docs.sarvam.ai/api-reference-docs/text-to-speech/convert. -
Added
PipelineTask.add_observer()andPipelineTask.remove_observer()to allow mangaging observers at runtime. This is useful for cases where the task is passed around to other code components that might want to observe the pipeline dynamically. -
Added
user_idfield toTranscriptionMessage. This allows identifying the user in a multi-user scenario. Note that this requires thatTranscriptionFramehas theuser_idproperly set. -
Added new
PipelineTaskevent handlerson_pipeline_started,on_pipeline_stopped,on_pipeline_endedandon_pipeline_cancelled, which correspond to theStartFrame,StopFrame,EndFrameandCancelFramerespectively. -
Added additional languages to
LmntTTSService. Languages include:hi,id,it,ja,nl,pl,ru,sv,th,tr,uk,vi. -
Added a
modelparameter to theLmntTTSServiceconstructor, allowing switching between LMNT models. -
Added
MiniMaxHttpTTSService, which implements MiniMax's T2A API for TTS.
Learn more: https://www.minimax.io/platform_overview -
A new function
FrameProcessor.setup()has been added to allow setting up frame processors before receiving aStartFrame. This is what's happening internally:FrameProcessor.setup()is called,StartFrameis pushed from the beginning of the pipeline, your regular pipeline operations,EndFrameorCancelFrameare pushed from the beginning of the pipeline and finallyFrameProcessor.cleanup()is called. -
Added support for OpenTelemetry tracing in Pipecat. This initial implementation includes:
- A
setup_tracingmethod where you can specify your OpenTelemetry exporter - Service decorators for STT (
@traced_stt), LLM (@traced_llm), and TTS (@traced_tts) which trace the execution and collect properties and metrics (TTFB, token usage, character counts, etc.) - Class decorators that provide execution tracking; these are generic and can be used for service tracking as needed
- Spans that help track traces on a per conversations and turn basis:
conversation-uuid ├── turn-1 │ ├── stt_deepgramsttservice │ ├── llm_openaillmservice │ └── tts_cartesiattsservice ... └── turn-n └── ...By default, Pipecat has implemented service decorators to trace execution of STT, LLM, and TTS services. You can enable tracing by setting
enable_tracingtoTruein the PipelineTask. - A
-
Added
TurnTrackingObserver, which tracks the start and end of a user/bot turn pair and emits eventson_turn_startedandon_turn_stoppedcorresponding to the start and end of a turn, respectively. -
Allow passing observers to
run_test()while running unit tests.
Changed
-
Upgraded
daily-pythonto 0.19.1. -
⚠️ Updated
SmallWebRTCTransportto align with how other transports handleon_client_disconnected. Now, when the connection is closed and no reconnection is attempted,on_client_disconnectedis called instead ofon_client_close. Theon_client_closecallback is no longer used, useon_client_disconnectedinstead. -
Check if
PipelineTaskhas already been cancelled. -
Don't raise an exception if event handler is not registered.
-
Upgraded
deepgram-sdkto 4.1.0. -
Updated
GoogleTTSServiceto use Google's streaming TTS API. The default voice also updated toen-US-Chirp3-HD-Charon. -
⚠️ Refactored the
TavusVideoService, so it acts like a proxy, sending audio to Tavus and receiving both audio and video. This will makeTavusVideoServiceusable with any Pipecat pipeline and with any transport. This is a breaking change, check theexamples/foundational/21a-tavus-layer-small-webrtc.pyto see how to use it. -
DailyTransportnow uses custom microphone audio tracks instead of virtual microphones. Now, multiple Daily transports can be used in the same process. -
DailyTransportnow captures audio from individual participants instead of the whole room. This allows identifying audio frames per participant. -
Updated the default model for
AnthropicLLMServicetoclaude-sonnet-4-20250514. -
Updated the default model for
GeminiMultimodalLiveLLMServicetomodels/gemini-2.5-flash-preview-native-audio-dialog. -
BaseTextFiltermethodsfilter(),update_settings(),handle_interruption()andreset_interruption()are now async. -
BaseTextAggregatormethodsaggregate(),handle_interruption()andreset()are now async. -
The API version for
CartesiaTTSServiceandCartesiaHttpTTSServicehas been updated. Also, thecartesiadependency has been updated to 2.x. -
CartesiaTTSServiceandCartesiaHttpTTSServicenow support Cartesia's newspeedparameter which accepts values ofslow,normal, andfast. -
GeminiMultimodalLiveLLMServicenow uses the user transcription and usage metrics provided by Gemini Live. -
GoogleLLMServicehas been updated to usegoogle-genaiinstead of the deprecatedgoogle-generativeai.
Deprecated
- In
CartesiaTTSServiceandCartesiaHttpTTSService,emotionhas been deprecated by Cartesia. Pipecat is following suit and deprecatingemotionas well.
Removed
-
Since
GeminiMultimodalLiveLLMServicenow transcribes it's own audio, thetranscribe_user_audioarg has been removed. Audio is now transcribed automatically. -
Removed
SileroVADframe processor, just useSileroVADAnalyzerinstead. Also removed,07a-interruptible-vad.pyexample.
Fixed
-
Fixed a
DailyTransportissue that was not allow capturing video frames if framerate was greater than zero. -
Fixed a
DeegramSTTServiceconnection issue when the user provided their ownLiveOptions. -
Fixed a
DailyTransportissue that would cause images needing resize to block the event loop. -
Fixed an issue with
ElevenLabsTTSServicewhere changing the model or voice while the service is running wasn't working. -
Fixed an issue that would cause multiple instances of the same class to behave incorrectly if any of the given constructor arguments defaulted to a mutable value (e.g. lists, dictionaries, objects).
-
Fixed an issue with
CartesiaTTSServicewhereTTSTextFramemessages weren't being emitted when the model was set tosonic. This resulted in the assistant context not being updated with assistant messages.
Performance
-
DailyTransport: process audio, video and events in separate tasks. -
Don't create event handler tasks if no user event handlers have been registered.
Other
-
It is now possible to run all (or most) foundational example with multiple transports. By default, they run with P2P (Peer-To-Peer) WebRTC so you can try everything locally. You can also run them with Daily or even with a Twilio phone number.
-
Added foundation examples
07y-interruptible-minimax.pyand07z-interruptible-sarvam.pyto show how to use theMiniMaxHttpTTSServiceandSarvamTTSService, respectively. -
Added an
open-telemetry-tracingexample, showing how to setup tracing. The example also includes Jaeger as an open source OpenTelemetry client to review traces from the example runs. -
Added foundational example
29-turn-tracking-observer.pyto show how to use theTurnTrackingObserver.