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