diff --git a/CHANGELOG.md b/CHANGELOG.md index 30acbdbd6..7fb1006b0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,684 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 +## [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 diff --git a/changelog/3796.fixed.md b/changelog/3796.fixed.md deleted file mode 100644 index 8acc3f3b9..000000000 --- a/changelog/3796.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- Fixed `IdleFrameProcessor` where `asyncio.Event` was unconditionally cleared in a `finally` block instead of only on the success path. diff --git a/changelog/3984.changed.md b/changelog/3984.changed.md deleted file mode 100644 index ca9a998a3..000000000 --- a/changelog/3984.changed.md +++ /dev/null @@ -1 +0,0 @@ -- Updated `onnxruntime` from 1.23.2 to 1.24.3, adding support for Python 3.14. diff --git a/changelog/3995.added.md b/changelog/3995.added.md deleted file mode 100644 index f0fa6f240..000000000 --- a/changelog/3995.added.md +++ /dev/null @@ -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 diff --git a/changelog/4034.changed.md b/changelog/4034.changed.md deleted file mode 100644 index 4b4637ffe..000000000 --- a/changelog/4034.changed.md +++ /dev/null @@ -1 +0,0 @@ -- MCPClient now requires async with MCPClient(...) as mcp: or explicit start()/close() calls to manage the connection lifecycle. diff --git a/changelog/4034.fixed.md b/changelog/4034.fixed.md deleted file mode 100644 index 18d000d07..000000000 --- a/changelog/4034.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- Fixed MCPClient opening a new connection for every tool call instead of reusing the session. diff --git a/changelog/4067.fixed.md b/changelog/4067.fixed.md deleted file mode 100644 index b913b90d1..000000000 --- a/changelog/4067.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- GoogleLLMService now applies a low-latency thinking default (`thinking_level="minimal"`) for Gemini 3+ Flash models. diff --git a/changelog/4140.added.md b/changelog/4140.added.md deleted file mode 100644 index dc5a2201c..000000000 --- a/changelog/4140.added.md +++ /dev/null @@ -1 +0,0 @@ -- Added Inworld Realtime LLM service with WebSocket-based cascade STT/LLM/TTS, semantic VAD, function calling, and Router support. diff --git a/changelog/4141.added.md b/changelog/4141.added.md deleted file mode 100644 index a2e65e4c4..000000000 --- a/changelog/4141.added.md +++ /dev/null @@ -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`. diff --git a/changelog/4191.removed.md b/changelog/4191.removed.md deleted file mode 100644 index d58fc3886..000000000 --- a/changelog/4191.removed.md +++ /dev/null @@ -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`. diff --git a/changelog/4192.changed.md b/changelog/4192.changed.md deleted file mode 100644 index e50ae9bd4..000000000 --- a/changelog/4192.changed.md +++ /dev/null @@ -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. diff --git a/changelog/4201.changed.md b/changelog/4201.changed.md deleted file mode 100644 index 4143e9c66..000000000 --- a/changelog/4201.changed.md +++ /dev/null @@ -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. diff --git a/changelog/4201.fixed.md b/changelog/4201.fixed.md deleted file mode 100644 index fb44f7344..000000000 --- a/changelog/4201.fixed.md +++ /dev/null @@ -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. diff --git a/changelog/4202.fixed.md b/changelog/4202.fixed.md deleted file mode 100644 index 7540f453f..000000000 --- a/changelog/4202.fixed.md +++ /dev/null @@ -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. diff --git a/changelog/4203.fixed.md b/changelog/4203.fixed.md deleted file mode 100644 index 170b559bd..000000000 --- a/changelog/4203.fixed.md +++ /dev/null @@ -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. diff --git a/changelog/4204.removed.10.md b/changelog/4204.removed.10.md deleted file mode 100644 index a75617e4a..000000000 --- a/changelog/4204.removed.10.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed deprecated `observers` field from `PipelineParams`. Pass observers directly to `PipelineTask` constructor instead. diff --git a/changelog/4204.removed.11.md b/changelog/4204.removed.11.md deleted file mode 100644 index d54a8ce51..000000000 --- a/changelog/4204.removed.11.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed deprecated `on_pipeline_ended`, `on_pipeline_cancelled`, and `on_pipeline_stopped` events from `PipelineTask`. Use `on_pipeline_finished` instead. diff --git a/changelog/4204.removed.12.md b/changelog/4204.removed.12.md deleted file mode 100644 index d238d0820..000000000 --- a/changelog/4204.removed.12.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed `AudioBufferProcessor.user_continuous_stream` parameter. Use `user_audio_passthrough` instead. diff --git a/changelog/4204.removed.13.md b/changelog/4204.removed.13.md deleted file mode 100644 index 6fe408fba..000000000 --- a/changelog/4204.removed.13.md +++ /dev/null @@ -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. diff --git a/changelog/4204.removed.14.md b/changelog/4204.removed.14.md deleted file mode 100644 index e69561e30..000000000 --- a/changelog/4204.removed.14.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed `RTVIObserver.errors_enabled` parameter. diff --git a/changelog/4204.removed.15.md b/changelog/4204.removed.15.md deleted file mode 100644 index 1eaf96471..000000000 --- a/changelog/4204.removed.15.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed deprecated `vad_enabled` and `vad_audio_passthrough` transport params. diff --git a/changelog/4204.removed.16.md b/changelog/4204.removed.16.md deleted file mode 100644 index 05668ad6d..000000000 --- a/changelog/4204.removed.16.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed `TTSService.say()`. Push a `TTSSpeakFrame` into the pipeline instead. diff --git a/changelog/4204.removed.17.md b/changelog/4204.removed.17.md deleted file mode 100644 index 4edafe2db..000000000 --- a/changelog/4204.removed.17.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed `DailyRunner.configure_with_args()`. Use `PipelineRunner` with `RunnerArguments` instead. diff --git a/changelog/4204.removed.18.md b/changelog/4204.removed.18.md deleted file mode 100644 index d347cebc8..000000000 --- a/changelog/4204.removed.18.md +++ /dev/null @@ -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. diff --git a/changelog/4204.removed.19.md b/changelog/4204.removed.19.md deleted file mode 100644 index 336bdb769..000000000 --- a/changelog/4204.removed.19.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed `FrameProcessor.wait_for_task()`. Use `create_task()` and manage tasks with the built-in `TaskManager` instead. diff --git a/changelog/4204.removed.2.md b/changelog/4204.removed.2.md deleted file mode 100644 index 615bcd4ea..000000000 --- a/changelog/4204.removed.2.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed `KrispFilter`. The `krisp` extra has been removed from `pyproject.toml`. diff --git a/changelog/4204.removed.20.md b/changelog/4204.removed.20.md deleted file mode 100644 index 9f9f8921e..000000000 --- a/changelog/4204.removed.20.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed `LLMService.request_image_frame()`. Push a `UserImageRequestFrame` instead. diff --git a/changelog/4204.removed.3.md b/changelog/4204.removed.3.md deleted file mode 100644 index c0f78f7b4..000000000 --- a/changelog/4204.removed.3.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed `create_default_resampler()` from `pipecat.audio.utils`. diff --git a/changelog/4204.removed.4.md b/changelog/4204.removed.4.md deleted file mode 100644 index a0cc5745d..000000000 --- a/changelog/4204.removed.4.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed `FalSmartTurnAnalyzer` and `LocalSmartTurnAnalyzer`. diff --git a/changelog/4204.removed.5.md b/changelog/4204.removed.5.md deleted file mode 100644 index cbf163d76..000000000 --- a/changelog/4204.removed.5.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed deprecated transport frames: `TransportMessageFrame`, `TransportMessageUrgentFrame`, `InputTransportMessageUrgentFrame`, `DailyTransportMessageFrame`, and `DailyTransportMessageUrgentFrame`. Use `OutputTransportMessageFrame`, `OutputTransportMessageUrgentFrame`, `InputTransportMessageFrame`, `DailyOutputTransportMessageFrame`, and `DailyOutputTransportMessageUrgentFrame` instead. diff --git a/changelog/4204.removed.6.md b/changelog/4204.removed.6.md deleted file mode 100644 index baf59d50b..000000000 --- a/changelog/4204.removed.6.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed deprecated `KeypadEntryFrame` alias. diff --git a/changelog/4204.removed.7.md b/changelog/4204.removed.7.md deleted file mode 100644 index cae8d29e7..000000000 --- a/changelog/4204.removed.7.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed deprecated interruption frames: `StartInterruptionFrame` and `BotInterruptionFrame`. Use `InterruptionFrame` and `InterruptionTaskFrame` instead. diff --git a/changelog/4204.removed.8.md b/changelog/4204.removed.8.md deleted file mode 100644 index 581b5d089..000000000 --- a/changelog/4204.removed.8.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed `LLMService.start_callback` parameter. Register an `on_llm_response_start` event handler instead. diff --git a/changelog/4204.removed.9.md b/changelog/4204.removed.9.md deleted file mode 100644 index 0ad26ab3f..000000000 --- a/changelog/4204.removed.9.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed single-argument function call support from `LLMService`. Functions must use named parameters instead of a single `arguments` parameter. diff --git a/changelog/4204.removed.md b/changelog/4204.removed.md deleted file mode 100644 index aa6928bf7..000000000 --- a/changelog/4204.removed.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed `NoisereduceFilter`. Use system-level noise reduction or a service-based alternative instead. diff --git a/changelog/4208.removed.10.md b/changelog/4208.removed.10.md deleted file mode 100644 index 62aa13468..000000000 --- a/changelog/4208.removed.10.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed deprecated `pipecat.services.riva` package. Use `pipecat.services.nvidia.stt` and `pipecat.services.nvidia.tts` instead (`RivaSTTService` → `NvidiaSTTService`, `RivaTTSService` → `NvidiaTTSService`). diff --git a/changelog/4208.removed.11.md b/changelog/4208.removed.11.md deleted file mode 100644 index 264eac200..000000000 --- a/changelog/4208.removed.11.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed deprecated `pipecat.services.nim` package. Use `pipecat.services.nvidia.llm` instead (`NimLLMService` → `NvidiaLLMService`). diff --git a/changelog/4208.removed.2.md b/changelog/4208.removed.2.md deleted file mode 100644 index 495e1091d..000000000 --- a/changelog/4208.removed.2.md +++ /dev/null @@ -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`). diff --git a/changelog/4208.removed.3.md b/changelog/4208.removed.3.md deleted file mode 100644 index 694cd08da..000000000 --- a/changelog/4208.removed.3.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed deprecated `pipecat.services.aws_nova_sonic` package. Use `pipecat.services.aws.nova_sonic` instead. diff --git a/changelog/4208.removed.4.md b/changelog/4208.removed.4.md deleted file mode 100644 index bae411d95..000000000 --- a/changelog/4208.removed.4.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed deprecated `pipecat.services.openai_realtime` package. Use `pipecat.services.openai.realtime` instead. diff --git a/changelog/4208.removed.5.md b/changelog/4208.removed.5.md deleted file mode 100644 index 2f7ab0399..000000000 --- a/changelog/4208.removed.5.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed deprecated `OpenAIRealtimeBetaLLMService` and `AzureRealtimeBetaLLMService`. Use `OpenAIRealtimeLLMService` and `AzureRealtimeLLMService` from `pipecat.services.openai.realtime` and `pipecat.services.azure.realtime` instead. diff --git a/changelog/4208.removed.6.md b/changelog/4208.removed.6.md deleted file mode 100644 index 92ff7ce0c..000000000 --- a/changelog/4208.removed.6.md +++ /dev/null @@ -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. diff --git a/changelog/4208.removed.7.md b/changelog/4208.removed.7.md deleted file mode 100644 index 9906d981c..000000000 --- a/changelog/4208.removed.7.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed deprecated `GoogleLLMOpenAIBetaService` from `pipecat.services.google.openai`. Use `GoogleLLMService` from `pipecat.services.google.llm` instead. diff --git a/changelog/4208.removed.8.md b/changelog/4208.removed.8.md deleted file mode 100644 index 92255f110..000000000 --- a/changelog/4208.removed.8.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed deprecated `pipecat.services.google.llm_vertex` module. Use `pipecat.services.google.vertex.llm` instead. diff --git a/changelog/4208.removed.9.md b/changelog/4208.removed.9.md deleted file mode 100644 index c76fa8e90..000000000 --- a/changelog/4208.removed.9.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed deprecated `pipecat.services.google.gemini_live.llm_vertex` module. Use `pipecat.services.google.gemini_live.vertex.llm` instead. diff --git a/changelog/4208.removed.md b/changelog/4208.removed.md deleted file mode 100644 index 8f8e09988..000000000 --- a/changelog/4208.removed.md +++ /dev/null @@ -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. diff --git a/changelog/4209.changed.md b/changelog/4209.changed.md deleted file mode 100644 index a7bd53ca3..000000000 --- a/changelog/4209.changed.md +++ /dev/null @@ -1 +0,0 @@ -- Changed `GrokLLMService` default model from `grok-3-beta` to `grok-3`, now that the model is generally available. diff --git a/changelog/4213.changed.md b/changelog/4213.changed.md deleted file mode 100644 index 5d9fe0842..000000000 --- a/changelog/4213.changed.md +++ /dev/null @@ -1 +0,0 @@ -- `GoogleImageGenService` now defaults to `imagen-4.0-generate-001` (previously `imagen-3.0-generate-002`). diff --git a/changelog/4215.changed.md b/changelog/4215.changed.md deleted file mode 100644 index b84a343dd..000000000 --- a/changelog/4215.changed.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ `BaseOpenAILLMService.get_chat_completions()` now accepts an `LLMContext` instead of `OpenAILLMInvocationParams`. If you override this method, update your signature accordingly. diff --git a/changelog/4215.removed.2.md b/changelog/4215.removed.2.md deleted file mode 100644 index 4d5f6c630..000000000 --- a/changelog/4215.removed.2.md +++ /dev/null @@ -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) - ``` diff --git a/changelog/4215.removed.3.md b/changelog/4215.removed.3.md deleted file mode 100644 index 4ef02fa89..000000000 --- a/changelog/4215.removed.3.md +++ /dev/null @@ -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`. diff --git a/changelog/4215.removed.4.md b/changelog/4215.removed.4.md deleted file mode 100644 index 20bde1ce9..000000000 --- a/changelog/4215.removed.4.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed `GatedOpenAILLMContextAggregator` (from `pipecat.processors.aggregators.gated_open_ai_llm_context`). Use `GatedLLMContextAggregator` (from `pipecat.processors.aggregators.gated_llm_context`) instead. diff --git a/changelog/4215.removed.5.md b/changelog/4215.removed.5.md deleted file mode 100644 index cbd84018d..000000000 --- a/changelog/4215.removed.5.md +++ /dev/null @@ -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. diff --git a/changelog/4215.removed.6.md b/changelog/4215.removed.6.md deleted file mode 100644 index 28062359a..000000000 --- a/changelog/4215.removed.6.md +++ /dev/null @@ -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`). diff --git a/changelog/4215.removed.md b/changelog/4215.removed.md deleted file mode 100644 index 96cb03c71..000000000 --- a/changelog/4215.removed.md +++ /dev/null @@ -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) - ``` diff --git a/changelog/4217.added.2.md b/changelog/4217.added.2.md deleted file mode 100644 index 9621d43c0..000000000 --- a/changelog/4217.added.2.md +++ /dev/null @@ -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. diff --git a/changelog/4217.added.md b/changelog/4217.added.md deleted file mode 100644 index a14d1eb9e..000000000 --- a/changelog/4217.added.md +++ /dev/null @@ -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. diff --git a/changelog/4217.changed.md b/changelog/4217.changed.md deleted file mode 100644 index b53cd8317..000000000 --- a/changelog/4217.changed.md +++ /dev/null @@ -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. diff --git a/changelog/4217.fixed.2.md b/changelog/4217.fixed.2.md deleted file mode 100644 index af7bff8fa..000000000 --- a/changelog/4217.fixed.2.md +++ /dev/null @@ -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. diff --git a/changelog/4217.fixed.md b/changelog/4217.fixed.md deleted file mode 100644 index 234effdc0..000000000 --- a/changelog/4217.fixed.md +++ /dev/null @@ -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. diff --git a/changelog/4219.added.md b/changelog/4219.added.md deleted file mode 100644 index ddf4bc0fa..000000000 --- a/changelog/4219.added.md +++ /dev/null @@ -1 +0,0 @@ -- Added `enable_prompt_caching` setting to `AWSBedrockLLMService` for Bedrock ConverseStream prompt caching. diff --git a/changelog/4220.fixed.md b/changelog/4220.fixed.md deleted file mode 100644 index c5393f0db..000000000 --- a/changelog/4220.fixed.md +++ /dev/null @@ -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. diff --git a/changelog/4220.removed.md b/changelog/4220.removed.md deleted file mode 100644 index ba3177869..000000000 --- a/changelog/4220.removed.md +++ /dev/null @@ -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`) diff --git a/changelog/4224.changed.md b/changelog/4224.changed.md deleted file mode 100644 index 256204a24..000000000 --- a/changelog/4224.changed.md +++ /dev/null @@ -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. diff --git a/changelog/4225.removed.2.md b/changelog/4225.removed.2.md deleted file mode 100644 index dc38f652d..000000000 --- a/changelog/4225.removed.2.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed deprecated `pipecat.sync` package. Use `pipecat.utils.sync` instead. diff --git a/changelog/4225.removed.md b/changelog/4225.removed.md deleted file mode 100644 index e27dc6b4a..000000000 --- a/changelog/4225.removed.md +++ /dev/null @@ -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. diff --git a/changelog/4228.removed.10.md b/changelog/4228.removed.10.md deleted file mode 100644 index 259275b49..000000000 --- a/changelog/4228.removed.10.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed deprecated `add_pattern_pair` method from `PatternPairAggregator`. Use `add_pattern` instead. diff --git a/changelog/4228.removed.2.md b/changelog/4228.removed.2.md deleted file mode 100644 index c662fc08d..000000000 --- a/changelog/4228.removed.2.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed deprecated `interruption_strategies` parameter from `PipelineParams`, `StartFrame`, and `FrameProcessor`. Use `LLMUserAggregator`'s `user_turn_strategies` parameter instead. diff --git a/changelog/4228.removed.3.md b/changelog/4228.removed.3.md deleted file mode 100644 index 7dfd35a1d..000000000 --- a/changelog/4228.removed.3.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed deprecated `EmulateUserStartedSpeakingFrame` and `EmulateUserStoppedSpeakingFrame` frames, and the `emulated` field from `UserStartedSpeakingFrame` / `UserStoppedSpeakingFrame`. diff --git a/changelog/4228.removed.4.md b/changelog/4228.removed.4.md deleted file mode 100644 index 7a376b817..000000000 --- a/changelog/4228.removed.4.md +++ /dev/null @@ -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. diff --git a/changelog/4228.removed.5.md b/changelog/4228.removed.5.md deleted file mode 100644 index cb94d7151..000000000 --- a/changelog/4228.removed.5.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed deprecated `pipecat.processors.transcript_processor` module (`TranscriptProcessor`, `TranscriptProcessorConfig`). Use pipeline observers instead. diff --git a/changelog/4228.removed.6.md b/changelog/4228.removed.6.md deleted file mode 100644 index 2879461d9..000000000 --- a/changelog/4228.removed.6.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed deprecated `TranscriptionMessage`, `ThoughtTranscriptionMessage`, and `TranscriptionUpdateFrame` from `pipecat.frames.frames`. diff --git a/changelog/4228.removed.7.md b/changelog/4228.removed.7.md deleted file mode 100644 index 1e51a9316..000000000 --- a/changelog/4228.removed.7.md +++ /dev/null @@ -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. diff --git a/changelog/4228.removed.8.md b/changelog/4228.removed.8.md deleted file mode 100644 index 926a827a9..000000000 --- a/changelog/4228.removed.8.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed deprecated `UserResponseAggregator` class from `pipecat.processors.aggregators.user_response`. Use `LLMUserAggregator` instead. diff --git a/changelog/4228.removed.9.md b/changelog/4228.removed.9.md deleted file mode 100644 index 5a6aa32ad..000000000 --- a/changelog/4228.removed.9.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed deprecated `pipecat.utils.tracing.class_decorators` module. Use `pipecat.utils.tracing.service_decorators` instead. diff --git a/changelog/4228.removed.md b/changelog/4228.removed.md deleted file mode 100644 index 176ed6b63..000000000 --- a/changelog/4228.removed.md +++ /dev/null @@ -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. diff --git a/changelog/4229.removed.2.md b/changelog/4229.removed.2.md deleted file mode 100644 index e7c7124fa..000000000 --- a/changelog/4229.removed.2.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed `ExternalUserTurnStrategies` and the automatic fallback to it in `LLMUserAggregator` when a `SpeechControlParamsFrame` was received from the transport. diff --git a/changelog/4229.removed.md b/changelog/4229.removed.md deleted file mode 100644 index 0da18075e..000000000 --- a/changelog/4229.removed.md +++ /dev/null @@ -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`. diff --git a/changelog/4230.added.md b/changelog/4230.added.md deleted file mode 100644 index 0d7d1f124..000000000 --- a/changelog/4230.added.md +++ /dev/null @@ -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`. diff --git a/changelog/4230.fixed.md b/changelog/4230.fixed.md deleted file mode 100644 index 3fc505224..000000000 --- a/changelog/4230.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- Fixed duplicate LLM replies that could occur when multiple async function call results arrived while an LLM request was already queued. diff --git a/changelog/4231.added.md b/changelog/4231.added.md deleted file mode 100644 index 1b47e1b78..000000000 --- a/changelog/4231.added.md +++ /dev/null @@ -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. diff --git a/changelog/4232.fixed.md b/changelog/4232.fixed.md deleted file mode 100644 index 1231ef075..000000000 --- a/changelog/4232.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- Fixed undefined `_warn_deprecated_param` calls in `OpenAIRealtimeLLMService` and `GrokRealtimeLLMService` for the deprecated `session_properties` init parameter. diff --git a/changelog/4232.removed.2.md b/changelog/4232.removed.2.md deleted file mode 100644 index c4b3cf803..000000000 --- a/changelog/4232.removed.2.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed deprecated `UserIdleProcessor` (deprecated in 0.0.100). Use `LLMUserAggregator` with the `user_idle_timeout` parameter instead. diff --git a/changelog/4232.removed.3.md b/changelog/4232.removed.3.md deleted file mode 100644 index 2687e3e6a..000000000 --- a/changelog/4232.removed.3.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed deprecated `TranscriptionUserTurnStopStrategy` alias (deprecated in 0.0.102). Use `SpeechTimeoutUserTurnStopStrategy` instead. diff --git a/changelog/4232.removed.4.md b/changelog/4232.removed.4.md deleted file mode 100644 index 918a4d801..000000000 --- a/changelog/4232.removed.4.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed deprecated `send_transcription_frames` parameter from `OpenAIRealtimeLLMService` (deprecated in 0.0.92). Transcription frames are always sent. diff --git a/changelog/4232.removed.5.md b/changelog/4232.removed.5.md deleted file mode 100644 index 965186e46..000000000 --- a/changelog/4232.removed.5.md +++ /dev/null @@ -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. diff --git a/changelog/4232.removed.md b/changelog/4232.removed.md deleted file mode 100644 index fd7bc6753..000000000 --- a/changelog/4232.removed.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed deprecated `UserBotLatencyLogObserver` (deprecated in 0.0.102). Use `UserBotLatencyObserver` with its `on_latency_measured` event handler instead. diff --git a/changelog/4234.added.md b/changelog/4234.added.md deleted file mode 100644 index ab178c4d6..000000000 --- a/changelog/4234.added.md +++ /dev/null @@ -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()`. diff --git a/changelog/4235.removed.2.md b/changelog/4235.removed.2.md deleted file mode 100644 index 4f8f3514e..000000000 --- a/changelog/4235.removed.2.md +++ /dev/null @@ -1 +0,0 @@ -- Removed the empty `remote-smart-turn` install extra (was already a no-op). diff --git a/changelog/4235.removed.md b/changelog/4235.removed.md deleted file mode 100644 index ed0cc2f40..000000000 --- a/changelog/4235.removed.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed the `riva` install extra. Use `nvidia` instead (`pip install "pipecat-ai[nvidia]"`). diff --git a/changelog/4239.removed.md b/changelog/4239.removed.md deleted file mode 100644 index c6ba908f2..000000000 --- a/changelog/4239.removed.md +++ /dev/null @@ -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. diff --git a/changelog/4242.fixed.md b/changelog/4242.fixed.md deleted file mode 100644 index e987773df..000000000 --- a/changelog/4242.fixed.md +++ /dev/null @@ -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. diff --git a/changelog/4244.fixed.md b/changelog/4244.fixed.md deleted file mode 100644 index 271e39c37..000000000 --- a/changelog/4244.fixed.md +++ /dev/null @@ -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. diff --git a/changelog/4248.added.md b/changelog/4248.added.md deleted file mode 100644 index b48a6a432..000000000 --- a/changelog/4248.added.md +++ /dev/null @@ -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. diff --git a/changelog/4249.added.md b/changelog/4249.added.md deleted file mode 100644 index bc2ae6e74..000000000 --- a/changelog/4249.added.md +++ /dev/null @@ -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`). \ No newline at end of file diff --git a/changelog/4249.changed.md b/changelog/4249.changed.md deleted file mode 100644 index e5bd207b0..000000000 --- a/changelog/4249.changed.md +++ /dev/null @@ -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. \ No newline at end of file diff --git a/changelog/4251.added.md b/changelog/4251.added.md deleted file mode 100644 index cb54078ac..000000000 --- a/changelog/4251.added.md +++ /dev/null @@ -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]`). diff --git a/changelog/4255.fixed.md b/changelog/4255.fixed.md deleted file mode 100644 index 2714a16b1..000000000 --- a/changelog/4255.fixed.md +++ /dev/null @@ -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. diff --git a/changelog/4265.fixed.md b/changelog/4265.fixed.md deleted file mode 100644 index 19f7db78c..000000000 --- a/changelog/4265.fixed.md +++ /dev/null @@ -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. diff --git a/changelog/4267.fixed.md b/changelog/4267.fixed.md deleted file mode 100644 index 5f495bc73..000000000 --- a/changelog/4267.fixed.md +++ /dev/null @@ -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. diff --git a/changelog/4267.removed.md b/changelog/4267.removed.md deleted file mode 100644 index bf1e1cb82..000000000 --- a/changelog/4267.removed.md +++ /dev/null @@ -1 +0,0 @@ -- ⚠️ Removed deprecated `PIPECAT_OBSERVER_FILES` environment variable support. Use `PIPECAT_SETUP_FILES` instead. diff --git a/changelog/4272.added.md b/changelog/4272.added.md deleted file mode 100644 index 69bfcf8bb..000000000 --- a/changelog/4272.added.md +++ /dev/null @@ -1 +0,0 @@ -- 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. diff --git a/changelog/4282.added.md b/changelog/4282.added.md deleted file mode 100644 index a3e31dd57..000000000 --- a/changelog/4282.added.md +++ /dev/null @@ -1 +0,0 @@ -- `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. diff --git a/changelog/4283.fixed.md b/changelog/4283.fixed.md deleted file mode 100644 index c9ff906cc..000000000 --- a/changelog/4283.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- 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. diff --git a/changelog/4293.added.2.md b/changelog/4293.added.2.md deleted file mode 100644 index bbb9892b4..000000000 --- a/changelog/4293.added.2.md +++ /dev/null @@ -1 +0,0 @@ -- Added `pcm_32000` and `pcm_48000` sample rate support to ElevenLabs TTS services. diff --git a/changelog/4293.added.md b/changelog/4293.added.md deleted file mode 100644 index f977a4a0c..000000000 --- a/changelog/4293.added.md +++ /dev/null @@ -1 +0,0 @@ -- Added `enable_logging` parameter to `ElevenLabsHttpTTSService`. Set to `False` to enable zero retention mode (enterprise only). diff --git a/changelog/4293.fixed.md b/changelog/4293.fixed.md deleted file mode 100644 index 294ebd0ea..000000000 --- a/changelog/4293.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- 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. diff --git a/changelog/4294.fixed.md b/changelog/4294.fixed.md deleted file mode 100644 index 73bf66e00..000000000 --- a/changelog/4294.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- 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. diff --git a/changelog/4295.fixed.md b/changelog/4295.fixed.md deleted file mode 100644 index aca68a071..000000000 --- a/changelog/4295.fixed.md +++ /dev/null @@ -1 +0,0 @@ -- 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.