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)]
40pub enum RealtimeClientEvent {
41    ConversationItemCreateEvent(ConversationItemCreateEvent),
42    ConversationItemDeleteEvent(ConversationItemDeleteEvent),
43    ConversationItemRetrieveEvent(ConversationItemRetrieveEvent),
44    ConversationItemTruncateEvent(ConversationItemTruncateEvent),
45    InputAudioBufferAppendEvent(InputAudioBufferAppendEvent),
46    InputAudioBufferClearEvent(InputAudioBufferClearEvent),
47    OutputAudioBufferClearEvent(OutputAudioBufferClearEvent),
48    InputAudioBufferCommitEvent(InputAudioBufferCommitEvent),
49    ResponseCancelEvent(ResponseCancelEvent),
50    ResponseCreateEvent(ResponseCreateEvent),
51    SessionUpdateEvent(SessionUpdateEvent),
52}
53
54/// Source: `openai/types/realtime/realtime_server_event.py`, `RealtimeServerEvent`.
55#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
56#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
57#[serde(untagged)]
58#[derive(gproxy_protocol_macros::DeclaredFields)]
59pub enum RealtimeServerEvent {
60    ConversationCreatedEvent(ConversationCreatedEvent),
61    ConversationItemCreatedEvent(ConversationItemCreatedEvent),
62    ConversationItemDeletedEvent(ConversationItemDeletedEvent),
63    ConversationItemInputAudioTranscriptionCompletedEvent(
64        ConversationItemInputAudioTranscriptionCompletedEvent,
65    ),
66    ConversationItemInputAudioTranscriptionDeltaEvent(
67        ConversationItemInputAudioTranscriptionDeltaEvent,
68    ),
69    ConversationItemInputAudioTranscriptionFailedEvent(
70        ConversationItemInputAudioTranscriptionFailedEvent,
71    ),
72    ConversationItemRetrieved(ConversationItemRetrieved),
73    ConversationItemTruncatedEvent(ConversationItemTruncatedEvent),
74    RealtimeErrorEvent(RealtimeErrorEvent),
75    InputAudioBufferClearedEvent(InputAudioBufferClearedEvent),
76    InputAudioBufferCommittedEvent(InputAudioBufferCommittedEvent),
77    InputAudioBufferDtmfEventReceivedEvent(InputAudioBufferDtmfEventReceivedEvent),
78    InputAudioBufferSpeechStartedEvent(InputAudioBufferSpeechStartedEvent),
79    InputAudioBufferSpeechStoppedEvent(InputAudioBufferSpeechStoppedEvent),
80    RateLimitsUpdatedEvent(RateLimitsUpdatedEvent),
81    ResponseAudioDeltaEvent(ResponseAudioDeltaEvent),
82    ResponseAudioDoneEvent(ResponseAudioDoneEvent),
83    ResponseAudioTranscriptDeltaEvent(ResponseAudioTranscriptDeltaEvent),
84    ResponseAudioTranscriptDoneEvent(ResponseAudioTranscriptDoneEvent),
85    ResponseContentPartAddedEvent(ResponseContentPartAddedEvent),
86    ResponseContentPartDoneEvent(ResponseContentPartDoneEvent),
87    ResponseCreatedEvent(ResponseCreatedEvent),
88    ResponseDoneEvent(ResponseDoneEvent),
89    ResponseFunctionCallArgumentsDeltaEvent(ResponseFunctionCallArgumentsDeltaEvent),
90    ResponseFunctionCallArgumentsDoneEvent(ResponseFunctionCallArgumentsDoneEvent),
91    ResponseOutputItemAddedEvent(ResponseOutputItemAddedEvent),
92    ResponseOutputItemDoneEvent(ResponseOutputItemDoneEvent),
93    ResponseTextDeltaEvent(ResponseTextDeltaEvent),
94    ResponseTextDoneEvent(ResponseTextDoneEvent),
95    SessionCreatedEvent(SessionCreatedEvent),
96    SessionUpdatedEvent(SessionUpdatedEvent),
97    RealtimeServerEventOutputAudioBufferStarted(RealtimeServerEventOutputAudioBufferStarted),
98    RealtimeServerEventOutputAudioBufferStopped(RealtimeServerEventOutputAudioBufferStopped),
99    RealtimeServerEventOutputAudioBufferCleared(RealtimeServerEventOutputAudioBufferCleared),
100    ConversationItemAdded(ConversationItemAdded),
101    ConversationItemDone(ConversationItemDone),
102    InputAudioBufferTimeoutTriggered(InputAudioBufferTimeoutTriggered),
103    ConversationItemInputAudioTranscriptionSegment(ConversationItemInputAudioTranscriptionSegment),
104    McpListToolsInProgress(McpListToolsInProgress),
105    McpListToolsCompleted(McpListToolsCompleted),
106    McpListToolsFailed(McpListToolsFailed),
107    ResponseMcpCallArgumentsDelta(ResponseMcpCallArgumentsDelta),
108    ResponseMcpCallArgumentsDone(ResponseMcpCallArgumentsDone),
109    ResponseMcpCallInProgress(ResponseMcpCallInProgress),
110    ResponseMcpCallCompleted(ResponseMcpCallCompleted),
111    ResponseMcpCallFailed(ResponseMcpCallFailed),
112}
113
114/// Source: `openai/types/realtime/realtime_server_event.py`, `ConversationItemRetrieved`.
115#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
116#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
117#[derive(gproxy_protocol_macros::DeclaredFields)]
118pub struct ConversationItemRetrieved {
119    pub event_id: String,
120    pub item: ConversationItem,
121    #[serde(rename = "type")]
122    pub type_: ConversationItemRetrievedType,
123    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
124    pub rest: Rest,
125}
126
127/// Source: `openai/types/realtime/realtime_server_event.py`, `OutputAudioBufferStarted`.
128#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
129#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
130#[derive(gproxy_protocol_macros::DeclaredFields)]
131pub struct RealtimeServerEventOutputAudioBufferStarted {
132    pub event_id: String,
133    pub response_id: String,
134    #[serde(rename = "type")]
135    pub type_: RealtimeServerEventOutputAudioBufferStartedType,
136    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
137    pub rest: Rest,
138}
139
140/// Source: `openai/types/realtime/realtime_server_event.py`, `OutputAudioBufferStopped`.
141#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
142#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
143#[derive(gproxy_protocol_macros::DeclaredFields)]
144pub struct RealtimeServerEventOutputAudioBufferStopped {
145    pub event_id: String,
146    pub response_id: String,
147    #[serde(rename = "type")]
148    pub type_: RealtimeServerEventOutputAudioBufferStoppedType,
149    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
150    pub rest: Rest,
151}
152
153/// Source: `openai/types/realtime/realtime_server_event.py`, `OutputAudioBufferCleared`.
154#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
155#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
156#[derive(gproxy_protocol_macros::DeclaredFields)]
157pub struct RealtimeServerEventOutputAudioBufferCleared {
158    pub event_id: String,
159    pub response_id: String,
160    #[serde(rename = "type")]
161    pub type_: RealtimeServerEventOutputAudioBufferClearedType,
162    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
163    pub rest: Rest,
164}
165
166#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
167#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
168#[derive(gproxy_protocol_macros::DeclaredFields)]
169pub enum ConversationItemRetrievedType {
170    #[serde(rename = "conversation.item.retrieved")]
171    ConversationItemRetrieved,
172}
173
174#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
175#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
176#[derive(gproxy_protocol_macros::DeclaredFields)]
177pub enum RealtimeServerEventOutputAudioBufferStartedType {
178    #[serde(rename = "output_audio_buffer.started")]
179    OutputAudioBufferStarted,
180}
181
182#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
183#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
184#[derive(gproxy_protocol_macros::DeclaredFields)]
185pub enum RealtimeServerEventOutputAudioBufferStoppedType {
186    #[serde(rename = "output_audio_buffer.stopped")]
187    OutputAudioBufferStopped,
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)]
193pub enum RealtimeServerEventOutputAudioBufferClearedType {
194    #[serde(rename = "output_audio_buffer.cleared")]
195    OutputAudioBufferCleared,
196}