Merge pull request #4297 from pipecat-ai/changelog-1.0.0
Release 1.0.0 - Changelog Update
This commit is contained in:
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
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
- Fixed `IdleFrameProcessor` where `asyncio.Event` was unconditionally cleared in a `finally` block instead of only on the success path.
|
||||
@@ -1 +0,0 @@
|
||||
- Updated `onnxruntime` from 1.23.2 to 1.24.3, adding support for Python 3.14.
|
||||
@@ -1,4 +0,0 @@
|
||||
- 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
|
||||
@@ -1 +0,0 @@
|
||||
- MCPClient now requires async with MCPClient(...) as mcp: or explicit start()/close() calls to manage the connection lifecycle.
|
||||
@@ -1 +0,0 @@
|
||||
- Fixed MCPClient opening a new connection for every tool call instead of reusing the session.
|
||||
@@ -1 +0,0 @@
|
||||
- GoogleLLMService now applies a low-latency thinking default (`thinking_level="minimal"`) for Gemini 3+ Flash models.
|
||||
@@ -1 +0,0 @@
|
||||
- Added Inworld Realtime LLM service with WebSocket-based cascade STT/LLM/TTS, semantic VAD, function calling, and Router support.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ 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`.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ 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`.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ 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.
|
||||
@@ -1 +0,0 @@
|
||||
- `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.
|
||||
@@ -1 +0,0 @@
|
||||
- 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.
|
||||
@@ -1 +0,0 @@
|
||||
- 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.
|
||||
@@ -1 +0,0 @@
|
||||
- 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.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed deprecated `observers` field from `PipelineParams`. Pass observers directly to `PipelineTask` constructor instead.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed deprecated `on_pipeline_ended`, `on_pipeline_cancelled`, and `on_pipeline_stopped` events from `PipelineTask`. Use `on_pipeline_finished` instead.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed `AudioBufferProcessor.user_continuous_stream` parameter. Use `user_audio_passthrough` instead.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ 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.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed `RTVIObserver.errors_enabled` parameter.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed deprecated `vad_enabled` and `vad_audio_passthrough` transport params.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed `TTSService.say()`. Push a `TTSSpeakFrame` into the pipeline instead.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed `DailyRunner.configure_with_args()`. Use `PipelineRunner` with `RunnerArguments` instead.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ 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.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed `FrameProcessor.wait_for_task()`. Use `create_task()` and manage tasks with the built-in `TaskManager` instead.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed `KrispFilter`. The `krisp` extra has been removed from `pyproject.toml`.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed `LLMService.request_image_frame()`. Push a `UserImageRequestFrame` instead.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed `create_default_resampler()` from `pipecat.audio.utils`.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed `FalSmartTurnAnalyzer` and `LocalSmartTurnAnalyzer`.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed deprecated transport frames: `TransportMessageFrame`, `TransportMessageUrgentFrame`, `InputTransportMessageUrgentFrame`, `DailyTransportMessageFrame`, and `DailyTransportMessageUrgentFrame`. Use `OutputTransportMessageFrame`, `OutputTransportMessageUrgentFrame`, `InputTransportMessageFrame`, `DailyOutputTransportMessageFrame`, and `DailyOutputTransportMessageUrgentFrame` instead.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed deprecated `KeypadEntryFrame` alias.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed deprecated interruption frames: `StartInterruptionFrame` and `BotInterruptionFrame`. Use `InterruptionFrame` and `InterruptionTaskFrame` instead.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed `LLMService.start_callback` parameter. Register an `on_llm_response_start` event handler instead.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed single-argument function call support from `LLMService`. Functions must use named parameters instead of a single `arguments` parameter.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed `NoisereduceFilter`. Use system-level noise reduction or a service-based alternative instead.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed deprecated `pipecat.services.riva` package. Use `pipecat.services.nvidia.stt` and `pipecat.services.nvidia.tts` instead (`RivaSTTService` → `NvidiaSTTService`, `RivaTTSService` → `NvidiaTTSService`).
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed deprecated `pipecat.services.nim` package. Use `pipecat.services.nvidia.llm` instead (`NimLLMService` → `NvidiaLLMService`).
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ 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`).
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed deprecated `pipecat.services.aws_nova_sonic` package. Use `pipecat.services.aws.nova_sonic` instead.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed deprecated `pipecat.services.openai_realtime` package. Use `pipecat.services.openai.realtime` instead.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed deprecated `OpenAIRealtimeBetaLLMService` and `AzureRealtimeBetaLLMService`. Use `OpenAIRealtimeLLMService` and `AzureRealtimeLLMService` from `pipecat.services.openai.realtime` and `pipecat.services.azure.realtime` instead.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ 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.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed deprecated `GoogleLLMOpenAIBetaService` from `pipecat.services.google.openai`. Use `GoogleLLMService` from `pipecat.services.google.llm` instead.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed deprecated `pipecat.services.google.llm_vertex` module. Use `pipecat.services.google.vertex.llm` instead.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed deprecated `pipecat.services.google.gemini_live.llm_vertex` module. Use `pipecat.services.google.gemini_live.vertex.llm` instead.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ 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.
|
||||
@@ -1 +0,0 @@
|
||||
- Changed `GrokLLMService` default model from `grok-3-beta` to `grok-3`, now that the model is generally available.
|
||||
@@ -1 +0,0 @@
|
||||
- `GoogleImageGenService` now defaults to `imagen-4.0-generate-001` (previously `imagen-3.0-generate-002`).
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ `BaseOpenAILLMService.get_chat_completions()` now accepts an `LLMContext` instead of `OpenAILLMInvocationParams`. If you override this method, update your signature accordingly.
|
||||
@@ -1,22 +0,0 @@
|
||||
- ⚠️ 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)
|
||||
```
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ 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`.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed `GatedOpenAILLMContextAggregator` (from `pipecat.processors.aggregators.gated_open_ai_llm_context`). Use `GatedLLMContextAggregator` (from `pipecat.processors.aggregators.gated_llm_context`) instead.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ 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.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ 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`).
|
||||
@@ -1,18 +0,0 @@
|
||||
- ⚠️ 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)
|
||||
```
|
||||
@@ -1 +0,0 @@
|
||||
- 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.
|
||||
@@ -1 +0,0 @@
|
||||
- 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.
|
||||
@@ -1 +0,0 @@
|
||||
- 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.
|
||||
@@ -1 +0,0 @@
|
||||
- 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.
|
||||
@@ -1 +0,0 @@
|
||||
- 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.
|
||||
@@ -1 +0,0 @@
|
||||
- Added `enable_prompt_caching` setting to `AWSBedrockLLMService` for Bedrock ConverseStream prompt caching.
|
||||
@@ -1 +0,0 @@
|
||||
- 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.
|
||||
@@ -1,13 +0,0 @@
|
||||
- ⚠️ 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`)
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ `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.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed deprecated `pipecat.sync` package. Use `pipecat.utils.sync` instead.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ 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.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed deprecated `add_pattern_pair` method from `PatternPairAggregator`. Use `add_pattern` instead.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed deprecated `interruption_strategies` parameter from `PipelineParams`, `StartFrame`, and `FrameProcessor`. Use `LLMUserAggregator`'s `user_turn_strategies` parameter instead.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed deprecated `EmulateUserStartedSpeakingFrame` and `EmulateUserStoppedSpeakingFrame` frames, and the `emulated` field from `UserStartedSpeakingFrame` / `UserStoppedSpeakingFrame`.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed deprecated `pipecat.audio.interruptions` module (`BaseInterruptionStrategy`, `MinWordsInterruptionStrategy`). Use `pipecat.turns.user_start.MinWordsUserTurnStartStrategy` with `LLMUserAggregator`'s `user_turn_strategies` parameter instead.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed deprecated `pipecat.processors.transcript_processor` module (`TranscriptProcessor`, `TranscriptProcessorConfig`). Use pipeline observers instead.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed deprecated `TranscriptionMessage`, `ThoughtTranscriptionMessage`, and `TranscriptionUpdateFrame` from `pipecat.frames.frames`.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ 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.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed deprecated `UserResponseAggregator` class from `pipecat.processors.aggregators.user_response`. Use `LLMUserAggregator` instead.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed deprecated `pipecat.utils.tracing.class_decorators` module. Use `pipecat.utils.tracing.service_decorators` instead.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ 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.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed `ExternalUserTurnStrategies` and the automatic fallback to it in `LLMUserAggregator` when a `SpeechControlParamsFrame` was received from the transport.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ 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`.
|
||||
@@ -1 +0,0 @@
|
||||
- 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`.
|
||||
@@ -1 +0,0 @@
|
||||
- Fixed duplicate LLM replies that could occur when multiple async function call results arrived while an LLM request was already queued.
|
||||
@@ -1,3 +0,0 @@
|
||||
- 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.
|
||||
@@ -1 +0,0 @@
|
||||
- Fixed undefined `_warn_deprecated_param` calls in `OpenAIRealtimeLLMService` and `GrokRealtimeLLMService` for the deprecated `session_properties` init parameter.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed deprecated `UserIdleProcessor` (deprecated in 0.0.100). Use `LLMUserAggregator` with the `user_idle_timeout` parameter instead.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed deprecated `TranscriptionUserTurnStopStrategy` alias (deprecated in 0.0.102). Use `SpeechTimeoutUserTurnStopStrategy` instead.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed deprecated `send_transcription_frames` parameter from `OpenAIRealtimeLLMService` (deprecated in 0.0.92). Transcription frames are always sent.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed deprecated `vad_events` setting and `should_interrupt` parameter from `DeepgramSTTService` (deprecated in 0.0.99). Use Silero VAD for voice activity detection instead.
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed deprecated `UserBotLatencyLogObserver` (deprecated in 0.0.102). Use `UserBotLatencyObserver` with its `on_latency_measured` event handler instead.
|
||||
@@ -1 +0,0 @@
|
||||
- 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()`.
|
||||
@@ -1 +0,0 @@
|
||||
- Removed the empty `remote-smart-turn` install extra (was already a no-op).
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ Removed the `riva` install extra. Use `nvidia` instead (`pip install "pipecat-ai[nvidia]"`).
|
||||
@@ -1 +0,0 @@
|
||||
- ⚠️ 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.
|
||||
@@ -1 +0,0 @@
|
||||
- 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.
|
||||
@@ -1 +0,0 @@
|
||||
- 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.
|
||||
@@ -1 +0,0 @@
|
||||
- `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.
|
||||
@@ -1,6 +0,0 @@
|
||||
- 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`).
|
||||
@@ -1,8 +0,0 @@
|
||||
- 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.
|
||||
@@ -1 +0,0 @@
|
||||
- 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]`).
|
||||
@@ -1 +0,0 @@
|
||||
- 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.
|
||||
@@ -1 +0,0 @@
|
||||
- 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.
|
||||
@@ -1 +0,0 @@
|
||||
- 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.
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user