2026-04-07 02:50:19 +08:00
|
|
|
#[cfg(test)]
|
2026-04-09 00:10:38 +08:00
|
|
|
#[path = "codex/tests.rs"]
|
|
|
|
|
mod tests;
|
2026-04-07 02:50:19 +08:00
|
|
|
|
2026-05-02 13:23:54 +08:00
|
|
|
pub(crate) use crate::ai_serving::{
|
2026-07-11 03:42:30 +08:00
|
|
|
apply_codex_openai_responses_special_body_edits, apply_codex_openai_special_headers,
|
2026-04-09 00:10:38 +08:00
|
|
|
};
|
2026-07-11 03:42:30 +08:00
|
|
|
|
|
|
|
|
pub(crate) fn codex_model_capabilities_for_transport(
|
|
|
|
|
transport: &crate::ai_serving::GatewayProviderTransportSnapshot,
|
|
|
|
|
provider_api_format: &str,
|
|
|
|
|
provider_model: &str,
|
|
|
|
|
source_model: &str,
|
|
|
|
|
) -> Option<crate::ai_serving::CodexResponsesModelCapabilities> {
|
2026-07-12 03:04:15 +08:00
|
|
|
codex_model_capabilities(
|
|
|
|
|
&transport.provider.provider_type,
|
|
|
|
|
provider_api_format,
|
|
|
|
|
provider_model,
|
|
|
|
|
source_model,
|
|
|
|
|
transport.key.upstream_metadata.as_ref(),
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn codex_model_capabilities(
|
|
|
|
|
provider_type: &str,
|
|
|
|
|
provider_api_format: &str,
|
|
|
|
|
provider_model: &str,
|
|
|
|
|
source_model: &str,
|
|
|
|
|
upstream_metadata: Option<&serde_json::Value>,
|
|
|
|
|
) -> Option<crate::ai_serving::CodexResponsesModelCapabilities> {
|
|
|
|
|
let uses_codex_model_catalog =
|
|
|
|
|
crate::ai_serving::is_openai_responses_family_format(provider_api_format)
|
|
|
|
|
|| crate::ai_serving::api_format_alias_matches(provider_api_format, "openai:search");
|
|
|
|
|
if !provider_type.trim().eq_ignore_ascii_case("codex") || !uses_codex_model_catalog {
|
2026-07-11 03:42:30 +08:00
|
|
|
return None;
|
|
|
|
|
}
|
|
|
|
|
Some(
|
|
|
|
|
crate::ai_serving::resolve_codex_responses_model_capabilities(
|
|
|
|
|
provider_model,
|
|
|
|
|
source_model,
|
2026-07-12 03:04:15 +08:00
|
|
|
upstream_metadata,
|
2026-07-11 03:42:30 +08:00
|
|
|
),
|
|
|
|
|
)
|
|
|
|
|
}
|