1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4
5use super::super::super::common::*;
6
7#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
8#[serde(untagged)]
9#[non_exhaustive]
10pub enum CodeInterpreterContainer {
11 Id(String),
12 Auto(CodeInterpreterAutoContainer),
13}
14
15#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
16#[non_exhaustive]
17pub struct CodeInterpreterAutoContainer {
18 #[serde(rename = "type")]
19 pub type_: CodeInterpreterContainerType,
20 #[serde(skip_serializing_if = "Option::is_none")]
21 pub file_ids: Option<Vec<String>>,
22 #[serde(skip_serializing_if = "Option::is_none")]
23 pub memory_limit: Option<CodeInterpreterMemoryLimit>,
24 #[serde(skip_serializing_if = "Option::is_none")]
25 pub network_policy: Option<CodeInterpreterNetworkPolicy>,
26 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
27 pub extra: Extra,
28}
29
30#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
31#[serde(tag = "type")]
32#[non_exhaustive]
33pub enum CodeInterpreterNetworkPolicy {
34 #[serde(rename = "disabled")]
35 Disabled {
36 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
37 extra: Extra,
38 },
39 #[serde(rename = "allowlist")]
40 Allowlist {
41 allowed_domains: Vec<String>,
42 #[serde(skip_serializing_if = "Option::is_none")]
43 domain_secrets: Option<Vec<CodeInterpreterDomainSecret>>,
44 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
45 extra: Extra,
46 },
47}
48
49#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
50#[non_exhaustive]
51pub struct CodeInterpreterDomainSecret {
52 pub domain: String,
53 pub name: String,
54 pub value: String,
55 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
56 pub extra: Extra,
57}
58
59#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
60#[non_exhaustive]
61pub struct ImageMask {
62 #[serde(skip_serializing_if = "Option::is_none")]
63 pub file_id: Option<String>,
64 #[serde(skip_serializing_if = "Option::is_none")]
65 pub image_url: Option<String>,
66 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
67 pub extra: Extra,
68}
69
70#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
71#[serde(tag = "type")]
72#[non_exhaustive]
73pub enum ResponseShellEnvironment {
74 #[serde(rename = "container_auto")]
75 ContainerAuto {
76 #[serde(skip_serializing_if = "Option::is_none")]
77 file_ids: Option<Vec<String>>,
78 #[serde(skip_serializing_if = "Option::is_none")]
79 memory_limit: Option<CodeInterpreterMemoryLimit>,
80 #[serde(skip_serializing_if = "Option::is_none")]
81 network_policy: Option<CodeInterpreterNetworkPolicy>,
82 #[serde(skip_serializing_if = "Option::is_none")]
83 skills: Option<Vec<ResponseShellContainerSkill>>,
84 },
85 #[serde(rename = "local")]
86 Local {
87 #[serde(skip_serializing_if = "Option::is_none")]
88 skills: Option<Vec<ResponseShellLocalSkill>>,
89 },
90 #[serde(rename = "container_reference")]
91 ContainerReference { container_id: String },
92}
93
94#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
95#[serde(untagged)]
96#[non_exhaustive]
97pub enum ResponseShellContainerSkill {
98 Reference(ResponseShellSkillReference),
99 Inline(ResponseShellInlineSkill),
100}
101
102#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
103#[non_exhaustive]
104pub struct ResponseShellSkillReference {
105 pub skill_id: String,
106 #[serde(rename = "type")]
107 pub type_: ResponseShellSkillReferenceType,
108 #[serde(skip_serializing_if = "Option::is_none")]
109 pub version: Option<String>,
110 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
111 pub extra: Extra,
112}
113
114#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
115#[non_exhaustive]
116pub enum ResponseShellSkillReferenceType {
117 #[serde(rename = "skill_reference")]
118 SkillReference,
119}
120
121#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
122#[non_exhaustive]
123pub struct ResponseShellInlineSkill {
124 pub description: String,
125 pub name: String,
126 pub source: ResponseShellInlineSkillSource,
127 #[serde(rename = "type")]
128 pub type_: ResponseShellInlineSkillType,
129 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
130 pub extra: Extra,
131}
132
133#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
134#[non_exhaustive]
135pub enum ResponseShellInlineSkillType {
136 #[serde(rename = "inline")]
137 Inline,
138}
139
140#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
141#[non_exhaustive]
142pub struct ResponseShellInlineSkillSource {
143 pub data: String,
144 pub media_type: ResponseShellInlineSkillMediaType,
145 #[serde(rename = "type")]
146 pub type_: ResponseShellInlineSkillSourceType,
147 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
148 pub extra: Extra,
149}
150
151#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
152#[non_exhaustive]
153pub enum ResponseShellInlineSkillMediaType {
154 #[serde(rename = "application/zip")]
155 ApplicationZip,
156}
157
158#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
159#[non_exhaustive]
160pub enum ResponseShellInlineSkillSourceType {
161 #[serde(rename = "base64")]
162 Base64,
163}
164
165#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
166#[non_exhaustive]
167pub struct ResponseShellLocalSkill {
168 pub description: String,
169 pub name: String,
170 pub path: String,
171 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
172 pub extra: Extra,
173}
174
175#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
176#[non_exhaustive]
177pub enum SearchContentType {
178 #[serde(rename = "text")]
179 Text,
180 #[serde(rename = "image")]
181 Image,
182}
183
184#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
185#[non_exhaustive]
186pub struct WebSearchPreviewUserLocation {
187 #[serde(rename = "type")]
188 pub type_: ApproximateLocationType,
189 #[serde(skip_serializing_if = "Option::is_none")]
190 pub city: Option<String>,
191 #[serde(skip_serializing_if = "Option::is_none")]
192 pub country: Option<String>,
193 #[serde(skip_serializing_if = "Option::is_none")]
194 pub region: Option<String>,
195 #[serde(skip_serializing_if = "Option::is_none")]
196 pub timezone: Option<String>,
197 #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
198 pub extra: Extra,
199}