1use serde::{Deserialize, Serialize};
2
3use super::super::{AllowedToolsMode, Extra, ToolChoiceMode};
4use super::definitions::NamedTool;
5
6#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
7#[serde(untagged)]
8pub enum ChatToolChoice {
9 Mode(ToolChoiceMode),
10 Allowed(ChatAllowedToolChoice),
11 Named(ChatNamedToolChoice),
12}
13
14#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
15#[serde(untagged)]
16pub enum ResponseToolChoice {
17 Mode(ToolChoiceMode),
18 Allowed(ResponseAllowedToolChoice),
19 Hosted(ResponseHostedToolChoice),
20 Function(ResponseFunctionToolChoice),
21 Mcp(ResponseMcpToolChoice),
22 Custom(ResponseCustomToolChoice),
23 ApplyPatch(ResponseApplyPatchToolChoice),
24 Shell(ResponseShellToolChoice),
25}
26
27#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
28pub struct ChatAllowedToolChoice {
29 pub allowed_tools: ChatAllowedTools,
30 #[serde(rename = "type")]
31 pub type_: AllowedToolsType,
32 #[serde(
33 default,
34 flatten,
35 skip_serializing_if = "std::collections::BTreeMap::is_empty"
36 )]
37 pub extra: Extra,
38}
39
40#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
41pub struct ChatAllowedTools {
42 pub mode: AllowedToolsMode,
43 pub tools: Vec<Extra>,
44 #[serde(
45 default,
46 flatten,
47 skip_serializing_if = "std::collections::BTreeMap::is_empty"
48 )]
49 pub extra: Extra,
50}
51
52#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
53pub struct ResponseAllowedToolChoice {
54 pub mode: AllowedToolsMode,
55 pub tools: Vec<ResponseAllowedTool>,
56 #[serde(rename = "type")]
57 pub type_: AllowedToolsType,
58 #[serde(
59 default,
60 flatten,
61 skip_serializing_if = "std::collections::BTreeMap::is_empty"
62 )]
63 pub extra: Extra,
64}
65
66#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
67#[serde(tag = "type")]
68pub enum ResponseAllowedTool {
69 #[serde(rename = "function")]
70 Function {
71 name: String,
72 #[serde(
73 default,
74 flatten,
75 skip_serializing_if = "std::collections::BTreeMap::is_empty"
76 )]
77 extra: Extra,
78 },
79 #[serde(rename = "custom")]
80 Custom {
81 name: String,
82 #[serde(
83 default,
84 flatten,
85 skip_serializing_if = "std::collections::BTreeMap::is_empty"
86 )]
87 extra: Extra,
88 },
89 #[serde(rename = "mcp")]
90 Mcp {
91 server_label: String,
92 #[serde(skip_serializing_if = "Option::is_none")]
93 name: Option<String>,
94 #[serde(
95 default,
96 flatten,
97 skip_serializing_if = "std::collections::BTreeMap::is_empty"
98 )]
99 extra: Extra,
100 },
101 #[serde(rename = "file_search")]
102 FileSearch {
103 #[serde(
104 default,
105 flatten,
106 skip_serializing_if = "std::collections::BTreeMap::is_empty"
107 )]
108 extra: Extra,
109 },
110 #[serde(rename = "web_search_preview")]
111 WebSearchPreview {
112 #[serde(
113 default,
114 flatten,
115 skip_serializing_if = "std::collections::BTreeMap::is_empty"
116 )]
117 extra: Extra,
118 },
119 #[serde(rename = "computer")]
120 Computer {
121 #[serde(
122 default,
123 flatten,
124 skip_serializing_if = "std::collections::BTreeMap::is_empty"
125 )]
126 extra: Extra,
127 },
128 #[serde(rename = "computer_use_preview")]
129 ComputerUsePreview {
130 #[serde(
131 default,
132 flatten,
133 skip_serializing_if = "std::collections::BTreeMap::is_empty"
134 )]
135 extra: Extra,
136 },
137 #[serde(rename = "computer_use")]
138 ComputerUse {
139 #[serde(
140 default,
141 flatten,
142 skip_serializing_if = "std::collections::BTreeMap::is_empty"
143 )]
144 extra: Extra,
145 },
146 #[serde(rename = "web_search_preview_2025_03_11")]
147 WebSearchPreview20250311 {
148 #[serde(
149 default,
150 flatten,
151 skip_serializing_if = "std::collections::BTreeMap::is_empty"
152 )]
153 extra: Extra,
154 },
155 #[serde(rename = "image_generation")]
156 ImageGeneration {
157 #[serde(
158 default,
159 flatten,
160 skip_serializing_if = "std::collections::BTreeMap::is_empty"
161 )]
162 extra: Extra,
163 },
164 #[serde(rename = "code_interpreter")]
165 CodeInterpreter {
166 #[serde(
167 default,
168 flatten,
169 skip_serializing_if = "std::collections::BTreeMap::is_empty"
170 )]
171 extra: Extra,
172 },
173 #[serde(rename = "local_shell")]
174 LocalShell {
175 #[serde(
176 default,
177 flatten,
178 skip_serializing_if = "std::collections::BTreeMap::is_empty"
179 )]
180 extra: Extra,
181 },
182 #[serde(rename = "shell")]
183 Shell {
184 #[serde(
185 default,
186 flatten,
187 skip_serializing_if = "std::collections::BTreeMap::is_empty"
188 )]
189 extra: Extra,
190 },
191 #[serde(rename = "apply_patch")]
192 ApplyPatch {
193 #[serde(
194 default,
195 flatten,
196 skip_serializing_if = "std::collections::BTreeMap::is_empty"
197 )]
198 extra: Extra,
199 },
200}
201
202#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
203pub enum AllowedToolsType {
204 #[serde(rename = "allowed_tools")]
205 AllowedTools,
206}
207
208#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
209#[serde(untagged)]
210pub enum ChatNamedToolChoice {
211 Function {
212 #[serde(rename = "type")]
213 type_: FunctionToolChoiceType,
214 function: NamedTool,
215 #[serde(
216 default,
217 flatten,
218 skip_serializing_if = "std::collections::BTreeMap::is_empty"
219 )]
220 extra: Extra,
221 },
222 Custom {
223 #[serde(rename = "type")]
224 type_: CustomToolChoiceType,
225 custom: NamedTool,
226 #[serde(
227 default,
228 flatten,
229 skip_serializing_if = "std::collections::BTreeMap::is_empty"
230 )]
231 extra: Extra,
232 },
233}
234
235#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
236pub struct ResponseHostedToolChoice {
237 #[serde(rename = "type")]
238 pub type_: ResponseHostedToolChoiceType,
239 #[serde(
240 default,
241 flatten,
242 skip_serializing_if = "std::collections::BTreeMap::is_empty"
243 )]
244 pub extra: Extra,
245}
246
247#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
248pub enum ResponseHostedToolChoiceType {
249 #[serde(rename = "file_search")]
250 FileSearch,
251 #[serde(rename = "web_search_preview")]
252 WebSearchPreview,
253 #[serde(rename = "computer")]
254 Computer,
255 #[serde(rename = "computer_use_preview")]
256 ComputerUsePreview,
257 #[serde(rename = "computer_use")]
258 ComputerUse,
259 #[serde(rename = "web_search_preview_2025_03_11")]
260 WebSearchPreview20250311,
261 #[serde(rename = "image_generation")]
262 ImageGeneration,
263 #[serde(rename = "code_interpreter")]
264 CodeInterpreter,
265}
266
267#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
268pub struct ResponseFunctionToolChoice {
269 #[serde(rename = "type")]
270 pub type_: FunctionToolChoiceType,
271 pub name: String,
272 #[serde(
273 default,
274 flatten,
275 skip_serializing_if = "std::collections::BTreeMap::is_empty"
276 )]
277 pub extra: Extra,
278}
279
280#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
281pub struct ResponseMcpToolChoice {
282 #[serde(rename = "type")]
283 pub type_: McpToolChoiceType,
284 pub server_label: String,
285 #[serde(skip_serializing_if = "Option::is_none")]
286 pub name: Option<String>,
287 #[serde(
288 default,
289 flatten,
290 skip_serializing_if = "std::collections::BTreeMap::is_empty"
291 )]
292 pub extra: Extra,
293}
294
295#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
296pub struct ResponseCustomToolChoice {
297 #[serde(rename = "type")]
298 pub type_: CustomToolChoiceType,
299 pub name: String,
300 #[serde(
301 default,
302 flatten,
303 skip_serializing_if = "std::collections::BTreeMap::is_empty"
304 )]
305 pub extra: Extra,
306}
307
308#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
309pub struct ResponseApplyPatchToolChoice {
310 #[serde(rename = "type")]
311 pub type_: ApplyPatchToolChoiceType,
312 #[serde(
313 default,
314 flatten,
315 skip_serializing_if = "std::collections::BTreeMap::is_empty"
316 )]
317 pub extra: Extra,
318}
319
320#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
321pub struct ResponseShellToolChoice {
322 #[serde(rename = "type")]
323 pub type_: ShellToolChoiceType,
324 #[serde(
325 default,
326 flatten,
327 skip_serializing_if = "std::collections::BTreeMap::is_empty"
328 )]
329 pub extra: Extra,
330}
331
332#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
333pub enum FunctionToolChoiceType {
334 #[serde(rename = "function")]
335 Function,
336}
337
338#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
339pub enum CustomToolChoiceType {
340 #[serde(rename = "custom")]
341 Custom,
342}
343
344#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
345pub enum McpToolChoiceType {
346 #[serde(rename = "mcp")]
347 Mcp,
348}
349
350#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
351pub enum ApplyPatchToolChoiceType {
352 #[serde(rename = "apply_patch")]
353 ApplyPatch,
354}
355
356#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
357pub enum ShellToolChoiceType {
358 #[serde(rename = "shell")]
359 Shell,
360}