From 4a3a6c7848c63e7c5a13872213c104e90faef7f5 Mon Sep 17 00:00:00 2001 From: Ryan Ward Date: Mon, 31 Aug 2026 00:10:45 -0500 Subject: [PATCH] Honor ChatGPT model maximum context windows --- app/src/ai/llms.rs | 10 +++++++++- app/src/ai/llms_tests.rs | 8 +++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/app/src/ai/llms.rs b/app/src/ai/llms.rs index 8369a4ba..ce0993ac 100644 --- a/app/src/ai/llms.rs +++ b/app/src/ai/llms.rs @@ -2742,7 +2742,15 @@ fn openai_model_context_window( is_configurable: max_context_size > default_context_size, min: default_context_size, max: max_context_size, - default_max: default_context_size, + // ChatGPT's catalog exposes `context_window` as the effective window + // and `max_context_window` as the model's actual maximum. Use the + // latter as the default so model refreshes do not reset the profile + // to the smaller effective window (for example, 272k). + default_max: if provider_kind == OpenAIProviderKind::ChatGPTSubscription { + max_context_size + } else { + default_context_size + }, } } diff --git a/app/src/ai/llms_tests.rs b/app/src/ai/llms_tests.rs index 7e716867..ce02d3df 100644 --- a/app/src/ai/llms_tests.rs +++ b/app/src/ai/llms_tests.rs @@ -813,7 +813,7 @@ fn chatgpt_codex_models_parse_visible_catalog_entries() { ); assert!(configurable.is_configurable); assert_eq!(configurable.min, 258_400); - assert_eq!(configurable.default_max, 258_400); + assert_eq!(configurable.default_max, 828_400); assert_eq!(configurable.max, 828_400); let fixed = @@ -829,6 +829,8 @@ fn chatgpt_catalog_merge_drops_stale_models_but_preserves_overrides() { let mut existing = openai_model("gpt-5.6-sol"); existing.enabled = false; existing.use_rig = false; + existing.context_size = 272_000; + existing.max_input_tokens = Some(272_000); existing.capability_overrides.insert( "vision".to_string(), crate::settings::ModelCapabilityOverride::Unsupported, @@ -839,11 +841,15 @@ fn chatgpt_catalog_merge_drops_stale_models_but_preserves_overrides() { discovered.display_name = "GPT-5.6-Sol".to_string(); discovered.vision_supported = true; discovered.use_rig = true; + discovered.context_size = 828_400; + discovered.max_input_tokens = Some(258_400); let merged = merge_discovered_chatgpt_subscription_models(&[existing, stale], vec![discovered]); assert_eq!(merged.len(), 1); assert_eq!(merged[0].model_id, "gpt-5.6-sol"); + assert_eq!(merged[0].context_size, 828_400); + assert_eq!(merged[0].max_input_tokens, Some(258_400)); assert!(!merged[0].enabled); assert!(!merged[0].use_rig); assert_eq!(