pub mod auth;
pub mod extension;
use crate::providers::openai::responses_api::SystemInstructionsPlacement;
use crate::providers::openai::wire::{
Dialect, Identity, OutputCap, Quirks, ResponsesContract, ResponsesQuirks, Route,
};
const CHATGPT_API_BASE_URL: &str = "https://chatgpt.com/backend-api/codex";
const DEFAULT_ORIGINATOR: &str = "rig";
const DEFAULT_INSTRUCTIONS: &str = "You are ChatGPT, a helpful AI assistant.";
pub const GPT_5_4: &str = "gpt-5.4";
pub const GPT_5_4_PRO: &str = "gpt-5.4-pro";
pub const GPT_5_3_CODEX: &str = "gpt-5.3-codex";
pub const GPT_5_3_CODEX_SPARK: &str = "gpt-5.3-codex-spark";
pub const GPT_5_3_INSTANT: &str = "gpt-5.3-instant";
pub const GPT_5_3_CHAT_LATEST: &str = "gpt-5.3-chat-latest";
pub const PROVIDER_NAME: &str = "chatgpt";
pub const DIALECT: Dialect = Dialect {
base_url_env: Some("CHATGPT_API_BASE"),
request_id_header: Some("x-request-id"),
quirks: Quirks {
completion_route: Route::Responses,
output_cap: OutputCap::OpenAiReasoningFamilies,
base_url_env_alias: Some("OPENAI_CHATGPT_API_BASE"),
account_id_env: Some("CHATGPT_ACCOUNT_ID"),
default_instructions: Some(DEFAULT_INSTRUCTIONS),
instructions_env: Some("CHATGPT_DEFAULT_INSTRUCTIONS"),
accepts_file_ids: false,
identity: Some(Identity {
originator: DEFAULT_ORIGINATOR,
originator_env: "CHATGPT_ORIGINATOR",
user_agent_env: "CHATGPT_USER_AGENT",
session_ids: true,
}),
responses: ResponsesQuirks {
system_instructions: SystemInstructionsPlacement::AllInstructions,
contract: ResponsesContract::Codex,
..ResponsesQuirks::openai()
},
..Quirks::openai()
},
..Dialect::gateway(PROVIDER_NAME, CHATGPT_API_BASE_URL, "CHATGPT_ACCESS_TOKEN")
};
pub(crate) fn session_id() -> String {
crate::id::generate()
}
crate::client::macros::openai_vendor!(DIALECT, "ChatGPT");