From 92288eded441c6ba99362134d9f1e2f68a95ace8 Mon Sep 17 00:00:00 2001 From: Bryan Helmkamp Date: Sun, 24 May 2026 18:21:22 -0400 Subject: [PATCH] Use Codex-safe OpenAI context windows Align Fabro's built-in OpenAI GPT-5 catalog defaults with Codex's 272k context window so Codex-backed runs compact before provider rejection. Direct API users can still raise the window through catalog overrides. --- lib/crates/fabro-model/src/catalog.rs | 36 ++++++++++++++++++- .../src/catalog/providers/openai.toml | 10 +++--- 2 files changed, 40 insertions(+), 6 deletions(-) diff --git a/lib/crates/fabro-model/src/catalog.rs b/lib/crates/fabro-model/src/catalog.rs index b1c931651..32a907ddf 100644 --- a/lib/crates/fabro-model/src/catalog.rs +++ b/lib/crates/fabro-model/src/catalog.rs @@ -3883,7 +3883,7 @@ reasoning_effort = "levels" family: "gpt-5", display_name: "GPT-5.4", limits: ModelLimits { - context_window: 1047576, + context_window: 272000, max_output: Some( 128000, ), @@ -4059,6 +4059,40 @@ reasoning_effort = "levels" ); } + #[test] + fn openai_codex_default_context_windows_match_codex_catalog() { + let catalog = Catalog::builtin(); + + for model in [ + "gpt-5.2", + "gpt-5.3-codex", + "gpt-5.4", + "gpt-5.4-mini", + "gpt-5.5", + ] { + assert_eq!( + catalog.get(model).unwrap().context_window(), + 272_000, + "{model} should use the Codex-safe default context window" + ); + } + } + + #[test] + fn openai_context_window_can_be_overridden_for_direct_api_usage() { + let catalog = Catalog::from_builtin_with_overrides(&minimal_settings( + r#" +[models."gpt-5.5".limits] +context_window = 1050000 +"#, + )) + .expect("sparse built-in model limit override should build"); + + let model = catalog.get("gpt-5.5").unwrap(); + assert_eq!(model.context_window(), 1_050_000); + assert_eq!(model.max_output(), Some(128_000)); + } + // ---- Closest model tests ---- #[test] diff --git a/lib/crates/fabro-model/src/catalog/providers/openai.toml b/lib/crates/fabro-model/src/catalog/providers/openai.toml index d9530972f..5ed6bed64 100644 --- a/lib/crates/fabro-model/src/catalog/providers/openai.toml +++ b/lib/crates/fabro-model/src/catalog/providers/openai.toml @@ -19,7 +19,7 @@ estimated_output_tps = 65 aliases = ["gpt5"] [models."gpt-5.2".limits] -context_window = 1047576 +context_window = 272000 max_output = 128000 [models."gpt-5.2".features] @@ -44,7 +44,7 @@ estimated_output_tps = 100 aliases = ["codex"] [models."gpt-5.3-codex".limits] -context_window = 1047576 +context_window = 272000 max_output = 128000 [models."gpt-5.3-codex".features] @@ -90,7 +90,7 @@ estimated_output_tps = 70 aliases = ["gpt54", "gpt-54"] [models."gpt-5.4".limits] -context_window = 1047576 +context_window = 272000 max_output = 128000 [models."gpt-5.4".features] @@ -115,7 +115,7 @@ estimated_output_tps = 70 aliases = ["gpt55", "gpt-55"] [models."gpt-5.5".limits] -context_window = 1050000 +context_window = 272000 max_output = 128000 [models."gpt-5.5".features] @@ -192,7 +192,7 @@ probe = true small_default = true [models."gpt-5.4-mini".limits] -context_window = 400000 +context_window = 272000 max_output = 128000 [models."gpt-5.4-mini".features]