Skip to main content

gproxy_protocol/protocol/openai/common/tools/
definitions.rs

1use 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}