Update changelog for version 1.0.0
This commit is contained in:
committed by
Aleix Conchillo Flaqué
parent
958d90819f
commit
f8318289d4
678
CHANGELOG.md
678
CHANGELOG.md
@@ -7,6 +7,684 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
<!-- towncrier release notes start -->
|
||||
|
||||
## [1.0.0] - 2026-04-14
|
||||
|
||||
Migration guide: https://docs.pipecat.ai/pipecat/migration/migration-1.0
|
||||
|
||||
### Added
|
||||
|
||||
- Updated LemonSlice transport:
|
||||
- Added `on_avatar_connected` and `on_avatar_disconnected` events triggered
|
||||
when the avatar joins and leaves the room.
|
||||
- Added `api_url` parameter to `LemonSliceNewSessionRequest` to allow
|
||||
overriding the LemonSlice API endpoint.
|
||||
- Added support for passing arbitrary named parameters to the LemonSlice
|
||||
API endpoint.
|
||||
(PR [#3995](https://github.com/pipecat-ai/pipecat/pull/3995))
|
||||
|
||||
- Added Inworld Realtime LLM service with WebSocket-based cascade STT/LLM/TTS,
|
||||
semantic VAD, function calling, and Router support.
|
||||
(PR [#4140](https://github.com/pipecat-ai/pipecat/pull/4140))
|
||||
|
||||
- ⚠️ Added WebSocket-based `OpenAIResponsesLLMService` as the new default for
|
||||
the OpenAI Responses API. It maintains a persistent connection to
|
||||
`wss://api.openai.com/v1/responses` and automatically uses
|
||||
`previous_response_id` to send only incremental context, falling back to full
|
||||
context on reconnection or cache miss. The previous HTTP-based implementation
|
||||
is now available as `OpenAIResponsesHttpLLMService`.
|
||||
(PR [#4141](https://github.com/pipecat-ai/pipecat/pull/4141))
|
||||
|
||||
- Added `group_parallel_tools` parameter to `LLMService` (default `True`). When
|
||||
`True`, all function calls from the same LLM response batch share a group ID
|
||||
and the LLM is triggered exactly once after the last call completes. Set to
|
||||
`False` to trigger inference independently for each function call result as
|
||||
it arrives.
|
||||
(PR [#4217](https://github.com/pipecat-ai/pipecat/pull/4217))
|
||||
|
||||
- Added async function call support to `register_function()` and
|
||||
`register_direct_function()` via `cancel_on_interruption=False`. When set to
|
||||
`False`, the LLM continues the conversation immediately without waiting for
|
||||
the function result. The result is injected back into the context as a
|
||||
`developer` message once available, triggering a new LLM inference at that
|
||||
point.
|
||||
(PR [#4217](https://github.com/pipecat-ai/pipecat/pull/4217))
|
||||
|
||||
- Added `enable_prompt_caching` setting to `AWSBedrockLLMService` for Bedrock
|
||||
ConverseStream prompt caching.
|
||||
(PR [#4219](https://github.com/pipecat-ai/pipecat/pull/4219))
|
||||
|
||||
- Added support for streaming intermediate results from async function calls.
|
||||
Call `result_callback` multiple times with
|
||||
`properties=FunctionCallResultProperties(is_final=False)` to push incremental
|
||||
updates, then call it once more (with `is_final=True`, the default) to
|
||||
deliver the final result. Only valid for functions registered with
|
||||
`cancel_on_interruption=False`.
|
||||
(PR [#4230](https://github.com/pipecat-ai/pipecat/pull/4230))
|
||||
|
||||
- Added `LLMMessagesTransformFrame` to facilitate programmatically editing
|
||||
context in a frame-based way.
|
||||
|
||||
The previous approach required the caller to directly grab a reference to
|
||||
the context object, grab a "snapshot" of its messages _at that point in
|
||||
time_, transform the messages, and then push an `LLMMessagesUpdateFrame` with
|
||||
the transformed messages. This approach can lead to problems: what if there
|
||||
had already been a change to the context queued in the pipeline? The
|
||||
transformed messages would simply overwrite it without consideration.
|
||||
(PR [#4231](https://github.com/pipecat-ai/pipecat/pull/4231))
|
||||
|
||||
- The development runner now exports a module-level `app` FastAPI instance
|
||||
(`from pipecat.runner.run import app`) so you can register custom routes
|
||||
before calling `main()`.
|
||||
(PR [#4234](https://github.com/pipecat-ai/pipecat/pull/4234))
|
||||
|
||||
- `ToolsSchema` now accepts `custom_tools` for OpenAI LLM services
|
||||
(`OpenAILLMService`, `OpenAIResponsesLLMService`,
|
||||
`OpenAIResponsesHttpLLMService`, and `OpenAIRealtimeLLMService`), letting you
|
||||
pass provider-specific tools like `tool_search` alongside standard function
|
||||
tools.
|
||||
(PR [#4248](https://github.com/pipecat-ai/pipecat/pull/4248))
|
||||
|
||||
- Added enhancements to `NvidiaTTSService`:
|
||||
|
||||
- Cross-sentence stitching: multiple sentences within an LLM turn are fed
|
||||
into a single `SynthesizeOnline` gRPC stream for seamless audio across
|
||||
sentence boundaries (requires Magpie TTS model v1.7.0+).
|
||||
- `custom_dictionary` and `encoding` parameters for IPA-based custom
|
||||
pronunciation and output audio encoding.
|
||||
- Metrics generation (`can_generate_metrics` returns true) and
|
||||
`stop_all_metrics()` when an audio context is interrupted.
|
||||
- gRPC error handling around synthesis config retrieval
|
||||
(`GetRivaSynthesisConfig`).
|
||||
(PR [#4249](https://github.com/pipecat-ai/pipecat/pull/4249))
|
||||
|
||||
- Added `MistralTTSService` for streaming text-to-speech using Mistral's
|
||||
Voxtral TTS API (`voxtral-mini-tts-2603`). Supports SSE-based audio streaming
|
||||
with automatic resampling from the API's native 24kHz to any requested sample
|
||||
rate. Requires the `mistral` optional extra (`pip install
|
||||
pipecat-ai[mistral]`).
|
||||
(PR [#4251](https://github.com/pipecat-ai/pipecat/pull/4251))
|
||||
|
||||
- Added `truncate_large_values` parameter to `LLMContext.get_messages()`. When
|
||||
`True`, returns compact deep copies of messages with binary data (base64
|
||||
images, audio) replaced by short placeholders and long string values in
|
||||
LLM-specific messages recursively truncated. Useful for serialization,
|
||||
logging, and debugging tools.
|
||||
(PR [#4272](https://github.com/pipecat-ai/pipecat/pull/4272))
|
||||
|
||||
- `CartesiaSTTService` now supports runtime settings updates (e.g. changing
|
||||
`language` or `model` via `STTUpdateSettingsFrame`). The service
|
||||
automatically reconnects with the new parameters. Previously, settings
|
||||
updates were silently ignored.
|
||||
(PR [#4282](https://github.com/pipecat-ai/pipecat/pull/4282))
|
||||
|
||||
- Added `pcm_32000` and `pcm_48000` sample rate support to ElevenLabs TTS
|
||||
services.
|
||||
(PR [#4293](https://github.com/pipecat-ai/pipecat/pull/4293))
|
||||
|
||||
- Added `enable_logging` parameter to `ElevenLabsHttpTTSService`. Set to
|
||||
`False` to enable zero retention mode (enterprise only).
|
||||
(PR [#4293](https://github.com/pipecat-ai/pipecat/pull/4293))
|
||||
|
||||
### Changed
|
||||
|
||||
- Updated `onnxruntime` from 1.23.2 to 1.24.3, adding support for Python 3.14.
|
||||
(PR [#3984](https://github.com/pipecat-ai/pipecat/pull/3984))
|
||||
|
||||
- MCPClient now requires async with MCPClient(...) as mcp: or explicit
|
||||
start()/close() calls to manage the connection lifecycle.
|
||||
(PR [#4034](https://github.com/pipecat-ai/pipecat/pull/4034))
|
||||
|
||||
- ⚠️ Updated `langchain` extra to require langchain 1.x (from 0.3.x),
|
||||
langchain-community 0.4.x (from 0.3.x), and langchain-openai 1.x (from
|
||||
0.3.x). If you pin these packages in your project, update your pins
|
||||
accordingly.
|
||||
(PR [#4192](https://github.com/pipecat-ai/pipecat/pull/4192))
|
||||
|
||||
- `WebsocketService` reconnection errors are now non-fatal. When a websocket
|
||||
service exhausts its reconnection attempts (either via exponential backoff or
|
||||
quick failure detection), it emits a non-fatal `ErrorFrame` instead of a
|
||||
fatal one. This allows application-level failover (e.g. `ServiceSwitcher`) to
|
||||
handle the failure instead of killing the entire pipeline.
|
||||
(PR [#4201](https://github.com/pipecat-ai/pipecat/pull/4201))
|
||||
|
||||
- Changed `GrokLLMService` default model from `grok-3-beta` to `grok-3`, now
|
||||
that the model is generally available.
|
||||
(PR [#4209](https://github.com/pipecat-ai/pipecat/pull/4209))
|
||||
|
||||
- `GoogleImageGenService` now defaults to `imagen-4.0-generate-001` (previously
|
||||
`imagen-3.0-generate-002`).
|
||||
(PR [#4213](https://github.com/pipecat-ai/pipecat/pull/4213))
|
||||
|
||||
- ⚠️ `BaseOpenAILLMService.get_chat_completions()` now accepts an `LLMContext`
|
||||
instead of `OpenAILLMInvocationParams`. If you override this method, update
|
||||
your signature accordingly.
|
||||
(PR [#4215](https://github.com/pipecat-ai/pipecat/pull/4215))
|
||||
|
||||
- When multiple function calls are returned in a single LLM response, by
|
||||
default (when `group_parallel_tools=True`) the LLM is now triggered exactly
|
||||
once after the last call in the batch completes, rather than waiting for all
|
||||
function calls.
|
||||
(PR [#4217](https://github.com/pipecat-ai/pipecat/pull/4217))
|
||||
|
||||
- ⚠️ `LLMService.function_call_timeout_secs` now defaults to `None` instead of
|
||||
`10.0`. Deferred function calls will run indefinitely unless a timeout is
|
||||
explicitly set at the service level or per-call. If you relied on the
|
||||
previous 10-second default, pass `function_call_timeout_secs=10.0`
|
||||
explicitly.
|
||||
(PR [#4224](https://github.com/pipecat-ai/pipecat/pull/4224))
|
||||
|
||||
- Updated `NvidiaTTSService`:
|
||||
|
||||
- Made `api_key` optional for local NIM deployments.
|
||||
- Voice, language, and quality can be updated without reconnecting the gRPC
|
||||
client; new values take effect on the next synthesis turn, not for the
|
||||
current turn's in-flight requests.
|
||||
- Replaced per-sentence synchronous `synthesize_online` calls with async
|
||||
queue-backed gRPC streaming.
|
||||
- Streaming now uses asyncio tasks with explicit gRPC cancellation on
|
||||
interruption and stale-response filtering when a stream is aborted or
|
||||
replaced.
|
||||
- Renamed Riva references to Nemotron Speech in docs and messages.
|
||||
- Disabled automatic TTS start frames at the service level
|
||||
(`push_start_frame=False`) and emit `TTSStartedFrame` when a stitched
|
||||
synthesis stream is started for a context.
|
||||
(PR [#4249](https://github.com/pipecat-ai/pipecat/pull/4249))
|
||||
|
||||
### Removed
|
||||
|
||||
- ⚠️ Removed `OpenPipeLLMService` and the `openpipe` extra. OpenPipe was
|
||||
acquired by CoreWeave and the package is no longer maintained. If you were
|
||||
using `openpipe` as an LLM provider, switch to the underlying provider
|
||||
directly (e.g. `openai`). The OpenPipe interface can still be used with
|
||||
`OpenAILLMService` by specifying a `base_url`.
|
||||
(PR [#4191](https://github.com/pipecat-ai/pipecat/pull/4191))
|
||||
|
||||
- ⚠️ Removed `NoisereduceFilter`. Use system-level noise reduction or a
|
||||
service-based alternative instead.
|
||||
(PR [#4204](https://github.com/pipecat-ai/pipecat/pull/4204))
|
||||
|
||||
- ⚠️ Removed deprecated `vad_enabled` and `vad_audio_passthrough` transport
|
||||
params.
|
||||
(PR [#4204](https://github.com/pipecat-ai/pipecat/pull/4204))
|
||||
|
||||
- ⚠️ Removed deprecated `camera_in_enabled`, `camera_in_is_live`,
|
||||
`camera_in_width`, `camera_in_height`, `camera_out_enabled`,
|
||||
`camera_out_is_live`, `camera_out_width`, `camera_out_height`, and
|
||||
`camera_out_color` transport params. Use the `video_in_*` and `video_out_*`
|
||||
equivalents instead.
|
||||
(PR [#4204](https://github.com/pipecat-ai/pipecat/pull/4204))
|
||||
|
||||
- ⚠️ Removed `FrameProcessor.wait_for_task()`. Use `create_task()` and manage
|
||||
tasks with the built-in `TaskManager` instead.
|
||||
(PR [#4204](https://github.com/pipecat-ai/pipecat/pull/4204))
|
||||
|
||||
- ⚠️ Removed deprecated transport frames: `TransportMessageFrame`,
|
||||
`TransportMessageUrgentFrame`, `InputTransportMessageUrgentFrame`,
|
||||
`DailyTransportMessageFrame`, and `DailyTransportMessageUrgentFrame`. Use
|
||||
`OutputTransportMessageFrame`, `OutputTransportMessageUrgentFrame`,
|
||||
`InputTransportMessageFrame`, `DailyOutputTransportMessageFrame`, and
|
||||
`DailyOutputTransportMessageUrgentFrame` instead.
|
||||
(PR [#4204](https://github.com/pipecat-ai/pipecat/pull/4204))
|
||||
|
||||
- ⚠️ Removed `create_default_resampler()` from `pipecat.audio.utils`.
|
||||
(PR [#4204](https://github.com/pipecat-ai/pipecat/pull/4204))
|
||||
|
||||
- ⚠️ Removed `DailyRunner.configure_with_args()`. Use `PipelineRunner` with
|
||||
`RunnerArguments` instead.
|
||||
(PR [#4204](https://github.com/pipecat-ai/pipecat/pull/4204))
|
||||
|
||||
- ⚠️ Removed deprecated `on_pipeline_ended`, `on_pipeline_cancelled`, and
|
||||
`on_pipeline_stopped` events from `PipelineTask`. Use `on_pipeline_finished`
|
||||
instead.
|
||||
(PR [#4204](https://github.com/pipecat-ai/pipecat/pull/4204))
|
||||
|
||||
- ⚠️ Removed single-argument function call support from `LLMService`. Functions
|
||||
must use named parameters instead of a single `arguments` parameter.
|
||||
(PR [#4204](https://github.com/pipecat-ai/pipecat/pull/4204))
|
||||
|
||||
- ⚠️ Removed `FalSmartTurnAnalyzer` and `LocalSmartTurnAnalyzer`.
|
||||
(PR [#4204](https://github.com/pipecat-ai/pipecat/pull/4204))
|
||||
|
||||
- ⚠️ Removed `RTVIObserver.errors_enabled` parameter.
|
||||
(PR [#4204](https://github.com/pipecat-ai/pipecat/pull/4204))
|
||||
|
||||
- ⚠️ Removed deprecated RTVI models, frames, and processor methods including
|
||||
`RTVIConfig`, `RTVIServiceConfig`, `RTVIServiceOptionConfig`, various
|
||||
`RTVI*Data` models, `RTVIActionFrame`, and
|
||||
`RTVIProcessor.handle_function_call`/`handle_function_call_start`. Use the
|
||||
updated RTVI processor API instead.
|
||||
(PR [#4204](https://github.com/pipecat-ai/pipecat/pull/4204))
|
||||
|
||||
- ⚠️ Removed deprecated `KeypadEntryFrame` alias.
|
||||
(PR [#4204](https://github.com/pipecat-ai/pipecat/pull/4204))
|
||||
|
||||
- ⚠️ Removed deprecated interruption frames: `StartInterruptionFrame` and
|
||||
`BotInterruptionFrame`. Use `InterruptionFrame` and `InterruptionTaskFrame`
|
||||
instead.
|
||||
(PR [#4204](https://github.com/pipecat-ai/pipecat/pull/4204))
|
||||
|
||||
- ⚠️ Removed `LLMService.request_image_frame()`. Push a `UserImageRequestFrame`
|
||||
instead.
|
||||
(PR [#4204](https://github.com/pipecat-ai/pipecat/pull/4204))
|
||||
|
||||
- ⚠️ Removed `TTSService.say()`. Push a `TTSSpeakFrame` into the pipeline
|
||||
instead.
|
||||
(PR [#4204](https://github.com/pipecat-ai/pipecat/pull/4204))
|
||||
|
||||
- ⚠️ Removed `KrispFilter`. The `krisp` extra has been removed from
|
||||
`pyproject.toml`.
|
||||
(PR [#4204](https://github.com/pipecat-ai/pipecat/pull/4204))
|
||||
|
||||
- ⚠️ Removed `AudioBufferProcessor.user_continuous_stream` parameter. Use
|
||||
`user_audio_passthrough` instead.
|
||||
(PR [#4204](https://github.com/pipecat-ai/pipecat/pull/4204))
|
||||
|
||||
- ⚠️ Removed `LLMService.start_callback` parameter. Register an
|
||||
`on_llm_response_start` event handler instead.
|
||||
(PR [#4204](https://github.com/pipecat-ai/pipecat/pull/4204))
|
||||
|
||||
- ⚠️ Removed deprecated `observers` field from `PipelineParams`. Pass observers
|
||||
directly to `PipelineTask` constructor instead.
|
||||
(PR [#4204](https://github.com/pipecat-ai/pipecat/pull/4204))
|
||||
|
||||
- ⚠️ Removed deprecated `pipecat.services.openai_realtime` package. Use
|
||||
`pipecat.services.openai.realtime` instead.
|
||||
(PR [#4208](https://github.com/pipecat-ai/pipecat/pull/4208))
|
||||
|
||||
- ⚠️ Removed deprecated `pipecat.services.google.llm_vertex` module. Use
|
||||
`pipecat.services.google.vertex.llm` instead.
|
||||
(PR [#4208](https://github.com/pipecat-ai/pipecat/pull/4208))
|
||||
|
||||
- ⚠️ Removed deprecated `GoogleLLMOpenAIBetaService` from
|
||||
`pipecat.services.google.openai`. Use `GoogleLLMService` from
|
||||
`pipecat.services.google.llm` instead.
|
||||
(PR [#4208](https://github.com/pipecat-ai/pipecat/pull/4208))
|
||||
|
||||
- ⚠️ Removed deprecated `OpenAIRealtimeBetaLLMService` and
|
||||
`AzureRealtimeBetaLLMService`. Use `OpenAIRealtimeLLMService` and
|
||||
`AzureRealtimeLLMService` from `pipecat.services.openai.realtime` and
|
||||
`pipecat.services.azure.realtime` instead.
|
||||
(PR [#4208](https://github.com/pipecat-ai/pipecat/pull/4208))
|
||||
|
||||
- ⚠️ Removed deprecated `pipecat.services.ai_services` module. Import from
|
||||
`pipecat.services.ai_service`, `pipecat.services.llm_service`,
|
||||
`pipecat.services.stt_service`, `pipecat.services.tts_service`, etc. instead.
|
||||
(PR [#4208](https://github.com/pipecat-ai/pipecat/pull/4208))
|
||||
|
||||
- ⚠️ Removed deprecated `pipecat.services.gemini_multimodal_live` package. Use
|
||||
`pipecat.services.google.gemini_live` instead. Note that class names no
|
||||
longer include "Multimodal" (e.g. `GeminiMultimodalLiveLLMService` →
|
||||
`GeminiLiveLLMService`).
|
||||
(PR [#4208](https://github.com/pipecat-ai/pipecat/pull/4208))
|
||||
|
||||
- ⚠️ Removed deprecated `pipecat.services.google.gemini_live.llm_vertex`
|
||||
module. Use `pipecat.services.google.gemini_live.vertex.llm` instead.
|
||||
(PR [#4208](https://github.com/pipecat-ai/pipecat/pull/4208))
|
||||
|
||||
- ⚠️ Removed deprecated `pipecat.services.nim` package. Use
|
||||
`pipecat.services.nvidia.llm` instead (`NimLLMService` → `NvidiaLLMService`).
|
||||
(PR [#4208](https://github.com/pipecat-ai/pipecat/pull/4208))
|
||||
|
||||
- ⚠️ Removed deprecated `pipecat.services.deepgram.stt_sagemaker` and
|
||||
`pipecat.services.deepgram.tts_sagemaker` modules. Use
|
||||
`pipecat.services.deepgram.sagemaker.stt` and
|
||||
`pipecat.services.deepgram.sagemaker.tts` instead.
|
||||
(PR [#4208](https://github.com/pipecat-ai/pipecat/pull/4208))
|
||||
|
||||
- ⚠️ Removed deprecated `pipecat.services.aws_nova_sonic` package. Use
|
||||
`pipecat.services.aws.nova_sonic` instead.
|
||||
(PR [#4208](https://github.com/pipecat-ai/pipecat/pull/4208))
|
||||
|
||||
- ⚠️ Removed deprecated `pipecat.services.riva` package. Use
|
||||
`pipecat.services.nvidia.stt` and `pipecat.services.nvidia.tts` instead
|
||||
(`RivaSTTService` → `NvidiaSTTService`, `RivaTTSService` →
|
||||
`NvidiaTTSService`).
|
||||
(PR [#4208](https://github.com/pipecat-ai/pipecat/pull/4208))
|
||||
|
||||
- ⚠️ Removed deprecated compatibility modules:
|
||||
`pipecat.services.openai_realtime_beta` (use
|
||||
`pipecat.services.openai.realtime`),
|
||||
`pipecat.services.openai_realtime.context`,
|
||||
`pipecat.services.openai_realtime.frames`,
|
||||
`pipecat.services.openai.realtime.context`,
|
||||
`pipecat.services.openai.realtime.frames`,
|
||||
`pipecat.services.gemini_multimodal_live` (use
|
||||
`pipecat.services.google.gemini_live`),
|
||||
`pipecat.services.aws_nova_sonic.context` (use
|
||||
`pipecat.services.aws.nova_sonic`), `pipecat.services.google.openai` and
|
||||
`pipecat.services.google.llm_openai` (use `pipecat.services.google.llm`).
|
||||
(PR [#4215](https://github.com/pipecat-ai/pipecat/pull/4215))
|
||||
|
||||
- ⚠️ Removed `VisionImageFrameAggregator` (from
|
||||
`pipecat.processors.aggregators.vision_image_frame`). Vision/image handling
|
||||
is now built into `LLMContext` (from
|
||||
`pipecat.processors.aggregators.llm_context`). See the `12*` examples for the
|
||||
recommended replacement pattern.
|
||||
(PR [#4215](https://github.com/pipecat-ai/pipecat/pull/4215))
|
||||
|
||||
- ⚠️ Removed `OpenAILLMContext`, `OpenAILLMContextFrame`, and
|
||||
`OpenAILLMContext.from_messages()`. Use `LLMContext` (from
|
||||
`pipecat.processors.aggregators.llm_context`) and `LLMContextFrame` (from
|
||||
`pipecat.frames.frames`) instead. All services now exclusively use the
|
||||
universal `LLMContext`.
|
||||
|
||||
From the developer's point of view, migrating will usually be a matter of
|
||||
going from this:
|
||||
|
||||
```python
|
||||
context = OpenAILLMContext(messages, tools)
|
||||
context_aggregator = llm.create_context_aggregator(context)
|
||||
```
|
||||
|
||||
To this:
|
||||
|
||||
```python
|
||||
from pipecat.processors.aggregators.llm_context import LLMContext
|
||||
from pipecat.processors.aggregators.llm_response_universal import LLMContextAggregatorPair
|
||||
|
||||
context = LLMContext(messages, tools)
|
||||
context_aggregator = LLMContextAggregatorPair(context)
|
||||
```
|
||||
(PR [#4215](https://github.com/pipecat-ai/pipecat/pull/4215))
|
||||
|
||||
- ⚠️ Removed deprecated frame types `LLMMessagesFrame` and
|
||||
`OpenAILLMContextAssistantTimestampFrame` from `pipecat.frames.frames`.
|
||||
Instead of `LLMMessagesFrame`, use `LLMContextFrame` with the new messages,
|
||||
or `LLMMessagesUpdateFrame` with `run_llm=True`.
|
||||
(PR [#4215](https://github.com/pipecat-ai/pipecat/pull/4215))
|
||||
|
||||
- ⚠️ Removed `GatedOpenAILLMContextAggregator` (from
|
||||
`pipecat.processors.aggregators.gated_open_ai_llm_context`). Use
|
||||
`GatedLLMContextAggregator` (from
|
||||
`pipecat.processors.aggregators.gated_llm_context`) instead.
|
||||
(PR [#4215](https://github.com/pipecat-ai/pipecat/pull/4215))
|
||||
|
||||
- ⚠️ Removed deprecated service-specific context and aggregator machinery,
|
||||
which was superseded by the universal `LLMContext` system.
|
||||
|
||||
Service-specific classes removed: `AnthropicLLMContext`,
|
||||
`AnthropicContextAggregatorPair`, `AWSBedrockLLMContext`,
|
||||
`AWSBedrockContextAggregatorPair`, `OpenAIContextAggregatorPair`, and their
|
||||
user/assistant aggregators. Also removed `create_context_aggregator()` from
|
||||
`LLMService`, `OpenAILLMService`, `AnthropicLLMService`, and
|
||||
`AWSBedrockLLMService`.
|
||||
|
||||
Base aggregator classes removed (from
|
||||
`pipecat.processors.aggregators.llm_response`): `BaseLLMResponseAggregator`,
|
||||
`LLMContextResponseAggregator`, `LLMUserContextAggregator`,
|
||||
`LLMAssistantContextAggregator`, `LLMUserResponseAggregator`,
|
||||
`LLMAssistantResponseAggregator`.
|
||||
|
||||
From the developer's point of view, migrating will usually be a matter of
|
||||
going from this:
|
||||
|
||||
```python
|
||||
context = OpenAILLMContext(messages, tools)
|
||||
context_aggregator = llm.create_context_aggregator(context)
|
||||
```
|
||||
|
||||
To this:
|
||||
|
||||
```python
|
||||
from pipecat.processors.aggregators.llm_context import LLMContext
|
||||
from pipecat.processors.aggregators.llm_response_universal import LLMContextAggregatorPair
|
||||
|
||||
context = LLMContext(messages, tools)
|
||||
context_aggregator = LLMContextAggregatorPair(context)
|
||||
```
|
||||
(PR [#4215](https://github.com/pipecat-ai/pipecat/pull/4215))
|
||||
|
||||
- ⚠️ Removed deprecated service parameters and shims that have been replaced by
|
||||
the `settings=Service.Settings(...)` pattern or direct `__init__` parameters:
|
||||
- `PollyTTSService` alias (use `AWSTTSService`)
|
||||
- `TTSService`: `text_aggregator`, `text_filter` init params
|
||||
- `AWSNovaSonicLLMService`: `send_transcription_frames` init param
|
||||
- `DeepgramSTTService`: `url` init param (use `base_url`)
|
||||
- `FishAudioTTSService`: `model` init param (use `reference_id` or
|
||||
`settings`)
|
||||
- `GladiaSTTService`: `language` and `confidence` from `GladiaInputParams`,
|
||||
`InputParams` class alias
|
||||
- `GeminiTTSService`: `api_key` init param
|
||||
- `GeminiLiveLLMService`: `base_url` init param (use `http_options`)
|
||||
- `GoogleVertexLLMService`: `InputParams` class with
|
||||
`location`/`project_id` fields (use direct init params); `project_id` is now
|
||||
required, `location` defaults to `"us-east4"`
|
||||
- `MiniMaxHttpTTSService`: `english_normalization` from `InputParams` (use
|
||||
`text_normalization`)
|
||||
- `SimliVideoService`: `simli_config` init param (use `api_key`/`face_id`),
|
||||
`use_turn_server` init param; `api_key` and `face_id` are now required
|
||||
- `AnthropicLLMService`: `enable_prompt_caching_beta` from `InputParams`
|
||||
(use `enable_prompt_caching`)
|
||||
(PR [#4220](https://github.com/pipecat-ai/pipecat/pull/4220))
|
||||
|
||||
- ⚠️ Removed deprecated `pipecat.transports.services` and
|
||||
`pipecat.transports.network` module aliases. Update imports to use
|
||||
`pipecat.transports.daily.transport`, `pipecat.transports.livekit.transport`,
|
||||
`pipecat.transports.websocket.*`, `pipecat.transports.webrtc.*`, and
|
||||
`pipecat.transports.daily.utils` respectively.
|
||||
(PR [#4225](https://github.com/pipecat-ai/pipecat/pull/4225))
|
||||
|
||||
- ⚠️ Removed deprecated `pipecat.sync` package. Use `pipecat.utils.sync`
|
||||
instead.
|
||||
(PR [#4225](https://github.com/pipecat-ai/pipecat/pull/4225))
|
||||
|
||||
- ⚠️ Removed deprecated `TranscriptionMessage`, `ThoughtTranscriptionMessage`,
|
||||
and `TranscriptionUpdateFrame` from `pipecat.frames.frames`.
|
||||
(PR [#4228](https://github.com/pipecat-ai/pipecat/pull/4228))
|
||||
|
||||
- ⚠️ Removed deprecated `allow_interruptions` parameter from `PipelineParams`,
|
||||
`StartFrame`, and `FrameProcessor`. Interruptions are now always allowed by
|
||||
default. Use `LLMUserAggregator`'s `user_turn_strategies` /
|
||||
`user_mute_strategies` parameters to control interruption behavior.
|
||||
(PR [#4228](https://github.com/pipecat-ai/pipecat/pull/4228))
|
||||
|
||||
- ⚠️ Removed deprecated `STTMuteFilter`, `STTMuteConfig`, and `STTMuteStrategy`
|
||||
from `pipecat.processors.filters.stt_mute_filter`. Use
|
||||
`pipecat.turns.user_mute` strategies with `LLMUserAggregator`'s
|
||||
`user_mute_strategies` parameter instead.
|
||||
(PR [#4228](https://github.com/pipecat-ai/pipecat/pull/4228))
|
||||
|
||||
- ⚠️ Removed deprecated `pipecat.processors.transcript_processor` module
|
||||
(`TranscriptProcessor`, `TranscriptProcessorConfig`). Use pipeline observers
|
||||
instead.
|
||||
(PR [#4228](https://github.com/pipecat-ai/pipecat/pull/4228))
|
||||
|
||||
- ⚠️ Removed deprecated `EmulateUserStartedSpeakingFrame` and
|
||||
`EmulateUserStoppedSpeakingFrame` frames, and the `emulated` field from
|
||||
`UserStartedSpeakingFrame` / `UserStoppedSpeakingFrame`.
|
||||
(PR [#4228](https://github.com/pipecat-ai/pipecat/pull/4228))
|
||||
|
||||
- ⚠️ Removed deprecated `interruption_strategies` parameter from
|
||||
`PipelineParams`, `StartFrame`, and `FrameProcessor`. Use
|
||||
`LLMUserAggregator`'s `user_turn_strategies` parameter instead.
|
||||
(PR [#4228](https://github.com/pipecat-ai/pipecat/pull/4228))
|
||||
|
||||
- ⚠️ Removed deprecated `pipecat.audio.interruptions` module
|
||||
(`BaseInterruptionStrategy`, `MinWordsInterruptionStrategy`). Use
|
||||
`pipecat.turns.user_start.MinWordsUserTurnStartStrategy` with
|
||||
`LLMUserAggregator`'s `user_turn_strategies` parameter instead.
|
||||
(PR [#4228](https://github.com/pipecat-ai/pipecat/pull/4228))
|
||||
|
||||
- ⚠️ Removed deprecated `pipecat.utils.tracing.class_decorators` module. Use
|
||||
`pipecat.utils.tracing.service_decorators` instead.
|
||||
(PR [#4228](https://github.com/pipecat-ai/pipecat/pull/4228))
|
||||
|
||||
- ⚠️ Removed deprecated `add_pattern_pair` method from `PatternPairAggregator`.
|
||||
Use `add_pattern` instead.
|
||||
(PR [#4228](https://github.com/pipecat-ai/pipecat/pull/4228))
|
||||
|
||||
- ⚠️ Removed deprecated `UserResponseAggregator` class from
|
||||
`pipecat.processors.aggregators.user_response`. Use `LLMUserAggregator`
|
||||
instead.
|
||||
(PR [#4228](https://github.com/pipecat-ai/pipecat/pull/4228))
|
||||
|
||||
- ⚠️ Removed `ExternalUserTurnStrategies` and the automatic fallback to it in
|
||||
`LLMUserAggregator` when a `SpeechControlParamsFrame` was received from the
|
||||
transport.
|
||||
(PR [#4229](https://github.com/pipecat-ai/pipecat/pull/4229))
|
||||
|
||||
- ⚠️ Removed `vad_analyzer` and `turn_analyzer` parameters from
|
||||
`TransportParams` and all transport input classes, along with all deprecated
|
||||
VAD/turn analysis logic in `BaseInputTransport`. VAD and turn detection are
|
||||
now handled entirely by `LLMUserAggregator`.
|
||||
(PR [#4229](https://github.com/pipecat-ai/pipecat/pull/4229))
|
||||
|
||||
- ⚠️ Removed deprecated `TranscriptionUserTurnStopStrategy` alias (deprecated
|
||||
in 0.0.102). Use `SpeechTimeoutUserTurnStopStrategy` instead.
|
||||
(PR [#4232](https://github.com/pipecat-ai/pipecat/pull/4232))
|
||||
|
||||
- ⚠️ Removed deprecated `vad_events` setting and `should_interrupt` parameter
|
||||
from `DeepgramSTTService` (deprecated in 0.0.99). Use Silero VAD for voice
|
||||
activity detection instead.
|
||||
(PR [#4232](https://github.com/pipecat-ai/pipecat/pull/4232))
|
||||
|
||||
- ⚠️ Removed deprecated `send_transcription_frames` parameter from
|
||||
`OpenAIRealtimeLLMService` (deprecated in 0.0.92). Transcription frames are
|
||||
always sent.
|
||||
(PR [#4232](https://github.com/pipecat-ai/pipecat/pull/4232))
|
||||
|
||||
- ⚠️ Removed deprecated `UserIdleProcessor` (deprecated in 0.0.100). Use
|
||||
`LLMUserAggregator` with the `user_idle_timeout` parameter instead.
|
||||
(PR [#4232](https://github.com/pipecat-ai/pipecat/pull/4232))
|
||||
|
||||
- ⚠️ Removed deprecated `UserBotLatencyLogObserver` (deprecated in 0.0.102).
|
||||
Use `UserBotLatencyObserver` with its `on_latency_measured` event handler
|
||||
instead.
|
||||
(PR [#4232](https://github.com/pipecat-ai/pipecat/pull/4232))
|
||||
|
||||
- ⚠️ Removed the `riva` install extra. Use `nvidia` instead (`pip install
|
||||
"pipecat-ai[nvidia]"`).
|
||||
(PR [#4235](https://github.com/pipecat-ai/pipecat/pull/4235))
|
||||
|
||||
- Removed the empty `remote-smart-turn` install extra (was already a no-op).
|
||||
(PR [#4235](https://github.com/pipecat-ai/pipecat/pull/4235))
|
||||
|
||||
- ⚠️ Removed `DeprecatedModuleProxy` and all service `__init__.py` re-export
|
||||
shims. Flat imports like `from pipecat.services.openai import
|
||||
OpenAILLMService` no longer work. Use the full submodule path instead: `from
|
||||
pipecat.services.openai.llm import OpenAILLMService`. This is already the
|
||||
established pattern across all examples and internal code.
|
||||
(PR [#4239](https://github.com/pipecat-ai/pipecat/pull/4239))
|
||||
|
||||
- ⚠️ Removed deprecated `PIPECAT_OBSERVER_FILES` environment variable support.
|
||||
Use `PIPECAT_SETUP_FILES` instead.
|
||||
(PR [#4267](https://github.com/pipecat-ai/pipecat/pull/4267))
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fixed `IdleFrameProcessor` where `asyncio.Event` was unconditionally cleared
|
||||
in a `finally` block instead of only on the success path.
|
||||
(PR [#3796](https://github.com/pipecat-ai/pipecat/pull/3796))
|
||||
|
||||
- Fixed MCPClient opening a new connection for every tool call instead of
|
||||
reusing the session.
|
||||
(PR [#4034](https://github.com/pipecat-ai/pipecat/pull/4034))
|
||||
|
||||
- GoogleLLMService now applies a low-latency thinking default
|
||||
(`thinking_level="minimal"`) for Gemini 3+ Flash models.
|
||||
(PR [#4067](https://github.com/pipecat-ai/pipecat/pull/4067))
|
||||
|
||||
- Fixed `WebsocketService` entering an infinite reconnection loop when a server
|
||||
accepts the WebSocket handshake but immediately closes the connection (e.g.
|
||||
invalid API key, close code 1008). The service now detects connections that
|
||||
fail repeatedly within seconds of being established and stops retrying after
|
||||
3 consecutive quick failures.
|
||||
(PR [#4201](https://github.com/pipecat-ai/pipecat/pull/4201))
|
||||
|
||||
- Fixed `InworldHttpTTSService` streaming responses crashing with
|
||||
`UnicodeDecodeError` when multi-byte UTF-8 characters were split across chunk
|
||||
boundaries. This caused TTS audio to cut off mid-sentence intermittently.
|
||||
(PR [#4202](https://github.com/pipecat-ai/pipecat/pull/4202))
|
||||
|
||||
- Fixed a crash (`JSONDecodeError`) when a user interruption occurs while the
|
||||
LLM is streaming function call arguments. Previously, the incomplete JSON
|
||||
arguments were passed directly to `json.loads()`, causing an unhandled
|
||||
exception. Affected services: OpenAI, Google (OpenAI-compatible), and
|
||||
SambaNova.
|
||||
(PR [#4203](https://github.com/pipecat-ai/pipecat/pull/4203))
|
||||
|
||||
- Fixed `BaseOutputTransport` discarding pending `UninterruptibleFrame` items
|
||||
(e.g. function-call context updates) when an interruption arrived. The audio
|
||||
task is now kept alive and only interruptible frames are drained when
|
||||
uninterruptible frames are present in the queue.
|
||||
(PR [#4217](https://github.com/pipecat-ai/pipecat/pull/4217))
|
||||
|
||||
- Fixed spurious LLM inference being triggered when a function call result
|
||||
arrived while the user was actively speaking. The context frame is now
|
||||
suppressed until the user stops speaking.
|
||||
(PR [#4217](https://github.com/pipecat-ai/pipecat/pull/4217))
|
||||
|
||||
- Fixed `CartesiaTTSService` failing with "Context has closed" errors when
|
||||
switching voice, model, or language via `TTSUpdateSettingsFrame`. The service
|
||||
now automatically flushes the current audio context and opens a fresh one
|
||||
when these settings change.
|
||||
(PR [#4220](https://github.com/pipecat-ai/pipecat/pull/4220))
|
||||
|
||||
- Fixed duplicate LLM replies that could occur when multiple async function
|
||||
call results arrived while an LLM request was already queued.
|
||||
(PR [#4230](https://github.com/pipecat-ai/pipecat/pull/4230))
|
||||
|
||||
- Fixed undefined `_warn_deprecated_param` calls in `OpenAIRealtimeLLMService`
|
||||
and `GrokRealtimeLLMService` for the deprecated `session_properties` init
|
||||
parameter.
|
||||
(PR [#4232](https://github.com/pipecat-ai/pipecat/pull/4232))
|
||||
|
||||
- Fixed Gemini Live bot hanging after a session resumption reconnect. Audio,
|
||||
video, and text input were silently dropped after reconnecting because the
|
||||
internal `_ready_for_realtime_input` flag was not being reset.
|
||||
(PR [#4242](https://github.com/pipecat-ai/pipecat/pull/4242))
|
||||
|
||||
- Fixed `VADController` getting stuck in the `SPEAKING` state when audio frames
|
||||
stop arriving mid-speech (e.g. user mutes mic). A new `audio_idle_timeout`
|
||||
parameter (default 1s, set to 0 to disable) forces a transition back to
|
||||
`QUIET` and emits `on_speech_stopped` when no audio is received while
|
||||
speaking.
|
||||
(PR [#4244](https://github.com/pipecat-ai/pipecat/pull/4244))
|
||||
|
||||
- Fixed `PipelineRunner._gc_collect()` blocking the event loop by running
|
||||
`gc.collect()` synchronously. Now offloaded via `asyncio.to_thread` to avoid
|
||||
stalling concurrent pipeline tasks.
|
||||
(PR [#4255](https://github.com/pipecat-ai/pipecat/pull/4255))
|
||||
|
||||
- Fixed `ElevenLabsTTSService` incorrectly enabling `auto_mode` when using
|
||||
`TextAggregationMode.TOKEN`. Auto mode disables server-side buffering and is
|
||||
designed for complete sentences — enabling it with token streaming degraded
|
||||
speech quality. The default is now derived automatically from the aggregation
|
||||
strategy: `auto_mode=True` for `SENTENCE`, `auto_mode=False` for `TOKEN`.
|
||||
Callers can still override by passing `auto_mode` explicitly.
|
||||
(PR [#4265](https://github.com/pipecat-ai/pipecat/pull/4265))
|
||||
|
||||
- Fixed `ValueError: write to closed file` during pipeline shutdown when
|
||||
observers were active. Observer proxy tasks are now cancelled before observer
|
||||
resources are cleaned up.
|
||||
(PR [#4267](https://github.com/pipecat-ai/pipecat/pull/4267))
|
||||
|
||||
- Fixed delayed turn completion when STT transcripts arrive after the p99
|
||||
timeout. Previously, a late transcript (beyond the p99 window) would fall
|
||||
through to the 5-second `user_turn_stop_timeout` fallback. Now the turn stop
|
||||
triggers immediately when the late transcript arrives.
|
||||
(PR [#4283](https://github.com/pipecat-ai/pipecat/pull/4283))
|
||||
|
||||
- Fixed `ElevenLabsTTSService` ignoring `enable_logging=False` and
|
||||
`enable_ssml_parsing=False`. The truthy check treated `False` the same as
|
||||
`None` (both skipped), and Python's `str(False)` produced `"False"` instead
|
||||
of the lowercase `"false"` expected by the API.
|
||||
(PR [#4293](https://github.com/pipecat-ai/pipecat/pull/4293))
|
||||
|
||||
- Fixed `on_assistant_turn_stopped` not resetting internal state when the LLM
|
||||
returned no text tokens. Added `interrupted` field to
|
||||
`AssistantTurnStoppedMessage` to indicate whether the assistant turn was
|
||||
interrupted.
|
||||
(PR [#4294](https://github.com/pipecat-ai/pipecat/pull/4294))
|
||||
|
||||
- Fixed `LLMContextSummarizer` failing with "No messages to summarize" when
|
||||
using `system_instruction` instead of a system-role message at the start of
|
||||
the context. The summarizer previously scanned the entire context for the
|
||||
first system message, which could match a mid-conversation injection (e.g.
|
||||
idle notifications) instead of the initial prompt, causing the summarization
|
||||
range to be empty.
|
||||
(PR [#4295](https://github.com/pipecat-ai/pipecat/pull/4295))
|
||||
|
||||
## [0.0.108] - 2026-03-27
|
||||
|
||||
### Added
|
||||
|
||||
Reference in New Issue
Block a user