use crate::common::Reasoning; use codex_protocol::models::ResponseItem; use serde::Deserialize; use serde::Serialize; #[derive(Debug, Clone, Serialize, PartialEq)] pub struct SearchRequest { pub id: String, #[serde(skip_serializing_if = "Option::is_none")] pub model: Option, #[serde(skip_serializing_if = "Option::is_none")] pub reasoning: Option, #[serde(skip_serializing_if = "Option::is_none")] pub input: Option, #[serde(skip_serializing_if = "Option::is_none")] pub commands: Option, #[serde(skip_serializing_if = "Option::is_none")] pub settings: Option, #[serde(skip_serializing_if = "Option::is_none")] pub max_output_tokens: Option, } #[derive(Debug, Clone, Serialize, PartialEq)] #[serde(untagged)] pub enum SearchInput { Text(String), Items(Vec), } #[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq)] pub struct SearchCommands { #[serde(skip_serializing_if = "Option::is_none")] pub search_query: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub image_query: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub open: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub click: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub find: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub screenshot: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub finance: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub weather: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub sports: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub time: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub response_length: Option, } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] pub struct SearchQuery { pub q: String, #[serde(skip_serializing_if = "Option::is_none")] pub recency: Option, #[serde(skip_serializing_if = "Option::is_none")] pub domains: Option>, } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] pub struct OpenOperation { pub ref_id: String, #[serde(skip_serializing_if = "Option::is_none")] pub lineno: Option, } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] pub struct ClickOperation { pub ref_id: String, pub id: u64, } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] pub struct FindOperation { pub ref_id: String, pub pattern: String, } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] pub struct ScreenshotOperation { pub ref_id: String, pub pageno: u64, } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] pub struct FinanceOperation { pub ticker: String, pub r#type: FinanceAssetType, #[serde(skip_serializing_if = "Option::is_none")] pub market: Option, } #[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)] #[serde(rename_all = "lowercase")] pub enum FinanceAssetType { Equity, Fund, Crypto, Index, } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] pub struct WeatherOperation { pub location: String, #[serde(skip_serializing_if = "Option::is_none")] pub start: Option, #[serde(skip_serializing_if = "Option::is_none")] pub duration: Option, } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] pub struct SportsOperation { #[serde(skip_serializing_if = "Option::is_none")] pub tool: Option, pub r#fn: SportsFunction, pub league: SportsLeague, #[serde(skip_serializing_if = "Option::is_none")] pub team: Option, #[serde(skip_serializing_if = "Option::is_none")] pub opponent: Option, #[serde(skip_serializing_if = "Option::is_none")] pub date_from: Option, #[serde(skip_serializing_if = "Option::is_none")] pub date_to: Option, #[serde(skip_serializing_if = "Option::is_none")] pub num_games: Option, #[serde(skip_serializing_if = "Option::is_none")] pub locale: Option, } #[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)] #[serde(rename_all = "lowercase")] pub enum SportsToolName { Sports, } #[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)] #[serde(rename_all = "lowercase")] pub enum SportsFunction { Schedule, Standings, } #[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)] #[serde(rename_all = "lowercase")] pub enum SportsLeague { Nba, Wnba, Nfl, Nhl, Mlb, Epl, Ncaamb, Ncaawb, Ipl, } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] pub struct TimeOperation { pub utc_offset: String, } #[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)] #[serde(rename_all = "lowercase")] pub enum SearchResponseLength { Short, Medium, Long, } #[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq)] pub struct SearchSettings { #[serde(skip_serializing_if = "Option::is_none")] pub user_location: Option, #[serde(skip_serializing_if = "Option::is_none")] pub search_context_size: Option, #[serde(skip_serializing_if = "Option::is_none")] pub filters: Option, #[serde(skip_serializing_if = "Option::is_none")] pub image_settings: Option, #[serde(skip_serializing_if = "Option::is_none")] pub allowed_callers: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub external_web_access: Option, } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq)] pub struct ApproximateLocation { pub r#type: LocationType, #[serde(skip_serializing_if = "Option::is_none")] pub country: Option, #[serde(skip_serializing_if = "Option::is_none")] pub region: Option, #[serde(skip_serializing_if = "Option::is_none")] pub city: Option, #[serde(skip_serializing_if = "Option::is_none")] pub timezone: Option, } #[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)] #[serde(rename_all = "lowercase")] pub enum LocationType { Approximate, } #[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)] #[serde(rename_all = "lowercase")] pub enum SearchContextSize { Low, Medium, High, } #[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq, Eq)] pub struct SearchFilters { #[serde(skip_serializing_if = "Option::is_none")] pub allowed_domains: Option>, #[serde(skip_serializing_if = "Option::is_none")] pub blocked_domains: Option>, } #[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq, Eq)] pub struct SearchImageSettings { #[serde(skip_serializing_if = "Option::is_none")] pub max_results: Option, #[serde(skip_serializing_if = "Option::is_none")] pub caption: Option, } #[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq)] #[serde(rename_all = "snake_case")] pub enum AllowedCaller { Direct, Shell, CodeInterpreter, } #[derive(Debug, Clone, Deserialize, PartialEq, Eq)] pub struct SearchResponse { pub encrypted_output: String, }