Add GPT-6.1 Sol to Bedrock catalogs and make it the default (#49339)

## What changed

Add `openai.gpt-6.1-sol` to the Bedrock Mantle catalog and its `global.` and `us.` variants to the Bedrock Runtime catalog. Make GPT-6.1 Sol the default and provider fallback model, preferring the global variant for Runtime. Keep existing models available.

## Testing

Update catalog and provider assertions, thread-start fallback tests, and TUI model-picker snapshots to cover GPT-6.1 Sol and the new defaults.

GitOrigin-RevId: ec65744ff9409980474cc1faf516beed0b2430da
This commit is contained in:
Celia Chen
2026-09-29 18:50:36 +00:00
committed by copyberry
parent ed9e5a26a8
commit a6e9eaa9bd
9 changed files with 102 additions and 50 deletions
@@ -115,7 +115,7 @@ model = "gpt-5.4-mini"
})
.await?;
assert_eq!(response.model, "openai.gpt-6-sol");
assert_eq!(response.model, "openai.gpt-6.1-sol");
Ok(())
}
@@ -245,6 +245,7 @@ async fn thread_start_provider_model_fallback_uses_bedrock_static_catalog() -> R
)
.await?;
for model in [
"openai.gpt-6.1-sol",
"openai.gpt-6-sol",
"openai.gpt-6-luna",
"openai.gpt-5.6-sol",
@@ -273,7 +274,7 @@ async fn thread_start_provider_model_fallback_uses_bedrock_static_catalog() -> R
supported_with_fallback.model,
unsupported_without_fallback.model,
],
vec!["openai.gpt-6-sol", "openai.gpt-5.5", "gpt-5.4-mini"]
vec!["openai.gpt-6.1-sol", "openai.gpt-5.5", "gpt-5.4-mini"]
);
Ok(())
}
@@ -292,6 +293,8 @@ async fn thread_start_bedrock_runtime_prefers_global_cross_region_models() -> Re
.await?;
for model in [
"global.openai.gpt-6.1-sol",
"us.openai.gpt-6.1-sol",
"global.openai.gpt-6-sol",
"us.openai.gpt-6-sol",
"global.openai.gpt-6-luna",
@@ -311,7 +314,7 @@ async fn thread_start_bedrock_runtime_prefers_global_cross_region_models() -> Re
/*allow_provider_model_fallback*/ true,
)
.await?;
assert_eq!(response.model, "global.openai.gpt-6-sol");
assert_eq!(response.model, "global.openai.gpt-6.1-sol");
Ok(())
}
+1
View File
@@ -81,6 +81,7 @@ const AMAZON_BEDROCK_RUNTIME_PROVIDER_NAME: &str = "Amazon Bedrock Runtime";
pub const AMAZON_BEDROCK_RUNTIME_PROVIDER_ID: &str = "amazon-bedrock-runtime";
pub const AMAZON_BEDROCK_GPT_5_5_MODEL_ID: &str = "openai.gpt-5.5";
pub const AMAZON_BEDROCK_GPT_5_6_SOL_MODEL_ID: &str = "openai.gpt-5.6-sol";
pub const AMAZON_BEDROCK_GPT_6_1_SOL_MODEL_ID: &str = "openai.gpt-6.1-sol";
pub const AMAZON_BEDROCK_GPT_6_SOL_MODEL_ID: &str = "openai.gpt-6-sol";
pub const AMAZON_BEDROCK_GPT_6_LUNA_MODEL_ID: &str = "openai.gpt-6-luna";
pub const AMAZON_BEDROCK_GPT_6_ASTRA_MODEL_ID: &str = "openai.gpt-6-astra";
@@ -2,6 +2,7 @@ use codex_model_provider_info::AMAZON_BEDROCK_GPT_5_5_MODEL_ID;
use codex_model_provider_info::AMAZON_BEDROCK_GPT_5_6_LUNA_MODEL_ID;
use codex_model_provider_info::AMAZON_BEDROCK_GPT_5_6_SOL_MODEL_ID;
use codex_model_provider_info::AMAZON_BEDROCK_GPT_5_6_TERRA_MODEL_ID;
use codex_model_provider_info::AMAZON_BEDROCK_GPT_6_1_SOL_MODEL_ID;
use codex_model_provider_info::AMAZON_BEDROCK_GPT_6_ASTRA_MODEL_ID;
use codex_model_provider_info::AMAZON_BEDROCK_GPT_6_LUNA_MODEL_ID;
use codex_model_provider_info::AMAZON_BEDROCK_GPT_6_SOL_MODEL_ID;
@@ -17,6 +18,7 @@ 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_6_1_SOL_OPENAI_MODEL_ID: &str = "gpt-6.1-sol";
const GPT_6_SOL_OPENAI_MODEL_ID: &str = "gpt-6-sol";
const GPT_6_LUNA_OPENAI_MODEL_ID: &str = "gpt-6-luna";
const GPT_6_ASTRA_OPENAI_MODEL_ID: &str = "gpt-6-astra";
@@ -26,9 +28,9 @@ pub(crate) fn static_model_catalog() -> ModelsResponse {
normalize_bedrock_catalog(ModelsResponse {
models: vec![
bedrock_model(
bundled_openai_model(GPT_6_SOL_OPENAI_MODEL_ID),
AMAZON_BEDROCK_GPT_6_SOL_MODEL_ID,
"GPT-6 Sol",
bundled_openai_model(GPT_6_1_SOL_OPENAI_MODEL_ID),
AMAZON_BEDROCK_GPT_6_1_SOL_MODEL_ID,
"GPT-6.1 Sol",
/*priority*/ 0,
),
bedrock_model(
@@ -37,35 +39,41 @@ pub(crate) fn static_model_catalog() -> ModelsResponse {
"GPT-6-Astra",
/*priority*/ 1,
),
bedrock_model(
bundled_openai_model(GPT_6_SOL_OPENAI_MODEL_ID),
AMAZON_BEDROCK_GPT_6_SOL_MODEL_ID,
"GPT-6 Sol",
/*priority*/ 2,
),
bedrock_model(
bundled_openai_model(GPT_6_LUNA_OPENAI_MODEL_ID),
AMAZON_BEDROCK_GPT_6_LUNA_MODEL_ID,
"GPT-6 Luna",
/*priority*/ 2,
/*priority*/ 3,
),
bedrock_model(
bundled_openai_model(GPT_5_6_SOL_OPENAI_MODEL_ID),
AMAZON_BEDROCK_GPT_5_6_SOL_MODEL_ID,
"GPT-5.6 Sol",
/*priority*/ 3,
/*priority*/ 4,
),
bedrock_model(
bundled_openai_model(GPT_5_6_TERRA_OPENAI_MODEL_ID),
AMAZON_BEDROCK_GPT_5_6_TERRA_MODEL_ID,
"GPT-5.6 Terra",
/*priority*/ 4,
/*priority*/ 5,
),
bedrock_model(
bundled_openai_model(GPT_5_6_LUNA_OPENAI_MODEL_ID),
AMAZON_BEDROCK_GPT_5_6_LUNA_MODEL_ID,
"GPT-5.6 Luna",
/*priority*/ 5,
/*priority*/ 6,
),
gpt_5_bedrock_model(
GPT_5_5_OPENAI_MODEL_ID,
AMAZON_BEDROCK_GPT_5_5_MODEL_ID,
"GPT-5.5",
/*priority*/ 6,
/*priority*/ 7,
),
],
})
@@ -161,8 +169,9 @@ mod tests {
.map(|model| model.slug.as_str())
.collect::<Vec<_>>(),
vec![
AMAZON_BEDROCK_GPT_6_SOL_MODEL_ID,
AMAZON_BEDROCK_GPT_6_1_SOL_MODEL_ID,
AMAZON_BEDROCK_GPT_6_ASTRA_MODEL_ID,
AMAZON_BEDROCK_GPT_6_SOL_MODEL_ID,
AMAZON_BEDROCK_GPT_6_LUNA_MODEL_ID,
AMAZON_BEDROCK_GPT_5_6_SOL_MODEL_ID,
AMAZON_BEDROCK_GPT_5_6_TERRA_MODEL_ID,
@@ -189,7 +198,7 @@ mod tests {
.collect::<Vec<_>>(),
vec![
(
AMAZON_BEDROCK_GPT_6_SOL_MODEL_ID,
AMAZON_BEDROCK_GPT_6_1_SOL_MODEL_ID,
Some(GPT_5_BEDROCK_CONTEXT_WINDOW),
Some(872_000),
WebSearchToolType::Text,
@@ -200,6 +209,12 @@ mod tests {
Some(872_000),
WebSearchToolType::Text,
),
(
AMAZON_BEDROCK_GPT_6_SOL_MODEL_ID,
Some(GPT_5_BEDROCK_CONTEXT_WINDOW),
Some(872_000),
WebSearchToolType::Text,
),
(
AMAZON_BEDROCK_GPT_6_LUNA_MODEL_ID,
Some(GPT_5_BEDROCK_CONTEXT_WINDOW),
@@ -277,35 +292,41 @@ mod tests {
let catalog = static_model_catalog();
for (mut expected, slug, display_name, priority) in [
(
bundled_openai_model(GPT_6_1_SOL_OPENAI_MODEL_ID),
AMAZON_BEDROCK_GPT_6_1_SOL_MODEL_ID,
"GPT-6.1 Sol",
0,
),
(
bundled_openai_model(GPT_6_SOL_OPENAI_MODEL_ID),
AMAZON_BEDROCK_GPT_6_SOL_MODEL_ID,
"GPT-6 Sol",
0,
2,
),
(
bundled_openai_model(GPT_6_LUNA_OPENAI_MODEL_ID),
AMAZON_BEDROCK_GPT_6_LUNA_MODEL_ID,
"GPT-6 Luna",
2,
3,
),
(
bundled_openai_model(GPT_5_6_SOL_OPENAI_MODEL_ID),
AMAZON_BEDROCK_GPT_5_6_SOL_MODEL_ID,
"GPT-5.6 Sol",
3,
4,
),
(
bundled_openai_model(GPT_5_6_TERRA_OPENAI_MODEL_ID),
AMAZON_BEDROCK_GPT_5_6_TERRA_MODEL_ID,
"GPT-5.6 Terra",
4,
5,
),
(
bundled_openai_model(GPT_5_6_LUNA_OPENAI_MODEL_ID),
AMAZON_BEDROCK_GPT_5_6_LUNA_MODEL_ID,
"GPT-5.6 Luna",
5,
6,
),
(
bundled_openai_model(GPT_6_ASTRA_OPENAI_MODEL_ID),
@@ -1,6 +1,7 @@
use codex_model_provider_info::AMAZON_BEDROCK_GPT_5_6_LUNA_MODEL_ID;
use codex_model_provider_info::AMAZON_BEDROCK_GPT_5_6_SOL_MODEL_ID;
use codex_model_provider_info::AMAZON_BEDROCK_GPT_5_6_TERRA_MODEL_ID;
use codex_model_provider_info::AMAZON_BEDROCK_GPT_6_1_SOL_MODEL_ID;
use codex_model_provider_info::AMAZON_BEDROCK_GPT_6_ASTRA_MODEL_ID;
use codex_model_provider_info::AMAZON_BEDROCK_GPT_6_LUNA_MODEL_ID;
use codex_model_provider_info::AMAZON_BEDROCK_GPT_6_SOL_MODEL_ID;
@@ -21,6 +22,7 @@ pub(super) fn static_runtime_model_catalog() -> ModelsResponse {
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_6_1_SOL_MODEL_ID
| AMAZON_BEDROCK_GPT_6_ASTRA_MODEL_ID
| AMAZON_BEDROCK_GPT_6_SOL_MODEL_ID
| AMAZON_BEDROCK_GPT_6_LUNA_MODEL_ID
@@ -18,25 +18,27 @@ fn runtime_catalog_includes_supported_cross_region_models_in_priority_order() {
))
.collect::<Vec<_>>(),
vec![
("global.openai.gpt-6-sol", "GPT-6 Sol (Global)", 0),
("global.openai.gpt-6.1-sol", "GPT-6.1 Sol (Global)", 0),
("global.openai.gpt-6-astra", "GPT-6-Astra (Global)", 1),
("global.openai.gpt-6-luna", "GPT-6 Luna (Global)", 2),
("global.openai.gpt-5.6-sol", "GPT-5.6 Sol (Global)", 3),
("global.openai.gpt-5.6-terra", "GPT-5.6 Terra (Global)", 4),
("global.openai.gpt-5.6-luna", "GPT-5.6 Luna (Global)", 5),
("us.openai.gpt-6-sol", "GPT-6 Sol (US cross-region)", 6),
("us.openai.gpt-6-astra", "GPT-6-Astra (US cross-region)", 7),
("us.openai.gpt-6-luna", "GPT-6 Luna (US cross-region)", 8),
("us.openai.gpt-5.6-sol", "GPT-5.6 Sol (US cross-region)", 9),
("global.openai.gpt-6-sol", "GPT-6 Sol (Global)", 2),
("global.openai.gpt-6-luna", "GPT-6 Luna (Global)", 3),
("global.openai.gpt-5.6-sol", "GPT-5.6 Sol (Global)", 4),
("global.openai.gpt-5.6-terra", "GPT-5.6 Terra (Global)", 5),
("global.openai.gpt-5.6-luna", "GPT-5.6 Luna (Global)", 6),
("us.openai.gpt-6.1-sol", "GPT-6.1 Sol (US cross-region)", 7),
("us.openai.gpt-6-astra", "GPT-6-Astra (US cross-region)", 8),
("us.openai.gpt-6-sol", "GPT-6 Sol (US cross-region)", 9),
("us.openai.gpt-6-luna", "GPT-6 Luna (US cross-region)", 10),
("us.openai.gpt-5.6-sol", "GPT-5.6 Sol (US cross-region)", 11),
(
"us.openai.gpt-5.6-terra",
"GPT-5.6 Terra (US cross-region)",
10
12
),
(
"us.openai.gpt-5.6-luna",
"GPT-5.6 Luna (US cross-region)",
11
13
),
]
);
@@ -59,7 +61,7 @@ fn runtime_catalog_disables_web_search_without_overriding_review_models() {
.collect::<Vec<_>>(),
vec![
(
"global.openai.gpt-6-sol",
"global.openai.gpt-6.1-sol",
None,
false,
Some(MultiAgentVersion::V1),
@@ -70,6 +72,12 @@ fn runtime_catalog_disables_web_search_without_overriding_review_models() {
false,
Some(MultiAgentVersion::V1),
),
(
"global.openai.gpt-6-sol",
None,
false,
Some(MultiAgentVersion::V1),
),
(
"global.openai.gpt-6-luna",
None,
@@ -95,7 +103,7 @@ fn runtime_catalog_disables_web_search_without_overriding_review_models() {
Some(MultiAgentVersion::V1),
),
(
"us.openai.gpt-6-sol",
"us.openai.gpt-6.1-sol",
None,
false,
Some(MultiAgentVersion::V1),
@@ -106,6 +114,12 @@ fn runtime_catalog_disables_web_search_without_overriding_review_models() {
false,
Some(MultiAgentVersion::V1),
),
(
"us.openai.gpt-6-sol",
None,
false,
Some(MultiAgentVersion::V1),
),
(
"us.openai.gpt-6-luna",
None,
+6 -3
View File
@@ -1267,6 +1267,7 @@ printf '%s\n' '{"AccessKeyId":"exported","SecretAccessKey":"secret"}'
.await;
assert_eq!(uncached_catalog, catalog);
for slug in [
"openai.gpt-6.1-sol",
"openai.gpt-6-sol",
"openai.gpt-6-luna",
"openai.gpt-5.6-sol",
@@ -1297,8 +1298,9 @@ printf '%s\n' '{"AccessKeyId":"exported","SecretAccessKey":"secret"}'
assert_eq!(
models,
vec![
("openai.gpt-6-sol", "GPT-6 Sol"),
("openai.gpt-6.1-sol", "GPT-6.1 Sol"),
("openai.gpt-6-astra", "GPT-6-Astra"),
("openai.gpt-6-sol", "GPT-6 Sol"),
("openai.gpt-6-luna", "GPT-6 Luna"),
("openai.gpt-5.6-sol", "GPT-5.6 Sol"),
("openai.gpt-5.6-terra", "GPT-5.6 Terra"),
@@ -1319,8 +1321,9 @@ printf '%s\n' '{"AccessKeyId":"exported","SecretAccessKey":"secret"}'
.map(|preset| preset.model.as_str())
.collect::<Vec<_>>(),
vec![
"openai.gpt-6-sol",
"openai.gpt-6.1-sol",
"openai.gpt-6-astra",
"openai.gpt-6-sol",
"openai.gpt-6-luna",
"openai.gpt-5.6-sol",
"openai.gpt-5.6-terra",
@@ -1334,7 +1337,7 @@ printf '%s\n' '{"AccessKeyId":"exported","SecretAccessKey":"secret"}'
.find(|preset| preset.is_default)
.expect("Bedrock catalog should have a default model");
assert_eq!(default_model.model, "openai.gpt-6-sol");
assert_eq!(default_model.model, "openai.gpt-6.1-sol");
}
#[tokio::test]
@@ -5,12 +5,13 @@ expression: "render_bottom_popup(&chat, 100)"
Select Model and Effort
› 1. GPT-6 Sol (current) Previous generation workhorse model.
2. GPT-6-Astra Frontier intelligence for the most demanding work.
3. GPT-6 Luna Fast and affordable model for easier tasks.
4. GPT-5.6 Sol Older generation workhorse model.
5. GPT-5.6 Terra Older balanced model for straightforward work.
6. GPT-5.6 Luna Older fast and efficient model.
7. GPT-5.5 Legacy coding model.
› 1. GPT-6.1 Sol (current) Latest workhorse model for coding and everyday work.
2. GPT-6-Astra Frontier intelligence for the most demanding work.
3. GPT-6 Sol Previous generation workhorse model.
4. GPT-6 Luna Fast and affordable model for easier tasks.
5. GPT-5.6 Sol Older generation workhorse model.
6. GPT-5.6 Terra Older balanced model for straightforward work.
7. GPT-5.6 Luna Older fast and efficient model.
8. GPT-5.5 Legacy coding model.
enter select · esc back
@@ -5,13 +5,13 @@ expression: "render_bottom_popup(&chat, 100)"
Select Model and Effort
› 1. GPT-6 Sol (Global) (current) Previous generation workhorse model.
› 1. GPT-6.1 Sol (Global) (current) Latest workhorse model for coding and everyday work.
2. GPT-6-Astra (Global) Frontier intelligence for the most demanding work.
3. GPT-6 Luna (Global) Fast and affordable model for easier tasks.
4. GPT-5.6 Sol (Global) Older generation workhorse model.
5. GPT-5.6 Terra (Global) Older balanced model for straightforward work.
6. GPT-5.6 Luna (Global) Older fast and efficient model.
7. GPT-6 Sol (US cross-region) Previous generation workhorse model.
8. GPT-6-Astra (US cross-region) Frontier intelligence for the most demanding work.
3. GPT-6 Sol (Global) Previous generation workhorse model.
4. GPT-6 Luna (Global) Fast and affordable model for easier tasks.
5. GPT-5.6 Sol (Global) Older generation workhorse model.
6. GPT-5.6 Terra (Global) Older balanced model for straightforward work.
7. GPT-5.6 Luna (Global) Older fast and efficient model.
8. GPT-6.1 Sol (US cross-region) Latest workhorse model for coding and everyday work.
↓
enter select · esc back
@@ -13,13 +13,13 @@ async fn bedrock_astra_model_and_reasoning_pickers() {
(
"mantle",
ModelProviderInfo::create_amazon_bedrock_provider(/*aws*/ None),
"openai.gpt-6-sol",
"openai.gpt-6.1-sol",
"openai.gpt-6-astra",
),
(
"runtime",
ModelProviderInfo::create_amazon_bedrock_runtime_provider(/*aws*/ None),
"global.openai.gpt-6-sol",
"global.openai.gpt-6.1-sol",
"global.openai.gpt-6-astra",
),
] {
@@ -30,6 +30,13 @@ async fn bedrock_astra_model_and_reasoning_pickers() {
HttpClientFactory::new(OutboundProxyPolicy::ReqwestDefault),
)
.await;
assert_eq!(
presets
.iter()
.find(|preset| preset.is_default)
.map(|preset| preset.model.as_str()),
Some(default_model),
);
let astra = presets
.iter()
.find(|model| model.model == astra_model)