diff --git a/crates/assistant2/src/thread.rs b/crates/assistant2/src/thread.rs index d9af2a4c1ddb4c4bca5bee57db81f751a66eb90c..e9469e57dc9af8393dfe34d1d9574521408391eb 100644 --- a/crates/assistant2/src/thread.rs +++ b/crates/assistant2/src/thread.rs @@ -636,7 +636,7 @@ impl Thread { Ok(output) => { tool_results.push(LanguageModelToolResult { tool_use_id: tool_use_id.clone(), - content: output, + content: output.into(), is_error: false, }); thread.pending_tool_uses_by_id.remove(&tool_use_id); @@ -646,14 +646,15 @@ impl Thread { Err(err) => { tool_results.push(LanguageModelToolResult { tool_use_id: tool_use_id.clone(), - content: err.to_string(), + content: err.to_string().into(), is_error: true, }); if let Some(tool_use) = thread.pending_tool_uses_by_id.get_mut(&tool_use_id) { - tool_use.status = PendingToolUseStatus::Error(err.to_string()); + tool_use.status = + PendingToolUseStatus::Error(err.to_string().into()); } cx.emit(ThreadEvent::ToolFinished { tool_use_id }); @@ -716,7 +717,7 @@ pub struct PendingToolUse { pub id: LanguageModelToolUseId, /// The ID of the Assistant message in which the tool use was requested. pub assistant_message_id: MessageId, - pub name: String, + pub name: Arc, pub input: serde_json::Value, pub status: PendingToolUseStatus, } @@ -725,7 +726,7 @@ pub struct PendingToolUse { pub enum PendingToolUseStatus { Idle, Running { _task: Shared> }, - Error(#[allow(unused)] String), + Error(#[allow(unused)] Arc), } impl PendingToolUseStatus { diff --git a/crates/language_model/src/language_model.rs b/crates/language_model/src/language_model.rs index 72ff92142d978b46cdcb82c220ebdd0de248a589..7f759e8586c08de1495bca8247336b3ad01b24cd 100644 --- a/crates/language_model/src/language_model.rs +++ b/crates/language_model/src/language_model.rs @@ -90,7 +90,7 @@ where #[derive(Debug, PartialEq, Eq, Hash, Clone, Serialize, Deserialize)] pub struct LanguageModelToolUse { pub id: LanguageModelToolUseId, - pub name: String, + pub name: Arc, pub input: serde_json::Value, } diff --git a/crates/language_model/src/request.rs b/crates/language_model/src/request.rs index ccc15af9521be8bbee99b641dcfa3b6b141c3cc3..7b36216b91096617234135d2080f4d0df7218795 100644 --- a/crates/language_model/src/request.rs +++ b/crates/language_model/src/request.rs @@ -1,4 +1,5 @@ use std::io::{Cursor, Write}; +use std::sync::Arc; use crate::role::Role; use crate::{LanguageModelToolUse, LanguageModelToolUseId}; @@ -167,7 +168,7 @@ impl LanguageModelImage { pub struct LanguageModelToolResult { pub tool_use_id: LanguageModelToolUseId, pub is_error: bool, - pub content: String, + pub content: Arc, } #[derive(Debug, Clone, Serialize, Deserialize, Eq, PartialEq, Hash)] @@ -199,15 +200,16 @@ pub struct LanguageModelRequestMessage { impl LanguageModelRequestMessage { pub fn string_contents(&self) -> String { - let mut string_buffer = String::new(); + let mut buffer = String::new(); for string in self.content.iter().filter_map(|content| match content { - MessageContent::Text(text) => Some(text), - MessageContent::ToolResult(tool_result) => Some(&tool_result.content), + MessageContent::Text(text) => Some(text.as_str()), + MessageContent::ToolResult(tool_result) => Some(tool_result.content.as_ref()), MessageContent::ToolUse(_) | MessageContent::Image(_) => None, }) { - string_buffer.push_str(string.as_str()) + buffer.push_str(string); } - string_buffer + + buffer } pub fn contents_empty(&self) -> bool { diff --git a/crates/language_models/src/provider/anthropic.rs b/crates/language_models/src/provider/anthropic.rs index aa1ccfe1ace2e3907b1142a365e11972888a483b..828ed020754fb71b98600baac586511e1825cc18 100644 --- a/crates/language_models/src/provider/anthropic.rs +++ b/crates/language_models/src/provider/anthropic.rs @@ -506,7 +506,7 @@ pub fn into_anthropic( MessageContent::ToolUse(tool_use) => { Some(anthropic::RequestContent::ToolUse { id: tool_use.id.to_string(), - name: tool_use.name, + name: tool_use.name.to_string(), input: tool_use.input, cache_control, }) @@ -515,7 +515,7 @@ pub fn into_anthropic( Some(anthropic::RequestContent::ToolResult { tool_use_id: tool_result.tool_use_id.to_string(), is_error: tool_result.is_error, - content: tool_result.content, + content: tool_result.content.to_string(), cache_control, }) } @@ -636,7 +636,7 @@ pub fn map_to_language_model_completion_events( Ok(LanguageModelCompletionEvent::ToolUse( LanguageModelToolUse { id: tool_use.id.into(), - name: tool_use.name, + name: tool_use.name.into(), input: if tool_use.input_json.is_empty() { serde_json::Value::Null } else { diff --git a/crates/language_models/src/provider/bedrock.rs b/crates/language_models/src/provider/bedrock.rs index 954d068c74d5c8992ba369b05eb455ed6a95ea32..4294a1ba723e281d5a4899d034275010b0556a4e 100644 --- a/crates/language_models/src/provider/bedrock.rs +++ b/crates/language_models/src/provider/bedrock.rs @@ -731,7 +731,7 @@ pub fn map_to_language_model_completion_events( Ok(LanguageModelCompletionEvent::ToolUse( LanguageModelToolUse { id: tool_use.id.into(), - name: tool_use.name, + name: tool_use.name.into(), input: if tool_use.input_json.is_empty() { Value::Null