Skip to main content

gproxy_protocol/wire/openai/realtime/
session_response_tools.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::{RealtimeFunctionTool, ToolChoiceFunction, ToolChoiceMcp, ToolChoiceOptions};
7use crate::Rest;
8use serde::{Deserialize, Serialize};
9
10/// Source: `openai/types/realtime/realtime_session_create_response.py`, `ToolChoice`.
11#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
12#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
13#[serde(untagged)]
14#[derive(gproxy_protocol_macros::DeclaredFields)]
15#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
16pub enum RealtimeSessionCreateResponseToolChoice {
17    ToolChoiceOptions(ToolChoiceOptions),
18    ToolChoiceFunction(ToolChoiceFunction),
19    ToolChoiceMcp(ToolChoiceMcp),
20}
21
22/// Source: `openai/types/realtime/realtime_session_create_response.py`, `Tool`.
23#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
24#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
25#[serde(untagged)]
26#[allow(clippy::large_enum_variant)]
27#[derive(gproxy_protocol_macros::DeclaredFields)]
28#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
29pub enum RealtimeSessionCreateResponseTool {
30    RealtimeFunctionTool(RealtimeFunctionTool),
31    RealtimeSessionCreateResponseToolMcpTool(RealtimeSessionCreateResponseToolMcpTool),
32}
33
34/// Source: `openai/types/realtime/realtime_session_create_response.py`, `ToolMcpTool`.
35#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
36#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
37#[derive(gproxy_protocol_macros::DeclaredFields)]
38#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
39pub struct RealtimeSessionCreateResponseToolMcpTool {
40    pub server_label: String,
41    #[serde(rename = "type")]
42    pub type_: RealtimeSessionCreateResponseToolMcpToolType,
43    #[serde(
44        default,
45        deserialize_with = "present_nullable",
46        skip_serializing_if = "Option::is_none"
47    )]
48    pub allowed_callers:
49        Option<Option<Vec<RealtimeSessionCreateResponseToolMcpToolAllowedCallersItem>>>,
50    #[serde(
51        default,
52        deserialize_with = "present_nullable",
53        skip_serializing_if = "Option::is_none"
54    )]
55    pub allowed_tools: Option<Option<RealtimeSessionCreateResponseToolMcpToolAllowedTools>>,
56    #[serde(
57        default,
58        deserialize_with = "present_nullable",
59        skip_serializing_if = "Option::is_none"
60    )]
61    pub authorization: Option<Option<String>>,
62    #[serde(
63        default,
64        deserialize_with = "present_nullable",
65        skip_serializing_if = "Option::is_none"
66    )]
67    pub connector_id: Option<Option<RealtimeSessionCreateResponseToolMcpToolConnectorId>>,
68    #[serde(
69        default,
70        deserialize_with = "present_nullable",
71        skip_serializing_if = "Option::is_none"
72    )]
73    pub defer_loading: Option<Option<bool>>,
74    #[serde(
75        default,
76        deserialize_with = "present_nullable",
77        skip_serializing_if = "Option::is_none"
78    )]
79    pub headers: Option<Option<std::collections::BTreeMap<String, String>>>,
80    #[serde(
81        default,
82        deserialize_with = "present_nullable",
83        skip_serializing_if = "Option::is_none"
84    )]
85    pub require_approval: Option<Option<RealtimeSessionCreateResponseToolMcpToolRequireApproval>>,
86    #[serde(
87        default,
88        deserialize_with = "present_nullable",
89        skip_serializing_if = "Option::is_none"
90    )]
91    pub server_description: Option<Option<String>>,
92    #[serde(
93        default,
94        deserialize_with = "present_nullable",
95        skip_serializing_if = "Option::is_none"
96    )]
97    pub server_url: Option<Option<String>>,
98    #[serde(
99        default,
100        deserialize_with = "present_nullable",
101        skip_serializing_if = "Option::is_none"
102    )]
103    pub tunnel_id: Option<Option<String>>,
104    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
105    pub rest: Rest,
106}
107
108/// Source: `openai/types/realtime/realtime_session_create_response.py`, `ToolMcpToolAllowedTools`.
109#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
110#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
111#[serde(untagged)]
112#[derive(gproxy_protocol_macros::DeclaredFields)]
113#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
114pub enum RealtimeSessionCreateResponseToolMcpToolAllowedTools {
115    Items(Vec<String>),
116    RealtimeSessionCreateResponseToolMcpToolAllowedToolsMcpToolFilter(
117        RealtimeSessionCreateResponseToolMcpToolAllowedToolsMcpToolFilter,
118    ),
119    Variant3(()),
120}
121
122/// Source: `openai/types/realtime/realtime_session_create_response.py`, `ToolMcpToolRequireApproval`.
123#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
124#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
125#[serde(untagged)]
126#[derive(gproxy_protocol_macros::DeclaredFields)]
127#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
128pub enum RealtimeSessionCreateResponseToolMcpToolRequireApproval {
129    RealtimeSessionCreateResponseToolMcpToolRequireApprovalMcpToolApprovalFilter(
130        RealtimeSessionCreateResponseToolMcpToolRequireApprovalMcpToolApprovalFilter,
131    ),
132    Literal(RealtimeSessionCreateResponseToolMcpToolRequireApprovalVariant2),
133    Variant3(()),
134}
135
136/// Source: `openai/types/realtime/realtime_session_create_response.py`, `ToolMcpToolAllowedToolsMcpToolFilter`.
137#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
138#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
139#[derive(gproxy_protocol_macros::DeclaredFields)]
140#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
141pub struct RealtimeSessionCreateResponseToolMcpToolAllowedToolsMcpToolFilter {
142    #[serde(
143        default,
144        deserialize_with = "present_nullable",
145        skip_serializing_if = "Option::is_none"
146    )]
147    pub read_only: Option<Option<bool>>,
148    #[serde(
149        default,
150        deserialize_with = "present_nullable",
151        skip_serializing_if = "Option::is_none"
152    )]
153    pub tool_names: Option<Option<Vec<String>>>,
154    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
155    pub rest: Rest,
156}
157
158/// Source: `openai/types/realtime/realtime_session_create_response.py`, `ToolMcpToolRequireApprovalMcpToolApprovalFilter`.
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 RealtimeSessionCreateResponseToolMcpToolRequireApprovalMcpToolApprovalFilter {
164    #[serde(
165        default,
166        deserialize_with = "present_nullable",
167        skip_serializing_if = "Option::is_none"
168    )]
169    pub always: Option<
170        Option<RealtimeSessionCreateResponseToolMcpToolRequireApprovalMcpToolApprovalFilterAlways>,
171    >,
172    #[serde(
173        default,
174        deserialize_with = "present_nullable",
175        skip_serializing_if = "Option::is_none"
176    )]
177    pub never: Option<
178        Option<RealtimeSessionCreateResponseToolMcpToolRequireApprovalMcpToolApprovalFilterNever>,
179    >,
180    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
181    pub rest: Rest,
182}
183
184/// Source: `openai/types/realtime/realtime_session_create_response.py`, `ToolMcpToolRequireApprovalMcpToolApprovalFilterAlways`.
185#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
186#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
187#[derive(gproxy_protocol_macros::DeclaredFields)]
188#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
189pub struct RealtimeSessionCreateResponseToolMcpToolRequireApprovalMcpToolApprovalFilterAlways {
190    #[serde(
191        default,
192        deserialize_with = "present_nullable",
193        skip_serializing_if = "Option::is_none"
194    )]
195    pub read_only: Option<Option<bool>>,
196    #[serde(
197        default,
198        deserialize_with = "present_nullable",
199        skip_serializing_if = "Option::is_none"
200    )]
201    pub tool_names: Option<Option<Vec<String>>>,
202    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
203    pub rest: Rest,
204}
205
206/// Source: `openai/types/realtime/realtime_session_create_response.py`, `ToolMcpToolRequireApprovalMcpToolApprovalFilterNever`.
207#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
208#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
209#[derive(gproxy_protocol_macros::DeclaredFields)]
210#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
211pub struct RealtimeSessionCreateResponseToolMcpToolRequireApprovalMcpToolApprovalFilterNever {
212    #[serde(
213        default,
214        deserialize_with = "present_nullable",
215        skip_serializing_if = "Option::is_none"
216    )]
217    pub read_only: Option<Option<bool>>,
218    #[serde(
219        default,
220        deserialize_with = "present_nullable",
221        skip_serializing_if = "Option::is_none"
222    )]
223    pub tool_names: Option<Option<Vec<String>>>,
224    #[serde(default, flatten, skip_serializing_if = "serde_json::Map::is_empty")]
225    pub rest: Rest,
226}
227
228#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
229#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
230#[derive(gproxy_protocol_macros::DeclaredFields)]
231#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
232pub enum RealtimeSessionCreateResponseToolMcpToolType {
233    #[serde(rename = "mcp")]
234    Mcp,
235}
236
237#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
238#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
239#[derive(gproxy_protocol_macros::DeclaredFields)]
240#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
241pub enum RealtimeSessionCreateResponseToolMcpToolAllowedCallersItem {
242    #[serde(rename = "direct")]
243    Direct,
244    #[serde(rename = "programmatic")]
245    Programmatic,
246}
247
248#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
249#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
250#[derive(gproxy_protocol_macros::DeclaredFields)]
251#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
252pub enum RealtimeSessionCreateResponseToolMcpToolConnectorId {
253    #[serde(rename = "connector_dropbox")]
254    ConnectorDropbox,
255    #[serde(rename = "connector_gmail")]
256    ConnectorGmail,
257    #[serde(rename = "connector_googlecalendar")]
258    ConnectorGooglecalendar,
259    #[serde(rename = "connector_googledrive")]
260    ConnectorGoogledrive,
261    #[serde(rename = "connector_microsoftteams")]
262    ConnectorMicrosoftteams,
263    #[serde(rename = "connector_outlookcalendar")]
264    ConnectorOutlookcalendar,
265    #[serde(rename = "connector_outlookemail")]
266    ConnectorOutlookemail,
267    #[serde(rename = "connector_sharepoint")]
268    ConnectorSharepoint,
269}
270
271#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
272#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
273#[derive(gproxy_protocol_macros::DeclaredFields)]
274#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
275pub enum RealtimeSessionCreateResponseToolMcpToolRequireApprovalVariant2 {
276    #[serde(rename = "always")]
277    Always,
278    #[serde(rename = "never")]
279    Never,
280}