Added
-
Added
"timestampTransportStrategy": "ASYNC"toInworldAITTSService. This allows timestamps info to trail audio chunks arrival, resulting in much better first audio chunk latency
(PR #3625) -
Added model-specific
InputParamstoRimeTTSService: arcana params (repetition_penalty,temperature,top_p) and mistv2 params (no_text_normalization,save_oovs,segment). Model, voice, and param changes now trigger WebSocket reconnection.
(PR #3642) -
Added
write_transport_frame()hook toBaseOutputTransportallowing transport subclasses to handle custom frame types that flow through the audio queue.
(PR #3719) -
Added
DailySIPTransferFrameandDailySIPReferFrameto the Daily transport. These frames queue SIP transfer and SIP REFER operations with audio, so the operation executes only after the bot finishes its current utterance.
(PR #3719) -
Added keepalive support to
SarvamSTTServiceto prevent idle connection timeouts (e.g. when used behind aServiceSwitcher).
(PR #3730) -
Added
UserIdleTimeoutUpdateFrameto enable or disable user idle detection at runtime by updating the timeout dynamically.
(PR #3748) -
Added
broadcast_sibling_idfield to the baseFrameclass. This field is automatically set bybroadcast_frame()andbroadcast_frame_instance()to the ID of the paired frame pushed in the opposite direction, allowing receivers to identify broadcast pairs.
(PR #3774) -
Added
ignored_sourcesparameter toRTVIObserverParamsandadd_ignored_source()/remove_ignored_source()methods toRTVIObserverto suppress RTVI messages from specific pipeline processors (e.g. a silent evaluation LLM).
(PR #3779) -
Added
DeepgramSageMakerTTSServicefor running Deepgram TTS models deployed on AWS SageMaker endpoints via HTTP/2 bidirectional streaming. Supports the Deepgram TTS protocol (Speak, Flush, Clear, Close), interruption handling, and per-turn TTFB metrics.
(PR #3785)
Changed
-
⚠️
RimeTTSServicenow defaults tomodel="arcana"and thewss://users-ws.rime.ai/ws3endpoint.InputParamsdefaults changed from mistv2-specific values toNone— only explicitly-set params are sent as query params.
(PR #3642) -
AICFilternow shares read-only AIC models via a singletonAICModelManager
inaic_filter.py.- Multiple filters using the same model path or
(model_id, model_download_dir)share one loaded model, with reference counting and concurrent load deduplication. - Model file I/O runs off the event loop so the filter does not block.
(PR #3684)
- Multiple filters using the same model path or
-
Added
X-User-AgentandX-Request-Idheaders toInworldTTSServicefor better traceability.
(PR #3706) -
DailyUpdateRemoteParticipantsFrameis no longer deprecated and is now queued with audio like other transport frames.
(PR #3719) -
Bumped Pillow dependency upper bound from
<12to<13to allow Pillow 12.x.
(PR #3728) -
Moved STT keepalive mechanism from
WebsocketSTTServiceto theSTTServicebase class, allowing any STT service (not just websocket-based ones) to use idle-connection keepalive via thekeepalive_timeoutandkeepalive_intervalparameters.
(PR #3730) -
Improved audio context management in
AudioContextTTSServiceby moving context ID tracking to the base class and addingreuse_context_id_within_turnparameter to control concurrent TTS request handling.- Added helper methods:
has_active_audio_context(),get_active_audio_context_id(),remove_active_audio_context(),reset_active_audio_context() - Simplified Cartesia, ElevenLabs, Inworld, Rime, AsyncAI, and Gradium TTS implementations by removing duplicate context management code
(PR #3732)
- Added helper methods:
-
UserIdleControlleris now always created with a default timeout of 0 (disabled). Theuser_idle_timeoutparameter changed fromOptional[float] = Nonetofloat = 0inUserTurnProcessor,LLMUserAggregatorParams, andUserIdleController.
(PR #3748) -
Change the version specifier from
>=0.2.8to~=0.2.8for thespeechmatics-voicepackage to ensure compatibility with future patch versions.
(PR #3761) -
Updated
InworldTTSServiceandInworldHttpTTSServiceto useASYNCtimestamp transport strategy by default
(PR #3765) -
Added
start_timeandend_timeparameters tostart_ttfb_metrics(),stop_ttfb_metrics(),start_processing_metrics(), andstop_processing_metrics()inFrameProcessorandFrameProcessorMetrics, allowing custom timestamps for metrics measurement.STTServicenow uses these instead of custom TTFB tracking.
(PR #3776) -
Updated default Anthropic model from
claude-sonnet-4-5-20250929toclaude-sonnet-4-6.
(PR #3792)
Deprecated
- Deprecated unused
Traceable,@traceable,@traced, andAttachmentStrategyinpipecat.utils.tracing.class_decorators. This module will be removed in a future release.
(PR #3733)
Fixed
-
Fixed race condition where
RTVIObservercould send messages beforeDailyTransportjoin completed. Outbound messages are now queued & delivered after the transport is ready.
(PR #3615) -
Fixed async generator cleanup in OpenAI LLM streaming to prevent
AttributeErrorwith uvloop on Python 3.12+ (MagicStack/uvloop#699).
(PR #3698) -
Fixed
SmallWebRTCTransportinput audio resampling to properly handle all sample rates, including 8kHz audio.
(PR #3713) -
Fixed a race condition in
RTVIObserverwhere bot output messages could be sent before the bot-started-speaking event.
(PR #3718) -
Fixed Grok Realtime
session.updatedevent parsing failure caused by the API returning prefixed voice names (e.g."human_Ara"instead of"Ara").
(PR #3720) -
Fixed context ID reuse issue in
ElevenLabsTTSService,InworldTTSService,RimeTTSService,CartesiaTTSService,AsyncAITTSService, andPlayHTTTSService. Services now properly reuse the same context ID across multiplerun_tts()invocations within a single LLM turn, preventing context tracking issues and incorrect lifecycle signaling.
(PR #3729) -
Fixed word timestamp interleaving issue in
ElevenLabsTTSServicewhen processing multiple sentences within a single LLM turn.
(PR #3729) -
Fixed tracing service decorators executing the wrapped function twice when the function itself raised an exception (e.g., LLM rate limit, TTS timeout).
(PR #3735) -
Fixed
LLMUserAggregatorbroadcasting mute events beforeStartFramereaches downstream processors.
(PR #3737) -
Fixed
UserIdleControllerfalse idle triggers caused by gaps between user and bot activity frames. The idle timer now starts only afterBotStoppedSpeakingFrameand is suppressed during active user turns and function calls.
(PR #3744) -
Fixed incorrect
sample_rateassignment inTavusInputTransport._on_participant_audio_data(was usingaudio.audio_framesinstead ofaudio.sample_rate).
(PR #3768) -
Fixed
RTVIObservernot processing upstream-only frames. Previously, all upstream frames were filtered out to avoid duplicate messages from broadcasted frames. Now only upstream copies of broadcasted frames are skipped.
(PR #3774) -
Fixed mutable default arguments in
LLMContextAggregatorPair.__init__()that could cause shared state across instances.
(PR #3782) -
Fixed
DeepgramSageMakerSTTServiceto properly track finalize lifecycle usingrequest_finalize()/confirm_finalize()and useis_final(instead ofis_final and speech_final) for final transcription detection, matchingDeepgramSTTServicebehavior.
(PR #3784) -
Fixed a race condition in
AudioContextTTSServicewhere the audio context could time out between consecutive TTS requests within the same turn, causing audio to be discarded.
(PR #3787) -
Fixed
push_interruption_task_frame_and_wait()hanging indefinitely when theInterruptionFramedoes not reach the pipeline sink within the timeout. Added atimeoutkeyword argument to customize the wait duration.
(PR #3789)