Skip to main content

gproxy_protocol/openai/generate_content/responses/items/actions/
computer.rs

1use 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}