Added
-
Added a new frame
FunctionCallsStartedFrame. This frame is pushed both upstream and downstream from the LLM service to indicate that one or more function calls are going to be executed. -
Added LLM services
on_function_calls_startedevent. This event will be triggered when the LLM service receives function calls from the model and is going to start executing them. -
Function calls can now be executed sequentially (in the order received in the completion) by passing
run_in_parallel=Falsewhen creating your LLM service. By default, if the LLM completion returns 2 or more function calls they run concurrently. In both cases, concurrently and sequentially, a new LLM completion will run when the last function call finishes. -
Added OpenTelemetry tracing for
GeminiMultimodalLiveLLMServiceandOpenAIRealtimeBetaLLMService. -
Added initial support for interruption strategies, which determine if the user should interrupt the bot while the bot is speaking. Interruption strategies can be based on factors such as audio volume or the number of words spoken by the user. These can be specified via the new
interruption_strategiesfield inPipelineParams. A newMinWordsInterruptionStrategystrategy has been introduced which triggers an interruption if the user has spoken a minimum number of words. If no interruption strategies are specified, the normal interruption behavior applies. If multiple strategies are provided, the first one that evaluates to true will trigger the interruption. -
BaseInputTransportnow handlesStopFrame. When aStopFrameis received the transport will pause sending frames downstream until a newStartFrameis received. This allows the transport to be reused (keeping the same connection) in a different pipeline. -
Updated AssemblyAI STT service to support their latest streaming speech-to-text model with improved transcription latency and endpointing.
-
You can now access STT service results through the new
TranscriptionFrame.resultandInterimTranscriptionFrame.resultfield. This is useful in case you use some specific settings for the STT and you want to access the STT results. -
The examples runner is now public from the
pipecat.examplespackage. This allows everyone to build their own examples and run them easily. -
It is now possible to push
OutputDTMFFrameorOutputDTMFUrgentFramewithDailyTransport. This will be sent properly if a Daily dial-out connection has been established. -
Added
OutputDTMFUrgentFrameto send a DTMF keypress quickly. The previousOutputDTMFFramequeues the keypress with the rest of data frames. -
Added
DTMFAggregator, which aggregates keypad presses intoTranscriptionFrames. Aggregation occurs after a timeout, termination key press, or user interruption. You can specify the prefix of theTranscriptionFrame. -
Added new functions
DailyTransport.start_transcription()andDailyTransport.stop_transcription()to be able to start and stop Daily transcription dynamically (maybe with different settings).
Changed
-
Reverted the default model for
GeminiMultimodalLiveLLMServiceback tomodels/gemini-2.0-flash-live-001.gemini-2.5-flash-preview-native-audio-dialoghas inconsistent performance. You can opt in to using this model by setting themodelarg. -
Function calls are now cancelled by default if there's an interruption. To disable this behavior you can set
cancel_on_interruption=Falsewhen registering the function call. Since function calls are executed as tasks you can tell if a function call has been cancelled by catching theasyncio.CancelledErrorexception (and don't forget to raise it again!). -
Updated OpenTelemetry tracing attribute
metrics.ttfb_mstometrics.ttfb. The attribute reports TTFB in seconds.
Deprecated
DailyTransport.send_dtmf()is deprecated, push anOutputDTMFFrameor anOutputDTMFUrgentFrameinstead.
Fixed
-
Fixed an issue with
ElevenLabsTTSServicewhere long responses would continue generating output even after an interruption. -
Fixed an issue with the
OpenAILLMContextwhere non-Roman characters were being incorrectly encoded as Unicode escape sequences. This was a logging issue and did not impact the actual conversation. -
In
AWSBedrockLLMService, worked around a possible bug in AWS Bedrock where atoolConfigis required if there has been previous tool use in the messages array. This workaround includes a no_op factory function call is used to satisfy the requirement. -
Fixed
WebsocketClientTransportto useFrameProcessorSetup.task_managerinstead ofStartFrame.task_manager.
Performance
- Use
uvloopas the new event loop on Linux and macOS systems.