@@ -7,6 +7,218 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77
88<!-- towncrier release notes start -->
99
10+ ## [0.0.106] - 2026-03-18
11+
12+ ### Added
13+
14+ - Added optional `service` field to `ServiceUpdateSettingsFrame` (and its
15+ subclasses `LLMUpdateSettingsFrame`, `TTSUpdateSettingsFrame`,
16+ `STTUpdateSettingsFrame`) to target a specific service instance. When
17+ `service` is set, only the matching service applies the settings; others
18+ forward the frame unchanged. This enables updating a single service when
19+ multiple services of the same type exist in the pipeline.
20+ (PR [#4004](https://github.com/pipecat-ai/pipecat/pull/4004))
21+
22+ - Added `sip_provider` and `room_geo` parameters to `configure()` in the Daily
23+ runner. These convenience parameters let callers specify a SIP provider name
24+ and geographic region directly without manually constructing
25+ `DailyRoomProperties` and `DailyRoomSipParams`.
26+ (PR [#4005](https://github.com/pipecat-ai/pipecat/pull/4005))
27+
28+ - Added `PerplexityLLMAdapter` that automatically transforms conversation
29+ messages to satisfy Perplexity's stricter API constraints (strict role
30+ alternation, no non-initial system messages, last message must be user/tool).
31+ Previously, certain conversation histories could cause Perplexity API errors
32+ that didn't occur with OpenAI (`PerplexityLLMService` subclasses
33+ `OpenAILLMService` since Perplexity uses an OpenAI-compatible API).
34+ (PR [#4009](https://github.com/pipecat-ai/pipecat/pull/4009))
35+
36+ - Added DTMF input event support to the Daily transport. Incoming DTMF tones
37+ are now received via Daily's `on_dtmf_event` callback and pushed into the
38+ pipeline as `InputDTMFFrame`, enabling bots to react to keypad presses from
39+ phone callers.
40+ (PR [#4047](https://github.com/pipecat-ai/pipecat/pull/4047))
41+
42+ - Added `WakePhraseUserTurnStartStrategy` for triggering user turns based on
43+ wake phrases, with support for `single_activation` mode. Deprecates
44+ `WakeCheckFilter`.
45+ (PR [#4064](https://github.com/pipecat-ai/pipecat/pull/4064))
46+
47+ - Added `default_user_turn_start_strategies()` and
48+ `default_user_turn_stop_strategies()` helper functions for composing custom
49+ strategy lists.
50+ (PR [#4064](https://github.com/pipecat-ai/pipecat/pull/4064))
51+
52+ ### Changed
53+
54+ - Changed tool result JSON serialization to use `ensure_ascii=False`,
55+ preserving UTF-8 characters instead of escaping them. This reduces context
56+ size and token usage for non-English languages.
57+ (PR [#3457](https://github.com/pipecat-ai/pipecat/pull/3457))
58+
59+ - `OpenAIRealtimeSTTService`'s `noise_reduction` parameter is now part of
60+ `OpenAIRealtimeSTTSettings`, making it runtime-updatable via
61+ `STTUpdateSettingsFrame`. The direct `noise_reduction` init argument is
62+ deprecated as of 0.0.106.
63+ (PR [#3991](https://github.com/pipecat-ai/pipecat/pull/3991))
64+
65+ - Updated `sarvamai` dependency from `0.1.26a2` (alpha) to `0.1.26` (stable
66+ release).
67+ (PR [#3997](https://github.com/pipecat-ai/pipecat/pull/3997))
68+
69+ - `SimliVideoService` now extends `AIService` instead of `FrameProcessor`,
70+ aligning it with the HeyGen and Tavus video services. It supports
71+ `SimliVideoService.Settings(...)` for configuration and uses
72+ `start()`/`stop()`/`cancel()` lifecycle methods. Existing constructor usage
73+ (`api_key`, `face_id`, etc.) remains unchanged.
74+ (PR [#4001](https://github.com/pipecat-ai/pipecat/pull/4001))
75+
76+ - Update `pipecat-ai-small-webrtc-prebuilt` to `2.4.0`.
77+ (PR [#4023](https://github.com/pipecat-ai/pipecat/pull/4023))
78+
79+ - Nova Sonic assistant text transcripts are now delivered in real-time using
80+ speculative text events instead of delayed final text events. Previously,
81+ assistant text only arrived after all audio had finished playing, causing
82+ laggy transcripts in client UIs. Speculative text arrives before each audio
83+ chunk, providing text synchronized with what the bot is saying. This also
84+ simplifies the internal text handling by removing the interruption re-push
85+ hack and assistant text buffer.
86+ (PR [#4042](https://github.com/pipecat-ai/pipecat/pull/4042))
87+
88+ - Updated `daily-python` dependency to 0.25.0.
89+ (PR [#4047](https://github.com/pipecat-ai/pipecat/pull/4047))
90+
91+ - Added `enable_dialout` parameter to `configure()` in `pipecat.runner.daily`
92+ to support dial-out rooms. Also narrowed misleading `Optional` type hints and
93+ deduplicated token expiry calculation.
94+ (PR [#4048](https://github.com/pipecat-ai/pipecat/pull/4048))
95+
96+ - Extended `ProcessFrameResult` to stop strategies, allowing a stop strategy to
97+ short-circuit evaluation of subsequent strategies by returning `STOP`.
98+ (PR [#4064](https://github.com/pipecat-ai/pipecat/pull/4064))
99+
100+ - `GradiumSTTService` now takes both an `encoding` and `sample_rate`
101+ constructor argument which is assmebled in the class to form the
102+ `input_format`. PCM accepts `8000`, `16000`, and `24000` Hz sample rates.
103+ (PR [#4066](https://github.com/pipecat-ai/pipecat/pull/4066))
104+
105+ - Improved `GradiumSTTService` transcription accuracy by reworking how text
106+ fragments are accumulated and finalized. Previously, trailing words could be
107+ dropped when the server's `flushed` response arrived before all text tokens
108+ were delivered. The service now uses a short aggregation delay after flush to
109+ capture trailing tokens, producing complete utterances.
110+ (PR [#4066](https://github.com/pipecat-ai/pipecat/pull/4066))
111+
112+ ### Deprecated
113+
114+ - `SimliVideoService.InputParams` is deprecated. Use the direct constructor
115+ parameters `max_session_length`, `max_idle_time`, and `enable_logging`
116+ instead.
117+ (PR [#4001](https://github.com/pipecat-ai/pipecat/pull/4001))
118+
119+ - Deprecated `LocalSmartTurnAnalyzerV2` and `LocalCoreMLSmartTurnAnalyzer`. Use
120+ `LocalSmartTurnAnalyzerV3` instead. Instantiating these analyzers will now
121+ emit a `DeprecationWarning`.
122+ (PR [#4012](https://github.com/pipecat-ai/pipecat/pull/4012))
123+
124+ - Deprecated `WakeCheckFilter` in favor of `WakePhraseUserTurnStartStrategy`.
125+ (PR [#4064](https://github.com/pipecat-ai/pipecat/pull/4064))
126+
127+ ### Fixed
128+
129+ - Fixed an issue where the default model for `OpenAILLMService` and
130+ `AzureLLMService` was mistakenly reverted to `gpt-4o`. The defaults are now
131+ restored to `gpt-4.1`.
132+ (PR [#4000](https://github.com/pipecat-ai/pipecat/pull/4000))
133+
134+ - Fixed a race condition where `EndTaskFrame` could cause the pipeline to shut
135+ down before in-flight frames (e.g. LLM function call responses) finished
136+ processing. `EndTaskFrame` and `StopTaskFrame` now flow through the pipeline
137+ as `ControlFrame`s, ensuring all pending work is flushed before shutdown
138+ begins. `CancelTaskFrame` and `InterruptionTaskFrame` remain immediate
139+ (`SystemFrame`).
140+ (PR [#4006](https://github.com/pipecat-ai/pipecat/pull/4006))
141+
142+ - Fixed `ParallelPipeline` dropping or misordering frames during lifecycle
143+ synchronization. Buffered frames are now flushed in the correct order
144+ relative to synchronization frames (`StartFrame` goes first,
145+ `EndFrame`/`CancelFrame` go after), and frames added to the buffer during
146+ flush are also drained.
147+ (PR [#4007](https://github.com/pipecat-ai/pipecat/pull/4007))
148+
149+ - Fixed `TTSService` potentially canceling in-flight audio during shutdown. The
150+ stop sequence now waits for all queued audio contexts to finish processing
151+ before canceling the stop frame task.
152+ (PR [#4007](https://github.com/pipecat-ai/pipecat/pull/4007))
153+
154+ - Fixed `Language` enum values (e.g. `Language.ES`) not being converted to
155+ service-specific codes when passed via
156+ `settings=Service.Settings(language=Language.ES)` at init time. This caused
157+ API errors (e.g. 400 from Rime) because the raw enum was sent instead of the
158+ expected language code (e.g. `"spa"`). Runtime updates via
159+ `UpdateSettingsFrame` were unaffected. The fix centralizes conversion in the
160+ base `TTSService` and `STTService` classes so all services handle this
161+ consistently.
162+ (PR [#4024](https://github.com/pipecat-ai/pipecat/pull/4024))
163+
164+ - Fixed `DeepgramSTTService` ignoring the `base_url` scheme when using `ws://`
165+ or `http://`. Previously these were silently overwritten with `wss://` /
166+ `https://`, breaking air-gapped or private deployments that don't use TLS.
167+ All scheme choices (`wss://`, `https://`, `ws://`, `http://`, or bare
168+ hostname) are now respected.
169+ (PR [#4026](https://github.com/pipecat-ai/pipecat/pull/4026))
170+
171+ - Fixed `LLMSwitcher.register_function()` and `register_direct_function()` not
172+ accepting or forwarding the `timeout_secs` parameter.
173+ (PR [#4037](https://github.com/pipecat-ai/pipecat/pull/4037))
174+
175+ - Fixed empty user transcriptions in Nova Sonic causing spurious interruptions.
176+ Previously, an empty transcription could trigger an interruption of the
177+ assistant's response even though the user hadn't actually spoken.
178+ (PR [#4042](https://github.com/pipecat-ai/pipecat/pull/4042))
179+
180+ - Fixed `SonioxSTTService` and `OpenAIRealtimeSTTService` crash when language
181+ parameters contain plain strings instead of `Language` enum values.
182+ (PR [#4046](https://github.com/pipecat-ai/pipecat/pull/4046))
183+
184+ - Fixed premature user turn stops caused by late transcriptions arriving
185+ between turns. A stale transcript from the previous turn could persist into
186+ the next turn and trigger a stop before the current turn's real transcript
187+ arrived. Stop strategies are now reset at both turn start and turn stop to
188+ prevent state from leaking across turn boundaries.
189+ (PR [#4057](https://github.com/pipecat-ai/pipecat/pull/4057))
190+
191+ - Fixed raw language strings like `"de-DE"` silently failing when passed to
192+ TTS/STT services (e.g. ElevenLabs producing no audio). Raw strings now go
193+ through the same `Language` enum resolution as enum values, so regional codes
194+ like `"de-DE"` are properly converted to service-expected formats like
195+ `"de"`. Unrecognized strings log a warning instead of failing silently.
196+ (PR [#4058](https://github.com/pipecat-ai/pipecat/pull/4058))
197+
198+ - Fixed Deepgram STT list-type settings (`keyterm`, `keywords`, `search`,
199+ `redact`, `replace`) being stringified instead of passed as lists to the SDK,
200+ which caused them to be sent as literal strings (e.g. `"['pipecat']"`) in the
201+ WebSocket query params.
202+ (PR [#4063](https://github.com/pipecat-ai/pipecat/pull/4063))
203+
204+ - Fixed `MinWordsUserTurnStartStrategy` including text below the word threshold
205+ in the output by resetting aggregation when the minimum word count is not
206+ met.
207+ (PR [#4064](https://github.com/pipecat-ai/pipecat/pull/4064))
208+
209+ - Fixed audio overlap and potential dropped TTS content when multiple assistant
210+ turns occur in quick succession. `TTSService` now flushes remaining text
211+ before pausing frame processing on `LLMFullResponseEndFrame`/`EndFrame`,
212+ instead of pausing first.
213+ (PR [#4071](https://github.com/pipecat-ai/pipecat/pull/4071))
214+
215+ ### Security
216+
217+ - Bumped PyJWT minimum version from 2.10.1 to 2.12.0 in the `livekit` extra to
218+ address CVE-2026-32597 (GHSA-752w-5fwx-jx9f), where PyJWT <= 2.11.0 accepted
219+ unknown `crit` header extensions.
220+ (PR [#4035](https://github.com/pipecat-ai/pipecat/pull/4035))
221+
10222## [0.0.105] - 2026-03-10
11223
12224### Added
0 commit comments