Skip to main content

gproxy_protocol/wire/openai/realtime/
legacy_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_optional;
6use crate::Rest;
7use serde::{Deserialize, Serialize};
8// The local Markdown describes item_reference in prose despite omitting it from its literal list.
9
10/// Source: `upstream_docs/openai/docs/Realtime.md`, Conversation Item With Reference, `ConversationItemWithReference`.
11#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
12#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
13#[derive(gproxy_protocol_macros::DeclaredFields)]
14pub struct ConversationItemWithReferencePayload {
15    #[serde(
16        default,
17        deserialize_with = "present_optional",
18        skip_serializing_if = "Option::is_none"
19    )]
20    pub id: Option<String>,
21    #[serde(
22        default,
23        deserialize_with = "present_optional",
24        skip_serializing_if = "Option::is_none"
25    )]
26    pub arguments: Option<String>,
27    #[serde(
28        default,
29        deserialize_with = "present_optional",
30        skip_serializing_if = "Option::is_none"
31    )]
32    pub call_id: Option<String>,
33    #[serde(
34        default,
35        deserialize_with = "present_optional",
36        skip_serializing_if = "Option::is_none"
37    )]
38    pub content: Option<Vec<ConversationItemWithReferenceContent>>,
39    #[serde(
40        default,
41        deserialize_with = "present_optional",
42        skip_serializing_if = "Option::is_none"
43    )]
44    pub name: Option<String>,
45    #[serde(
46        default,
47        deserialize_with = "present_optional",
48        skip_serializing_if = "Option::is_none"
49    )]
50    pub object: Option<ConversationItemWithReferenceObject>,
51    #[serde(
52        default,
53        deserialize_with = "present_optional",
54        skip_serializing_if = "Option::is_none"
55    )]
56    pub output: Option<String>,
57    #[serde(
58        default,
59        deserialize_with = "present_optional",
60        skip_serializing_if = "Option::is_none"
61    )]
62    pub role: Option<ConversationItemWithReferenceRole>,
63    #[serde(
64        default,
65        deserialize_with = "present_optional",
66        skip_serializing_if = "Option::is_none"
67    )]
68    pub status: Option<ConversationItemWithReferenceStatus>,
69    #[serde(rename = "type")]
70    #[serde(
71        default,
72        deserialize_with = "present_optional",
73        skip_serializing_if = "Option::is_none"
74    )]
75    pub type_: Option<ConversationItemWithReferenceType>,
76    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
77    pub rest: Rest,
78}
79
80/// Source: `upstream_docs/openai/docs/Realtime.md`, Conversation Item With Reference, `ConversationItemWithReferenceContent`.
81#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
82#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
83#[derive(gproxy_protocol_macros::DeclaredFields)]
84pub struct ConversationItemWithReferenceContent {
85    #[serde(
86        default,
87        deserialize_with = "present_optional",
88        skip_serializing_if = "Option::is_none"
89    )]
90    pub id: Option<String>,
91    #[serde(
92        default,
93        deserialize_with = "present_optional",
94        skip_serializing_if = "Option::is_none"
95    )]
96    pub audio: Option<String>,
97    #[serde(
98        default,
99        deserialize_with = "present_optional",
100        skip_serializing_if = "Option::is_none"
101    )]
102    pub text: Option<String>,
103    #[serde(
104        default,
105        deserialize_with = "present_optional",
106        skip_serializing_if = "Option::is_none"
107    )]
108    pub transcript: Option<String>,
109    #[serde(rename = "type")]
110    #[serde(
111        default,
112        deserialize_with = "present_optional",
113        skip_serializing_if = "Option::is_none"
114    )]
115    pub type_: Option<ConversationItemWithReferenceContentType>,
116    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
117    pub rest: Rest,
118}
119
120#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
121#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
122#[derive(gproxy_protocol_macros::DeclaredFields)]
123pub enum ConversationItemWithReferenceObject {
124    #[serde(rename = "realtime.item")]
125    RealtimeItem,
126}
127
128#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
129#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
130#[derive(gproxy_protocol_macros::DeclaredFields)]
131pub enum ConversationItemWithReferenceRole {
132    #[serde(rename = "user")]
133    User,
134    #[serde(rename = "assistant")]
135    Assistant,
136    #[serde(rename = "system")]
137    System,
138}
139
140#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
141#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
142#[derive(gproxy_protocol_macros::DeclaredFields)]
143pub enum ConversationItemWithReferenceStatus {
144    #[serde(rename = "completed")]
145    Completed,
146    #[serde(rename = "incomplete")]
147    Incomplete,
148    #[serde(rename = "in_progress")]
149    InProgress,
150}
151
152#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
153#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
154#[derive(gproxy_protocol_macros::DeclaredFields)]
155pub enum ConversationItemWithReferenceType {
156    #[serde(rename = "message")]
157    Message,
158    #[serde(rename = "function_call")]
159    FunctionCall,
160    #[serde(rename = "function_call_output")]
161    FunctionCallOutput,
162}
163
164#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
165#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
166#[derive(gproxy_protocol_macros::DeclaredFields)]
167pub enum ConversationItemWithReferenceContentType {
168    #[serde(rename = "input_audio")]
169    InputAudio,
170    #[serde(rename = "input_text")]
171    InputText,
172    #[serde(rename = "item_reference")]
173    ItemReference,
174    #[serde(rename = "text")]
175    Text,
176}
177
178/// References require an id; other legacy item fields follow the standalone Markdown shape.
179#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
180#[serde(untagged)]
181#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
182#[derive(gproxy_protocol_macros::DeclaredFields)]
183pub enum ConversationItemWithReference {
184    Item(ConversationItemWithReferencePayload),
185    Reference(ConversationItemReference),
186}
187#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
188#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
189#[derive(gproxy_protocol_macros::DeclaredFields)]
190pub struct ConversationItemReference {
191    pub id: String,
192    #[serde(rename = "type")]
193    pub type_: ConversationItemReferenceType,
194    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
195    pub rest: Rest,
196}
197#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
198#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
199#[derive(gproxy_protocol_macros::DeclaredFields)]
200pub enum ConversationItemReferenceType {
201    #[serde(rename = "item_reference")]
202    ItemReference,
203}