Skip to main content

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

1use serde::{Deserialize, Serialize};
2
3use super::super::{AllowedToolsMode, Extra, ToolChoiceMode};
4use super::definitions::NamedTool;
5
6#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
7#[serde(untagged)]
8pub enum ChatToolChoice {
9    Mode(ToolChoiceMode),
10    Allowed(ChatAllowedToolChoice),
11    Named(ChatNamedToolChoice),
12}
13
14#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
15#[serde(untagged)]
16pub enum ResponseToolChoice {
17    Mode(ToolChoiceMode),
18    Allowed(ResponseAllowedToolChoice),
19    Hosted(ResponseHostedToolChoice),
20    Function(ResponseFunctionToolChoice),
21    Mcp(ResponseMcpToolChoice),
22    Custom(ResponseCustomToolChoice),
23    ApplyPatch(ResponseApplyPatchToolChoice),
24    Shell(ResponseShellToolChoice),
25}
26
27#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
28pub struct ChatAllowedToolChoice {
29    pub allowed_tools: ChatAllowedTools,
30    #[serde(rename = "type")]
31    pub type_: AllowedToolsType,
32    #[serde(
33        default,
34        flatten,
35        skip_serializing_if = "std::collections::BTreeMap::is_empty"
36    )]
37    pub extra: Extra,
38}
39
40#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
41pub struct ChatAllowedTools {
42    pub mode: AllowedToolsMode,
43    pub tools: Vec<Extra>,
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)]
53pub struct ResponseAllowedToolChoice {
54    pub mode: AllowedToolsMode,
55    pub tools: Vec<ResponseAllowedTool>,
56    #[serde(rename = "type")]
57    pub type_: AllowedToolsType,
58    #[serde(
59        default,
60        flatten,
61        skip_serializing_if = "std::collections::BTreeMap::is_empty"
62    )]
63    pub extra: Extra,
64}
65
66#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
67#[serde(tag = "type")]
68pub enum ResponseAllowedTool {
69    #[serde(rename = "function")]
70    Function {
71        name: String,
72        #[serde(
73            default,
74            flatten,
75            skip_serializing_if = "std::collections::BTreeMap::is_empty"
76        )]
77        extra: Extra,
78    },
79    #[serde(rename = "custom")]
80    Custom {
81        name: String,
82        #[serde(
83            default,
84            flatten,
85            skip_serializing_if = "std::collections::BTreeMap::is_empty"
86        )]
87        extra: Extra,
88    },
89    #[serde(rename = "mcp")]
90    Mcp {
91        server_label: String,
92        #[serde(skip_serializing_if = "Option::is_none")]
93        name: Option<String>,
94        #[serde(
95            default,
96            flatten,
97            skip_serializing_if = "std::collections::BTreeMap::is_empty"
98        )]
99        extra: Extra,
100    },
101    #[serde(rename = "file_search")]
102    FileSearch {
103        #[serde(
104            default,
105            flatten,
106            skip_serializing_if = "std::collections::BTreeMap::is_empty"
107        )]
108        extra: Extra,
109    },
110    #[serde(rename = "web_search_preview")]
111    WebSearchPreview {
112        #[serde(
113            default,
114            flatten,
115            skip_serializing_if = "std::collections::BTreeMap::is_empty"
116        )]
117        extra: Extra,
118    },
119    #[serde(rename = "computer")]
120    Computer {
121        #[serde(
122            default,
123            flatten,
124            skip_serializing_if = "std::collections::BTreeMap::is_empty"
125        )]
126        extra: Extra,
127    },
128    #[serde(rename = "computer_use_preview")]
129    ComputerUsePreview {
130        #[serde(
131            default,
132            flatten,
133            skip_serializing_if = "std::collections::BTreeMap::is_empty"
134        )]
135        extra: Extra,
136    },
137    #[serde(rename = "computer_use")]
138    ComputerUse {
139        #[serde(
140            default,
141            flatten,
142            skip_serializing_if = "std::collections::BTreeMap::is_empty"
143        )]
144        extra: Extra,
145    },
146    #[serde(rename = "web_search_preview_2025_03_11")]
147    WebSearchPreview20250311 {
148        #[serde(
149            default,
150            flatten,
151            skip_serializing_if = "std::collections::BTreeMap::is_empty"
152        )]
153        extra: Extra,
154    },
155    #[serde(rename = "image_generation")]
156    ImageGeneration {
157        #[serde(
158            default,
159            flatten,
160            skip_serializing_if = "std::collections::BTreeMap::is_empty"
161        )]
162        extra: Extra,
163    },
164    #[serde(rename = "code_interpreter")]
165    CodeInterpreter {
166        #[serde(
167            default,
168            flatten,
169            skip_serializing_if = "std::collections::BTreeMap::is_empty"
170        )]
171        extra: Extra,
172    },
173    #[serde(rename = "local_shell")]
174    LocalShell {
175        #[serde(
176            default,
177            flatten,
178            skip_serializing_if = "std::collections::BTreeMap::is_empty"
179        )]
180        extra: Extra,
181    },
182    #[serde(rename = "shell")]
183    Shell {
184        #[serde(
185            default,
186            flatten,
187            skip_serializing_if = "std::collections::BTreeMap::is_empty"
188        )]
189        extra: Extra,
190    },
191    #[serde(rename = "apply_patch")]
192    ApplyPatch {
193        #[serde(
194            default,
195            flatten,
196            skip_serializing_if = "std::collections::BTreeMap::is_empty"
197        )]
198        extra: Extra,
199    },
200}
201
202#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
203pub enum AllowedToolsType {
204    #[serde(rename = "allowed_tools")]
205    AllowedTools,
206}
207
208#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
209#[serde(untagged)]
210pub enum ChatNamedToolChoice {
211    Function {
212        #[serde(rename = "type")]
213        type_: FunctionToolChoiceType,
214        function: NamedTool,
215        #[serde(
216            default,
217            flatten,
218            skip_serializing_if = "std::collections::BTreeMap::is_empty"
219        )]
220        extra: Extra,
221    },
222    Custom {
223        #[serde(rename = "type")]
224        type_: CustomToolChoiceType,
225        custom: NamedTool,
226        #[serde(
227            default,
228            flatten,
229            skip_serializing_if = "std::collections::BTreeMap::is_empty"
230        )]
231        extra: Extra,
232    },
233}
234
235#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
236pub struct ResponseHostedToolChoice {
237    #[serde(rename = "type")]
238    pub type_: ResponseHostedToolChoiceType,
239    #[serde(
240        default,
241        flatten,
242        skip_serializing_if = "std::collections::BTreeMap::is_empty"
243    )]
244    pub extra: Extra,
245}
246
247#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
248pub enum ResponseHostedToolChoiceType {
249    #[serde(rename = "file_search")]
250    FileSearch,
251    #[serde(rename = "web_search_preview")]
252    WebSearchPreview,
253    #[serde(rename = "computer")]
254    Computer,
255    #[serde(rename = "computer_use_preview")]
256    ComputerUsePreview,
257    #[serde(rename = "computer_use")]
258    ComputerUse,
259    #[serde(rename = "web_search_preview_2025_03_11")]
260    WebSearchPreview20250311,
261    #[serde(rename = "image_generation")]
262    ImageGeneration,
263    #[serde(rename = "code_interpreter")]
264    CodeInterpreter,
265}
266
267#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
268pub struct ResponseFunctionToolChoice {
269    #[serde(rename = "type")]
270    pub type_: FunctionToolChoiceType,
271    pub name: String,
272    #[serde(
273        default,
274        flatten,
275        skip_serializing_if = "std::collections::BTreeMap::is_empty"
276    )]
277    pub extra: Extra,
278}
279
280#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
281pub struct ResponseMcpToolChoice {
282    #[serde(rename = "type")]
283    pub type_: McpToolChoiceType,
284    pub server_label: String,
285    #[serde(skip_serializing_if = "Option::is_none")]
286    pub name: Option<String>,
287    #[serde(
288        default,
289        flatten,
290        skip_serializing_if = "std::collections::BTreeMap::is_empty"
291    )]
292    pub extra: Extra,
293}
294
295#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
296pub struct ResponseCustomToolChoice {
297    #[serde(rename = "type")]
298    pub type_: CustomToolChoiceType,
299    pub name: String,
300    #[serde(
301        default,
302        flatten,
303        skip_serializing_if = "std::collections::BTreeMap::is_empty"
304    )]
305    pub extra: Extra,
306}
307
308#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
309pub struct ResponseApplyPatchToolChoice {
310    #[serde(rename = "type")]
311    pub type_: ApplyPatchToolChoiceType,
312    #[serde(
313        default,
314        flatten,
315        skip_serializing_if = "std::collections::BTreeMap::is_empty"
316    )]
317    pub extra: Extra,
318}
319
320#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
321pub struct ResponseShellToolChoice {
322    #[serde(rename = "type")]
323    pub type_: ShellToolChoiceType,
324    #[serde(
325        default,
326        flatten,
327        skip_serializing_if = "std::collections::BTreeMap::is_empty"
328    )]
329    pub extra: Extra,
330}
331
332#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
333pub enum FunctionToolChoiceType {
334    #[serde(rename = "function")]
335    Function,
336}
337
338#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
339pub enum CustomToolChoiceType {
340    #[serde(rename = "custom")]
341    Custom,
342}
343
344#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
345pub enum McpToolChoiceType {
346    #[serde(rename = "mcp")]
347    Mcp,
348}
349
350#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
351pub enum ApplyPatchToolChoiceType {
352    #[serde(rename = "apply_patch")]
353    ApplyPatch,
354}
355
356#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
357pub enum ShellToolChoiceType {
358    #[serde(rename = "shell")]
359    Shell,
360}