openai_tools/common/
tool.rs

1use crate::common::{
2    function::Function,
3    parameters::{Name, ParameterProp, Parameters},
4};
5use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Clone, Default, Deserialize, Serialize)]
8pub struct Tool {
9    #[serde(rename = "type")]
10    pub type_name: String,
11    #[serde(skip_serializing_if = "Option::is_none")]
12    pub name: Option<String>,
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub server_label: Option<String>,
15    #[serde(skip_serializing_if = "Option::is_none")]
16    pub server_url: Option<String>,
17    #[serde(skip_serializing_if = "Option::is_none")]
18    pub require_approval: Option<String>,
19    #[serde(skip_serializing_if = "Option::is_none")]
20    pub allowed_tools: Option<Vec<String>>,
21    #[serde(skip_serializing_if = "Option::is_none")]
22    pub function: Option<Function>,
23    #[serde(skip_serializing_if = "Option::is_none")]
24    pub parameters: Option<Parameters>,
25}
26
27impl Tool {
28    pub fn mcp(
29        server_label: String,
30        server_url: String,
31        require_approval: String,
32        allowed_tools: Vec<String>,
33        parameters: Vec<(Name, ParameterProp)>,
34    ) -> Self {
35        Self {
36            type_name: "mcp".into(),
37            name: Some("".into()),
38            server_label: Some(server_label),
39            server_url: Some(server_url),
40            require_approval: Some(require_approval),
41            allowed_tools: Some(allowed_tools),
42            parameters: Some(Parameters::new(parameters, None)),
43            ..Default::default()
44        }
45    }
46
47    pub fn function<T: AsRef<str>, U: AsRef<str>, V: AsRef<str>>(name: T, description: U, parameters: Vec<(V, ParameterProp)>, strict: bool) -> Self {
48        Self {
49            type_name: "function".into(),
50            name: Some(name.as_ref().to_string()),
51            function: Some(Function::new(name, description, Parameters::new(parameters, None), strict)),
52            ..Default::default()
53        }
54    }
55}