Added
-
Added
frame_orderparameter toSyncParallelPipeline. Setframe_order=FrameOrder.PIPELINEto push synchronized output frames in pipeline definition order (all frames from the first pipeline, then the second, etc.) instead of the default arrival order.
(PR #4029) -
Added
sync_with_audiofield toOutputImageRawFrame. When set toTrue, the output transport queues image frames with audio so they are displayed only after all preceding audio has been sent, enabling synchronized audio/image playback.
(PR #4029) -
Added
OpenAIResponsesLLMService, a new LLM service that uses the OpenAI Responses API. Supports streaming text, function calling, usage metrics, and out-of-band inference. Works with the universalLLMContextandLLMContextAggregatorPair. Seeexamples/foundational/07-interruptible-openai-responses.pyand14-function-calling-openai-responses.py.
(PR #4074) -
Added
audio_out_auto_silenceparameter toTransportParams(defaults toTrue). When set toFalse, the transport waits for audio data instead of inserting silence when the output queue is empty, which is useful for scenarios that require uninterrupted audio playback without artificial gaps.
(PR #4104)
Changed
-
Renamed tracing span attributes to align with OpenTelemetry GenAI semantic conventions:
gen_ai.systemtogen_ai.provider.name,systemtogen_ai.system_instructions,gen_ai.usage.cache_read_input_tokenstogen_ai.usage.cache_read.input_tokens, andgen_ai.usage.cache_creation_input_tokenstogen_ai.usage.cache_creation.input_tokens.
(PR #3449) -
DeepgramSageMakerTTSServicenow correctly routes audio through the baseTTSServiceaudio context queue. Audio frames are delivered viaappend_to_audio_context()instead of being pushed directly, enabling proper ordering, interruption handling, and start/stop frame lifecycle management. Interruptions now trigger aClearmessage to Deepgram (flushing its text buffer) at the right time viaon_audio_context_interrupted.
(PR #4083) -
GradiumTTSServicenow sends a per-contextsetupmessage withclient_req_idbefore the first text message for each TTS context, following Gradium's multiplexing protocol. Previously, a single setup message was sent at connection time without aclient_req_id, which prevented Gradium from associating requests with their sessions when usingclose_ws_on_eos=False.
(PR #4091)
Fixed
-
Fixed stale
system_instructionin LLM tracing spans by reading from_settings.system_instructioninstead of the removed_system_instructionattribute.
(PR #3449) -
Fixed
SyncParallelPipelinebreaking the Whisker debugger.
(PR #4029) -
Fixed
SyncParallelPipelinerace condition where concurrent SystemFrame processing (e.g. from RTVI) could corrupt sink queues and cause deadlocks. SystemFrames now take a fast path that passes them through without draining queued output.
(PR #4029) -
Fixed TTS frame ordering so that non-system frames always arrive in correct order relative to the
TTSStartedFrame/TTSAudioRawFrame/TTSStoppedFramesequence. Previously these frames could race ahead of or behind audio context frames, producing out-of-order output downstream.
(PR #4075) -
Fixed
SarvamTTSServiceaudio and error frames now route throughappend_to_audio_context()instead ofpush_frame(), ensuring correct behavior with audio contexts and interruptions.
(PR #4082) -
Fixed audio frame ordering and interruption handling in Fish Audio, LMNT, Neuphonic, and Rime NonJson TTS services. These services were bypassing the base
TTSServiceaudio context serialization queue by pushing audio frames directly, which could cause out-of-order frames and broken interruptions during speech.
(PR #4090) -
Fixed Genesys AudioHook serializer to always include the
parametersfield in protocol messages. The AudioHook protocol requires every message to carry aparametersobject (even if empty), but_create_messageomitted it when no parameters were provided. This caused clients that validate message structure (including the Genesys reference implementation) to rejectpongand parameter-lessclosedresponses, breaking server sequence tracking and preventingoutputVariablesfrom reaching the Architect flow.
(PR #4093)