walrus_core/model/
tool.rs1use compact_str::CompactString;
4use schemars::Schema;
5use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Clone, Deserialize, Serialize)]
9pub struct Tool {
10 pub name: CompactString,
12
13 pub description: CompactString,
15
16 pub parameters: Schema,
18
19 pub strict: bool,
21}
22
23#[derive(Debug, Clone, Default, Deserialize, Serialize)]
25pub struct ToolCall {
26 #[serde(default, skip_serializing_if = "CompactString::is_empty")]
28 pub id: CompactString,
29
30 #[serde(default, skip_serializing)]
32 pub index: u32,
33
34 #[serde(default, rename = "type")]
36 pub call_type: CompactString,
37
38 pub function: FunctionCall,
40}
41
42impl ToolCall {
43 pub fn merge(&mut self, call: &Self) {
45 if !call.id.is_empty() {
46 self.id = call.id.clone();
47 }
48 if !call.call_type.is_empty() {
49 self.call_type = call.call_type.clone();
50 }
51 if !call.function.name.is_empty() {
52 self.function.name = call.function.name.clone();
53 }
54 self.function.arguments.push_str(&call.function.arguments);
55 }
56}
57
58#[derive(Debug, Clone, Default, Deserialize, Serialize)]
60pub struct FunctionCall {
61 #[serde(default, skip_serializing_if = "CompactString::is_empty")]
63 pub name: CompactString,
64
65 #[serde(skip_serializing_if = "String::is_empty")]
67 pub arguments: String,
68}
69
70#[derive(Debug, Clone, Deserialize, Serialize, Default)]
72pub enum ToolChoice {
73 #[serde(rename = "none")]
75 None,
76
77 #[serde(rename = "auto")]
79 #[default]
80 Auto,
81
82 #[serde(rename = "required")]
84 Required,
85
86 Function(CompactString),
88}
89
90impl From<&str> for ToolChoice {
91 fn from(value: &str) -> Self {
92 ToolChoice::Function(value.into())
93 }
94}