diff --git a/crates/manifest/src/model_catalog.rs b/crates/manifest/src/model_catalog.rs index 2bca37e22..0adaa2eaf 100644 --- a/crates/manifest/src/model_catalog.rs +++ b/crates/manifest/src/model_catalog.rs @@ -570,10 +570,16 @@ mod tests { } #[test] - fn builtin_codex_catalog_includes_gpt_6_sol_and_luna() { + fn builtin_codex_catalog_replaces_gpt_6_sol_with_6_1_and_keeps_astra_and_luna() { let models = load_builtin_models().unwrap(); + let providers = load_builtin_providers().unwrap(); + assert!( + !models + .iter() + .any(|model| model.provider == "codex-oauth" && model.id == "gpt-6-sol") + ); - for model_id in ["gpt-6-sol", "gpt-6-luna"] { + for model_id in ["gpt-6.1-sol", "gpt-6-astra", "gpt-6-luna"] { let model = models .iter() .find(|model| model.provider == "codex-oauth" && model.id == model_id) @@ -581,6 +587,23 @@ mod tests { assert_eq!(model.context_window, Some(1_050_000)); assert_eq!(model.max_context_window, Some(272_000)); assert!(model.capability.is_some()); + + let config = resolve_with_catalogs( + &ModelManifest { + ref_: Some(format!("codex-oauth/{model_id}")), + context_window: Some(1_050_000), + ..Default::default() + }, + &providers, + &models, + ) + .unwrap(); + assert_eq!(config.model_id, model_id); + assert_eq!(config.scheme, SchemeKind::OpenaiResponses); + assert_eq!(config.auth, AuthRef::CodexOAuth); + assert_eq!(config.context_window, 272_000); + assert_eq!(config.max_context_window, Some(272_000)); + assert_eq!(config.capability, model.capability); } } diff --git a/resources/models/builtin.toml b/resources/models/builtin.toml index 605ad1114..8b1e98f49 100644 --- a/resources/models/builtin.toml +++ b/resources/models/builtin.toml @@ -43,8 +43,11 @@ context_window = 1050000 max_context_window = 272000 capability = { tool_calling = "parallel", structured_output = "json_schema", reasoning = "effort", vision = true, prompt_caching = { kind = "auto" } } +# https://developers.openai.com/api/docs/models/gpt-6.1-sol +# Tool calling requires Responses; reasoning effort supports low through max, +# but not none or minimal. Preserve the Codex route's effective limit above. [[model]] -id = "gpt-6-sol" +id = "gpt-6.1-sol" provider = "codex-oauth" context_window = 1050000 max_context_window = 272000