Events
Iterating a RealtimeSession yields the session’s event
stream: content parts, tool activity, turn boundaries, reconnects, and recoverable errors. The
high-level stream_audio() and
stream_transcripts() views described in
Audio, images, and transcripts are derived from this same stream, so most applications
iterate the session for control flow and leave media to the views.
If nothing is iterating the session, the session keeps the most recent 512 part delta events
(audio, transcript, and text) and the most recent 512 structural events for a late async for;
older ones are discarded. Discarding a part’s start discards the rest of that part with it, so a late
iterator never receives a delta it cannot attach to a part. A failure parked for the consumer is
never discarded.
| Event | Meaning |
|---|---|
PartStartEvent | A speech, text, or tool part started. |
PartDeltaEvent | Incremental speech audio/transcript or text content. |
PartEndEvent | A finalized part; retained speech audio appears here, not at part start. |
FunctionToolCallEvent | A local function tool began executing. |
FunctionToolResultEvent | A local function tool completed or returned a retry prompt. |
DeferredToolRequestsEvent | An inline capability handler resolved deferred requests. |
DeferredToolResultsEvent | Inline deferred results are ready for normal tool processing. |
EnqueuedMessagesEvent | Enqueued content was delivered into session history. |
RealtimeInputSpeechStartEvent | The provider detected that the user started speaking, when the profile declares emits_input_speech_events. |
RealtimeInputSpeechEndEvent | The provider detected the end of user speech, when the profile declares emits_input_speech_events. |
RealtimeResponseInterruptedEvent | The provider reported an interrupted model response. |
RealtimeInputTranscriptionErrorEvent | One user turn could not be transcribed; the session remains usable. |
RealtimeOutputSpeechStartEvent / RealtimeOutputSpeechEndEvent | The model became, or stopped being, audible. These are emitted on a WebRTC sideband, where the provider owns audio playback. |
RealtimeTurnCompleteEvent | The model finished replying and no tool remains active. |
RealtimeSessionReconnectEvent | The connection was automatically re-established. |
RealtimeSessionErrorEvent | A recoverable provider error occurred; the session remains usable. |
The first eight rows are AgentStreamEvent members from
pydantic_ai.messages — the same events a
standard streamed run yields, so event-handling code written for
a text agent (rendering parts, logging tool calls) works on a session unchanged. The Realtime*
rows are RealtimeEvent members that only a session emits:
speech detection, interruption, turn completion, reconnection, and recoverable errors have no
equivalent in a request-response run.
A capability’s event stream hooks see both kinds flow through the same stream; see Capabilities and hooks.
Use RealtimeTurnCompleteEvent as the exchange
boundary. A model can speak, call a tool, and speak again, so receiving speech — or a tool result —
does not imply that the turn is done.
The audio stream is these events under the hood:
stream_audio() is a bounded view over the
speech part deltas, and most applications should use it. As an advanced alternative, play
SpeechPartDelta.audio_chunk from raw
PartDeltaEvents. Model audio arrives in full whether or not
history retention is enabled. When output audio is retained, the final
SpeechPart contains the whole turn again as a WAV snapshot for
history; do not play both or the turn will play twice.