Skip to main content
Pipecat 1.0 removes many deprecated APIs from the 0.0.x series. If you were already using the non-deprecated replacements, most of these changes won’t affect you. Before upgrading, search your codebase for the deprecated imports and patterns listed below to identify what needs to change.
Pipecat 1.0 requires Python 3.11 or later. Support for Python 3.10 has been dropped. Python 3.11 through 3.14 are supported.

1. Universal LLMContext

LLMContext is a universal context that works with all LLM providers. It allows you to dynamically switch LLMService at runtime, passing a compatible context between services. Pipecat maintains adapters for each LLM service, which are applied automatically at the time of inference. Use the standard messages format along with FunctionSchema and ToolsSchema to define tools in a provider-agnostic way.

Before (1.0)

from pipecat.services.openai.llm import OpenAILLMService
from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext

# Service-specific context
context = OpenAILLMContext(messages, tools)

# Service-specific aggregator factory
context_aggregator = llm.create_context_aggregator(context)

pipeline = Pipeline([
    transport.input(),
    stt,
    context_aggregator.user(),
    llm,
    tts,
    transport.output(),
    context_aggregator.assistant(),
])

After (1.0)

from pipecat.services.openai.llm import OpenAILLMService
from pipecat.processors.aggregators.llm_context import LLMContext
from pipecat.processors.aggregators.llm_response_universal import LLMContextAggregatorPair
from pipecat.adapters.schemas.function_schema import FunctionSchema
from pipecat.adapters.schemas.tools_schema import ToolsSchema

# Universal context — works with any LLM provider
tools = ToolsSchema(standard_tools=[
    FunctionSchema(
        name="get_weather",
        description="Get current weather",
        properties={"location": {"type": "string", "description": "City name"}},
        required=["location"],
    )
])
context = LLMContext(messages=messages, tools=tools)

# Universal aggregator
user_aggregator, assistant_aggregator = LLMContextAggregatorPair(context)

pipeline = Pipeline([
    transport.input(),
    stt,
    user_aggregator,
    llm,
    tts,
    transport.output(),
    assistant_aggregator,
])

What was removed

RemovedReplacement
OpenAILLMContextLLMContext
OpenAILLMContextFrameLLMContextFrame
AnthropicLLMContextLLMContext
AWSBedrockLLMContextLLMContext
GatedOpenAILLMContextAggregatorGatedLLMContextAggregator
llm.create_context_aggregator(context)LLMContextAggregatorPair(context)
VisionImageFrameLLMContext.add_image_frame_message()

2. Turn Management

Turn management was unified into the user context aggregator configuration. Strategies for interruptions, muting, and idle detection are now configured via LLMUserAggregatorParams.

Before (1.0)

from pipecat.pipeline.pipeline import Pipeline
from pipecat.pipeline.task import PipelineParams, PipelineTask
from pipecat.processors.user_idle_processor import UserIdleProcessor

# Interruptions configured on the pipeline task
task = PipelineTask(
    pipeline,
    params=PipelineParams(allow_interruptions=True),
)

# Separate idle processor
idle = UserIdleProcessor(timeout=5.0, callback=handle_idle)

# STTMuteFilter
stt_mute_filter = STTMuteFilter(
    config=STTMuteConfig(strategies={STTMuteStrategy.FIRST_SPEECH})
)

pipeline = Pipeline([
    transport.input(),
    stt,
    stt_mute_filter,
    idle,
    context_aggregator.user(),
    llm,
    tts,
    transport.output(),
    context_aggregator.assistant(),
])

After (1.0)

from pipecat.processors.aggregators.llm_response_universal import (
    LLMContextAggregatorPair,
    LLMUserAggregatorParams,
)
from pipecat.audio.vad.silero import SileroVADAnalyzer
from pipecat.turns.user_turn_strategies import UserTurnStrategies

# Everything configured on the aggregator
user_aggregator, assistant_aggregator = LLMContextAggregatorPair(
    context,
    user_params=LLMUserAggregatorParams(
        user_turn_strategies=[
            UserTurnStrategies(
                start=[
                    # Start strategies
                ],
                stop=[
                    # Stop strategies
                ],
            ),
        ],
        user_mute_strategies=[
            # Mute strategies
        ],
        user_turn_stop_timeout=5.0,
        user_idle_timeout=8.0,
        vad_analyzer=SileroVADAnalyzer(),
    ),
)

What was removed

RemovedReplacement
PipelineParams.allow_interruptionsuser_turn_strategies on LLMUserAggregatorParams
PipelineParams.interruption_strategiesuser_turn_strategies on LLMUserAggregatorParams
UserResponseAggregatorLLMUserAggregator (created via LLMContextAggregatorPair)
UserIdleProcessoruser_idle_timeout on LLMUserAggregatorParams
STTMuteFilteruser_mute_strategies on LLMUserAggregatorParams
MinWordsInterruptionStrategyMinWordsUserTurnStartStrategy
TranscriptionUserTurnStopStrategySpeechTimeoutUserTurnStopStrategy

3. VAD & Turn Analyzer Configuration

VAD and turn detection configuration moved from transport params to the user aggregator. Additionally, the VADParams default stops_secs changed from 0.8 to 0.2. This ensures that STT services create transcripts with optimal latency and sufficient silence padding. The UserTurnStrategies (stop) now control how long to wait before the user’s turn has stopped:
  • SpeechTimeoutUserTurnStopStrategy has a user_speech_timeout parameter that you can configure to control how long to wait before the user’s turn has stopped.
  • TurnAnalyzerUserTurnStopStrategy uses the smart-turn model to dynamically modify the wait time. No configuration is required.

Before (1.0)

from pipecat.transports.services.daily import DailyParams, DailyTransport
from pipecat.audio.vad.silero import SileroVADAnalyzer
from pipecat.audio.vad.vad_analyzer import VADParams

transport = DailyTransport(
    room_url,
    token,
    "Bot",
    DailyParams(
        vad_enabled=True,
        vad_audio_passthrough=True,
        vad_analyzer=SileroVADAnalyzer(params=VADParams(stop_secs=0.2)),
        turn_analyzer=LocalSmartTurnAnalyzerV3(params=SmartTurnParams()),
    ),
)

After (1.0)

By default, the TurnAnalyzerUserTurnStopStrategy stop strategy is used, which includes the LocalSmartTurnAnalyzerV3 turn analyzer.
from pipecat.transports.daily.transport import DailyTransport, DailyParams
from pipecat.audio.vad.silero import SileroVADAnalyzer

transport = DailyTransport(
    room_url,
    token,
    "Bot",
    DailyParams(
        audio_in_enabled=True,
        audio_out_enabled=True,
    ),
)

# VAD is now configured on the aggregator
user_aggregator, assistant_aggregator = LLMContextAggregatorPair(
    context,
    user_params=LLMUserAggregatorParams(
        vad_analyzer=SileroVADAnalyzer(),
    ),
)

What was removed

RemovedReplacement
TransportParams.vad_analyzerLLMUserAggregatorParams.vad_analyzer
TransportParams.vad_enabledRemoved (VAD is active when analyzer is set)
TransportParams.vad_audio_passthroughRemoved
TransportParams.turn_analyzerUserTurnStrategies(stop=[TurnAnalyzerUserTurnStopStrategy()]) (now the default)
VADParams.stop_secs default (0.8)Now defaults to 0.2; turn timing is controlled by stop strategies

4. Service Import Paths

All flat service imports have been removed. Services now use submodule imports.

Pattern change

# Before (1.0)
from pipecat.services.openai import OpenAILLMService

# After (1.0)
from pipecat.services.openai.llm import OpenAILLMService

Renamed/moved service modules

Old moduleNew module
pipecat.services.gemini_multimodal_livepipecat.services.google.gemini_live
pipecat.services.aws_nova_sonicpipecat.services.aws.nova_sonic
pipecat.services.openai_realtimepipecat.services.openai.realtime
pipecat.services.riva (STT)pipecat.services.nvidia.stt
pipecat.services.riva (TTS)pipecat.services.nvidia.tts
pipecat.services.nimpipecat.services.nvidia.llm

Removed service classes

These service have been removed.
Removed classReplacement class
PollyTTSServiceAWSPollyTTSService
OpenAIRealtimeBetaLLMServiceOpenAIRealtimeLLMService
GoogleLLMOpenAIBetaServiceGoogleLLMService

5. Transport Import Paths

Transport imports moved from services subdirectory to transport-specific subdirectories.
Old importNew import
pipecat.transports.services.dailypipecat.transports.daily.transport
pipecat.transports.services.livekitpipecat.transports.livekit.transport
pipecat.transports.network.websocket_serverpipecat.transports.websocket.server
pipecat.transports.network.websocket_clientpipecat.transports.websocket.client
pipecat.transports.network.fastapi_websocketpipecat.transports.websocket.fastapi
pipecat.syncpipecat.utils.sync

6. Frames

Several frame classes were renamed or removed. Update any direct references in your code.
RemovedReplacement
TransportMessageFrameOutputTransportMessageFrame
TransportMessageUrgentFrameOutputTransportMessageUrgentFrame
InputTransportMessageUrgentFrameInputTransportMessageFrame
KeypadEntryFrameDTMFFrame
StartInterruptionFrameInterruptionFrame
BotInterruptionFrameInterruptionTaskFrame
TranscriptionMessageUse events: on_user_turn_stopped, on_assistant_turn_stopped
TranscriptionUpdateFrameUse events: on_user_turn_stopped, on_assistant_turn_stopped
DailyTransportMessageFrameDailyOutputTransportMessageFrame
DailyTransportMessageUrgentFrameDailyOutputTransportMessageUrgentFrame
LiveKitTransportMessageFrameLiveKitOutputTransportMessageFrame
LiveKitTransportMessageUrgentFrameLiveKitOutputTransportMessageUrgentFrame

7. Service-Specific Parameter Changes

Individual services renamed or removed configuration parameters. Find your service below to see what changed.
ServiceRemoved paramReplacement
DeepgramSTTServiceurlbase_url
DeepgramSTTServicevad_eventsRemoved
FishAudioTTSServicemodelreference_id
GladiaSTTServiceInputParams.languageRemoved
GladiaSTTServiceInputParams.confidenceRemoved
GeminiTTSServiceapi_keyRemoved
GeminiLiveLLMServicebase_urlhttp_options
GoogleVertexLLMServiceInputParamsRemoved (project_id now required)
MiniMaxHttpTTSServiceenglish_normalizationtext_normalization
SimliVideoServicesimli_configapi_key and face_id (required str)
AnthropicLLMServiceenable_prompt_caching_betaenable_prompt_caching
AWSNovaSonicLLMServicesend_transcription_framesRemoved
OpenAIRealtimeLLMServicesend_transcription_framesRemoved

8. Transport Parameters

All camera_* transport parameters were renamed to video_*. VAD-related transport params were removed — VAD is now configured on the user aggregator (see section 3).
RemovedReplacement
camera_in_enabledvideo_in_enabled
camera_in_is_livevideo_in_is_live
camera_in_width / camera_in_heightvideo_in_width / video_in_height
camera_out_enabledvideo_out_enabled
camera_out_is_livevideo_out_is_live
camera_out_width / camera_out_heightvideo_out_width / video_out_height
camera_out_bitratevideo_out_bitrate
camera_out_frameratevideo_out_framerate
camera_out_codecvideo_out_codec
vad_enabledRemoved
vad_audio_passthroughRemoved

9. Other API Changes

Smaller breaking changes across the rest of the API.

Pipeline

RemovedReplacement
PipelineParams.observersPass observers to PipelineTask constructor
PipelineTask.on_pipeline_endedon_pipeline_finished
PipelineTask.on_pipeline_cancelledon_pipeline_finished
PipelineTask.on_pipeline_stoppedon_pipeline_finished
DailyRunner.configure_with_args()Use PipelineRunner with RunnerArguments

TTS service

RemovedReplacement
TTSService.say()Push a TTSSpeakFrame
text_aggregator init paramUse LLMTextProcessor
text_filter init paramtext_filters

Processors

RemovedReplacement
AudioBufferProcessor.user_continuous_streamuser_audio_passthrough
UserBotLatencyLogObserverUserBotLatencyObserver (use on_latency_measured event)
TranscriptProcessorUse events: on_user_turn_stopped, on_assistant_turn_stopped
add_pattern_pair()add_pattern()

RTVI

  • Deprecated RTVI models (RTVIConfig, RTVIServiceConfig) removed
  • RTVIActionFrame removed
  • RTVIProcessor.handle_function_call and handle_function_call_start removed

Other

RemovedReplacement
expect_stripped_words from LLMAssistantAggregatorParamsRemoved
context field from UserImageRequestFrameRemoved
Old multi-parameter on_push_frame observer signatureUse new signature
pipecat.utils.tracing.class_decoratorsRemoved
NoisereduceFilterUse KrispVivaFilter or other audio filters
KrispFilterUse KrispVivaFilter
pipecat.turns.mutepipecat.turns.user_mute