diff --git a/crates/anthropic/src/anthropic.rs b/crates/anthropic/src/anthropic.rs index 38b4f5466c..cb41d9cf1a 100644 --- a/crates/anthropic/src/anthropic.rs +++ b/crates/anthropic/src/anthropic.rs @@ -337,7 +337,7 @@ pub fn extract_text_from_events( match response { Ok(response) => match response { Event::ContentBlockStart { content_block, .. } => match content_block { - Content::Text { text, .. } => Some(Ok(text)), + ResponseContent::Text { text, .. } => Some(Ok(text)), _ => None, }, Event::ContentBlockDelta { delta, .. } => match delta { @@ -363,7 +363,7 @@ pub async fn extract_tool_args_from_events( content_block, } = event? { - if let Content::ToolUse { name, .. } = content_block { + if let ResponseContent::ToolUse { name, .. } = content_block { if name == tool_name { tool_use_index = Some(index); break; @@ -411,7 +411,7 @@ pub struct CacheControl { #[derive(Debug, Serialize, Deserialize)] pub struct Message { pub role: Role, - pub content: Vec, + pub content: Vec, } #[derive(Debug, Serialize, Deserialize, Eq, PartialEq, Hash)] @@ -423,7 +423,7 @@ pub enum Role { #[derive(Debug, Serialize, Deserialize)] #[serde(tag = "type")] -pub enum Content { +pub enum RequestContent { #[serde(rename = "text")] Text { text: String, @@ -444,10 +444,22 @@ pub enum Content { #[serde(skip_serializing_if = "Option::is_none")] cache_control: Option, }, - #[serde(rename = "tool_result")] - ToolResult { - tool_use_id: String, - content: String, +} + +#[derive(Debug, Serialize, Deserialize)] +#[serde(tag = "type")] +pub enum ResponseContent { + #[serde(rename = "text")] + Text { + text: String, + #[serde(skip_serializing_if = "Option::is_none")] + cache_control: Option, + }, + #[serde(rename = "tool_use")] + ToolUse { + id: String, + name: String, + input: serde_json::Value, #[serde(skip_serializing_if = "Option::is_none")] cache_control: Option, }, @@ -525,7 +537,7 @@ pub struct Response { #[serde(rename = "type")] pub response_type: String, pub role: Role, - pub content: Vec, + pub content: Vec, pub model: String, #[serde(default, skip_serializing_if = "Option::is_none")] pub stop_reason: Option, @@ -542,7 +554,7 @@ pub enum Event { #[serde(rename = "content_block_start")] ContentBlockStart { index: usize, - content_block: Content, + content_block: ResponseContent, }, #[serde(rename = "content_block_delta")] ContentBlockDelta { index: usize, delta: ContentDelta }, diff --git a/crates/language_model/src/request.rs b/crates/language_model/src/request.rs index ef30d1904b..bd9804ea0a 100644 --- a/crates/language_model/src/request.rs +++ b/crates/language_model/src/request.rs @@ -304,17 +304,17 @@ impl LanguageModelRequest { } else { None }; - let anthropic_message_content: Vec = message + let anthropic_message_content: Vec = message .content .into_iter() .filter_map(|content| match content { MessageContent::Text(t) if !t.is_empty() => { - Some(anthropic::Content::Text { + Some(anthropic::RequestContent::Text { text: t, cache_control, }) } - MessageContent::Image(i) => Some(anthropic::Content::Image { + MessageContent::Image(i) => Some(anthropic::RequestContent::Image { source: anthropic::ImageSource { source_type: "base64".to_string(), media_type: "image/png".to_string(),