gproxy_protocol/protocol/openai/common/tools/
definitions.rs1use serde::{Deserialize, Serialize};
2
3use super::super::{CustomToolGrammarSyntax, Extra, JsonSchema};
4
5#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
6#[non_exhaustive]
7pub struct FunctionDefinition {
8 pub name: String,
9 #[serde(skip_serializing_if = "Option::is_none")]
10 pub description: Option<String>,
11 #[serde(skip_serializing_if = "Option::is_none")]
12 pub parameters: Option<JsonSchema>,
13 #[serde(skip_serializing_if = "Option::is_none")]
14 pub strict: Option<bool>,
15 #[serde(
16 default,
17 flatten,
18 skip_serializing_if = "std::collections::BTreeMap::is_empty"
19 )]
20 pub extra: Extra,
21}
22
23#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
24#[non_exhaustive]
25pub struct FunctionCall {
26 pub arguments: String,
27 pub name: String,
28 #[serde(
29 default,
30 flatten,
31 skip_serializing_if = "std::collections::BTreeMap::is_empty"
32 )]
33 pub extra: Extra,
34}
35
36#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
37#[non_exhaustive]
38pub struct CustomToolDefinition {
39 pub name: String,
40 #[serde(skip_serializing_if = "Option::is_none")]
41 pub description: Option<String>,
42 #[serde(skip_serializing_if = "Option::is_none")]
43 pub format: Option<CustomToolInputFormat>,
44 #[serde(
45 default,
46 flatten,
47 skip_serializing_if = "std::collections::BTreeMap::is_empty"
48 )]
49 pub extra: Extra,
50}
51
52#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
53#[serde(untagged)]
54#[non_exhaustive]
55pub enum CustomToolInputFormat {
56 Text(CustomToolTextFormat),
57 Grammar(CustomToolGrammarFormat),
58}
59
60#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
61#[serde(deny_unknown_fields)]
62#[derive(gproxy_protocol_macros::WireBuilder)]
63#[non_exhaustive]
64pub struct CustomToolTextFormat {
65 #[serde(rename = "type")]
66 pub type_: CustomToolTextFormatType,
67}
68
69#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
70#[non_exhaustive]
71pub enum CustomToolTextFormatType {
72 #[serde(rename = "text")]
73 Text,
74}
75
76#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
77#[serde(deny_unknown_fields)]
78#[derive(gproxy_protocol_macros::WireBuilder)]
79#[non_exhaustive]
80pub struct CustomToolGrammarFormat {
81 #[serde(rename = "type")]
82 pub type_: CustomToolGrammarFormatType,
83 pub grammar: CustomToolGrammar,
84}
85
86#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
87#[non_exhaustive]
88pub enum CustomToolGrammarFormatType {
89 #[serde(rename = "grammar")]
90 Grammar,
91}
92
93#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
94#[serde(deny_unknown_fields)]
95#[derive(gproxy_protocol_macros::WireBuilder)]
96#[non_exhaustive]
97pub struct CustomToolGrammar {
98 pub definition: String,
99 pub syntax: CustomToolGrammarSyntax,
100}
101
102#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
103#[non_exhaustive]
104pub struct NamedTool {
105 pub name: String,
106 #[serde(
107 default,
108 flatten,
109 skip_serializing_if = "std::collections::BTreeMap::is_empty"
110 )]
111 pub extra: Extra,
112}