Skip to main content

gproxy_protocol/wire/openai/realtime/
items.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::wire::present_nullable;
6use super::{
7    RealtimeMcpApprovalRequest, RealtimeMcpApprovalResponse, RealtimeMcpListTools,
8    RealtimeMcpToolCall,
9};
10use crate::Rest;
11use serde::{Deserialize, Serialize};
12
13/// Source: `openai/types/realtime/conversation_item.py`, `ConversationItem`.
14#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
15#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
16#[serde(untagged)]
17#[derive(gproxy_protocol_macros::DeclaredFields)]
18#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
19pub enum ConversationItem {
20    RealtimeConversationItemSystemMessage(RealtimeConversationItemSystemMessage),
21    RealtimeConversationItemUserMessage(RealtimeConversationItemUserMessage),
22    RealtimeConversationItemAssistantMessage(RealtimeConversationItemAssistantMessage),
23    RealtimeConversationItemFunctionCall(RealtimeConversationItemFunctionCall),
24    RealtimeConversationItemFunctionCallOutput(RealtimeConversationItemFunctionCallOutput),
25    RealtimeMcpApprovalResponse(RealtimeMcpApprovalResponse),
26    RealtimeMcpListTools(RealtimeMcpListTools),
27    RealtimeMcpToolCall(RealtimeMcpToolCall),
28    RealtimeMcpApprovalRequest(RealtimeMcpApprovalRequest),
29}
30
31/// Source: `openai/types/realtime/realtime_conversation_item_system_message.py`, `RealtimeConversationItemSystemMessage`.
32#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
33#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
34#[derive(gproxy_protocol_macros::DeclaredFields)]
35#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
36pub struct RealtimeConversationItemSystemMessage {
37    pub content: Vec<RealtimeConversationItemSystemMessageContent>,
38    pub role: RealtimeConversationItemSystemMessageRole,
39    #[serde(rename = "type")]
40    pub type_: RealtimeConversationItemSystemMessageType,
41    #[serde(
42        default,
43        deserialize_with = "present_nullable",
44        skip_serializing_if = "Option::is_none"
45    )]
46    pub id: Option<Option<String>>,
47    #[serde(
48        default,
49        deserialize_with = "present_nullable",
50        skip_serializing_if = "Option::is_none"
51    )]
52    pub object: Option<Option<RealtimeConversationItemSystemMessageObject>>,
53    #[serde(
54        default,
55        deserialize_with = "present_nullable",
56        skip_serializing_if = "Option::is_none"
57    )]
58    pub status: Option<Option<RealtimeConversationItemSystemMessageStatus>>,
59    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
60    pub rest: Rest,
61}
62
63/// Source: `openai/types/realtime/realtime_conversation_item_user_message.py`, `RealtimeConversationItemUserMessage`.
64#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
65#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
66#[derive(gproxy_protocol_macros::DeclaredFields)]
67#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
68pub struct RealtimeConversationItemUserMessage {
69    pub content: Vec<RealtimeConversationItemUserMessageContent>,
70    pub role: RealtimeConversationItemUserMessageRole,
71    #[serde(rename = "type")]
72    pub type_: RealtimeConversationItemUserMessageType,
73    #[serde(
74        default,
75        deserialize_with = "present_nullable",
76        skip_serializing_if = "Option::is_none"
77    )]
78    pub id: Option<Option<String>>,
79    #[serde(
80        default,
81        deserialize_with = "present_nullable",
82        skip_serializing_if = "Option::is_none"
83    )]
84    pub object: Option<Option<RealtimeConversationItemUserMessageObject>>,
85    #[serde(
86        default,
87        deserialize_with = "present_nullable",
88        skip_serializing_if = "Option::is_none"
89    )]
90    pub status: Option<Option<RealtimeConversationItemUserMessageStatus>>,
91    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
92    pub rest: Rest,
93}
94
95/// Source: `openai/types/realtime/realtime_conversation_item_assistant_message.py`, `RealtimeConversationItemAssistantMessage`.
96#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
97#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
98#[derive(gproxy_protocol_macros::DeclaredFields)]
99#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
100pub struct RealtimeConversationItemAssistantMessage {
101    pub content: Vec<RealtimeConversationItemAssistantMessageContent>,
102    pub role: RealtimeConversationItemAssistantMessageRole,
103    #[serde(rename = "type")]
104    pub type_: RealtimeConversationItemAssistantMessageType,
105    #[serde(
106        default,
107        deserialize_with = "present_nullable",
108        skip_serializing_if = "Option::is_none"
109    )]
110    pub id: Option<Option<String>>,
111    #[serde(
112        default,
113        deserialize_with = "present_nullable",
114        skip_serializing_if = "Option::is_none"
115    )]
116    pub object: Option<Option<RealtimeConversationItemAssistantMessageObject>>,
117    #[serde(
118        default,
119        deserialize_with = "present_nullable",
120        skip_serializing_if = "Option::is_none"
121    )]
122    pub status: Option<Option<RealtimeConversationItemAssistantMessageStatus>>,
123    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
124    pub rest: Rest,
125}
126
127/// Source: `openai/types/realtime/realtime_conversation_item_function_call.py`, `RealtimeConversationItemFunctionCall`.
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)]
131#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
132pub struct RealtimeConversationItemFunctionCall {
133    pub arguments: String,
134    pub name: String,
135    #[serde(rename = "type")]
136    pub type_: RealtimeConversationItemFunctionCallType,
137    #[serde(
138        default,
139        deserialize_with = "present_nullable",
140        skip_serializing_if = "Option::is_none"
141    )]
142    pub id: Option<Option<String>>,
143    #[serde(
144        default,
145        deserialize_with = "present_nullable",
146        skip_serializing_if = "Option::is_none"
147    )]
148    pub call_id: Option<Option<String>>,
149    #[serde(
150        default,
151        deserialize_with = "present_nullable",
152        skip_serializing_if = "Option::is_none"
153    )]
154    pub object: Option<Option<RealtimeConversationItemFunctionCallObject>>,
155    #[serde(
156        default,
157        deserialize_with = "present_nullable",
158        skip_serializing_if = "Option::is_none"
159    )]
160    pub status: Option<Option<RealtimeConversationItemFunctionCallStatus>>,
161    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
162    pub rest: Rest,
163}
164
165/// Source: `openai/types/realtime/realtime_conversation_item_function_call_output.py`, `RealtimeConversationItemFunctionCallOutput`.
166#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
167#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
168#[derive(gproxy_protocol_macros::DeclaredFields)]
169#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
170pub struct RealtimeConversationItemFunctionCallOutput {
171    pub call_id: String,
172    pub output: String,
173    #[serde(rename = "type")]
174    pub type_: RealtimeConversationItemFunctionCallOutputType,
175    #[serde(
176        default,
177        deserialize_with = "present_nullable",
178        skip_serializing_if = "Option::is_none"
179    )]
180    pub id: Option<Option<String>>,
181    #[serde(
182        default,
183        deserialize_with = "present_nullable",
184        skip_serializing_if = "Option::is_none"
185    )]
186    pub object: Option<Option<RealtimeConversationItemFunctionCallOutputObject>>,
187    #[serde(
188        default,
189        deserialize_with = "present_nullable",
190        skip_serializing_if = "Option::is_none"
191    )]
192    pub status: Option<Option<RealtimeConversationItemFunctionCallOutputStatus>>,
193    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
194    pub rest: Rest,
195}
196
197/// Source: `openai/types/realtime/realtime_conversation_item_system_message.py`, `Content`.
198#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
199#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
200#[derive(gproxy_protocol_macros::DeclaredFields)]
201#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
202pub struct RealtimeConversationItemSystemMessageContent {
203    #[serde(
204        default,
205        deserialize_with = "present_nullable",
206        skip_serializing_if = "Option::is_none"
207    )]
208    pub text: Option<Option<String>>,
209    #[serde(rename = "type")]
210    #[serde(
211        default,
212        deserialize_with = "present_nullable",
213        skip_serializing_if = "Option::is_none"
214    )]
215    pub type_: Option<Option<RealtimeConversationItemSystemMessageContentType>>,
216    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
217    pub rest: Rest,
218}
219
220/// Source: `openai/types/realtime/realtime_conversation_item_user_message.py`, `Content`.
221#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
222#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
223#[derive(gproxy_protocol_macros::DeclaredFields)]
224#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
225pub struct RealtimeConversationItemUserMessageContent {
226    #[serde(
227        default,
228        deserialize_with = "present_nullable",
229        skip_serializing_if = "Option::is_none"
230    )]
231    pub audio: Option<Option<String>>,
232    #[serde(
233        default,
234        deserialize_with = "present_nullable",
235        skip_serializing_if = "Option::is_none"
236    )]
237    pub detail: Option<Option<RealtimeConversationItemUserMessageContentDetail>>,
238    #[serde(
239        default,
240        deserialize_with = "present_nullable",
241        skip_serializing_if = "Option::is_none"
242    )]
243    pub image_url: Option<Option<String>>,
244    #[serde(
245        default,
246        deserialize_with = "present_nullable",
247        skip_serializing_if = "Option::is_none"
248    )]
249    pub text: Option<Option<String>>,
250    #[serde(
251        default,
252        deserialize_with = "present_nullable",
253        skip_serializing_if = "Option::is_none"
254    )]
255    pub transcript: Option<Option<String>>,
256    #[serde(rename = "type")]
257    #[serde(
258        default,
259        deserialize_with = "present_nullable",
260        skip_serializing_if = "Option::is_none"
261    )]
262    pub type_: Option<Option<RealtimeConversationItemUserMessageContentType>>,
263    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
264    pub rest: Rest,
265}
266
267/// Source: `openai/types/realtime/realtime_conversation_item_assistant_message.py`, `Content`.
268#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
269#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
270#[derive(gproxy_protocol_macros::DeclaredFields)]
271#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
272pub struct RealtimeConversationItemAssistantMessageContent {
273    #[serde(
274        default,
275        deserialize_with = "present_nullable",
276        skip_serializing_if = "Option::is_none"
277    )]
278    pub audio: Option<Option<String>>,
279    #[serde(
280        default,
281        deserialize_with = "present_nullable",
282        skip_serializing_if = "Option::is_none"
283    )]
284    pub text: Option<Option<String>>,
285    #[serde(
286        default,
287        deserialize_with = "present_nullable",
288        skip_serializing_if = "Option::is_none"
289    )]
290    pub transcript: Option<Option<String>>,
291    #[serde(rename = "type")]
292    #[serde(
293        default,
294        deserialize_with = "present_nullable",
295        skip_serializing_if = "Option::is_none"
296    )]
297    pub type_: Option<Option<RealtimeConversationItemAssistantMessageContentType>>,
298    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
299    pub rest: Rest,
300}
301
302#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
303#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
304#[derive(gproxy_protocol_macros::DeclaredFields)]
305#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
306pub enum RealtimeConversationItemSystemMessageRole {
307    #[serde(rename = "system")]
308    System,
309}
310
311#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
312#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
313#[derive(gproxy_protocol_macros::DeclaredFields)]
314#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
315pub enum RealtimeConversationItemSystemMessageType {
316    #[serde(rename = "message")]
317    Message,
318}
319
320#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
321#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
322#[derive(gproxy_protocol_macros::DeclaredFields)]
323#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
324pub enum RealtimeConversationItemSystemMessageObject {
325    #[serde(rename = "realtime.item")]
326    RealtimeItem,
327}
328
329#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
330#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
331#[derive(gproxy_protocol_macros::DeclaredFields)]
332#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
333pub enum RealtimeConversationItemSystemMessageStatus {
334    #[serde(rename = "completed")]
335    Completed,
336    #[serde(rename = "incomplete")]
337    Incomplete,
338    #[serde(rename = "in_progress")]
339    InProgress,
340}
341
342#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
343#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
344#[derive(gproxy_protocol_macros::DeclaredFields)]
345#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
346pub enum RealtimeConversationItemUserMessageRole {
347    #[serde(rename = "user")]
348    User,
349}
350
351#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
352#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
353#[derive(gproxy_protocol_macros::DeclaredFields)]
354#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
355pub enum RealtimeConversationItemUserMessageType {
356    #[serde(rename = "message")]
357    Message,
358}
359
360#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
361#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
362#[derive(gproxy_protocol_macros::DeclaredFields)]
363#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
364pub enum RealtimeConversationItemUserMessageObject {
365    #[serde(rename = "realtime.item")]
366    RealtimeItem,
367}
368
369#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
370#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
371#[derive(gproxy_protocol_macros::DeclaredFields)]
372#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
373pub enum RealtimeConversationItemUserMessageStatus {
374    #[serde(rename = "completed")]
375    Completed,
376    #[serde(rename = "incomplete")]
377    Incomplete,
378    #[serde(rename = "in_progress")]
379    InProgress,
380}
381
382#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
383#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
384#[derive(gproxy_protocol_macros::DeclaredFields)]
385#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
386pub enum RealtimeConversationItemAssistantMessageRole {
387    #[serde(rename = "assistant")]
388    Assistant,
389}
390
391#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
392#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
393#[derive(gproxy_protocol_macros::DeclaredFields)]
394#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
395pub enum RealtimeConversationItemAssistantMessageType {
396    #[serde(rename = "message")]
397    Message,
398}
399
400#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
401#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
402#[derive(gproxy_protocol_macros::DeclaredFields)]
403#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
404pub enum RealtimeConversationItemAssistantMessageObject {
405    #[serde(rename = "realtime.item")]
406    RealtimeItem,
407}
408
409#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
410#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
411#[derive(gproxy_protocol_macros::DeclaredFields)]
412#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
413pub enum RealtimeConversationItemAssistantMessageStatus {
414    #[serde(rename = "completed")]
415    Completed,
416    #[serde(rename = "incomplete")]
417    Incomplete,
418    #[serde(rename = "in_progress")]
419    InProgress,
420}
421
422#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
423#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
424#[derive(gproxy_protocol_macros::DeclaredFields)]
425#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
426pub enum RealtimeConversationItemFunctionCallType {
427    #[serde(rename = "function_call")]
428    FunctionCall,
429}
430
431#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
432#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
433#[derive(gproxy_protocol_macros::DeclaredFields)]
434#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
435pub enum RealtimeConversationItemFunctionCallObject {
436    #[serde(rename = "realtime.item")]
437    RealtimeItem,
438}
439
440#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
441#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
442#[derive(gproxy_protocol_macros::DeclaredFields)]
443#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
444pub enum RealtimeConversationItemFunctionCallStatus {
445    #[serde(rename = "completed")]
446    Completed,
447    #[serde(rename = "incomplete")]
448    Incomplete,
449    #[serde(rename = "in_progress")]
450    InProgress,
451}
452
453#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
454#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
455#[derive(gproxy_protocol_macros::DeclaredFields)]
456#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
457pub enum RealtimeConversationItemFunctionCallOutputType {
458    #[serde(rename = "function_call_output")]
459    FunctionCallOutput,
460}
461
462#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
463#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
464#[derive(gproxy_protocol_macros::DeclaredFields)]
465#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
466pub enum RealtimeConversationItemFunctionCallOutputObject {
467    #[serde(rename = "realtime.item")]
468    RealtimeItem,
469}
470
471#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
472#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
473#[derive(gproxy_protocol_macros::DeclaredFields)]
474#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
475pub enum RealtimeConversationItemFunctionCallOutputStatus {
476    #[serde(rename = "completed")]
477    Completed,
478    #[serde(rename = "incomplete")]
479    Incomplete,
480    #[serde(rename = "in_progress")]
481    InProgress,
482}
483
484#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
485#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
486#[derive(gproxy_protocol_macros::DeclaredFields)]
487#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
488pub enum RealtimeConversationItemSystemMessageContentType {
489    #[serde(rename = "input_text")]
490    InputText,
491}
492
493#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
494#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
495#[derive(gproxy_protocol_macros::DeclaredFields)]
496#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
497pub enum RealtimeConversationItemUserMessageContentDetail {
498    #[serde(rename = "auto")]
499    Auto,
500    #[serde(rename = "low")]
501    Low,
502    #[serde(rename = "high")]
503    High,
504}
505
506#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
507#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
508#[derive(gproxy_protocol_macros::DeclaredFields)]
509#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
510pub enum RealtimeConversationItemUserMessageContentType {
511    #[serde(rename = "input_text")]
512    InputText,
513    #[serde(rename = "input_audio")]
514    InputAudio,
515    #[serde(rename = "input_image")]
516    InputImage,
517}
518
519#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
520#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
521#[derive(gproxy_protocol_macros::DeclaredFields)]
522#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
523pub enum RealtimeConversationItemAssistantMessageContentType {
524    #[serde(rename = "output_text")]
525    OutputText,
526    #[serde(rename = "output_audio")]
527    OutputAudio,
528}