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