async_llm/types/
chat_tool.rs1use derive_builder::Builder;
2use serde::{Deserialize, Serialize};
3
4use crate::error::Error;
5
6#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
7#[serde(tag = "type")]
8#[serde(rename_all = "snake_case")]
9pub enum ChatTool {
10 Function { function: ChatToolFunction },
11}
12
13#[derive(Debug, Clone, Builder, Default, Serialize, Deserialize, PartialEq)]
14#[builder(setter(into, strip_option), default)]
15#[builder(derive(Debug))]
16#[builder(build_fn(error = Error))]
17pub struct ChatToolFunction {
18 pub name: String,
20
21 #[serde(skip_serializing_if = "Option::is_none")]
23 pub description: Option<String>,
24
25 #[serde(skip_serializing_if = "Option::is_none")]
29 pub parameters: Option<serde_json::Value>,
30
31 #[serde(skip_serializing_if = "Option::is_none")]
33 pub strict: Option<bool>,
34}
35
36impl Into<ChatTool> for ChatToolFunction {
37 fn into(self) -> ChatTool {
38 ChatTool::Function { function: self }
39 }
40}
41
42impl ChatToolFunction {
43 pub fn new(name: impl Into<String>) -> Self {
44 Self {
45 name: name.into(),
46 description: None,
47 parameters: None,
48 strict: None,
49 }
50 }
51
52 pub fn description(mut self, description: impl Into<String>) -> Self {
53 self.description = Some(description.into());
54 self
55 }
56
57 pub fn strict(mut self, value: bool) -> Self {
58 self.strict = Some(value);
59 self
60 }
61
62 pub fn parameters(mut self, parameters: serde_json::Value) -> Self {
63 self.parameters = Some(parameters);
64 self
65 }
66}