Added
-
Added optional
servicefield toServiceUpdateSettingsFrame(and its subclassesLLMUpdateSettingsFrame,TTSUpdateSettingsFrame,STTUpdateSettingsFrame) to target a specific service instance. Whenserviceis set, only the matching service applies the settings; others forward the frame unchanged. This enables updating a single service when multiple services of the same type exist in the pipeline.
(PR #4004) -
Added
sip_providerandroom_geoparameters toconfigure()in the Daily runner. These convenience parameters let callers specify a SIP provider name and geographic region directly without manually constructingDailyRoomPropertiesandDailyRoomSipParams.
(PR #4005) -
Added
PerplexityLLMAdapterthat automatically transforms conversation messages to satisfy Perplexity's stricter API constraints (strict role alternation, no non-initial system messages, last message must be user/tool). Previously, certain conversation histories could cause Perplexity API errors that didn't occur with OpenAI (PerplexityLLMServicesubclassesOpenAILLMServicesince Perplexity uses an OpenAI-compatible API).
(PR #4009) -
Added DTMF input event support to the Daily transport. Incoming DTMF tones are now received via Daily's
on_dtmf_eventcallback and pushed into the pipeline asInputDTMFFrame, enabling bots to react to keypad presses from phone callers.
(PR #4047) -
Added
WakePhraseUserTurnStartStrategyfor triggering user turns based on wake phrases, with support forsingle_activationmode. DeprecatesWakeCheckFilter.
(PR #4064) -
Added
default_user_turn_start_strategies()anddefault_user_turn_stop_strategies()helper functions for composing custom strategy lists.
(PR #4064)
Changed
-
Changed tool result JSON serialization to use
ensure_ascii=False, preserving UTF-8 characters instead of escaping them. This reduces context size and token usage for non-English languages.
(PR #3457) -
OpenAIRealtimeSTTService'snoise_reductionparameter is now part ofOpenAIRealtimeSTTSettings, making it runtime-updatable viaSTTUpdateSettingsFrame. The directnoise_reductioninit argument is deprecated as of 0.0.106.
(PR #3991) -
Updated
sarvamaidependency from0.1.26a2(alpha) to0.1.26(stable release).
(PR #3997) -
SimliVideoServicenow extendsAIServiceinstead ofFrameProcessor, aligning it with the HeyGen and Tavus video services. It supportsSimliVideoService.Settings(...)for configuration and usesstart()/stop()/cancel()lifecycle methods. Existing constructor usage (api_key,face_id, etc.) remains unchanged.
(PR #4001) -
Update
pipecat-ai-small-webrtc-prebuiltto2.4.0.
(PR #4023) -
Nova Sonic assistant text transcripts are now delivered in real-time using speculative text events instead of delayed final text events. Previously, assistant text only arrived after all audio had finished playing, causing laggy transcripts in client UIs. Speculative text arrives before each audio chunk, providing text synchronized with what the bot is saying. This also simplifies the internal text handling by removing the interruption re-push hack and assistant text buffer.
(PR #4042) -
Updated
daily-pythondependency to 0.25.0.
(PR #4047) -
Added
enable_dialoutparameter toconfigure()inpipecat.runner.dailyto support dial-out rooms. Also narrowed misleadingOptionaltype hints and deduplicated token expiry calculation.
(PR #4048) -
Extended
ProcessFrameResultto stop strategies, allowing a stop strategy to short-circuit evaluation of subsequent strategies by returningSTOP.
(PR #4064) -
GradiumSTTServicenow takes both anencodingandsample_rateconstructor argument which is assmebled in the class to form theinput_format. PCM accepts8000,16000, and24000Hz sample rates.
(PR #4066) -
Improved
GradiumSTTServicetranscription accuracy by reworking how text fragments are accumulated and finalized. Previously, trailing words could be dropped when the server'sflushedresponse arrived before all text tokens were delivered. The service now uses a short aggregation delay after flush to capture trailing tokens, producing complete utterances.
(PR #4066)
Deprecated
-
SimliVideoService.InputParamsis deprecated. Use the direct constructor parametersmax_session_length,max_idle_time, andenable_logginginstead.
(PR #4001) -
Deprecated
LocalSmartTurnAnalyzerV2andLocalCoreMLSmartTurnAnalyzer. UseLocalSmartTurnAnalyzerV3instead. Instantiating these analyzers will now emit aDeprecationWarning.
(PR #4012) -
Deprecated
WakeCheckFilterin favor ofWakePhraseUserTurnStartStrategy.
(PR #4064)
Fixed
-
Fixed an issue where the default model for
OpenAILLMServiceandAzureLLMServicewas mistakenly reverted togpt-4o. The defaults are now restored togpt-4.1.
(PR #4000) -
Fixed a race condition where
EndTaskFramecould cause the pipeline to shut down before in-flight frames (e.g. LLM function call responses) finished processing.EndTaskFrameandStopTaskFramenow flow through the pipeline asControlFrames, ensuring all pending work is flushed before shutdown begins.CancelTaskFrameandInterruptionTaskFrameremain immediate (SystemFrame).
(PR #4006) -
Fixed
ParallelPipelinedropping or misordering frames during lifecycle synchronization. Buffered frames are now flushed in the correct order relative to synchronization frames (StartFramegoes first,EndFrame/CancelFramego after), and frames added to the buffer during flush are also drained.
(PR #4007) -
Fixed
TTSServicepotentially canceling in-flight audio during shutdown. The stop sequence now waits for all queued audio contexts to finish processing before canceling the stop frame task.
(PR #4007) -
Fixed
Languageenum values (e.g.Language.ES) not being converted to service-specific codes when passed viasettings=Service.Settings(language=Language.ES)at init time. This caused API errors (e.g. 400 from Rime) because the raw enum was sent instead of the expected language code (e.g."spa"). Runtime updates viaUpdateSettingsFramewere unaffected. The fix centralizes conversion in the baseTTSServiceandSTTServiceclasses so all services handle this consistently.
(PR #4024) -
Fixed
DeepgramSTTServiceignoring thebase_urlscheme when usingws://orhttp://. Previously these were silently overwritten withwss:///https://, breaking air-gapped or private deployments that don't use TLS. All scheme choices (wss://,https://,ws://,http://, or bare hostname) are now respected.
(PR #4026) -
Fixed
LLMSwitcher.register_function()andregister_direct_function()not accepting or forwarding thetimeout_secsparameter.
(PR #4037) -
Fixed empty user transcriptions in Nova Sonic causing spurious interruptions. Previously, an empty transcription could trigger an interruption of the assistant's response even though the user hadn't actually spoken.
(PR #4042) -
Fixed
SonioxSTTServiceandOpenAIRealtimeSTTServicecrash when language parameters contain plain strings instead ofLanguageenum values.
(PR #4046) -
Fixed premature user turn stops caused by late transcriptions arriving between turns. A stale transcript from the previous turn could persist into the next turn and trigger a stop before the current turn's real transcript arrived. Stop strategies are now reset at both turn start and turn stop to prevent state from leaking across turn boundaries.
(PR #4057) -
Fixed raw language strings like
"de-DE"silently failing when passed to TTS/STT services (e.g. ElevenLabs producing no audio). Raw strings now go through the sameLanguageenum resolution as enum values, so regional codes like"de-DE"are properly converted to service-expected formats like"de". Unrecognized strings log a warning instead of failing silently.
(PR #4058) -
Fixed Deepgram STT list-type settings (
keyterm,keywords,search,redact,replace) being stringified instead of passed as lists to the SDK, which caused them to be sent as literal strings (e.g."['pipecat']") in the nWebSocket query params.
(PR #4063) -
Fixed
MinWordsUserTurnStartStrategyincluding text below the word threshold in the output by resetting aggregation when the minimum word count is not met.
(PR #4064) -
Fixed audio overlap and potential dropped TTS content when multiple assistant turns occur in quick succession.
TTSServicenow flushes remaining text before pausing frame processing onLLMFullResponseEndFrame/EndFrame, instead of pausing first.
(PR #4071)
Security
- Bumped PyJWT minimum version from 2.10.1 to 2.12.0 in the
livekitextra to address CVE-2026-32597 (GHSA-752w-5fwx-jx9f), where PyJWT <= 2.11.0 accepted unknowncritheader extensions.
(PR #4035)