From 54793f96d94947139348878357c6cf95fa8ed4c1 Mon Sep 17 00:00:00 2001 From: Michael Neale Date: Thu, 9 Jul 2026 10:21:47 -0700 Subject: [PATCH 1/2] new 5.6 family --- crates/goose-providers/src/openai.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/crates/goose-providers/src/openai.rs b/crates/goose-providers/src/openai.rs index 11218218ca57..bb8e0bbdb4b4 100644 --- a/crates/goose-providers/src/openai.rs +++ b/crates/goose-providers/src/openai.rs @@ -60,6 +60,9 @@ pub const OPEN_AI_KNOWN_MODELS: &[(&str, usize)] = &[ ("gpt-5.4-mini", 400_000), ("gpt-5.4-nano", 400_000), ("gpt-5.4-pro", 1_050_000), + ("gpt-5.6-luna", 1_050_000), + ("gpt-5.6-sol", 1_050_000), + ("gpt-5.6-terra", 1_050_000), ]; pub const OPEN_AI_DOC_URL: &str = "https://platform.openai.com/docs/models"; From 4590c3271862be81e0c299e0109ff595d772938f Mon Sep 17 00:00:00 2001 From: Michael Neale Date: Thu, 9 Jul 2026 10:28:54 -0700 Subject: [PATCH 2/2] Complete GPT-5.6 model support --- .../src/formats/openai.rs | 23 +++++++++++++++++++ crates/goose-providers/src/openai.rs | 22 ++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/crates/goose-provider-types/src/formats/openai.rs b/crates/goose-provider-types/src/formats/openai.rs index da9b2f6666cd..5069f738015d 100644 --- a/crates/goose-provider-types/src/formats/openai.rs +++ b/crates/goose-provider-types/src/formats/openai.rs @@ -1535,6 +1535,8 @@ fn openai_reasoning_efforts_for_model(model_name: &str) -> &'static [&'static st || normalized.contains("gpt-5-4") || normalized.contains("gpt-5.5") || normalized.contains("gpt-5-5") + || normalized.contains("gpt-5.6") + || normalized.contains("gpt-5-6") { &["low", "medium", "high", "xhigh"] } else { @@ -2512,6 +2514,27 @@ mod tests { Ok(()) } + #[test] + fn test_create_request_gpt56_max_effort_uses_xhigh() -> anyhow::Result<()> { + let model_config = test_model_config("gpt-5.6-luna") + .with_max_tokens(Some(1024)) + .with_thinking_effort(ThinkingEffort::Max); + let request = create_request( + &model_config, + "system", + &[], + &[], + &ImageFormat::OpenAi, + false, + )?; + let obj = request.as_object().unwrap(); + + assert_eq!(obj.get("reasoning_effort"), Some(&json!("xhigh"))); + assert!(obj.get("thinking_effort").is_none()); + + Ok(()) + } + #[test] fn test_create_request_gpt5_pro_max_effort_uses_supported_level() -> anyhow::Result<()> { let model_config = test_model_config("gpt-5.2-pro-2025-12-11") diff --git a/crates/goose-providers/src/openai.rs b/crates/goose-providers/src/openai.rs index bb8e0bbdb4b4..3c920ca144df 100644 --- a/crates/goose-providers/src/openai.rs +++ b/crates/goose-providers/src/openai.rs @@ -60,6 +60,8 @@ pub const OPEN_AI_KNOWN_MODELS: &[(&str, usize)] = &[ ("gpt-5.4-mini", 400_000), ("gpt-5.4-nano", 400_000), ("gpt-5.4-pro", 1_050_000), + ("gpt-5.5", 1_050_000), + ("gpt-5.5-pro", 1_050_000), ("gpt-5.6-luna", 1_050_000), ("gpt-5.6-sol", 1_050_000), ("gpt-5.6-terra", 1_050_000), @@ -842,6 +844,26 @@ mod tests { use crate::api_client::AuthMethod; use serde_json::json; + #[test] + fn gpt_5_5_and_5_6_models_have_expected_context_limits() { + for model in [ + "gpt-5.5", + "gpt-5.5-pro", + "gpt-5.6-luna", + "gpt-5.6-sol", + "gpt-5.6-terra", + ] { + assert_eq!( + OPEN_AI_KNOWN_MODELS + .iter() + .find(|(name, _)| *name == model) + .map(|(_, limit)| *limit), + Some(1_050_000), + "unexpected context limit for {model}" + ); + } + } + fn make_provider(name: &str) -> OpenAiProvider { OpenAiProvider { api_client: ApiClient::new_with_tls(