Skip to main content

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

1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4
5use crate::openai::common::Rest;
6
7#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
8#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
9pub struct LocalShellAction {
10    pub command: Vec<String>,
11    pub env: BTreeMap<String, String>,
12    #[serde(rename = "type")]
13    pub type_: LocalShellActionType,
14    #[serde(skip_serializing_if = "Option::is_none")]
15    pub timeout_ms: Option<u32>,
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub user: Option<String>,
18    #[serde(skip_serializing_if = "Option::is_none")]
19    pub working_directory: Option<String>,
20    #[serde(default, flatten)]
21    pub rest: Rest,
22}
23
24#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
25#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
26pub enum LocalShellActionType {
27    #[serde(rename = "exec")]
28    Exec,
29}
30
31#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
32#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
33pub struct ShellAction {
34    pub commands: Vec<String>,
35    #[serde(skip_serializing_if = "Option::is_none")]
36    pub max_output_length: Option<u32>,
37    #[serde(skip_serializing_if = "Option::is_none")]
38    pub timeout_ms: Option<u32>,
39    #[serde(default, flatten)]
40    pub rest: Rest,
41}
42
43#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
44#[serde(tag = "type")]
45#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
46pub enum ShellEnvironment {
47    #[serde(rename = "local")]
48    Local {
49        #[serde(skip_serializing_if = "Option::is_none")]
50        skills: Option<Vec<ShellSkillReference>>,
51        #[serde(default, flatten)]
52        rest: Rest,
53    },
54    #[serde(rename = "container_reference")]
55    ContainerReference {
56        container_id: String,
57        #[serde(default, flatten)]
58        rest: Rest,
59    },
60}
61
62#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
63#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
64pub struct ShellSkillReference {
65    #[serde(skip_serializing_if = "Option::is_none")]
66    pub skill_id: Option<String>,
67    #[serde(skip_serializing_if = "Option::is_none")]
68    pub version: Option<String>,
69    #[serde(default, flatten)]
70    pub rest: Rest,
71}
72
73#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, gproxy_protocol_macros::WireBuilder)]
74#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
75pub struct ShellCallOutputContent {
76    pub outcome: ShellCallOutcome,
77    pub stderr: String,
78    pub stdout: String,
79    #[serde(skip_serializing_if = "Option::is_none")]
80    pub created_by: Option<String>,
81    #[serde(default, flatten)]
82    pub rest: Rest,
83}
84
85#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
86#[serde(tag = "type")]
87#[cfg_attr(not(feature = "exhaustive"), non_exhaustive)]
88pub enum ShellCallOutcome {
89    #[serde(rename = "timeout")]
90    Timeout {
91        #[serde(default, flatten)]
92        rest: Rest,
93    },
94    #[serde(rename = "exit")]
95    Exit {
96        exit_code: i32,
97        #[serde(default, flatten)]
98        rest: Rest,
99    },
100}