mirror of
https://github.com/openai/codex.git
synced 2026-10-19 16:17:49 +00:00
Add GPT-6 Sol and Luna to the model catalog (#47332)
- Add `gpt-6-sol` and `gpt-6-luna` catalog entries and refresh model descriptions. - Offer migrations from `gpt-5.5`, `gpt-5.6-sol`, and `gpt-5.6-terra` to `gpt-6-sol`, and from `gpt-5.6-luna` to `gpt-6-luna`. - Retarget retired `gpt-5.4` and `gpt-5.4-mini` selections to GPT-6 Sol and Luna, respectively. - Recommend `gpt-6-luna` in the rate-limit switch prompt. Extend migration tests to cover the new targets, their default reasoning effort, and prompting again after a previously acknowledged migration to an older target. Update model-picker and rate-limit prompt snapshots. GitOrigin-RevId: d3a093d18ce44a903383504ab8f5cbbc911d602d
This commit is contained in:
committed by
Ian MacLeod
parent
cf79c016c7
commit
267e2575f2
+2
-2
@@ -6,7 +6,7 @@ Scenario: Astra asks who a launch update is for, keeps working, and receives the
|
||||
|
||||
## Window 1
|
||||
-- request 1 (request) --
|
||||
00:additional_tools/developer (3; hash=d4f3e164a92d9bf1):
|
||||
00:additional_tools/developer (3; hash=2e52099fb7d31fa8):
|
||||
- namespace/functions; hash=e7db0a45c4ec3157
|
||||
- custom/exec
|
||||
- function/wait
|
||||
@@ -14,7 +14,7 @@ Scenario: Astra asks who a launch update is for, keeps working, and receives the
|
||||
- function/request_user_input_async
|
||||
- namespace/clock: Tools for reading and waiting on time.; hash=f402e8c5e9b5e317
|
||||
- function/sleep
|
||||
- namespace/collaboration: Tools for spawning and managing sub-agents.; hash=43f195d9cc99ee15
|
||||
- namespace/collaboration: Tools for spawning and managing sub-agents.; hash=299c9eb198cc580e
|
||||
- function/followup_task
|
||||
- function/interrupt_agent
|
||||
- function/list_agents
|
||||
|
||||
+2
-2
@@ -16,7 +16,7 @@ Settings:
|
||||
text: {"verbosity":"low"}
|
||||
tool_choice: "auto"
|
||||
-- request 1 (request) --
|
||||
00:additional_tools/developer (3; hash=24819537059703a0):
|
||||
00:additional_tools/developer (3; hash=388960e128c9d721):
|
||||
- namespace/functions; hash=97852c93915dad58
|
||||
- custom/exec
|
||||
- function/wait
|
||||
@@ -24,7 +24,7 @@ Settings:
|
||||
- function/request_user_input_async
|
||||
- namespace/clock: Tools for reading and waiting on time.; hash=f402e8c5e9b5e317
|
||||
- function/sleep
|
||||
- namespace/collaboration: Tools for spawning and managing sub-agents.; hash=43f195d9cc99ee15
|
||||
- namespace/collaboration: Tools for spawning and managing sub-agents.; hash=299c9eb198cc580e
|
||||
- function/followup_task
|
||||
- function/interrupt_agent
|
||||
- function/list_agents
|
||||
|
||||
+4
-4
@@ -16,7 +16,7 @@ Settings:
|
||||
text: {"verbosity":"low"}
|
||||
tool_choice: "auto"
|
||||
-- request 1 (turn) --
|
||||
00:additional_tools/developer (3; hash=d4f3e164a92d9bf1):
|
||||
00:additional_tools/developer (3; hash=2e52099fb7d31fa8):
|
||||
- namespace/functions; hash=e7db0a45c4ec3157
|
||||
- custom/exec
|
||||
- function/wait
|
||||
@@ -24,7 +24,7 @@ Settings:
|
||||
- function/request_user_input_async
|
||||
- namespace/clock: Tools for reading and waiting on time.; hash=f402e8c5e9b5e317
|
||||
- function/sleep
|
||||
- namespace/collaboration: Tools for spawning and managing sub-agents.; hash=43f195d9cc99ee15
|
||||
- namespace/collaboration: Tools for spawning and managing sub-agents.; hash=299c9eb198cc580e
|
||||
- function/followup_task
|
||||
- function/interrupt_agent
|
||||
- function/list_agents
|
||||
@@ -190,7 +190,7 @@ Settings:
|
||||
## Window 2 (after request 3: input diverged at item 02)
|
||||
Settings: same as window 1
|
||||
-- request 4 (turn) --
|
||||
00:additional_tools/developer (3; hash=d4f3e164a92d9bf1):
|
||||
00:additional_tools/developer (3; hash=2e52099fb7d31fa8):
|
||||
- namespace/functions; hash=e7db0a45c4ec3157
|
||||
- custom/exec
|
||||
- function/wait
|
||||
@@ -198,7 +198,7 @@ Settings: same as window 1
|
||||
- function/request_user_input_async
|
||||
- namespace/clock: Tools for reading and waiting on time.; hash=f402e8c5e9b5e317
|
||||
- function/sleep
|
||||
- namespace/collaboration: Tools for spawning and managing sub-agents.; hash=43f195d9cc99ee15
|
||||
- namespace/collaboration: Tools for spawning and managing sub-agents.; hash=299c9eb198cc580e
|
||||
- function/followup_task
|
||||
- function/interrupt_agent
|
||||
- function/list_agents
|
||||
|
||||
+4
-4
@@ -16,7 +16,7 @@ Settings:
|
||||
text: {"verbosity":"low"}
|
||||
tool_choice: "auto"
|
||||
-- request 1 (turn) --
|
||||
00:additional_tools/developer (3; hash=d4f3e164a92d9bf1):
|
||||
00:additional_tools/developer (3; hash=2e52099fb7d31fa8):
|
||||
- namespace/functions; hash=e7db0a45c4ec3157
|
||||
- custom/exec
|
||||
- function/wait
|
||||
@@ -24,7 +24,7 @@ Settings:
|
||||
- function/request_user_input_async
|
||||
- namespace/clock: Tools for reading and waiting on time.; hash=f402e8c5e9b5e317
|
||||
- function/sleep
|
||||
- namespace/collaboration: Tools for spawning and managing sub-agents.; hash=43f195d9cc99ee15
|
||||
- namespace/collaboration: Tools for spawning and managing sub-agents.; hash=299c9eb198cc580e
|
||||
- function/followup_task
|
||||
- function/interrupt_agent
|
||||
- function/list_agents
|
||||
@@ -113,7 +113,7 @@ Settings:
|
||||
## Window 2 (after request 2: input diverged at item 00)
|
||||
Settings: same as window 1
|
||||
-- request 3 (turn) --
|
||||
00:additional_tools/developer (3; hash=61ace4f77de8d87f):
|
||||
00:additional_tools/developer (3; hash=22557622c1f1b8ee):
|
||||
- namespace/functions; hash=8c17932a39355f2d
|
||||
- custom/exec
|
||||
- function/wait
|
||||
@@ -121,7 +121,7 @@ Settings: same as window 1
|
||||
- function/request_user_input_async
|
||||
- namespace/clock: Tools for reading and waiting on time.; hash=f402e8c5e9b5e317
|
||||
- function/sleep
|
||||
- namespace/collaboration: Tools for spawning and managing sub-agents.; hash=43f195d9cc99ee15
|
||||
- namespace/collaboration: Tools for spawning and managing sub-agents.; hash=299c9eb198cc580e
|
||||
- function/followup_task
|
||||
- function/interrupt_agent
|
||||
- function/list_agents
|
||||
|
||||
+2
-2
@@ -16,7 +16,7 @@ Settings:
|
||||
text: {"verbosity":"low"}
|
||||
tool_choice: "auto"
|
||||
-- request 1 (turn) --
|
||||
00:additional_tools/developer (3; hash=61ace4f77de8d87f):
|
||||
00:additional_tools/developer (3; hash=22557622c1f1b8ee):
|
||||
- namespace/functions; hash=8c17932a39355f2d
|
||||
- custom/exec
|
||||
- function/wait
|
||||
@@ -24,7 +24,7 @@ Settings:
|
||||
- function/request_user_input_async
|
||||
- namespace/clock: Tools for reading and waiting on time.; hash=f402e8c5e9b5e317
|
||||
- function/sleep
|
||||
- namespace/collaboration: Tools for spawning and managing sub-agents.; hash=43f195d9cc99ee15
|
||||
- namespace/collaboration: Tools for spawning and managing sub-agents.; hash=299c9eb198cc580e
|
||||
- function/followup_task
|
||||
- function/interrupt_agent
|
||||
- function/list_agents
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -120,7 +120,7 @@ pub(super) fn model_upgrade_for_migration(
|
||||
|
||||
// Saved selections can outlive their catalog entries. Keep only their migration metadata.
|
||||
let (target_model, current_name, target_name) = match model {
|
||||
"gpt-5.4-mini" => ("gpt-5.6-luna", "GPT-5.4 Mini", "GPT-5.6 Luna"),
|
||||
"gpt-5.4-mini" => ("gpt-6-luna", "GPT-5.4 Mini", "GPT-6 Luna"),
|
||||
_ => return None,
|
||||
};
|
||||
Some(ModelUpgrade {
|
||||
|
||||
@@ -179,7 +179,7 @@ async fn model_migration_prompt_only_shows_for_deprecated_models() {
|
||||
));
|
||||
assert!(should_show_model_migration_prompt(
|
||||
"gpt-5.4",
|
||||
"gpt-5.6-terra",
|
||||
"gpt-6-sol",
|
||||
&seen,
|
||||
&presets
|
||||
));
|
||||
@@ -369,8 +369,12 @@ async fn accepted_model_migration_persists_target_default_reasoning_effort() ->
|
||||
let presets = all_model_presets();
|
||||
let mut migration_copies = Vec::new();
|
||||
for (model, replacement) in [
|
||||
("gpt-5.4", "gpt-5.6-terra"),
|
||||
("gpt-5.4-mini", "gpt-5.6-luna"),
|
||||
("gpt-5.4", "gpt-6-sol"),
|
||||
("gpt-5.4-mini", "gpt-6-luna"),
|
||||
("gpt-5.5", "gpt-6-sol"),
|
||||
("gpt-5.6-luna", "gpt-6-luna"),
|
||||
("gpt-5.6-terra", "gpt-6-sol"),
|
||||
("gpt-5.6-sol", "gpt-6-sol"),
|
||||
] {
|
||||
let codex_home = tempdir()?;
|
||||
std::fs::write(
|
||||
@@ -383,7 +387,7 @@ async fn accepted_model_migration_persists_target_default_reasoning_effort() ->
|
||||
.await?;
|
||||
let current_model = config.model.clone().expect("saved model");
|
||||
let upgrade = model_upgrade_for_migration(¤t_model, &presets)
|
||||
.expect("retired selection should still migrate");
|
||||
.expect("catalog selection should have an upgrade");
|
||||
assert_eq!(upgrade.id, replacement);
|
||||
assert!(should_show_model_migration_prompt(
|
||||
¤t_model,
|
||||
@@ -449,11 +453,27 @@ async fn accepted_model_migration_persists_target_default_reasoning_effort() ->
|
||||
assert_snapshot!(migration_copies.join("\n"), @r"
|
||||
GPT-5.4 is no longer available
|
||||
|
||||
Codex now uses GPT-5.6 Terra in place of GPT-5.4. Switch to GPT-5.6 Terra to continue.
|
||||
Codex now uses GPT-6 Sol in place of GPT-5.4. Switch to GPT-6 Sol to continue.
|
||||
|
||||
GPT-5.4 Mini is no longer available
|
||||
|
||||
Codex now uses GPT-5.6 Luna in place of GPT-5.4 Mini. Switch to GPT-5.6 Luna to continue.
|
||||
Codex now uses GPT-6 Luna in place of GPT-5.4 Mini. Switch to GPT-6 Luna to continue.
|
||||
|
||||
Meet GPT-6 Sol
|
||||
|
||||
Our latest Sol is more intelligent and more efficient so your usage limits go further. This model is a great daily driver for complex tasks, especially coding.
|
||||
|
||||
Meet GPT-6 Luna
|
||||
|
||||
Our latest Luna is significantly more efficient, so your usage limits go even further. Reach for it for any job that doesn't require frontier intelligence.
|
||||
|
||||
Meet GPT-6 Sol
|
||||
|
||||
Our latest Sol is more intelligent and more efficient so your usage limits go further. This model is a great daily driver for complex tasks, especially coding.
|
||||
|
||||
Meet GPT-6 Sol
|
||||
|
||||
Our latest Sol is more intelligent and more efficient so your usage limits go further. This model is a great daily driver for complex tasks, especially coding.
|
||||
");
|
||||
Ok(())
|
||||
}
|
||||
@@ -462,16 +482,24 @@ async fn accepted_model_migration_persists_target_default_reasoning_effort() ->
|
||||
async fn model_migration_prompt_respects_hide_flag_and_self_target() {
|
||||
let presets = all_model_presets();
|
||||
let mut seen = BTreeMap::new();
|
||||
// A previously acknowledged intermediate upgrade must not hide the new target.
|
||||
seen.insert("gpt-5.4-mini".to_string(), "gpt-5.6-luna".to_string());
|
||||
assert!(should_show_model_migration_prompt(
|
||||
"gpt-5.4-mini",
|
||||
"gpt-6-luna",
|
||||
&seen,
|
||||
&presets
|
||||
));
|
||||
seen.insert("gpt-5.4-mini".to_string(), "gpt-6-luna".to_string());
|
||||
assert!(!should_show_model_migration_prompt(
|
||||
"gpt-5.4-mini",
|
||||
"gpt-5.6-luna",
|
||||
"gpt-6-luna",
|
||||
&seen,
|
||||
&presets
|
||||
));
|
||||
assert!(!should_show_model_migration_prompt(
|
||||
"gpt-5.6-luna",
|
||||
"gpt-5.6-luna",
|
||||
"gpt-6-luna",
|
||||
"gpt-6-luna",
|
||||
&seen,
|
||||
&presets
|
||||
));
|
||||
@@ -480,31 +508,31 @@ async fn model_migration_prompt_respects_hide_flag_and_self_target() {
|
||||
#[tokio::test]
|
||||
async fn model_migration_prompt_skips_when_target_missing_or_hidden() {
|
||||
let mut available = all_model_presets();
|
||||
available.retain(|preset| preset.model != "gpt-5.6-luna");
|
||||
available.retain(|preset| preset.model != "gpt-6-luna");
|
||||
|
||||
assert!(!should_show_model_migration_prompt(
|
||||
"gpt-5.4-mini",
|
||||
"gpt-5.6-luna",
|
||||
"gpt-6-luna",
|
||||
&BTreeMap::new(),
|
||||
&available,
|
||||
));
|
||||
|
||||
assert!(target_preset_for_upgrade(&available, "gpt-5.6-luna").is_none());
|
||||
assert!(target_preset_for_upgrade(&available, "gpt-6-luna").is_none());
|
||||
|
||||
let mut with_hidden_target = all_model_presets();
|
||||
let target = with_hidden_target
|
||||
.iter_mut()
|
||||
.find(|preset| preset.model == "gpt-5.6-luna")
|
||||
.find(|preset| preset.model == "gpt-6-luna")
|
||||
.expect("target preset present");
|
||||
target.show_in_picker = false;
|
||||
|
||||
assert!(!should_show_model_migration_prompt(
|
||||
"gpt-5.4-mini",
|
||||
"gpt-5.6-luna",
|
||||
"gpt-6-luna",
|
||||
&BTreeMap::new(),
|
||||
&with_hidden_target,
|
||||
));
|
||||
assert!(target_preset_for_upgrade(&with_hidden_target, "gpt-5.6-luna").is_none());
|
||||
assert!(target_preset_for_upgrade(&with_hidden_target, "gpt-6-luna").is_none());
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
|
||||
+1
-1
@@ -6,6 +6,6 @@ Codex just got an upgrade. Introducing GPT-5.5.
|
||||
|
||||
We recommend switching from gpt-5.2 to gpt-5.5.
|
||||
|
||||
Frontier model for complex coding, research, and real-world work.
|
||||
Legacy coding model.
|
||||
|
||||
You can continue using gpt-5.2 if you prefer.
|
||||
|
||||
+5
-6
@@ -5,12 +5,11 @@ expression: "render_bottom_popup(&chat, 100)"
|
||||
Select Model and Effort
|
||||
Access legacy models by running codex -m <model_name> or in your config.toml
|
||||
|
||||
› 1. openai.gpt-5.6-sol (current) Latest frontier agentic coding model.
|
||||
2. openai.gpt-6-astra Our most capable model for complex, demanding work.
|
||||
3. openai.gpt-5.6-terra Balanced agentic coding model for everyday work.
|
||||
4. openai.gpt-5.6-luna Fast and affordable agentic coding model.
|
||||
5. openai.gpt-5.5 Frontier model for complex coding, research, and real-world
|
||||
work.
|
||||
› 1. openai.gpt-5.6-sol (current) Older coding model for complex work.
|
||||
2. openai.gpt-6-astra Frontier intelligence for the most demanding work.
|
||||
3. openai.gpt-5.6-terra Older balanced model for straightforward work.
|
||||
4. openai.gpt-5.6-luna Older fast and efficient model.
|
||||
5. openai.gpt-5.5 Legacy coding model.
|
||||
6. openai.gpt-5.4 Strong model for everyday coding.
|
||||
|
||||
Press enter to confirm or esc to go back
|
||||
|
||||
+8
-8
@@ -5,13 +5,13 @@ expression: "render_bottom_popup(&chat, 100)"
|
||||
Select Model and Effort
|
||||
Access legacy models by running codex -m <model_name> or in your config.toml
|
||||
|
||||
› 1. global.openai.gpt-5.6-sol (current) Latest frontier agentic coding model.
|
||||
2. global.openai.gpt-6-astra Our most capable model for complex, demanding work.
|
||||
3. global.openai.gpt-5.6-terra Balanced agentic coding model for everyday work.
|
||||
4. global.openai.gpt-5.6-luna Fast and affordable agentic coding model.
|
||||
5. us.openai.gpt-5.6-sol Latest frontier agentic coding model.
|
||||
6. us.openai.gpt-6-astra Our most capable model for complex, demanding work.
|
||||
7. us.openai.gpt-5.6-terra Balanced agentic coding model for everyday work.
|
||||
8. us.openai.gpt-5.6-luna Fast and affordable agentic coding model.
|
||||
› 1. global.openai.gpt-5.6-sol (current) Older coding model for complex work.
|
||||
2. global.openai.gpt-6-astra Frontier intelligence for the most demanding work.
|
||||
3. global.openai.gpt-5.6-terra Older balanced model for straightforward work.
|
||||
4. global.openai.gpt-5.6-luna Older fast and efficient model.
|
||||
5. us.openai.gpt-5.6-sol Older coding model for complex work.
|
||||
6. us.openai.gpt-6-astra Frontier intelligence for the most demanding work.
|
||||
7. us.openai.gpt-5.6-terra Older balanced model for straightforward work.
|
||||
8. us.openai.gpt-5.6-luna Older fast and efficient model.
|
||||
|
||||
Press enter to confirm or esc to go back
|
||||
|
||||
+2
-3
@@ -5,8 +5,7 @@ expression: "render_bottom_popup(&chat, 80)"
|
||||
Select Model and Effort
|
||||
Access legacy models by running codex -m <model_name> or in your config.toml
|
||||
|
||||
› 1. gpt-5.6-terra Balanced agentic coding model for everyday work.
|
||||
2. gpt-5.5 (current) Frontier model for complex coding, research, and real-
|
||||
world work.
|
||||
› 1. gpt-5.6-terra Older balanced model for straightforward work.
|
||||
2. gpt-5.5 (current) Legacy coding model.
|
||||
|
||||
Press enter to confirm or esc to go back
|
||||
|
||||
+7
-7
@@ -5,12 +5,12 @@ expression: "render_bottom_popup(&chat, 80)"
|
||||
Select Model and Effort
|
||||
Access legacy models by running codex -m <model_name> or in your config.toml
|
||||
|
||||
1. gpt-6-astra (default) Our most capable model for complex, demanding
|
||||
work.
|
||||
2. gpt-5.6-sol Latest frontier agentic coding model.
|
||||
3. gpt-5.6-terra Balanced agentic coding model for everyday work.
|
||||
4. gpt-5.6-luna Fast and affordable agentic coding model.
|
||||
› 5. gpt-5.5 (current) Frontier model for complex coding, research, and
|
||||
real-world work.
|
||||
1. gpt-6-astra (default) Frontier intelligence for the most demanding work.
|
||||
2. gpt-6-sol Workhorse model for coding and everyday work.
|
||||
3. gpt-6-luna Fast and affordable model for easier tasks.
|
||||
4. gpt-5.6-sol Older coding model for complex work.
|
||||
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 (current) Legacy coding model.
|
||||
|
||||
Press enter to confirm or esc to go back
|
||||
|
||||
+3
-3
@@ -3,10 +3,10 @@ source: tui/src/chatwidget/tests/status_and_layout.rs
|
||||
expression: popup
|
||||
---
|
||||
Approaching rate limits
|
||||
Switch to gpt-5.6-luna for lower credit usage?
|
||||
Switch to gpt-6-luna for lower credit usage?
|
||||
|
||||
› 1. Switch to gpt-5.6-luna Fast and affordable agentic coding
|
||||
model.
|
||||
› 1. Switch to gpt-6-luna Fast and affordable model for
|
||||
easier tasks.
|
||||
2. Keep current model
|
||||
3. Keep current model (never show again) Hide future rate limit reminders
|
||||
about switching models.
|
||||
|
||||
@@ -5,7 +5,7 @@ use codex_protocol::openai_models::ModelPreset;
|
||||
use std::convert::Infallible;
|
||||
|
||||
pub(crate) const LUNA_RESERVE_MODEL: &str = "gpt-reserve";
|
||||
pub(crate) const LUNA_MODEL: &str = "gpt-5.6-luna";
|
||||
pub(crate) const LUNA_MODEL: &str = "gpt-6-luna";
|
||||
|
||||
pub(crate) fn model_display_name(model: &str) -> &str {
|
||||
if model.eq_ignore_ascii_case(LUNA_RESERVE_MODEL) {
|
||||
|
||||
@@ -384,7 +384,8 @@ pub(super) fn write_test_config(codex_home: &Path, repo_root: &Path) -> Result<(
|
||||
let repo_root = repo_root.display();
|
||||
let config = format!(
|
||||
"model = \"gpt-5.6-terra\"\nmodel_provider = \"openai\"\n\
|
||||
suppress_unstable_features_warning = true\nanalytics.enabled = false\n\n\
|
||||
suppress_unstable_features_warning = true\nanalytics.enabled = false\n\
|
||||
notice.model_migrations.\"gpt-5.6-terra\" = \"gpt-6-sol\"\n\n\
|
||||
[projects.\"{repo_root}\"]\ntrust_level = \"trusted\"\n"
|
||||
);
|
||||
std::fs::write(codex_home.join("config.toml"), config)
|
||||
|
||||
@@ -605,6 +605,10 @@ fn write_config(codex_home: &Path, repo_root: &Path) -> Result<()> {
|
||||
model_provider = "openai"
|
||||
suppress_unstable_features_warning = true
|
||||
|
||||
[notice.model_migrations]
|
||||
"gpt-5.4" = "gpt-6-sol"
|
||||
"gpt-5.6-terra" = "gpt-6-sol"
|
||||
|
||||
[projects."{repo_root_display}"]
|
||||
trust_level = "trusted"
|
||||
"#
|
||||
|
||||
Reference in New Issue
Block a user