llmsdk_provider/language_model/
tool.rs1use serde::{Deserialize, Serialize};
8
9use crate::json::{JsonObject, JsonSchema};
10use crate::shared::ProviderOptions;
11
12#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
16#[serde(tag = "type", rename_all = "kebab-case")]
17pub enum Tool {
18 #[serde(rename = "function")]
20 Function(FunctionTool),
21 #[serde(rename = "provider")]
23 Provider(ProviderTool),
24}
25
26#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
28pub struct FunctionTool {
29 pub name: String,
31 #[serde(default, skip_serializing_if = "Option::is_none")]
33 pub description: Option<String>,
34 #[serde(rename = "inputSchema")]
36 pub input_schema: JsonSchema,
37 #[serde(
39 default,
40 rename = "inputExamples",
41 skip_serializing_if = "Option::is_none"
42 )]
43 pub input_examples: Option<Vec<ToolInputExample>>,
44 #[serde(default, skip_serializing_if = "Option::is_none")]
46 pub strict: Option<bool>,
47 #[serde(
49 default,
50 rename = "providerOptions",
51 skip_serializing_if = "Option::is_none"
52 )]
53 pub provider_options: Option<ProviderOptions>,
54}
55
56#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
58pub struct ToolInputExample {
59 pub input: JsonObject,
61}
62
63#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
65pub struct ProviderTool {
66 pub id: String,
68 pub name: String,
70 #[serde(default, skip_serializing_if = "Option::is_none")]
72 pub args: Option<JsonObject>,
73 #[serde(
75 default,
76 rename = "providerOptions",
77 skip_serializing_if = "Option::is_none"
78 )]
79 pub provider_options: Option<ProviderOptions>,
80}
81
82#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq)]
84#[serde(tag = "type", rename_all = "kebab-case")]
85pub enum ToolChoice {
86 #[default]
88 Auto,
89 None,
91 Required,
93 Tool {
95 #[serde(rename = "toolName")]
97 tool_name: String,
98 },
99}