Skip to main content

gproxy_protocol/protocol/openai/generate_content/response_items/
actions.rs

1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4use serde_json::Value;
5
6use super::super::super::common::*;
7
8#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
9#[serde(tag = "type")]
10pub enum ResponseAnnotation {
11    #[serde(rename = "file_citation")]
12    FileCitation {
13        file_id: String,
14        filename: String,
15        index: u32,
16        #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
17        extra: Extra,
18    },
19    #[serde(rename = "url_citation")]
20    UrlCitation {
21        end_index: u32,
22        start_index: u32,
23        title: String,
24        url: String,
25        #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
26        extra: Extra,
27    },
28    #[serde(rename = "container_file_citation")]
29    ContainerFileCitation {
30        container_id: String,
31        end_index: u32,
32        file_id: String,
33        filename: String,
34        start_index: u32,
35        #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
36        extra: Extra,
37    },
38    #[serde(rename = "file_path")]
39    FilePath {
40        file_id: String,
41        index: u32,
42        #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
43        extra: Extra,
44    },
45}
46
47#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
48pub struct FileSearchResult {
49    #[serde(skip_serializing_if = "Option::is_none")]
50    pub attributes: Option<FileSearchResultAttributes>,
51    #[serde(skip_serializing_if = "Option::is_none")]
52    pub file_id: Option<String>,
53    #[serde(skip_serializing_if = "Option::is_none")]
54    pub filename: Option<String>,
55    #[serde(skip_serializing_if = "Option::is_none")]
56    pub score: Option<f64>,
57    #[serde(skip_serializing_if = "Option::is_none")]
58    pub text: Option<String>,
59    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
60    pub extra: Extra,
61}
62
63pub type FileSearchResultAttributes = BTreeMap<String, FileSearchResultAttributeValue>;
64
65#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
66#[serde(untagged)]
67pub enum FileSearchResultAttributeValue {
68    String(String),
69    Number(f64),
70    Boolean(bool),
71}
72
73#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
74pub struct SafetyCheck {
75    pub id: String,
76    #[serde(skip_serializing_if = "Option::is_none")]
77    pub code: Option<String>,
78    #[serde(skip_serializing_if = "Option::is_none")]
79    pub message: Option<String>,
80    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
81    pub extra: Extra,
82}
83
84#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
85#[serde(tag = "type")]
86pub enum ComputerAction {
87    #[serde(rename = "click")]
88    Click {
89        button: ComputerMouseButton,
90        x: f64,
91        y: f64,
92        #[serde(skip_serializing_if = "Option::is_none")]
93        keys: Option<Vec<String>>,
94    },
95    #[serde(rename = "double_click")]
96    DoubleClick { keys: Vec<String>, x: f64, y: f64 },
97    #[serde(rename = "drag")]
98    Drag {
99        path: Vec<ComputerCoordinate>,
100        #[serde(skip_serializing_if = "Option::is_none")]
101        keys: Option<Vec<String>>,
102    },
103    #[serde(rename = "keypress")]
104    Keypress { keys: Vec<String> },
105    #[serde(rename = "move")]
106    Move {
107        x: f64,
108        y: f64,
109        #[serde(skip_serializing_if = "Option::is_none")]
110        keys: Option<Vec<String>>,
111    },
112    #[serde(rename = "screenshot")]
113    Screenshot {},
114    #[serde(rename = "scroll")]
115    Scroll {
116        scroll_x: f64,
117        scroll_y: f64,
118        x: f64,
119        y: f64,
120        #[serde(skip_serializing_if = "Option::is_none")]
121        keys: Option<Vec<String>>,
122    },
123    #[serde(rename = "type")]
124    Type { text: String },
125    #[serde(rename = "wait")]
126    Wait {},
127}
128
129#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
130pub enum ComputerMouseButton {
131    #[serde(rename = "left")]
132    Left,
133    #[serde(rename = "right")]
134    Right,
135    #[serde(rename = "wheel")]
136    Wheel,
137    #[serde(rename = "back")]
138    Back,
139    #[serde(rename = "forward")]
140    Forward,
141}
142
143#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
144pub struct ComputerCoordinate {
145    pub x: f64,
146    pub y: f64,
147}
148
149#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
150pub struct ComputerScreenshot {
151    #[serde(rename = "type")]
152    pub type_: ComputerScreenshotType,
153    #[serde(skip_serializing_if = "Option::is_none")]
154    pub file_id: Option<String>,
155    #[serde(skip_serializing_if = "Option::is_none")]
156    pub image_url: Option<String>,
157    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
158    pub extra: Extra,
159}
160
161#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
162pub enum ComputerScreenshotType {
163    #[serde(rename = "computer_screenshot")]
164    ComputerScreenshot,
165}
166
167#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
168#[serde(tag = "type")]
169pub enum WebSearchAction {
170    #[serde(rename = "search")]
171    Search {
172        #[serde(skip_serializing_if = "Option::is_none")]
173        queries: Option<Vec<String>>,
174        #[serde(skip_serializing_if = "Option::is_none")]
175        query: Option<String>,
176        #[serde(skip_serializing_if = "Option::is_none")]
177        sources: Option<Vec<WebSearchSource>>,
178    },
179    #[serde(rename = "open_page")]
180    OpenPage {
181        #[serde(skip_serializing_if = "Option::is_none")]
182        url: Option<String>,
183    },
184    #[serde(rename = "find_in_page")]
185    FindInPage { pattern: String, url: String },
186}
187
188#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
189pub struct WebSearchSource {
190    #[serde(rename = "type")]
191    pub type_: WebSearchSourceType,
192    pub url: String,
193    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
194    pub extra: Extra,
195}
196
197#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
198pub enum WebSearchSourceType {
199    #[serde(rename = "url")]
200    Url,
201}
202
203#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
204pub enum AdditionalToolsRole {
205    #[serde(rename = "unknown")]
206    Unknown,
207    #[serde(rename = "user")]
208    User,
209    #[serde(rename = "assistant")]
210    Assistant,
211    #[serde(rename = "system")]
212    System,
213    #[serde(rename = "critic")]
214    Critic,
215    #[serde(rename = "discriminator")]
216    Discriminator,
217    #[serde(rename = "developer")]
218    Developer,
219    #[serde(rename = "tool")]
220    Tool,
221}
222
223#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
224pub struct ResponseReasoningSummaryPart {
225    pub text: String,
226    #[serde(rename = "type")]
227    pub type_: ResponseReasoningSummaryType,
228    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
229    pub extra: Extra,
230}
231
232#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
233pub enum ResponseReasoningSummaryType {
234    #[serde(rename = "summary_text")]
235    SummaryText,
236}
237
238#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
239pub struct ResponseReasoningTextPart {
240    pub text: String,
241    #[serde(rename = "type")]
242    pub type_: ResponseReasoningTextType,
243    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
244    pub extra: Extra,
245}
246
247#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
248pub enum ResponseReasoningTextType {
249    #[serde(rename = "reasoning_text")]
250    ReasoningText,
251}
252
253#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
254#[serde(tag = "type")]
255pub enum CodeInterpreterOutput {
256    #[serde(rename = "logs")]
257    Logs { logs: String },
258    #[serde(rename = "image")]
259    Image { url: String },
260}
261
262#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
263pub struct LocalShellAction {
264    pub command: Vec<String>,
265    pub env: BTreeMap<String, String>,
266    #[serde(rename = "type")]
267    pub type_: LocalShellActionType,
268    #[serde(skip_serializing_if = "Option::is_none")]
269    pub timeout_ms: Option<u32>,
270    #[serde(skip_serializing_if = "Option::is_none")]
271    pub user: Option<String>,
272    #[serde(skip_serializing_if = "Option::is_none")]
273    pub working_directory: Option<String>,
274    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
275    pub extra: Extra,
276}
277
278#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
279pub enum LocalShellActionType {
280    #[serde(rename = "exec")]
281    Exec,
282}
283
284#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
285pub struct ShellAction {
286    pub commands: Vec<String>,
287    #[serde(skip_serializing_if = "Option::is_none")]
288    pub max_output_length: Option<u32>,
289    #[serde(skip_serializing_if = "Option::is_none")]
290    pub timeout_ms: Option<u32>,
291    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
292    pub extra: Extra,
293}
294
295#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
296#[serde(tag = "type")]
297pub enum ShellEnvironment {
298    #[serde(rename = "local")]
299    Local {
300        #[serde(skip_serializing_if = "Option::is_none")]
301        skills: Option<Vec<ShellSkillReference>>,
302    },
303    #[serde(rename = "container_reference")]
304    ContainerReference { container_id: String },
305}
306
307#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
308pub struct ShellSkillReference {
309    #[serde(skip_serializing_if = "Option::is_none")]
310    pub skill_id: Option<String>,
311    #[serde(skip_serializing_if = "Option::is_none")]
312    pub version: Option<String>,
313    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
314    pub extra: Extra,
315}
316
317#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
318pub struct ShellCallOutputContent {
319    pub outcome: ShellCallOutcome,
320    pub stderr: String,
321    pub stdout: String,
322    #[serde(skip_serializing_if = "Option::is_none")]
323    pub created_by: Option<String>,
324    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
325    pub extra: Extra,
326}
327
328#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
329#[serde(tag = "type")]
330pub enum ShellCallOutcome {
331    #[serde(rename = "timeout")]
332    Timeout {},
333    #[serde(rename = "exit")]
334    Exit { exit_code: i32 },
335}
336
337#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
338#[serde(tag = "type")]
339pub enum ApplyPatchOperation {
340    #[serde(rename = "create_file")]
341    CreateFile { diff: String, path: String },
342    #[serde(rename = "delete_file")]
343    DeleteFile { path: String },
344    #[serde(rename = "update_file")]
345    UpdateFile { diff: String, path: String },
346}
347
348#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
349pub struct McpToolDescription {
350    pub input_schema: Value,
351    pub name: String,
352    #[serde(skip_serializing_if = "Option::is_none")]
353    pub annotations: Option<Value>,
354    #[serde(skip_serializing_if = "Option::is_none")]
355    pub description: Option<String>,
356    #[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
357    pub extra: Extra,
358}