use std::collections::BTreeMap;
use serde::{Deserialize, Serialize};
use serde_json::Value;
use super::super::super::common::*;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum ResponseAnnotation {
#[serde(rename = "file_citation")]
FileCitation {
file_id: String,
filename: String,
index: u32,
#[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
extra: Extra,
},
#[serde(rename = "url_citation")]
UrlCitation {
end_index: u32,
start_index: u32,
title: String,
url: String,
#[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
extra: Extra,
},
#[serde(rename = "container_file_citation")]
ContainerFileCitation {
container_id: String,
end_index: u32,
file_id: String,
filename: String,
start_index: u32,
#[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
extra: Extra,
},
#[serde(rename = "file_path")]
FilePath {
file_id: String,
index: u32,
#[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
extra: Extra,
},
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct FileSearchResult {
#[serde(skip_serializing_if = "Option::is_none")]
pub attributes: Option<FileSearchResultAttributes>,
#[serde(skip_serializing_if = "Option::is_none")]
pub file_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub filename: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub score: Option<f64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub text: Option<String>,
#[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
pub extra: Extra,
}
pub type FileSearchResultAttributes = BTreeMap<String, FileSearchResultAttributeValue>;
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum FileSearchResultAttributeValue {
String(String),
Number(f64),
Boolean(bool),
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct SafetyCheck {
pub id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub code: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub message: Option<String>,
#[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
pub extra: Extra,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum ComputerAction {
#[serde(rename = "click")]
Click {
button: ComputerMouseButton,
x: f64,
y: f64,
#[serde(skip_serializing_if = "Option::is_none")]
keys: Option<Vec<String>>,
},
#[serde(rename = "double_click")]
DoubleClick { keys: Vec<String>, x: f64, y: f64 },
#[serde(rename = "drag")]
Drag {
path: Vec<ComputerCoordinate>,
#[serde(skip_serializing_if = "Option::is_none")]
keys: Option<Vec<String>>,
},
#[serde(rename = "keypress")]
Keypress { keys: Vec<String> },
#[serde(rename = "move")]
Move {
x: f64,
y: f64,
#[serde(skip_serializing_if = "Option::is_none")]
keys: Option<Vec<String>>,
},
#[serde(rename = "screenshot")]
Screenshot {},
#[serde(rename = "scroll")]
Scroll {
scroll_x: f64,
scroll_y: f64,
x: f64,
y: f64,
#[serde(skip_serializing_if = "Option::is_none")]
keys: Option<Vec<String>>,
},
#[serde(rename = "type")]
Type { text: String },
#[serde(rename = "wait")]
Wait {},
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ComputerMouseButton {
#[serde(rename = "left")]
Left,
#[serde(rename = "right")]
Right,
#[serde(rename = "wheel")]
Wheel,
#[serde(rename = "back")]
Back,
#[serde(rename = "forward")]
Forward,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ComputerCoordinate {
pub x: f64,
pub y: f64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ComputerScreenshot {
#[serde(rename = "type")]
pub type_: ComputerScreenshotType,
#[serde(skip_serializing_if = "Option::is_none")]
pub file_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub image_url: Option<String>,
#[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
pub extra: Extra,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ComputerScreenshotType {
#[serde(rename = "computer_screenshot")]
ComputerScreenshot,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum WebSearchAction {
#[serde(rename = "search")]
Search {
#[serde(skip_serializing_if = "Option::is_none")]
queries: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
query: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
sources: Option<Vec<WebSearchSource>>,
},
#[serde(rename = "open_page")]
OpenPage {
#[serde(skip_serializing_if = "Option::is_none")]
url: Option<String>,
},
#[serde(rename = "find_in_page")]
FindInPage { pattern: String, url: String },
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct WebSearchSource {
#[serde(rename = "type")]
pub type_: WebSearchSourceType,
pub url: String,
#[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
pub extra: Extra,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum WebSearchSourceType {
#[serde(rename = "url")]
Url,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum AdditionalToolsRole {
#[serde(rename = "unknown")]
Unknown,
#[serde(rename = "user")]
User,
#[serde(rename = "assistant")]
Assistant,
#[serde(rename = "system")]
System,
#[serde(rename = "critic")]
Critic,
#[serde(rename = "discriminator")]
Discriminator,
#[serde(rename = "developer")]
Developer,
#[serde(rename = "tool")]
Tool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ResponseReasoningSummaryPart {
pub text: String,
#[serde(rename = "type")]
pub type_: ResponseReasoningSummaryType,
#[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
pub extra: Extra,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ResponseReasoningSummaryType {
#[serde(rename = "summary_text")]
SummaryText,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ResponseReasoningTextPart {
pub text: String,
#[serde(rename = "type")]
pub type_: ResponseReasoningTextType,
#[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
pub extra: Extra,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum ResponseReasoningTextType {
#[serde(rename = "reasoning_text")]
ReasoningText,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum CodeInterpreterOutput {
#[serde(rename = "logs")]
Logs { logs: String },
#[serde(rename = "image")]
Image { url: String },
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct LocalShellAction {
pub command: Vec<String>,
pub env: BTreeMap<String, String>,
#[serde(rename = "type")]
pub type_: LocalShellActionType,
#[serde(skip_serializing_if = "Option::is_none")]
pub timeout_ms: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub user: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub working_directory: Option<String>,
#[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
pub extra: Extra,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum LocalShellActionType {
#[serde(rename = "exec")]
Exec,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ShellAction {
pub commands: Vec<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub max_output_length: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub timeout_ms: Option<u32>,
#[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
pub extra: Extra,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum ShellEnvironment {
#[serde(rename = "local")]
Local {
#[serde(skip_serializing_if = "Option::is_none")]
skills: Option<Vec<ShellSkillReference>>,
},
#[serde(rename = "container_reference")]
ContainerReference { container_id: String },
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ShellSkillReference {
#[serde(skip_serializing_if = "Option::is_none")]
pub skill_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub version: Option<String>,
#[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
pub extra: Extra,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ShellCallOutputContent {
pub outcome: ShellCallOutcome,
pub stderr: String,
pub stdout: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub created_by: Option<String>,
#[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
pub extra: Extra,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum ShellCallOutcome {
#[serde(rename = "timeout")]
Timeout {},
#[serde(rename = "exit")]
Exit { exit_code: i32 },
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(tag = "type")]
pub enum ApplyPatchOperation {
#[serde(rename = "create_file")]
CreateFile { diff: String, path: String },
#[serde(rename = "delete_file")]
DeleteFile { path: String },
#[serde(rename = "update_file")]
UpdateFile { diff: String, path: String },
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct McpToolDescription {
pub input_schema: Value,
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub annotations: Option<Value>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(default, flatten, skip_serializing_if = "BTreeMap::is_empty")]
pub extra: Extra,
}