Skip to main content

gproxy_protocol/wire/openai/realtime/
events.rs

1//! Native Realtime wire DTOs. Source definitions are cited on each object.
2//! Verified with Realtime.md and openai-python snapshot
3//! e12b81d3bbf644ec7045e152d69bc4b68d69cd48 (2026-09-13).
4//! https://github.com/openai/openai-python/tree/e12b81d3bbf644ec7045e152d69bc4b68d69cd48/src/openai/types/realtime
5use super::{
6    ConversationCreatedEvent, ConversationItem, ConversationItemAdded, ConversationItemCreateEvent,
7    ConversationItemCreatedEvent, ConversationItemDeleteEvent, ConversationItemDeletedEvent,
8    ConversationItemDone, ConversationItemInputAudioTranscriptionCompletedEvent,
9    ConversationItemInputAudioTranscriptionDeltaEvent,
10    ConversationItemInputAudioTranscriptionFailedEvent,
11    ConversationItemInputAudioTranscriptionSegment, ConversationItemRetrieveEvent,
12    ConversationItemTruncateEvent, ConversationItemTruncatedEvent, InputAudioBufferAppendEvent,
13    InputAudioBufferClearEvent, InputAudioBufferClearedEvent, InputAudioBufferCommitEvent,
14    InputAudioBufferCommittedEvent, InputAudioBufferDtmfEventReceivedEvent,
15    InputAudioBufferSpeechStartedEvent, InputAudioBufferSpeechStoppedEvent,
16    InputAudioBufferTimeoutTriggered, McpListToolsCompleted, McpListToolsFailed,
17    McpListToolsInProgress, OutputAudioBufferClearEvent, RateLimitsUpdatedEvent,
18    RealtimeErrorEvent, ResponseAudioDeltaEvent, ResponseAudioDoneEvent,
19    ResponseAudioTranscriptDeltaEvent, ResponseAudioTranscriptDoneEvent, ResponseCancelEvent,
20    ResponseContentPartAddedEvent, ResponseContentPartDoneEvent, ResponseCreateEvent,
21    ResponseCreatedEvent, ResponseDoneEvent, ResponseFunctionCallArgumentsDeltaEvent,
22    ResponseFunctionCallArgumentsDoneEvent, ResponseMcpCallArgumentsDelta,
23    ResponseMcpCallArgumentsDone, ResponseMcpCallCompleted, ResponseMcpCallFailed,
24    ResponseMcpCallInProgress, ResponseOutputItemAddedEvent, ResponseOutputItemDoneEvent,
25    ResponseTextDeltaEvent, ResponseTextDoneEvent, SessionCreatedEvent, SessionUpdateEvent,
26    SessionUpdatedEvent,
27};
28use crate::Rest;
29use serde::{Deserialize, Serialize};
30
31pub type HandshakeRequest = crate::WireRequest<()>;
32pub type HandshakeResponse = crate::WireResponse<()>;
33
34/// Source: `openai/types/realtime/realtime_client_event.py`, `RealtimeClientEvent`.
35#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
36#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
37#[serde(untagged)]
38#[allow(clippy::large_enum_variant)]
39#[derive(gproxy_protocol_macros::DeclaredFields)]
40#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
41pub enum RealtimeClientEvent {
42    ConversationItemCreateEvent(ConversationItemCreateEvent),
43    ConversationItemDeleteEvent(ConversationItemDeleteEvent),
44    ConversationItemRetrieveEvent(ConversationItemRetrieveEvent),
45    ConversationItemTruncateEvent(ConversationItemTruncateEvent),
46    InputAudioBufferAppendEvent(InputAudioBufferAppendEvent),
47    InputAudioBufferClearEvent(InputAudioBufferClearEvent),
48    OutputAudioBufferClearEvent(OutputAudioBufferClearEvent),
49    InputAudioBufferCommitEvent(InputAudioBufferCommitEvent),
50    ResponseCancelEvent(ResponseCancelEvent),
51    ResponseCreateEvent(ResponseCreateEvent),
52    SessionUpdateEvent(SessionUpdateEvent),
53}
54
55/// Source: `openai/types/realtime/realtime_server_event.py`, `RealtimeServerEvent`.
56#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
57#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
58#[serde(untagged)]
59#[derive(gproxy_protocol_macros::DeclaredFields)]
60#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
61pub enum RealtimeServerEvent {
62    ConversationCreatedEvent(ConversationCreatedEvent),
63    ConversationItemCreatedEvent(ConversationItemCreatedEvent),
64    ConversationItemDeletedEvent(ConversationItemDeletedEvent),
65    ConversationItemInputAudioTranscriptionCompletedEvent(
66        ConversationItemInputAudioTranscriptionCompletedEvent,
67    ),
68    ConversationItemInputAudioTranscriptionDeltaEvent(
69        ConversationItemInputAudioTranscriptionDeltaEvent,
70    ),
71    ConversationItemInputAudioTranscriptionFailedEvent(
72        ConversationItemInputAudioTranscriptionFailedEvent,
73    ),
74    ConversationItemRetrieved(ConversationItemRetrieved),
75    ConversationItemTruncatedEvent(ConversationItemTruncatedEvent),
76    RealtimeErrorEvent(RealtimeErrorEvent),
77    InputAudioBufferClearedEvent(InputAudioBufferClearedEvent),
78    InputAudioBufferCommittedEvent(InputAudioBufferCommittedEvent),
79    InputAudioBufferDtmfEventReceivedEvent(InputAudioBufferDtmfEventReceivedEvent),
80    InputAudioBufferSpeechStartedEvent(InputAudioBufferSpeechStartedEvent),
81    InputAudioBufferSpeechStoppedEvent(InputAudioBufferSpeechStoppedEvent),
82    RateLimitsUpdatedEvent(RateLimitsUpdatedEvent),
83    ResponseAudioDeltaEvent(ResponseAudioDeltaEvent),
84    ResponseAudioDoneEvent(ResponseAudioDoneEvent),
85    ResponseAudioTranscriptDeltaEvent(ResponseAudioTranscriptDeltaEvent),
86    ResponseAudioTranscriptDoneEvent(ResponseAudioTranscriptDoneEvent),
87    ResponseContentPartAddedEvent(ResponseContentPartAddedEvent),
88    ResponseContentPartDoneEvent(ResponseContentPartDoneEvent),
89    ResponseCreatedEvent(ResponseCreatedEvent),
90    ResponseDoneEvent(ResponseDoneEvent),
91    ResponseFunctionCallArgumentsDeltaEvent(ResponseFunctionCallArgumentsDeltaEvent),
92    ResponseFunctionCallArgumentsDoneEvent(ResponseFunctionCallArgumentsDoneEvent),
93    ResponseOutputItemAddedEvent(ResponseOutputItemAddedEvent),
94    ResponseOutputItemDoneEvent(ResponseOutputItemDoneEvent),
95    ResponseTextDeltaEvent(ResponseTextDeltaEvent),
96    ResponseTextDoneEvent(ResponseTextDoneEvent),
97    SessionCreatedEvent(SessionCreatedEvent),
98    SessionUpdatedEvent(SessionUpdatedEvent),
99    RealtimeServerEventOutputAudioBufferStarted(RealtimeServerEventOutputAudioBufferStarted),
100    RealtimeServerEventOutputAudioBufferStopped(RealtimeServerEventOutputAudioBufferStopped),
101    RealtimeServerEventOutputAudioBufferCleared(RealtimeServerEventOutputAudioBufferCleared),
102    ConversationItemAdded(ConversationItemAdded),
103    ConversationItemDone(ConversationItemDone),
104    InputAudioBufferTimeoutTriggered(InputAudioBufferTimeoutTriggered),
105    ConversationItemInputAudioTranscriptionSegment(ConversationItemInputAudioTranscriptionSegment),
106    McpListToolsInProgress(McpListToolsInProgress),
107    McpListToolsCompleted(McpListToolsCompleted),
108    McpListToolsFailed(McpListToolsFailed),
109    ResponseMcpCallArgumentsDelta(ResponseMcpCallArgumentsDelta),
110    ResponseMcpCallArgumentsDone(ResponseMcpCallArgumentsDone),
111    ResponseMcpCallInProgress(ResponseMcpCallInProgress),
112    ResponseMcpCallCompleted(ResponseMcpCallCompleted),
113    ResponseMcpCallFailed(ResponseMcpCallFailed),
114}
115
116/// Source: `openai/types/realtime/realtime_server_event.py`, `ConversationItemRetrieved`.
117#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
118#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
119#[derive(gproxy_protocol_macros::DeclaredFields)]
120#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
121pub struct ConversationItemRetrieved {
122    pub event_id: String,
123    pub item: ConversationItem,
124    #[serde(rename = "type")]
125    pub type_: ConversationItemRetrievedType,
126    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
127    pub rest: Rest,
128}
129
130/// Source: `openai/types/realtime/realtime_server_event.py`, `OutputAudioBufferStarted`.
131#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
132#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
133#[derive(gproxy_protocol_macros::DeclaredFields)]
134#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
135pub struct RealtimeServerEventOutputAudioBufferStarted {
136    pub event_id: String,
137    pub response_id: String,
138    #[serde(rename = "type")]
139    pub type_: RealtimeServerEventOutputAudioBufferStartedType,
140    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
141    pub rest: Rest,
142}
143
144/// Source: `openai/types/realtime/realtime_server_event.py`, `OutputAudioBufferStopped`.
145#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
146#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
147#[derive(gproxy_protocol_macros::DeclaredFields)]
148#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
149pub struct RealtimeServerEventOutputAudioBufferStopped {
150    pub event_id: String,
151    pub response_id: String,
152    #[serde(rename = "type")]
153    pub type_: RealtimeServerEventOutputAudioBufferStoppedType,
154    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
155    pub rest: Rest,
156}
157
158/// Source: `openai/types/realtime/realtime_server_event.py`, `OutputAudioBufferCleared`.
159#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
160#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
161#[derive(gproxy_protocol_macros::DeclaredFields)]
162#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
163pub struct RealtimeServerEventOutputAudioBufferCleared {
164    pub event_id: String,
165    pub response_id: String,
166    #[serde(rename = "type")]
167    pub type_: RealtimeServerEventOutputAudioBufferClearedType,
168    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
169    pub rest: Rest,
170}
171
172#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
173#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
174#[derive(gproxy_protocol_macros::DeclaredFields)]
175#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
176pub enum ConversationItemRetrievedType {
177    #[serde(rename = "conversation.item.retrieved")]
178    ConversationItemRetrieved,
179}
180
181#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
182#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
183#[derive(gproxy_protocol_macros::DeclaredFields)]
184#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
185pub enum RealtimeServerEventOutputAudioBufferStartedType {
186    #[serde(rename = "output_audio_buffer.started")]
187    OutputAudioBufferStarted,
188}
189
190#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
191#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
192#[derive(gproxy_protocol_macros::DeclaredFields)]
193#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
194pub enum RealtimeServerEventOutputAudioBufferStoppedType {
195    #[serde(rename = "output_audio_buffer.stopped")]
196    OutputAudioBufferStopped,
197}
198
199#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
200#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
201#[derive(gproxy_protocol_macros::DeclaredFields)]
202#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
203pub enum RealtimeServerEventOutputAudioBufferClearedType {
204    #[serde(rename = "output_audio_buffer.cleared")]
205    OutputAudioBufferCleared,
206}