Skip to main content

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

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    /// Bounds the advisor's total output (thinking + text) per call.
332    #[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}