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