use schemars::Schema;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct Tool {
pub name: String,
pub description: String,
pub parameters: Schema,
pub strict: bool,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct ToolCall {
#[serde(default, skip_serializing_if = "String::is_empty")]
pub id: String,
#[serde(default, skip_serializing)]
pub index: u32,
#[serde(default, rename = "type")]
pub call_type: String,
pub function: FunctionCall,
}
impl ToolCall {
pub fn merge(&mut self, call: &Self) {
if !call.id.is_empty() {
self.id = call.id.clone();
}
if !call.call_type.is_empty() {
self.call_type = call.call_type.clone();
}
if !call.function.name.is_empty() {
self.function.name = call.function.name.clone();
}
self.function.arguments.push_str(&call.function.arguments);
}
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct FunctionCall {
#[serde(default, skip_serializing_if = "String::is_empty")]
pub name: String,
#[serde(skip_serializing_if = "String::is_empty")]
pub arguments: String,
}
pub use crabllm_core::ToolChoice;