Skip to content

vllm_omni.protocol.realtime.events

OpenAI Realtime server events: typed classes and their wire rendering.

Every event is a frozen dataclass with explicit fields, and the Realtime wire JSON is derived from those fields by :meth:RealtimeEvent.to_realtime. That rendering is pure --- it never consults session state --- which is why it can live here, away from whoever owns the session. The stateful part (response and item ids, content-part bookkeeping) is consumed when the events are constructed, by the consumer.

This module holds the 30 events OpenAI's Realtime API defines. vLLM-Omni's own additions to the wire (listen/speak turn-taking, playback acknowledgement, session resume) are a separate vocabulary in vllm_omni.protocol.duplex.events, so a consumer that only speaks GA does not inherit them.

session_id / epoch are bound by the consumer when an event leaves it; producers build events with the defaults.

AudioDelta dataclass

Bases: ResponseScopedEvent

audio property

audio: bytes | None

delta class-attribute instance-attribute

delta: str = ''

wire_type class-attribute instance-attribute

wire_type = 'response.output_audio.delta'

AudioDone dataclass

Bases: ResponseScopedEvent

wire_type class-attribute instance-attribute

wire_type = 'response.output_audio.done'

ContentPartAdded dataclass

Bases: ResponseScopedEvent

part class-attribute instance-attribute

part: Mapping[str, object] = field(default_factory=dict)

wire_type class-attribute instance-attribute

wire_type = 'response.content_part.added'

ContentPartDone dataclass

Bases: ContentPartAdded

wire_type class-attribute instance-attribute

wire_type = 'response.content_part.done'

ErrorEvent dataclass

Bases: RealtimeEvent

code class-attribute instance-attribute

code: str = 'internal_error'

error property

error: dict[str, object]

error_type property

error_type: str

OpenAI's error class for this error.

OpenAI standardises only the three classes, not the codes, so the base reports the default. A consumer with its own code vocabulary overrides this --- see vllm_omni.protocol.duplex.events.ErrorEvent.

message class-attribute instance-attribute

message: str = ''

param class-attribute instance-attribute

param: str | None = None

related_event_id class-attribute instance-attribute

related_event_id: str | None = None

text property

text: str | None

wire_type class-attribute instance-attribute

wire_type = 'error'

FunctionCallArgumentsDelta dataclass

Bases: RealtimeEvent

call_id class-attribute instance-attribute

call_id: str = ''

delta class-attribute instance-attribute

delta: str = ''

item_id class-attribute instance-attribute

item_id: str | None = None

output_index class-attribute instance-attribute

output_index: int = 0

response_id class-attribute instance-attribute

response_id: str | None = None

wire_type class-attribute instance-attribute

wire_type = 'response.function_call_arguments.delta'

FunctionCallArgumentsDone dataclass

Bases: RealtimeEvent

arguments class-attribute instance-attribute

arguments: str = ''

call_id class-attribute instance-attribute

call_id: str = ''

item_id class-attribute instance-attribute

item_id: str | None = None

output_index class-attribute instance-attribute

output_index: int = 0

response_id class-attribute instance-attribute

response_id: str | None = None

wire_type class-attribute instance-attribute

wire_type = 'response.function_call_arguments.done'

InputCleared dataclass

Bases: RealtimeEvent

wire_type class-attribute instance-attribute

wire_type = 'input_audio_buffer.cleared'

InputCommitted dataclass

Bases: RealtimeEvent

item_id class-attribute instance-attribute

item_id: str | None = None

previous_item_id class-attribute instance-attribute

previous_item_id: str | None = None

wire_type class-attribute instance-attribute

wire_type = 'input_audio_buffer.committed'

InputTranscriptionCompleted dataclass

Bases: RealtimeEvent

content_index class-attribute instance-attribute

content_index: int = 0

item_id class-attribute instance-attribute

item_id: str | None = None

text property

text: str | None

transcript class-attribute instance-attribute

transcript: str = ''

wire_type class-attribute instance-attribute

wire_type = (
    "conversation.item.input_audio_transcription.completed"
)

ItemAdded dataclass

Bases: _ItemEvent

wire_type class-attribute instance-attribute

wire_type = 'conversation.item.added'

ItemCreated dataclass

Bases: _ItemEvent

wire_type class-attribute instance-attribute

wire_type = 'conversation.item.created'

ItemDeleted dataclass

Bases: RealtimeEvent

item_id class-attribute instance-attribute

item_id: str | None = None

wire_type class-attribute instance-attribute

wire_type = 'conversation.item.deleted'

ItemDone dataclass

Bases: _ItemEvent

wire_type class-attribute instance-attribute

wire_type = 'conversation.item.done'

ItemRetrieved dataclass

Bases: RealtimeEvent

item class-attribute instance-attribute

item: Mapping[str, object] = field(default_factory=dict)

item_id property

item_id: str | None

wire_type class-attribute instance-attribute

wire_type = 'conversation.item.retrieved'

ItemTruncated dataclass

Bases: RealtimeEvent

audio_end_ms class-attribute instance-attribute

audio_end_ms: int = 0

content_index class-attribute instance-attribute

content_index: int = 0

item_id class-attribute instance-attribute

item_id: str | None = None

wire_type class-attribute instance-attribute

wire_type = 'conversation.item.truncated'

OutputAudioCleared dataclass

Bases: RealtimeEvent

response_id class-attribute instance-attribute

response_id: str | None = None

wire_type class-attribute instance-attribute

wire_type = 'output_audio_buffer.cleared'

OutputItemAdded dataclass

Bases: RealtimeEvent

item class-attribute instance-attribute

item: Mapping[str, object] = field(default_factory=dict)

item_id property

item_id: str | None

output_index class-attribute instance-attribute

output_index: int = 0

response_id class-attribute instance-attribute

response_id: str | None = None

wire_type class-attribute instance-attribute

wire_type = 'response.output_item.added'

OutputItemDone dataclass

Bases: OutputItemAdded

wire_type class-attribute instance-attribute

wire_type = 'response.output_item.done'

RateLimitsUpdated dataclass

Bases: RealtimeEvent

rate_limits class-attribute instance-attribute

rate_limits: tuple[Mapping[str, object], ...] = ()

wire_type class-attribute instance-attribute

wire_type = 'rate_limits.updated'

RealtimeEvent dataclass

Base of every public session event.

audio property

audio: bytes | None

epoch class-attribute instance-attribute

epoch: int | None = None

event_id class-attribute instance-attribute

event_id: str = field(default_factory=new_event_id)

is_terminal property

is_terminal: bool

item_id property

item_id: str | None

optional_wire_fields class-attribute

optional_wire_fields: frozenset[str] = frozenset()

response_id property

response_id: str | None

session_id class-attribute instance-attribute

session_id: str = ''

text property

text: str | None

type property

type: str

wire_type class-attribute

wire_type: str = ''

to_realtime

to_realtime() -> dict[str, object]

The Realtime wire JSON object for this event (derived from the fields).

ResponseCreated dataclass

Bases: RealtimeEvent

response class-attribute instance-attribute

response: Mapping[str, object] = field(default_factory=dict)

wire_type class-attribute instance-attribute

wire_type = 'response.created'

ResponseDone dataclass

Bases: RealtimeEvent

response class-attribute instance-attribute

response: Mapping[str, object] = field(default_factory=dict)

status property

status: str | None

wire_type class-attribute instance-attribute

wire_type = 'response.done'

ResponseScopedEvent dataclass

Bases: RealtimeEvent

Events addressed to one response (and usually one output item / content part).

content_index class-attribute instance-attribute

content_index: int = 0

item_id class-attribute instance-attribute

item_id: str | None = None

output_index class-attribute instance-attribute

output_index: int = 0

response_id class-attribute instance-attribute

response_id: str | None = None

SessionCreated dataclass

Bases: RealtimeEvent

session class-attribute instance-attribute

session: Mapping[str, object] = field(default_factory=dict)

wire_type class-attribute instance-attribute

wire_type = 'session.created'

SessionUpdated dataclass

Bases: RealtimeEvent

session class-attribute instance-attribute

session: Mapping[str, object] = field(default_factory=dict)

wire_type class-attribute instance-attribute

wire_type = 'session.updated'

SpeechStarted dataclass

Bases: RealtimeEvent

audio_start_ms class-attribute instance-attribute

audio_start_ms: int = 0

item_id class-attribute instance-attribute

item_id: str | None = None

wire_type class-attribute instance-attribute

wire_type = 'input_audio_buffer.speech_started'

SpeechStopped dataclass

Bases: RealtimeEvent

audio_end_ms class-attribute instance-attribute

audio_end_ms: int = 0

item_id class-attribute instance-attribute

item_id: str | None = None

wire_type class-attribute instance-attribute

wire_type = 'input_audio_buffer.speech_stopped'

TextDelta dataclass

Bases: ResponseScopedEvent

delta class-attribute instance-attribute

delta: str = ''

text property

text: str | None

wire_type class-attribute instance-attribute

wire_type = 'response.output_text.delta'

TextDone dataclass

Bases: ResponseScopedEvent

text class-attribute instance-attribute

text: str = ''

wire_type class-attribute instance-attribute

wire_type = 'response.output_text.done'

TranscriptDelta dataclass

Bases: ResponseScopedEvent

delta class-attribute instance-attribute

delta: str = ''

text property

text: str | None

wire_type class-attribute instance-attribute

wire_type = 'response.output_audio_transcript.delta'

TranscriptDone dataclass

Bases: ResponseScopedEvent

text property

text: str | None

transcript class-attribute instance-attribute

transcript: str = ''

wire_type class-attribute instance-attribute

wire_type = 'response.output_audio_transcript.done'

new_event_id

new_event_id() -> str

wire_value

wire_value(value: object) -> object