openai_tools/common/
tool.rs1use crate::common::{
2 function::Function,
3 parameters::{Name, ParameterProperty, 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, ParameterProperty)>,
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>>(
48 name: T,
49 description: U,
50 parameters: Vec<(V, ParameterProperty)>,
51 strict: bool,
52 ) -> Self {
53 Self {
54 type_name: "function".into(),
55 name: Some(name.as_ref().to_string()),
56 function: Some(Function::new(name, description, Parameters::new(parameters, None), strict)),
57 ..Default::default()
58 }
59 }
60}