Skip to main content

gproxy_protocol/protocol/claude/common/server_tools/
results.rs

1use serde::{Deserialize, Serialize};
2
3use super::super::{CacheControl, Caller, JsonObject, WebSearchResultBlock};
4use super::{
5    AdvisorRedactedResultBlock, AdvisorResultBlock, AdvisorToolResultError,
6    BashCodeExecutionResultBlock, BashCodeExecutionToolResultError, CodeExecutionResultBlock,
7    CodeExecutionToolResultError, EncryptedCodeExecutionResultBlock,
8    TextEditorCodeExecutionCreateResultBlock, TextEditorCodeExecutionStrReplaceResultBlock,
9    TextEditorCodeExecutionToolResultError, TextEditorCodeExecutionViewResultBlock,
10    ToolSearchToolResultError, ToolSearchToolSearchResultBlock, WebFetchResultBlock,
11    WebFetchToolResultError, WebSearchToolResultError,
12};
13
14#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
15#[serde(untagged)]
16#[non_exhaustive]
17pub enum WebSearchToolResultContent {
18    Error(WebSearchToolResultError),
19    Results(Vec<WebSearchResultBlock>),
20}
21
22#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
23#[serde(untagged)]
24#[non_exhaustive]
25pub enum WebFetchToolResultContent {
26    Error(WebFetchToolResultError),
27    Result(WebFetchResultBlock),
28}
29
30#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
31#[serde(untagged)]
32#[non_exhaustive]
33pub enum AdvisorToolResultContent {
34    Error(AdvisorToolResultError),
35    Result(AdvisorResultBlock),
36    Redacted(AdvisorRedactedResultBlock),
37}
38
39#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
40#[serde(untagged)]
41#[non_exhaustive]
42pub enum CodeExecutionToolResultContent {
43    Error(CodeExecutionToolResultError),
44    Result(CodeExecutionResultBlock),
45    Encrypted(EncryptedCodeExecutionResultBlock),
46}
47
48#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
49#[serde(untagged)]
50#[non_exhaustive]
51pub enum BashCodeExecutionToolResultContent {
52    Error(BashCodeExecutionToolResultError),
53    Result(BashCodeExecutionResultBlock),
54}
55
56#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
57#[serde(untagged)]
58#[non_exhaustive]
59pub enum TextEditorCodeExecutionToolResultContent {
60    Error(TextEditorCodeExecutionToolResultError),
61    View(TextEditorCodeExecutionViewResultBlock),
62    Create(TextEditorCodeExecutionCreateResultBlock),
63    StrReplace(TextEditorCodeExecutionStrReplaceResultBlock),
64}
65
66#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
67#[serde(untagged)]
68#[non_exhaustive]
69pub enum ToolSearchToolResultContent {
70    Error(ToolSearchToolResultError),
71    Result(ToolSearchToolSearchResultBlock),
72}
73
74#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
75#[non_exhaustive]
76pub struct WebFetchToolResultBlock {
77    pub content: WebFetchToolResultContent,
78    pub tool_use_id: String,
79    #[serde(rename = "type")]
80    pub type_: WebFetchToolResultBlockType,
81    #[serde(skip_serializing_if = "Option::is_none")]
82    pub cache_control: Option<CacheControl>,
83    #[serde(skip_serializing_if = "Option::is_none")]
84    pub caller: Option<Caller>,
85    #[serde(default, flatten, skip_serializing_if = "JsonObject::is_empty")]
86    pub extra: JsonObject,
87}
88
89#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
90#[non_exhaustive]
91pub enum WebFetchToolResultBlockType {
92    #[serde(rename = "web_fetch_tool_result")]
93    WebFetchToolResult,
94}
95
96macro_rules! server_tool_result_block {
97    ($block:ident, $content:ident, $tag:ident, $wire:literal, $variant:ident) => {
98        #[derive(
99            Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder,
100        )]
101        #[non_exhaustive]
102        pub struct $block {
103            pub content: $content,
104            pub tool_use_id: String,
105            #[serde(rename = "type")]
106            pub type_: $tag,
107            #[serde(skip_serializing_if = "Option::is_none")]
108            pub cache_control: Option<CacheControl>,
109            #[serde(default, flatten, skip_serializing_if = "JsonObject::is_empty")]
110            pub extra: JsonObject,
111        }
112
113        #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
114        #[non_exhaustive]
115        pub enum $tag {
116            #[serde(rename = $wire)]
117            $variant,
118        }
119    };
120}
121
122server_tool_result_block!(
123    AdvisorToolResultBlock,
124    AdvisorToolResultContent,
125    AdvisorToolResultBlockType,
126    "advisor_tool_result",
127    AdvisorToolResult
128);
129server_tool_result_block!(
130    CodeExecutionToolResultBlock,
131    CodeExecutionToolResultContent,
132    CodeExecutionToolResultBlockType,
133    "code_execution_tool_result",
134    CodeExecutionToolResult
135);
136server_tool_result_block!(
137    BashCodeExecutionToolResultBlock,
138    BashCodeExecutionToolResultContent,
139    BashCodeExecutionToolResultBlockType,
140    "bash_code_execution_tool_result",
141    BashCodeExecutionToolResult
142);
143server_tool_result_block!(
144    TextEditorCodeExecutionToolResultBlock,
145    TextEditorCodeExecutionToolResultContent,
146    TextEditorCodeExecutionToolResultBlockType,
147    "text_editor_code_execution_tool_result",
148    TextEditorCodeExecutionToolResult
149);
150server_tool_result_block!(
151    ToolSearchToolResultBlock,
152    ToolSearchToolResultContent,
153    ToolSearchToolResultBlockType,
154    "tool_search_tool_result",
155    ToolSearchToolResult
156);