From 610f09abcfbfd3e75dd5c37659c8f7a9e82a2f67 Mon Sep 17 00:00:00 2001 From: Celia Chen Date: Fri, 10 Jul 2026 23:18:19 +0000 Subject: [PATCH] Make GPT-5.6 Sol the default Bedrock model (#32288) ## What changed - Prioritize the GPT-5.6 Sol, Terra, and Luna variants ahead of GPT-5.5 and GPT-5.4 in the static Amazon Bedrock catalog, making Sol the default. - Use each GPT-5.6 variant's bundled description and default reasoning level while retaining Bedrock's `max` reasoning support. ## Testing - Update model-provider and app-server tests to cover catalog ordering, variant metadata, and provider-aware fallback to GPT-5.6 Sol. GitOrigin-RevId: 1761390254deae47b62c043b1ba707c384cde5e9 --- .../app-server/tests/suite/v2/thread_start.rs | 4 +- .../src/amazon_bedrock/catalog.rs | 82 +++++++++++++------ codex-rs/model-provider/src/provider.rs | 27 ++++-- 3 files changed, 80 insertions(+), 33 deletions(-) diff --git a/codex-rs/app-server/tests/suite/v2/thread_start.rs b/codex-rs/app-server/tests/suite/v2/thread_start.rs index 363b1c3389..50c8e784c3 100644 --- a/codex-rs/app-server/tests/suite/v2/thread_start.rs +++ b/codex-rs/app-server/tests/suite/v2/thread_start.rs @@ -118,7 +118,7 @@ model = "gpt-5.4-mini" .await??; let response: ThreadStartResponse = to_response(response)?; - assert_eq!(response.model, "openai.gpt-5.5"); + assert_eq!(response.model, "openai.gpt-5.6-sol"); Ok(()) } @@ -285,7 +285,7 @@ async fn thread_start_provider_model_fallback_uses_bedrock_static_catalog() -> R supported_with_fallback.model, unsupported_without_fallback.model, ], - vec!["openai.gpt-5.5", "openai.gpt-5.4", "gpt-5.4-mini"] + vec!["openai.gpt-5.6-sol", "openai.gpt-5.4", "gpt-5.4-mini"] ); Ok(()) } diff --git a/codex-rs/model-provider/src/amazon_bedrock/catalog.rs b/codex-rs/model-provider/src/amazon_bedrock/catalog.rs index 48c24ad5c8..9e552a4832 100644 --- a/codex-rs/model-provider/src/amazon_bedrock/catalog.rs +++ b/codex-rs/model-provider/src/amazon_bedrock/catalog.rs @@ -10,37 +10,43 @@ use codex_protocol::openai_models::ReasoningEffort; use codex_protocol::openai_models::ReasoningEffortPreset; const GPT_5_BEDROCK_CONTEXT_WINDOW: i64 = 272_000; +const GPT_5_6_SOL_OPENAI_MODEL_ID: &str = "gpt-5.6-sol"; +const GPT_5_6_TERRA_OPENAI_MODEL_ID: &str = "gpt-5.6-terra"; +const GPT_5_6_LUNA_OPENAI_MODEL_ID: &str = "gpt-5.6-luna"; const GPT_5_5_OPENAI_MODEL_ID: &str = "gpt-5.5"; const GPT_5_4_OPENAI_MODEL_ID: &str = "gpt-5.4"; pub(crate) fn static_model_catalog() -> ModelsResponse { with_default_only_service_tier(ModelsResponse { models: vec![ + gpt_5_6_bedrock_model( + GPT_5_6_SOL_OPENAI_MODEL_ID, + AMAZON_BEDROCK_GPT_5_6_SOL_MODEL_ID, + "GPT-5.6 Sol", + /*priority*/ 0, + ), + gpt_5_6_bedrock_model( + GPT_5_6_TERRA_OPENAI_MODEL_ID, + AMAZON_BEDROCK_GPT_5_6_TERRA_MODEL_ID, + "GPT-5.6 Terra", + /*priority*/ 1, + ), + gpt_5_6_bedrock_model( + GPT_5_6_LUNA_OPENAI_MODEL_ID, + AMAZON_BEDROCK_GPT_5_6_LUNA_MODEL_ID, + "GPT-5.6 Luna", + /*priority*/ 2, + ), gpt_5_bedrock_model( GPT_5_5_OPENAI_MODEL_ID, AMAZON_BEDROCK_GPT_5_5_MODEL_ID, "GPT-5.5", - /*priority*/ 0, + /*priority*/ 3, ), gpt_5_bedrock_model( GPT_5_4_OPENAI_MODEL_ID, AMAZON_BEDROCK_GPT_5_4_MODEL_ID, "GPT-5.4", - /*priority*/ 1, - ), - gpt_5_6_bedrock_model( - AMAZON_BEDROCK_GPT_5_6_SOL_MODEL_ID, - "GPT-5.6 Sol", - /*priority*/ 2, - ), - gpt_5_6_bedrock_model( - AMAZON_BEDROCK_GPT_5_6_TERRA_MODEL_ID, - "GPT-5.6 Terra", - /*priority*/ 3, - ), - gpt_5_6_bedrock_model( - AMAZON_BEDROCK_GPT_5_6_LUNA_MODEL_ID, - "GPT-5.6 Luna", /*priority*/ 4, ), ], @@ -74,13 +80,21 @@ fn gpt_5_bedrock_model( model } -fn gpt_5_6_bedrock_model(bedrock_slug: &str, display_name: &str, priority: i32) -> ModelInfo { +fn gpt_5_6_bedrock_model( + openai_slug: &str, + bedrock_slug: &str, + display_name: &str, + priority: i32, +) -> ModelInfo { + let openai_model = bundled_openai_model(openai_slug); let mut model = gpt_5_bedrock_model( GPT_5_5_OPENAI_MODEL_ID, bedrock_slug, display_name, priority, ); + model.description = openai_model.description; + model.default_reasoning_level = openai_model.default_reasoning_level; model .supported_reasoning_levels .push(ReasoningEffortPreset { @@ -107,7 +121,7 @@ mod tests { use super::*; #[test] - fn catalog_uses_mantle_model_ids_as_slugs() { + fn catalog_uses_mantle_model_ids_in_priority_order() { let catalog = static_model_catalog(); assert_eq!( @@ -117,11 +131,11 @@ mod tests { .map(|model| model.slug.as_str()) .collect::>(), vec![ - AMAZON_BEDROCK_GPT_5_5_MODEL_ID, - AMAZON_BEDROCK_GPT_5_4_MODEL_ID, AMAZON_BEDROCK_GPT_5_6_SOL_MODEL_ID, AMAZON_BEDROCK_GPT_5_6_TERRA_MODEL_ID, AMAZON_BEDROCK_GPT_5_6_LUNA_MODEL_ID, + AMAZON_BEDROCK_GPT_5_5_MODEL_ID, + AMAZON_BEDROCK_GPT_5_4_MODEL_ID, ] ); } @@ -151,7 +165,7 @@ mod tests { } #[test] - fn gpt_5_6_bedrock_models_clone_gpt_5_5_config_with_max_reasoning_effort() { + fn gpt_5_6_bedrock_models_use_variant_metadata_and_max_reasoning_effort() { let catalog = static_model_catalog(); let gpt_5_5 = catalog .models @@ -159,14 +173,32 @@ mod tests { .find(|model| model.slug == AMAZON_BEDROCK_GPT_5_5_MODEL_ID) .expect("Bedrock catalog should include GPT-5.5"); - for (slug, display_name, priority) in [ - (AMAZON_BEDROCK_GPT_5_6_SOL_MODEL_ID, "GPT-5.6 Sol", 2), - (AMAZON_BEDROCK_GPT_5_6_TERRA_MODEL_ID, "GPT-5.6 Terra", 3), - (AMAZON_BEDROCK_GPT_5_6_LUNA_MODEL_ID, "GPT-5.6 Luna", 4), + for (openai_slug, slug, display_name, priority) in [ + ( + GPT_5_6_SOL_OPENAI_MODEL_ID, + AMAZON_BEDROCK_GPT_5_6_SOL_MODEL_ID, + "GPT-5.6 Sol", + 0, + ), + ( + GPT_5_6_TERRA_OPENAI_MODEL_ID, + AMAZON_BEDROCK_GPT_5_6_TERRA_MODEL_ID, + "GPT-5.6 Terra", + 1, + ), + ( + GPT_5_6_LUNA_OPENAI_MODEL_ID, + AMAZON_BEDROCK_GPT_5_6_LUNA_MODEL_ID, + "GPT-5.6 Luna", + 2, + ), ] { + let openai_model = bundled_openai_model(openai_slug); let mut expected = gpt_5_5.clone(); expected.slug = slug.to_string(); expected.display_name = display_name.to_string(); + expected.description = openai_model.description; + expected.default_reasoning_level = openai_model.default_reasoning_level; expected.priority = priority; expected .supported_reasoning_levels diff --git a/codex-rs/model-provider/src/provider.rs b/codex-rs/model-provider/src/provider.rs index 59719777a5..fa6a89bfd0 100644 --- a/codex-rs/model-provider/src/provider.rs +++ b/codex-rs/model-provider/src/provider.rs @@ -672,25 +672,40 @@ mod tests { assert_eq!( models, vec![ - ("openai.gpt-5.5", "GPT-5.5"), - ("openai.gpt-5.4", "GPT-5.4"), ("openai.gpt-5.6-sol", "GPT-5.6 Sol"), ("openai.gpt-5.6-terra", "GPT-5.6 Terra"), ("openai.gpt-5.6-luna", "GPT-5.6 Luna"), + ("openai.gpt-5.5", "GPT-5.5"), + ("openai.gpt-5.4", "GPT-5.4"), ] ); - let default_model = manager + let available_models = manager .list_models( RefreshStrategy::Online, HttpClientFactory::new(OutboundProxyPolicy::ReqwestDefault), ) - .await - .into_iter() + .await; + assert_eq!( + available_models + .iter() + .map(|preset| preset.model.as_str()) + .collect::>(), + vec![ + "openai.gpt-5.6-sol", + "openai.gpt-5.6-terra", + "openai.gpt-5.6-luna", + "openai.gpt-5.5", + "openai.gpt-5.4", + ] + ); + + let default_model = available_models + .iter() .find(|preset| preset.is_default) .expect("Bedrock catalog should have a default model"); - assert_eq!(default_model.model, "openai.gpt-5.5"); + assert_eq!(default_model.model, "openai.gpt-5.6-sol"); } #[tokio::test]