Skip to main content

simple_agent_type/
tool.rs

1//! Tool calling types for function/tool integrations.
2
3use serde::{Deserialize, Serialize};
4use serde_json::Value;
5
6/// Tool type supported by the API.
7#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
8#[serde(rename_all = "snake_case")]
9pub enum ToolType {
10    /// Function tool (OpenAI-compatible).
11    Function,
12}
13
14/// Function tool definition.
15#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
16pub struct ToolFunction {
17    /// Function name.
18    pub name: String,
19    /// Optional description.
20    #[serde(skip_serializing_if = "Option::is_none")]
21    pub description: Option<String>,
22    /// JSON schema for parameters.
23    #[serde(skip_serializing_if = "Option::is_none")]
24    pub parameters: Option<Value>,
25}
26
27/// Tool definition for requests.
28#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
29pub struct ToolDefinition {
30    /// Tool type.
31    #[serde(rename = "type")]
32    pub tool_type: ToolType,
33    /// Function payload (required for function tools).
34    pub function: ToolFunction,
35}
36
37/// Tool choice mode for requests.
38#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
39#[serde(rename_all = "snake_case")]
40pub enum ToolChoiceMode {
41    /// Let the model decide.
42    Auto,
43    /// Disable tool calling.
44    None,
45}
46
47/// Tool choice specifying a concrete function to call.
48#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
49pub struct ToolChoiceTool {
50    /// Tool type.
51    #[serde(rename = "type")]
52    pub tool_type: ToolType,
53    /// Function name.
54    pub function: ToolChoiceFunction,
55}
56
57/// Function selector for tool choice.
58#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
59pub struct ToolChoiceFunction {
60    /// Function name to call.
61    pub name: String,
62}
63
64/// Tool choice for requests.
65#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
66#[serde(untagged)]
67pub enum ToolChoice {
68    /// "auto" or "none".
69    Mode(ToolChoiceMode),
70    /// Specific tool selection.
71    Tool(ToolChoiceTool),
72}
73
74/// Tool call function payload in responses.
75#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
76pub struct ToolCallFunction {
77    /// Function name.
78    pub name: String,
79    /// JSON arguments as a string.
80    pub arguments: String,
81}
82
83/// Tool call emitted by the model.
84#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
85pub struct ToolCall {
86    /// Tool call identifier.
87    pub id: String,
88    /// Tool type.
89    #[serde(rename = "type")]
90    pub tool_type: ToolType,
91    /// Function payload.
92    pub function: ToolCallFunction,
93}