use super::shared::v2_enum_from_core; use super::turn::CyberAccessProgram; use crate::JsonSchema; use crate::TS; use codex_protocol::openai_models::InputModality; use codex_protocol::openai_models::ModelAccessPrograms as CoreModelAccessPrograms; use codex_protocol::openai_models::ModelAvailabilityNux as CoreModelAvailabilityNux; use codex_protocol::openai_models::ReasoningEffort; use codex_protocol::openai_models::default_input_modalities; use codex_protocol::protocol::ModelRerouteReason as CoreModelRerouteReason; use codex_protocol::protocol::ModelVerification as CoreModelVerification; use codex_protocol::protocol::MultiAgentVersion as CoreMultiAgentVersion; use serde::Deserialize; use serde::Serialize; use serde_json::Value as JsonValue; v2_enum_from_core!( pub enum ModelRerouteReason from CoreModelRerouteReason { HighRiskCyberActivity } ); v2_enum_from_core!( pub enum ModelVerification from CoreModelVerification { TrustedAccessForCyber } ); v2_enum_from_core!( /// Multi-agent runtime supported by a model. pub enum MultiAgentVersion from CoreMultiAgentVersion { Disabled, V1, V2 } ); #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, Default, JsonSchema, TS)] #[serde(rename_all = "camelCase")] #[ts(export_to = "v2/")] pub struct ModelProviderCapabilitiesReadParams {} #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)] #[serde(rename_all = "camelCase")] #[ts(export_to = "v2/")] pub struct ModelProviderCapabilitiesReadResponse { pub namespace_tools: bool, pub image_generation: bool, pub web_search: bool, } #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Default, JsonSchema, TS)] #[serde(rename_all = "camelCase")] #[ts(export_to = "v2/")] pub struct ModelListParams { /// Opaque pagination cursor returned by a previous call. #[ts(optional = nullable)] pub cursor: Option, /// Optional page size; defaults to a reasonable server-side value. #[ts(optional = nullable)] pub limit: Option, /// When true, include models that are hidden from the default picker list. #[ts(optional = nullable)] pub include_hidden: Option, } #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, JsonSchema, TS)] #[serde(rename_all = "camelCase")] #[ts(export_to = "v2/")] pub struct ModelAvailabilityNux { pub message: String, } impl From for ModelAvailabilityNux { fn from(value: CoreModelAvailabilityNux) -> Self { Self { message: value.message, } } } #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, JsonSchema, TS)] #[serde(rename_all = "camelCase")] #[ts(export_to = "v2/")] pub struct ModelServiceTier { pub id: String, pub name: String, pub description: String, } /// Caller-specific explicit access programs advertised by model discovery. #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, JsonSchema, TS)] #[serde(rename_all = "camelCase")] #[ts(export_to = "v2/")] pub struct ModelAccessPrograms { /// Accepted explicit selections. pub cyber: Vec, } impl From for ModelAccessPrograms { fn from(value: CoreModelAccessPrograms) -> Self { Self { cyber: value.cyber.into_iter().map(Into::into).collect(), } } } impl From for CoreModelAccessPrograms { fn from(value: ModelAccessPrograms) -> Self { Self { cyber: value.cyber.into_iter().map(Into::into).collect(), } } } #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, JsonSchema, TS)] #[serde(rename_all = "camelCase")] #[ts(export_to = "v2/")] pub struct Model { pub id: String, pub model: String, pub upgrade: Option, pub upgrade_info: Option, pub availability_nux: Option, pub display_name: String, pub description: String, #[serde(default)] pub model_specialty: Option, pub hidden: bool, pub supported_reasoning_efforts: Vec, pub default_reasoning_effort: ReasoningEffort, #[serde(default = "default_input_modalities")] pub input_modalities: Vec, /// @deprecated Always false; models no longer support personality selection. #[serde(default)] pub supports_personality: bool, /// Multi-agent runtime declared by this model, when available. pub multi_agent_version: Option, /// Deprecated: use `serviceTiers` instead. #[serde(default)] pub additional_speed_tiers: Vec, #[serde(default)] pub service_tiers: Vec, /// Catalog default service tier id for this model, when one is configured. #[serde(default)] pub default_service_tier: Option, /// Null when the catalog does not provide access-program metadata. #[serde(default)] pub available_access_programs: Option, // Only one model should be marked as default. pub is_default: bool, } #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, JsonSchema, TS)] #[serde(rename_all = "camelCase")] #[ts(export_to = "v2/")] pub struct ModelUpgradeInfo { pub model: String, pub upgrade_copy: Option, pub model_link: Option, pub migration_markdown: Option, /// Informational Unix timestamp for this upgrade's scheduled retirement, if known. #[ts(type = "number | null")] pub retirement_at: Option, } #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, JsonSchema, TS)] #[serde(rename_all = "camelCase")] #[ts(export_to = "v2/")] pub struct ReasoningEffortOption { pub reasoning_effort: ReasoningEffort, pub description: String, } #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, JsonSchema, TS)] #[serde(rename_all = "camelCase")] #[ts(export_to = "v2/")] pub struct ModelListResponse { pub data: Vec, /// Opaque cursor to pass to the next call to continue after the last item. /// If None, there are no more items to return. pub next_cursor: Option, } #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)] #[serde(rename_all = "camelCase")] #[ts(export_to = "v2/")] pub struct ModelReroutedNotification { pub thread_id: String, pub turn_id: String, pub from_model: String, pub to_model: String, pub reason: ModelRerouteReason, } #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)] #[serde(rename_all = "camelCase")] #[ts(export_to = "v2/")] pub struct ModelVerificationNotification { pub thread_id: String, pub turn_id: String, pub verifications: Vec, } #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, JsonSchema, TS)] #[serde(rename_all = "camelCase")] #[ts(export_to = "v2/")] pub struct TurnModerationMetadataNotification { pub thread_id: String, pub turn_id: String, pub metadata: JsonValue, } #[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, JsonSchema, TS)] #[serde(rename_all = "camelCase")] #[ts(export_to = "v2/")] pub struct ModelSafetyBufferingUpdatedNotification { pub thread_id: String, pub turn_id: String, pub model: String, pub use_cases: Vec, pub reasons: Vec, pub show_buffering_ui: bool, pub faster_model: Option, }