[0.159] Backport GPT-6.1 Sol Bedrock catalogs (#49342)

Backport #49339 onto `release/0.159` for 0.159.1. This adds GPT-6.1 Sol
to the Bedrock Mantle and Runtime catalogs and makes it the default
while retaining existing models and provider capability normalization.

The bundled catalog dependency is already on the release branch through
#49323. The cherry-pick applied without conflicts and has the same
stable patch ID as the original public commit.

Validation:
- `just test -p codex-model-provider -p codex-model-provider-info --lib
bedrock`: 57 passed.
- `just test -p codex-tui --lib bedrock`: 7 passed; reviewed Mantle and
Runtime model-picker snapshots, including GovCloud coverage.
- `just test -p codex-app-server --test all -E
'test(suite::v2::thread_start::thread_start_provider_model_fallback_) or
test(suite::v2::thread_start::thread_start_bedrock_runtime_)'`: 4 passed
on automatic retry. All four initial attempts timed out during
initialization; nextest reports these as flaky passes.
- `just fmt` completed successfully. Discarded unrelated justfile-only
formatting churn; the backport remains identical to the public source
patch.
- `git diff --check`: passed.
- Live AWS inference has not been verified as part of this backport.

CI remains blocked by failures outside this nine-file backport:
- [Manifest
check](https://github.com/openai/codex/actions/runs/36615506389/job/109567359534):
stale `code-mode` feature exception.
-
[Codespell](https://github.com/openai/codex/actions/runs/36615506389/job/109567359001):
`WRONLY` and `oint` in unchanged exec-server/TUI math files.
- [cargo
shear](https://github.com/openai/codex/actions/runs/36615506389/job/109567775485):
unlinked `core/tests/suite/scenarios_read_only_mcp.rs` and
`login/src/internal_identity.rs`.
- [Bazel
Clippy](https://github.com/openai/codex/actions/runs/36615506389/job/109567360047):
unused imports in unchanged core implementation/test files.
- [SDK
checks](https://github.com/openai/codex/actions/runs/36615506389/job/109567359667):
existing formatter-driver test expects direct rustfmt while the driver
uses cargo fmt; neither file changes here.

Release coordination: include this backport together with #49323 before
publishing 0.159.1. Publication remains with the release captain.
This commit is contained in:
Celia Chen
2026-09-29 12:21:00 -07:00
committed by GitHub
parent 9fb2f5f4b2
commit 3b765518ae
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
@@ -1277,6 +1277,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",
@@ -1307,8 +1308,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"),
@@ -1329,8 +1331,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",
@@ -1344,7 +1347,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)