diff options
Diffstat (limited to 'src/client/message.rs')
| -rw-r--r-- | src/client/message.rs | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/src/client/message.rs b/src/client/message.rs index 77adf47..061c0e2 100644 --- a/src/client/message.rs +++ b/src/client/message.rs @@ -1,5 +1,7 @@ use super::ToolResults; +use crate::utils::dimmed_text; + use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, Deserialize, Serialize)] @@ -53,6 +55,7 @@ pub enum MessageRole { System, Assistant, User, + Tool, } #[allow(dead_code)] @@ -76,7 +79,11 @@ pub enum MessageContent { } impl MessageContent { - pub fn render_input(&self, resolve_url_fn: impl Fn(&str) -> String) -> String { + pub fn render_input( + &self, + resolve_url_fn: impl Fn(&str) -> String, + agent_info: &Option<(String, Vec<String>)>, + ) -> String { match self { MessageContent::Text(text) => text.to_string(), MessageContent::Array(list) => { @@ -96,7 +103,27 @@ impl MessageContent { } format!(".file {}{}", files.join(" "), concated_text) } - MessageContent::ToolResults(_) => String::new(), + MessageContent::ToolResults(results) => { + let ToolResults { + tool_results, text, .. + } = results; + let mut lines = vec![]; + if !text.is_empty() { + lines.push(text.clone()) + } + for tool_result in tool_results { + let mut parts = vec!["Call".to_string()]; + if let Some((agent_name, functions)) = agent_info { + if functions.contains(&tool_result.call.name) { + parts.push(agent_name.clone()) + } + } + parts.push(tool_result.call.name.clone()); + parts.push(tool_result.call.arguments.to_string()); + lines.push(dimmed_text(&parts.join(" "))); + } + lines.join("\n") + } } } |
