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
This commit is contained in:
Celia Chen
2026-07-10 23:22:56 +00:00
committed by copyberry
parent b5314aea11
commit 610f09abcf
3 changed files with 80 additions and 33 deletions
@@ -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(())
}
@@ -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<_>>(),
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
+21 -6
View File
@@ -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<_>>(),
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]