use super::ToolCall;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ToolResponse {
pub call_id: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub fn_name: Option<String>,
pub content: String,
}
impl ToolResponse {
pub fn new(tool_call_id: impl Into<String>, content: impl Into<String>) -> Self {
Self {
call_id: tool_call_id.into(),
fn_name: None,
content: content.into(),
}
}
pub fn from_tool_call(tool_call: &ToolCall, content: impl Into<String>) -> Self {
Self {
call_id: tool_call.call_id.clone(),
fn_name: Some(tool_call.fn_name.clone()),
content: content.into(),
}
}
pub fn with_fn_name(mut self, fn_name: impl Into<String>) -> Self {
self.fn_name = Some(fn_name.into());
self
}
}
impl ToolResponse {
pub fn size(&self) -> usize {
self.call_id.len() + self.fn_name.as_ref().map(|name| name.len()).unwrap_or(0) + self.content.len()
}
}
#[allow(unused)]
impl ToolResponse {
fn tool_call_id(&self) -> &str {
&self.call_id
}
fn fn_name(&self) -> Option<&str> {
self.fn_name.as_deref()
}
fn content(&self) -> &str {
&self.content
}
}