1use serde::{Deserialize, Serialize};
2
3use super::super::{CacheControl, CitationConfig, ClaudeModel, McpToolset, TypedObject};
4use super::{CustomToolType, JsonSchema, ToolCommon, ToolCommonWithoutInputExamples, UserLocation};
5
6#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
7#[serde(untagged)]
8pub enum Tool {
9 WebFetch(WebFetchTool),
10 WebSearch(WebSearchTool),
11 Advisor(AdvisorTool),
12 Computer(ComputerTool),
13 TextEditor(TextEditorTool),
14 Command(CommandTool),
15 McpToolset(McpToolset),
16 Custom(CustomTool),
17 Unknown(TypedObject),
18}
19
20#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
21pub struct CustomTool {
22 pub input_schema: JsonSchema,
23 pub name: String,
24 #[serde(rename = "type", skip_serializing_if = "Option::is_none")]
25 pub type_: Option<CustomToolType>,
26 #[serde(skip_serializing_if = "Option::is_none")]
27 pub description: Option<String>,
28 #[serde(skip_serializing_if = "Option::is_none")]
29 pub eager_input_streaming: Option<bool>,
30 #[serde(flatten)]
31 pub common: ToolCommon,
32}
33
34#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
35#[serde(untagged)]
36pub enum CommandTool {
37 Bash20241022(BashTool20241022),
38 Bash20250124(BashTool20250124),
39 CodeExecution20250522(CodeExecutionTool20250522),
40 CodeExecution20250825(CodeExecutionTool20250825),
41 CodeExecution20260120(CodeExecutionTool20260120),
42 CodeExecution20260521(CodeExecutionTool20260521),
43 Memory20250818(MemoryTool20250818),
44 ToolSearchBm25(ToolSearchBm25Tool),
45 ToolSearchRegex(ToolSearchRegexTool),
46}
47
48#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
49pub struct BashTool20241022 {
50 pub name: BashToolName,
51 #[serde(rename = "type")]
52 pub type_: BashTool20241022Type,
53 #[serde(flatten)]
54 pub common: ToolCommon,
55}
56
57#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
58pub struct BashTool20250124 {
59 pub name: BashToolName,
60 #[serde(rename = "type")]
61 pub type_: BashTool20250124Type,
62 #[serde(flatten)]
63 pub common: ToolCommon,
64}
65
66#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
67pub struct CodeExecutionTool20250522 {
68 pub name: CodeExecutionToolName,
69 #[serde(rename = "type")]
70 pub type_: CodeExecutionTool20250522Type,
71 #[serde(flatten)]
72 pub common: ToolCommonWithoutInputExamples,
73}
74
75#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
76pub struct CodeExecutionTool20250825 {
77 pub name: CodeExecutionToolName,
78 #[serde(rename = "type")]
79 pub type_: CodeExecutionTool20250825Type,
80 #[serde(flatten)]
81 pub common: ToolCommonWithoutInputExamples,
82}
83
84#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
85pub struct CodeExecutionTool20260120 {
86 pub name: CodeExecutionToolName,
87 #[serde(rename = "type")]
88 pub type_: CodeExecutionTool20260120Type,
89 #[serde(flatten)]
90 pub common: ToolCommonWithoutInputExamples,
91}
92
93#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
94pub struct CodeExecutionTool20260521 {
95 pub name: CodeExecutionToolName,
96 #[serde(rename = "type")]
97 pub type_: CodeExecutionTool20260521Type,
98 #[serde(flatten)]
99 pub common: ToolCommonWithoutInputExamples,
100}
101
102#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
103pub struct MemoryTool20250818 {
104 pub name: MemoryToolName,
105 #[serde(rename = "type")]
106 pub type_: MemoryTool20250818Type,
107 #[serde(flatten)]
108 pub common: ToolCommon,
109}
110
111#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
112pub struct ToolSearchBm25Tool {
113 pub name: ToolSearchBm25ToolName,
114 #[serde(rename = "type")]
115 pub type_: ToolSearchBm25ToolType,
116 #[serde(flatten)]
117 pub common: ToolCommonWithoutInputExamples,
118}
119
120#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
121pub struct ToolSearchRegexTool {
122 pub name: ToolSearchRegexToolName,
123 #[serde(rename = "type")]
124 pub type_: ToolSearchRegexToolType,
125 #[serde(flatten)]
126 pub common: ToolCommonWithoutInputExamples,
127}
128
129#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
130#[serde(untagged)]
131pub enum TextEditorTool {
132 TextEditor20241022(TextEditorTool20241022),
133 TextEditor20250124(TextEditorTool20250124),
134 TextEditor20250429(TextEditorTool20250429),
135 TextEditor20250728(TextEditorTool20250728),
136}
137
138#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
139pub struct TextEditorTool20241022 {
140 pub name: StrReplaceEditorToolName,
141 #[serde(rename = "type")]
142 pub type_: TextEditorTool20241022Type,
143 #[serde(flatten)]
144 pub common: ToolCommon,
145}
146
147#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
148pub struct TextEditorTool20250124 {
149 pub name: StrReplaceEditorToolName,
150 #[serde(rename = "type")]
151 pub type_: TextEditorTool20250124Type,
152 #[serde(flatten)]
153 pub common: ToolCommon,
154}
155
156#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
157pub struct TextEditorTool20250429 {
158 pub name: StrReplaceBasedEditToolName,
159 #[serde(rename = "type")]
160 pub type_: TextEditorTool20250429Type,
161 #[serde(flatten)]
162 pub common: ToolCommon,
163}
164
165#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
166pub struct TextEditorTool20250728 {
167 pub name: StrReplaceBasedEditToolName,
168 #[serde(rename = "type")]
169 pub type_: TextEditorTool20250728Type,
170 #[serde(skip_serializing_if = "Option::is_none")]
171 pub max_characters: Option<u64>,
172 #[serde(flatten)]
173 pub common: ToolCommon,
174}
175
176#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
177#[serde(untagged)]
178pub enum ComputerTool {
179 Computer20241022(ComputerTool20241022),
180 Computer20250124(ComputerTool20250124),
181 Computer20251124(ComputerTool20251124),
182}
183
184#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
185pub struct ComputerTool20241022 {
186 pub display_height_px: u64,
187 pub display_width_px: u64,
188 pub name: ComputerToolName,
189 #[serde(rename = "type")]
190 pub type_: ComputerTool20241022Type,
191 #[serde(skip_serializing_if = "Option::is_none")]
192 pub display_number: Option<u64>,
193 #[serde(flatten)]
194 pub common: ToolCommon,
195}
196
197#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
198pub struct ComputerTool20250124 {
199 pub display_height_px: u64,
200 pub display_width_px: u64,
201 pub name: ComputerToolName,
202 #[serde(rename = "type")]
203 pub type_: ComputerTool20250124Type,
204 #[serde(skip_serializing_if = "Option::is_none")]
205 pub display_number: Option<u64>,
206 #[serde(flatten)]
207 pub common: ToolCommon,
208}
209
210#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
211pub struct ComputerTool20251124 {
212 pub display_height_px: u64,
213 pub display_width_px: u64,
214 pub name: ComputerToolName,
215 #[serde(rename = "type")]
216 pub type_: ComputerTool20251124Type,
217 #[serde(skip_serializing_if = "Option::is_none")]
218 pub display_number: Option<u64>,
219 #[serde(skip_serializing_if = "Option::is_none")]
220 pub enable_zoom: Option<bool>,
221 #[serde(flatten)]
222 pub common: ToolCommon,
223}
224
225#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
226#[serde(untagged)]
227pub enum WebSearchTool {
228 WebSearch20250305(WebSearchTool20250305),
229 WebSearch20260209(WebSearchTool20260209),
230}
231
232#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
233pub struct WebSearchTool20250305 {
234 pub name: WebSearchToolName,
235 #[serde(rename = "type")]
236 pub type_: WebSearchTool20250305Type,
237 #[serde(flatten)]
238 pub params: WebSearchToolParams,
239 #[serde(flatten)]
240 pub common: ToolCommonWithoutInputExamples,
241}
242
243#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
244pub struct WebSearchTool20260209 {
245 pub name: WebSearchToolName,
246 #[serde(rename = "type")]
247 pub type_: WebSearchTool20260209Type,
248 #[serde(flatten)]
249 pub params: WebSearchToolParams,
250 #[serde(flatten)]
251 pub common: ToolCommonWithoutInputExamples,
252}
253
254#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
255pub struct WebSearchToolParams {
256 #[serde(skip_serializing_if = "Option::is_none")]
257 pub allowed_domains: Option<Vec<String>>,
258 #[serde(skip_serializing_if = "Option::is_none")]
259 pub blocked_domains: Option<Vec<String>>,
260 #[serde(skip_serializing_if = "Option::is_none")]
261 pub max_uses: Option<u64>,
262 #[serde(skip_serializing_if = "Option::is_none")]
263 pub user_location: Option<UserLocation>,
264}
265
266#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
267#[serde(untagged)]
268pub enum WebFetchTool {
269 WebFetch20250910(WebFetchTool20250910),
270 WebFetch20260209(WebFetchTool20260209),
271 WebFetch20260309(WebFetchTool20260309),
272}
273
274#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
275pub struct WebFetchTool20250910 {
276 pub name: WebFetchToolName,
277 #[serde(rename = "type")]
278 pub type_: WebFetchTool20250910Type,
279 #[serde(flatten)]
280 pub params: WebFetchToolParams,
281 #[serde(flatten)]
282 pub common: ToolCommonWithoutInputExamples,
283}
284
285#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
286pub struct WebFetchTool20260209 {
287 pub name: WebFetchToolName,
288 #[serde(rename = "type")]
289 pub type_: WebFetchTool20260209Type,
290 #[serde(flatten)]
291 pub params: WebFetchToolParams,
292 #[serde(flatten)]
293 pub common: ToolCommonWithoutInputExamples,
294}
295
296#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
297pub struct WebFetchTool20260309 {
298 pub name: WebFetchToolName,
299 #[serde(rename = "type")]
300 pub type_: WebFetchTool20260309Type,
301 #[serde(flatten)]
302 pub params: WebFetchToolParams,
303 #[serde(skip_serializing_if = "Option::is_none")]
304 pub use_cache: Option<bool>,
305 #[serde(flatten)]
306 pub common: ToolCommonWithoutInputExamples,
307}
308
309#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
310pub struct WebFetchToolParams {
311 #[serde(skip_serializing_if = "Option::is_none")]
312 pub allowed_domains: Option<Vec<String>>,
313 #[serde(skip_serializing_if = "Option::is_none")]
314 pub blocked_domains: Option<Vec<String>>,
315 #[serde(skip_serializing_if = "Option::is_none")]
316 pub citations: Option<CitationConfig>,
317 #[serde(skip_serializing_if = "Option::is_none")]
318 pub max_content_tokens: Option<u64>,
319 #[serde(skip_serializing_if = "Option::is_none")]
320 pub max_uses: Option<u64>,
321}
322
323#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
324pub struct AdvisorTool {
325 pub model: ClaudeModel,
326 pub name: AdvisorToolName,
327 #[serde(rename = "type")]
328 pub type_: AdvisorTool20260301Type,
329 #[serde(skip_serializing_if = "Option::is_none")]
330 pub caching: Option<CacheControl>,
331 #[serde(skip_serializing_if = "Option::is_none")]
333 pub max_tokens: Option<u64>,
334 #[serde(skip_serializing_if = "Option::is_none")]
335 pub max_uses: Option<u64>,
336 #[serde(flatten)]
337 pub common: ToolCommonWithoutInputExamples,
338}
339
340macro_rules! single_wire_enum {
341 ($name:ident { $variant:ident => $wire:literal }) => {
342 #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
343 pub enum $name {
344 #[serde(rename = $wire)]
345 $variant,
346 }
347 };
348}
349
350single_wire_enum!(BashToolName { Bash => "bash" });
351single_wire_enum!(BashTool20241022Type { Bash20241022 => "bash_20241022" });
352single_wire_enum!(BashTool20250124Type { Bash20250124 => "bash_20250124" });
353single_wire_enum!(CodeExecutionToolName { CodeExecution => "code_execution" });
354single_wire_enum!(CodeExecutionTool20250522Type { CodeExecution20250522 => "code_execution_20250522" });
355single_wire_enum!(CodeExecutionTool20250825Type { CodeExecution20250825 => "code_execution_20250825" });
356single_wire_enum!(CodeExecutionTool20260120Type { CodeExecution20260120 => "code_execution_20260120" });
357single_wire_enum!(CodeExecutionTool20260521Type { CodeExecution20260521 => "code_execution_20260521" });
358single_wire_enum!(MemoryToolName { Memory => "memory" });
359single_wire_enum!(MemoryTool20250818Type { Memory20250818 => "memory_20250818" });
360single_wire_enum!(ToolSearchBm25ToolName { ToolSearchBm25 => "tool_search_tool_bm25" });
361single_wire_enum!(ToolSearchRegexToolName { ToolSearchRegex => "tool_search_tool_regex" });
362single_wire_enum!(StrReplaceEditorToolName { StrReplaceEditor => "str_replace_editor" });
363single_wire_enum!(StrReplaceBasedEditToolName { StrReplaceBasedEditTool => "str_replace_based_edit_tool" });
364single_wire_enum!(TextEditorTool20241022Type { TextEditor20241022 => "text_editor_20241022" });
365single_wire_enum!(TextEditorTool20250124Type { TextEditor20250124 => "text_editor_20250124" });
366single_wire_enum!(TextEditorTool20250429Type { TextEditor20250429 => "text_editor_20250429" });
367single_wire_enum!(TextEditorTool20250728Type { TextEditor20250728 => "text_editor_20250728" });
368single_wire_enum!(ComputerToolName { Computer => "computer" });
369single_wire_enum!(ComputerTool20241022Type { Computer20241022 => "computer_20241022" });
370single_wire_enum!(ComputerTool20250124Type { Computer20250124 => "computer_20250124" });
371single_wire_enum!(ComputerTool20251124Type { Computer20251124 => "computer_20251124" });
372single_wire_enum!(WebSearchToolName { WebSearch => "web_search" });
373single_wire_enum!(WebSearchTool20250305Type { WebSearch20250305 => "web_search_20250305" });
374single_wire_enum!(WebSearchTool20260209Type { WebSearch20260209 => "web_search_20260209" });
375single_wire_enum!(WebFetchToolName { WebFetch => "web_fetch" });
376single_wire_enum!(WebFetchTool20250910Type { WebFetch20250910 => "web_fetch_20250910" });
377single_wire_enum!(WebFetchTool20260209Type { WebFetch20260209 => "web_fetch_20260209" });
378single_wire_enum!(WebFetchTool20260309Type { WebFetch20260309 => "web_fetch_20260309" });
379single_wire_enum!(AdvisorToolName { Advisor => "advisor" });
380single_wire_enum!(AdvisorTool20260301Type { Advisor20260301 => "advisor_20260301" });
381
382#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
383pub enum ToolSearchBm25ToolType {
384 #[serde(rename = "tool_search_tool_bm25_20251119")]
385 ToolSearchBm2520251119,
386 #[serde(rename = "tool_search_tool_bm25")]
387 ToolSearchBm25,
388}
389
390#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
391pub enum ToolSearchRegexToolType {
392 #[serde(rename = "tool_search_tool_regex_20251119")]
393 ToolSearchRegex20251119,
394 #[serde(rename = "tool_search_tool_regex")]
395 ToolSearchRegex,
396}