Added
-
Added new frames
InputTransportMessageUrgentFrame
andDailyInputTransportMessageUrgentFrame
for transport messages received from external sources. -
Added
UserSpeakingFrame
. This will be sent upstream and downstream while VAD detects the user is speaking. -
Expanded support for universal
LLMContext
to more LLM services. Using the universalLLMContext
and associatedLLMContextAggregatorPair
is a pre-requisite for usingLLMSwitcher
to switch between LLMs at runtime. Here are the newly-supported services:- Azure
- Cerebras
- Deepseek
- Fireworks AI
- Google Vertex AI
- Grok
- Groq
- Mistral
- NVIDIA NIM
- Ollama
- OpenPipe
- OpenRouter
- Perplexity
- Qwen
- SambaNova
- Together.ai
-
Added support for WhatsApp User-initiated Calls.
-
Added new audio filter
AICFilter
, speech enhancement for improving VAD/STT performance, no ONNX dependency.
See https://ai-coustics.com/sdk/ -
Added a timeout around cancel input tasks to prevent indefinite hangs when cancellation is swallowed by third-party code.
-
Added
pipecat.extensions.ivr
for automated IVR system navigation with configurable goals and conversation handling. Supports DTMF input, verbal responses, and intelligent menu traversal.Basic usage:
from pipecat.extensions.ivr.ivr_navigator import IVRNavigator # Create IVR navigator with your goal ivr_navigator = IVRNavigator( llm=llm_service, ivr_prompt="Navigate to billing department to dispute a charge" ) # Handle different outcomes @ivr_navigator.event_handler("on_conversation_detected") async def on_conversation(processor, conversation_history): # Switch to normal conversation mode pass @ivr_navigator.event_handler("on_ivr_status_changed") async def on_ivr_status(processor, status): if status == IVRStatus.COMPLETED: # End pipeline, transfer call, or start bot conversation elif status == IVRStatus.STUCK: # Handle navigation failure
-
BaseOutputTransport
now implementswrite_dtmf()
by loading DTMF audio and sending it through the transport. This makes sending DTMF generic across all output transports. -
Added new config parameters to
GladiaSTTService
.- PreProcessingConfig >
audio_enhancer
to enhance audio quality. - CustomVocabularyItem >
pronunciations
andlanguage
to specify special pronunciations and in which language it will be pronounced.
- PreProcessingConfig >
Changed
-
UserStartedSpeakingFrame
andUserStoppedSpeakingFrame
are also pushed
upstream. -
ParallelPipeline
now waits forCancelFrame
to finish in all branches before pushing it downstream. -
Added
sip_codecs
to theDailyRoomSipParams
. -
Updated the
configure()
function inpipecat.runner.daily
to include new args to create SIP-enabled rooms. Additionally, added new args to control the room and token expiration durations. -
pipecat.frames.frames.KeypadEntry
is deprecated and has been moved topipecat.audio.dtmf.types.KeypadEntry
. -
Updated
RimeTTSService
's flush_audio message to conform with Rime's official API. -
Updated the default model for
CerebrasLLMService
to GPT-OSS-120B.
Removed
-
Remove
StopInterruptionFrame
. This was a legacy frame that was not being used really anywhere and it didn't provide any useful meaning. It was only pushed afterUserStoppedSpeakingFrame
, so developers can just useUserStoppedSpeakingFrame
. -
DailyTransport.write_dtmf()
has been removed in favor of the genericBaseOutputTransport.write_dtmf()
. -
Remove deprecated
DailyTransport.send_dtmf()
.
Deprecated
-
Transports have been re-organized.
pipecat.transports.network.small_webrtc -> pipecat.transports.smallwebrtc.transport pipecat.transports.network.webrtc_connection -> pipecat.transports.smallwebrtc.connection pipecat.transports.network.websocket_client -> pipecat.transports.websocket.client pipecat.transports.network.websocket_server -> pipecat.transports.websocket.server pipecat.transports.network.fastapi_websocket -> pipecat.transports.websocket.fastapi pipecat.transports.services.daily -> pipecat.transports.daily.transport pipecat.transports.services.helpers.daily_rest -> pipecat.transports.daily.utils pipecat.transports.services.livekit -> pipecat.transports.livekit.transport pipecat.transports.services.tavus -> pipecat.transports.tavus.transport
-
pipecat.frames.frames.KeypadEntry
is deprecated usepipecat.audio.dtmf.types.KeypadEntry
instead.
Fixed
-
Fixed an issue where messages received from the transport were always being resent.
-
Fixed
SmallWebRTCTransport
to not usemid
to decide if the transceiver should besendrecv
or not. -
Fixed an issue where Deepgram swallowed
asyncio.CancelledError
during disconnect, preventing tasks from being cancelled. -
Fixed an issue where
PipelineTask
was not cleaning up the observers.
Performance
- Reduced latency and improved memory performance in
Mem0MemoryService
.