1use super::wire::present_nullable;
6use super::{
7 RealtimeMcpApprovalRequest, RealtimeMcpApprovalResponse, RealtimeMcpListTools,
8 RealtimeMcpToolCall,
9};
10use crate::Rest;
11use serde::{Deserialize, Serialize};
12
13#[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#[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#[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#[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#[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#[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#[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#[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#[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}