gproxy_protocol/openai/generate_content/responses/items/actions/
computer.rs1use serde::{Deserialize, Serialize};
2
3use crate::openai::common::Rest;
4
5#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
6#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
7pub struct SafetyCheck {
8 pub id: String,
9 #[serde(skip_serializing_if = "Option::is_none")]
10 pub code: Option<String>,
11 #[serde(skip_serializing_if = "Option::is_none")]
12 pub message: Option<String>,
13 #[serde(default, flatten)]
14 pub rest: Rest,
15}
16
17#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
18#[serde(tag = "type")]
19#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
20pub enum ComputerAction {
21 #[serde(rename = "click")]
22 Click {
23 button: ComputerMouseButton,
24 x: f64,
25 y: f64,
26 #[serde(skip_serializing_if = "Option::is_none")]
27 keys: Option<Vec<String>>,
28 #[serde(default, flatten)]
29 rest: Rest,
30 },
31 #[serde(rename = "double_click")]
32 DoubleClick {
33 keys: Vec<String>,
34 x: f64,
35 y: f64,
36 #[serde(default, flatten)]
37 rest: Rest,
38 },
39 #[serde(rename = "drag")]
40 Drag {
41 path: Vec<ComputerCoordinate>,
42 #[serde(skip_serializing_if = "Option::is_none")]
43 keys: Option<Vec<String>>,
44 #[serde(default, flatten)]
45 rest: Rest,
46 },
47 #[serde(rename = "keypress")]
48 Keypress {
49 keys: Vec<String>,
50 #[serde(default, flatten)]
51 rest: Rest,
52 },
53 #[serde(rename = "move")]
54 Move {
55 x: f64,
56 y: f64,
57 #[serde(skip_serializing_if = "Option::is_none")]
58 keys: Option<Vec<String>>,
59 #[serde(default, flatten)]
60 rest: Rest,
61 },
62 #[serde(rename = "screenshot")]
63 Screenshot {
64 #[serde(default, flatten)]
65 rest: Rest,
66 },
67 #[serde(rename = "scroll")]
68 Scroll {
69 scroll_x: f64,
70 scroll_y: f64,
71 x: f64,
72 y: f64,
73 #[serde(skip_serializing_if = "Option::is_none")]
74 keys: Option<Vec<String>>,
75 #[serde(default, flatten)]
76 rest: Rest,
77 },
78 #[serde(rename = "type")]
79 Type {
80 text: String,
81 #[serde(default, flatten)]
82 rest: Rest,
83 },
84 #[serde(rename = "wait")]
85 Wait {
86 #[serde(default, flatten)]
87 rest: Rest,
88 },
89}
90
91#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
92#[serde(rename_all = "snake_case")]
93#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
94pub enum ComputerMouseButton {
95 Left,
96 Right,
97 Wheel,
98 Back,
99 Forward,
100}
101
102#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
103#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
104pub struct ComputerCoordinate {
105 pub x: f64,
106 pub y: f64,
107 #[serde(default, flatten)]
108 pub rest: Rest,
109}
110
111#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
112#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
113pub struct ComputerScreenshot {
114 #[serde(rename = "type")]
115 pub type_: ComputerScreenshotType,
116 #[serde(skip_serializing_if = "Option::is_none")]
117 pub file_id: Option<String>,
118 #[serde(skip_serializing_if = "Option::is_none")]
119 pub image_url: Option<String>,
120 #[serde(default, flatten)]
121 pub rest: Rest,
122}
123
124#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
125#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
126pub enum ComputerScreenshotType {
127 #[serde(rename = "computer_screenshot")]
128 ComputerScreenshot,
129}