@@ -55,10 +55,24 @@ pub struct CreateMessageRequest {
5555}
5656
5757#[ derive( Debug , Clone , Serialize , Deserialize ) ]
58- pub struct Tool {
59- pub name : String ,
60- pub description : String ,
61- pub input_schema : serde_json:: Value ,
58+ #[ serde( untagged) ]
59+ pub enum Tool {
60+ Regular {
61+ name : String ,
62+ description : String ,
63+ input_schema : serde_json:: Value ,
64+ } ,
65+ WebSearch {
66+ #[ serde( rename = "type" ) ]
67+ tool_type : String ,
68+ name : String ,
69+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
70+ max_uses : Option < u32 > ,
71+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
72+ allowed_domains : Option < Vec < String > > ,
73+ #[ serde( skip_serializing_if = "Option::is_none" ) ]
74+ blocked_domains : Option < Vec < String > > ,
75+ } ,
6276}
6377
6478#[ derive( Debug , Deserialize ) ]
@@ -89,6 +103,27 @@ pub enum ContentBlock {
89103 name : String ,
90104 input : serde_json:: Value ,
91105 } ,
106+ #[ serde( rename = "server_tool_use" ) ]
107+ ServerToolUse {
108+ id : String ,
109+ name : String ,
110+ input : serde_json:: Value ,
111+ } ,
112+ #[ serde( rename = "web_search_tool_result" ) ]
113+ WebSearchToolResult {
114+ tool_use_id : String ,
115+ content : Vec < WebSearchResult > ,
116+ } ,
117+ }
118+
119+ #[ derive( Debug , Clone , Serialize , Deserialize ) ]
120+ pub struct WebSearchResult {
121+ #[ serde( rename = "type" ) ]
122+ pub result_type : String ,
123+ pub url : String ,
124+ pub title : String ,
125+ pub encrypted_content : String ,
126+ pub page_age : Option < String > ,
92127}
93128
94129#[ derive( Debug , Clone , Serialize , Deserialize ) ]
@@ -107,6 +142,17 @@ pub enum MessageContentBlock {
107142 tool_use_id : String ,
108143 content : String ,
109144 } ,
145+ #[ serde( rename = "server_tool_use" ) ]
146+ ServerToolUse {
147+ id : String ,
148+ name : String ,
149+ input : serde_json:: Value ,
150+ } ,
151+ #[ serde( rename = "web_search_tool_result" ) ]
152+ WebSearchToolResult {
153+ tool_use_id : String ,
154+ content : Vec < WebSearchResult > ,
155+ } ,
110156}
111157
112158impl MessageContentBlock {
@@ -118,10 +164,30 @@ impl MessageContentBlock {
118164 name : name. clone ( ) ,
119165 input : input. clone ( ) ,
120166 } ,
167+ ContentBlock :: ServerToolUse { id, name, input } => MessageContentBlock :: ServerToolUse {
168+ id : id. clone ( ) ,
169+ name : name. clone ( ) ,
170+ input : input. clone ( ) ,
171+ } ,
172+ ContentBlock :: WebSearchToolResult { tool_use_id, content } => {
173+ MessageContentBlock :: WebSearchToolResult {
174+ tool_use_id : tool_use_id. clone ( ) ,
175+ content : content. clone ( ) ,
176+ }
177+ }
121178 }
122179 }
123180}
124181
182+ #[ derive( Debug , Clone , Serialize , Deserialize ) ]
183+ #[ serde( tag = "type" ) ]
184+ pub enum _ContentDelta {
185+ #[ serde( rename = "text_delta" ) ]
186+ TextDelta { text : String } ,
187+ #[ serde( rename = "input_json_delta" ) ]
188+ InputJsonDelta { partial_json : String } ,
189+ }
190+
125191#[ derive( Debug , Deserialize ) ]
126192pub struct Usage {
127193 #[ serde( rename = "input_tokens" ) ]
@@ -160,12 +226,3 @@ pub enum _StreamEventType {
160226 #[ serde( rename = "ping" ) ]
161227 Ping ,
162228}
163-
164- #[ derive( Debug , Clone , Deserialize ) ]
165- #[ serde( tag = "type" ) ]
166- pub enum _ContentDelta {
167- #[ serde( rename = "text_delta" ) ]
168- TextDelta { text : String } ,
169- #[ serde( rename = "input_json_delta" ) ]
170- InputJsonDelta { partial_json : String } ,
171- }
0 commit comments