Skip to main content

litellm_rs/sdk/types/
tool.rs

1use serde::{Deserialize, Serialize};
2
3/// Tool call
4#[derive(Debug, Clone, Serialize, Deserialize)]
5pub struct ToolCall {
6    /// Call ID
7    pub id: String,
8    /// Tool type
9    #[serde(rename = "type")]
10    pub tool_type: String,
11    /// Function call
12    pub function: Function,
13}
14
15/// Function definition
16#[derive(Debug, Clone, Serialize, Deserialize)]
17pub struct Function {
18    /// Function name
19    pub name: String,
20    /// Function description
21    #[serde(skip_serializing_if = "Option::is_none")]
22    pub description: Option<String>,
23    /// Function parameter schema
24    #[serde(default, skip_serializing_if = "serde_json::Value::is_null")]
25    pub parameters: serde_json::Value,
26    /// Function parameters (used for calls)
27    #[serde(skip_serializing_if = "Option::is_none")]
28    pub arguments: Option<String>,
29}
30
31/// Tool definition
32#[derive(Debug, Clone, Serialize, Deserialize)]
33pub struct Tool {
34    /// Tool type
35    #[serde(rename = "type")]
36    pub tool_type: String,
37    /// Function definition
38    pub function: Function,
39}
40
41/// Tool choice
42#[derive(Debug, Clone, Serialize, Deserialize)]
43#[serde(untagged)]
44pub enum ToolChoice {
45    /// Don't use tools
46    None,
47    /// Auto selection
48    Auto,
49    /// Must use tools
50    Required,
51    /// Specific function
52    Function {
53        /// Function name
54        name: String,
55    },
56}