Skip to main content

gproxy_protocol/protocol/claude/common/tools/
defs.rs

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