diff --git a/codex-rs/model-provider/src/amazon_bedrock/runtime_catalog.rs b/codex-rs/model-provider/src/amazon_bedrock/runtime_catalog.rs index 0f2766efa0..3d01b2c671 100644 --- a/codex-rs/model-provider/src/amazon_bedrock/runtime_catalog.rs +++ b/codex-rs/model-provider/src/amazon_bedrock/runtime_catalog.rs @@ -9,7 +9,7 @@ const ROUTING_VARIANTS: [(&str, &str, i32); 2] = [("global.", "Global", 0), ("us.", "US cross-region", 1)]; pub(super) fn static_runtime_model_catalog() -> ModelsResponse { - let models = static_model_catalog() + let base_models = static_model_catalog() .models .into_iter() .filter(|model| { @@ -20,19 +20,18 @@ pub(super) fn static_runtime_model_catalog() -> ModelsResponse { | AMAZON_BEDROCK_GPT_5_6_LUNA_MODEL_ID ) }) - .flat_map(|model| { - ROUTING_VARIANTS - .into_iter() - .map(move |(prefix, routing_label, routing_priority)| { - let mut variant = model.clone(); - variant.slug = format!("{prefix}{}", model.slug); - variant.display_name = format!("{} ({routing_label})", model.display_name); - variant.priority = model.priority * 2 + routing_priority; - variant.supports_search_tool = false; - variant - }) - }) - .collect(); + .collect::>(); + let mut models = Vec::with_capacity(ROUTING_VARIANTS.len() * base_models.len()); + for (prefix, routing_label, routing_priority) in ROUTING_VARIANTS { + for model in &base_models { + let mut variant = model.clone(); + variant.slug = format!("{prefix}{}", model.slug); + variant.display_name = format!("{} ({routing_label})", model.display_name); + variant.priority = routing_priority * base_models.len() as i32 + model.priority; + variant.supports_search_tool = false; + models.push(variant); + } + } ModelsResponse { models } } diff --git a/codex-rs/model-provider/src/amazon_bedrock/runtime_catalog_tests.rs b/codex-rs/model-provider/src/amazon_bedrock/runtime_catalog_tests.rs index f03eb06187..5ed84edfec 100644 --- a/codex-rs/model-provider/src/amazon_bedrock/runtime_catalog_tests.rs +++ b/codex-rs/model-provider/src/amazon_bedrock/runtime_catalog_tests.rs @@ -18,14 +18,14 @@ fn runtime_catalog_includes_supported_cross_region_models_in_priority_order() { .collect::>(), vec![ ("global.openai.gpt-5.6-sol", "GPT-5.6 Sol (Global)", 0), - ("us.openai.gpt-5.6-sol", "GPT-5.6 Sol (US cross-region)", 1), - ("global.openai.gpt-5.6-terra", "GPT-5.6 Terra (Global)", 2), + ("global.openai.gpt-5.6-terra", "GPT-5.6 Terra (Global)", 1), + ("global.openai.gpt-5.6-luna", "GPT-5.6 Luna (Global)", 2), + ("us.openai.gpt-5.6-sol", "GPT-5.6 Sol (US cross-region)", 3), ( "us.openai.gpt-5.6-terra", "GPT-5.6 Terra (US cross-region)", - 3, + 4, ), - ("global.openai.gpt-5.6-luna", "GPT-5.6 Luna (Global)", 4), ( "us.openai.gpt-5.6-luna", "GPT-5.6 Luna (US cross-region)", @@ -51,10 +51,10 @@ fn runtime_catalog_disables_web_search_without_overriding_review_models() { .collect::>(), vec![ ("global.openai.gpt-5.6-sol", None, false), - ("us.openai.gpt-5.6-sol", None, false), ("global.openai.gpt-5.6-terra", None, false), - ("us.openai.gpt-5.6-terra", None, false), ("global.openai.gpt-5.6-luna", None, false), + ("us.openai.gpt-5.6-sol", None, false), + ("us.openai.gpt-5.6-terra", None, false), ("us.openai.gpt-5.6-luna", None, false), ] );