Skip to main content

gproxy_protocol/protocol/openai/generate_content/response_tools/
definitions.rs

1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4use serde_json::Value;
5
6use super::super::super::common::*;
7use super::super::response_tools::*;
8
9#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
10#[serde(tag = "type")]
11pub enum ResponseTool {
12    #[serde(rename = "function")]
13    Function {
14        name: String,
15        parameters: JsonSchema,
16        // Some OpenAI-compatible Responses providers echo `strict: null`.
17        #[serde(skip_serializing_if = "Option::is_none")]
18        strict: Option<bool>,
19        #[serde(skip_serializing_if = "Option::is_none")]
20        defer_loading: Option<bool>,
21        #[serde(skip_serializing_if = "Option::is_none")]
22        description: Option<String>,
23        #[serde(skip_serializing_if = "Option::is_none")]
24        allowed_callers: Option<Vec<ToolCaller>>,
25        #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
26        extra: Extra,
27    },
28    #[serde(rename = "file_search")]
29    FileSearch {
30        vector_store_ids: Vec<String>,
31        #[serde(skip_serializing_if = "Option::is_none")]
32        filters: Option<FileSearchFilter>,
33        #[serde(skip_serializing_if = "Option::is_none")]
34        max_num_results: Option<u32>,
35        #[serde(skip_serializing_if = "Option::is_none")]
36        ranking_options: Option<FileSearchRankingOptions>,
37        #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
38        extra: Extra,
39    },
40    #[serde(rename = "computer")]
41    Computer {
42        #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
43        extra: Extra,
44    },
45    #[serde(rename = "computer_use_preview")]
46    ComputerUsePreview {
47        display_height: u32,
48        display_width: u32,
49        environment: ComputerUseEnvironment,
50        #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
51        extra: Extra,
52    },
53    #[serde(rename = "web_search")]
54    WebSearch {
55        #[serde(skip_serializing_if = "Option::is_none")]
56        filters: Option<WebSearchFilters>,
57        #[serde(skip_serializing_if = "Option::is_none")]
58        search_context_size: Option<SearchContextSize>,
59        #[serde(skip_serializing_if = "Option::is_none")]
60        user_location: Option<WebSearchUserLocation>,
61        #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
62        extra: Extra,
63    },
64    #[serde(rename = "web_search_2025_08_26")]
65    WebSearch20250826 {
66        #[serde(skip_serializing_if = "Option::is_none")]
67        filters: Option<WebSearchFilters>,
68        #[serde(skip_serializing_if = "Option::is_none")]
69        search_context_size: Option<SearchContextSize>,
70        #[serde(skip_serializing_if = "Option::is_none")]
71        user_location: Option<WebSearchUserLocation>,
72        #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
73        extra: Extra,
74    },
75    #[serde(rename = "x_search")]
76    XSearch {
77        #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
78        extra: Extra,
79    },
80    #[serde(rename = "collections_search")]
81    CollectionsSearch {
82        vector_store_ids: Vec<String>,
83        #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
84        extra: Extra,
85    },
86    #[serde(rename = "mcp")]
87    Mcp {
88        server_label: String,
89        #[serde(skip_serializing_if = "Option::is_none")]
90        allowed_tools: Option<McpAllowedTools>,
91        #[serde(skip_serializing_if = "Option::is_none")]
92        authorization: Option<String>,
93        #[serde(skip_serializing_if = "Option::is_none")]
94        connector_id: Option<McpConnectorId>,
95        #[serde(skip_serializing_if = "Option::is_none")]
96        defer_loading: Option<bool>,
97        #[serde(skip_serializing_if = "Option::is_none")]
98        headers: Option<BTreeMap<String, String>>,
99        #[serde(skip_serializing_if = "Option::is_none")]
100        require_approval: Option<McpRequireApproval>,
101        #[serde(skip_serializing_if = "Option::is_none")]
102        server_description: Option<String>,
103        #[serde(skip_serializing_if = "Option::is_none")]
104        server_url: Option<String>,
105        #[serde(skip_serializing_if = "Option::is_none")]
106        tunnel_id: Option<String>,
107        #[serde(skip_serializing_if = "Option::is_none")]
108        allowed_callers: Option<Vec<ToolCaller>>,
109        #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
110        extra: Extra,
111    },
112    #[serde(rename = "code_execution")]
113    CodeExecution {
114        #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
115        extra: Extra,
116    },
117    #[serde(rename = "code_interpreter")]
118    CodeInterpreter {
119        container: CodeInterpreterContainer,
120        #[serde(skip_serializing_if = "Option::is_none")]
121        allowed_callers: Option<Vec<ToolCaller>>,
122        #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
123        extra: Extra,
124    },
125    #[serde(rename = "image_generation")]
126    ImageGeneration {
127        #[serde(skip_serializing_if = "Option::is_none")]
128        action: Option<ImageGenerationAction>,
129        #[serde(skip_serializing_if = "Option::is_none")]
130        background: Option<ImageBackground>,
131        #[serde(skip_serializing_if = "Option::is_none")]
132        input_fidelity: Option<ImageInputFidelity>,
133        #[serde(skip_serializing_if = "Option::is_none")]
134        input_image_mask: Option<ImageMask>,
135        #[serde(skip_serializing_if = "Option::is_none")]
136        model: Option<OpenAiModelId>,
137        #[serde(skip_serializing_if = "Option::is_none")]
138        moderation: Option<ImageModeration>,
139        #[serde(skip_serializing_if = "Option::is_none")]
140        output_compression: Option<u32>,
141        #[serde(skip_serializing_if = "Option::is_none")]
142        output_format: Option<ImageOutputFormat>,
143        #[serde(skip_serializing_if = "Option::is_none")]
144        partial_images: Option<u32>,
145        #[serde(skip_serializing_if = "Option::is_none")]
146        quality: Option<ImageEditQuality>,
147        #[serde(skip_serializing_if = "Option::is_none")]
148        size: Option<ResponseImageGenerationSize>,
149        #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
150        extra: Extra,
151    },
152    #[serde(rename = "local_shell")]
153    LocalShell {
154        #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
155        extra: Extra,
156    },
157    #[serde(rename = "shell")]
158    Shell {
159        #[serde(skip_serializing_if = "Option::is_none")]
160        environment: Option<ResponseShellEnvironment>,
161        #[serde(skip_serializing_if = "Option::is_none")]
162        allowed_callers: Option<Vec<ToolCaller>>,
163        #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
164        extra: Extra,
165    },
166    #[serde(rename = "custom")]
167    Custom {
168        name: String,
169        #[serde(skip_serializing_if = "Option::is_none")]
170        defer_loading: Option<bool>,
171        #[serde(skip_serializing_if = "Option::is_none")]
172        description: Option<String>,
173        #[serde(skip_serializing_if = "Option::is_none")]
174        format: Option<CustomToolInputFormat>,
175        #[serde(skip_serializing_if = "Option::is_none")]
176        allowed_callers: Option<Vec<ToolCaller>>,
177        #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
178        extra: Extra,
179    },
180    #[serde(rename = "namespace")]
181    Namespace {
182        description: String,
183        name: String,
184        tools: Vec<ResponseNamespaceTool>,
185        #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
186        extra: Extra,
187    },
188    #[serde(rename = "tool_search")]
189    ToolSearch {
190        #[serde(skip_serializing_if = "Option::is_none")]
191        description: Option<String>,
192        #[serde(skip_serializing_if = "Option::is_none")]
193        execution: Option<ToolSearchExecution>,
194        #[serde(skip_serializing_if = "Option::is_none")]
195        parameters: Option<Value>,
196        #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
197        extra: Extra,
198    },
199    #[serde(rename = "programmatic_tool_calling")]
200    ProgrammaticToolCalling {
201        #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
202        extra: Extra,
203    },
204    #[serde(rename = "web_search_preview")]
205    WebSearchPreview {
206        #[serde(skip_serializing_if = "Option::is_none")]
207        search_content_types: Option<Vec<SearchContentType>>,
208        #[serde(skip_serializing_if = "Option::is_none")]
209        search_context_size: Option<SearchContextSize>,
210        #[serde(skip_serializing_if = "Option::is_none")]
211        user_location: Option<WebSearchPreviewUserLocation>,
212        #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
213        extra: Extra,
214    },
215    #[serde(rename = "web_search_preview_2025_03_11")]
216    WebSearchPreview20250311 {
217        #[serde(skip_serializing_if = "Option::is_none")]
218        search_content_types: Option<Vec<SearchContentType>>,
219        #[serde(skip_serializing_if = "Option::is_none")]
220        search_context_size: Option<SearchContextSize>,
221        #[serde(skip_serializing_if = "Option::is_none")]
222        user_location: Option<WebSearchPreviewUserLocation>,
223        #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
224        extra: Extra,
225    },
226    #[serde(rename = "apply_patch")]
227    ApplyPatch {
228        #[serde(skip_serializing_if = "Option::is_none")]
229        allowed_callers: Option<Vec<ToolCaller>>,
230        #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
231        extra: Extra,
232    },
233}
234
235#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
236#[serde(tag = "type")]
237pub enum ResponseNamespaceTool {
238    #[serde(rename = "function")]
239    Function {
240        name: String,
241        #[serde(skip_serializing_if = "Option::is_none")]
242        defer_loading: Option<bool>,
243        #[serde(skip_serializing_if = "Option::is_none")]
244        description: Option<String>,
245        #[serde(skip_serializing_if = "Option::is_none")]
246        parameters: Option<Value>,
247        #[serde(skip_serializing_if = "Option::is_none")]
248        strict: Option<bool>,
249        #[serde(skip_serializing_if = "Option::is_none")]
250        allowed_callers: Option<Vec<ToolCaller>>,
251        #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
252        extra: Extra,
253    },
254    #[serde(rename = "custom")]
255    Custom {
256        name: String,
257        #[serde(skip_serializing_if = "Option::is_none")]
258        defer_loading: Option<bool>,
259        #[serde(skip_serializing_if = "Option::is_none")]
260        description: Option<String>,
261        #[serde(skip_serializing_if = "Option::is_none")]
262        format: Option<CustomToolInputFormat>,
263        #[serde(skip_serializing_if = "Option::is_none")]
264        allowed_callers: Option<Vec<ToolCaller>>,
265        #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
266        extra: Extra,
267    },
268}