From 43cd19a52b128363c7202590869fb4bd9349b859 Mon Sep 17 00:00:00 2001 From: "Kai (Tam Nhu) Tran" <61256810+kaitranntt@users.noreply.github.com> Date: Sat, 7 Feb 2026 04:19:44 -0500 Subject: [PATCH] fix(cliproxy): disable 1M extended context for opus 4.6 (256k limit) (#492) * fix(cliproxy): disable 1M extended context for gemini-claude-opus-4-6-thinking Antigravity backend only supports 256k context window for this model, not 1M as previously declared. Set extendedContext: false with TODO comment for easy re-enable when backend adds support. Closes #490 * fix(cliproxy): strip [1m] suffix at runtime for models without extended context Users with existing [1m] in saved agy.settings.json will now have it automatically stripped at runtime when the model no longer supports extended context. Prevents misleading context window claims. --- .../config/extended-context-config.ts | 23 +++++++++++++++---- src/cliproxy/model-catalog.ts | 6 +++-- .../cliproxy/extended-context-config.test.ts | 19 +++++++++++++++ ui/src/components/ui/badge.tsx | 3 +-- ui/src/lib/model-catalogs.ts | 6 +++-- 5 files changed, 46 insertions(+), 11 deletions(-) diff --git a/src/cliproxy/config/extended-context-config.ts b/src/cliproxy/config/extended-context-config.ts index 3021419c..e69a5592 100644 --- a/src/cliproxy/config/extended-context-config.ts +++ b/src/cliproxy/config/extended-context-config.ts @@ -85,7 +85,25 @@ export function applyExtendedContextConfig( const baseModel = envVars.ANTHROPIC_MODEL || ''; const cleanModelId = stripModelSuffixes(baseModel); + // Tier model env vars to apply/strip extended context suffix + const tierModels = [ + 'ANTHROPIC_DEFAULT_OPUS_MODEL', + 'ANTHROPIC_DEFAULT_SONNET_MODEL', + 'ANTHROPIC_DEFAULT_HAIKU_MODEL', + ] as const; + if (!shouldApplyExtendedContext(provider, cleanModelId, extendedContextOverride)) { + // Strip [1m] suffix from models that no longer support extended context + // (e.g., user had it enabled before backend dropped support) + if (envVars.ANTHROPIC_MODEL?.toLowerCase().endsWith('[1m]')) { + envVars.ANTHROPIC_MODEL = envVars.ANTHROPIC_MODEL.replace(/\[1m\]$/i, ''); + } + for (const tierVar of tierModels) { + const model = envVars[tierVar]; + if (model?.toLowerCase().endsWith('[1m]')) { + envVars[tierVar] = model.replace(/\[1m\]$/i, ''); + } + } return; } @@ -95,11 +113,6 @@ export function applyExtendedContextConfig( } // Apply to tier models if they support extended context - const tierModels = [ - 'ANTHROPIC_DEFAULT_OPUS_MODEL', - 'ANTHROPIC_DEFAULT_SONNET_MODEL', - 'ANTHROPIC_DEFAULT_HAIKU_MODEL', - ] as const; for (const tierVar of tierModels) { const model = envVars[tierVar]; diff --git a/src/cliproxy/model-catalog.ts b/src/cliproxy/model-catalog.ts index 82b1371e..3c0e02fe 100644 --- a/src/cliproxy/model-catalog.ts +++ b/src/cliproxy/model-catalog.ts @@ -78,7 +78,7 @@ export const MODEL_CATALOG: Partial> = { id: 'gemini-claude-opus-4-6-thinking', name: 'Claude Opus 4.6 Thinking', - description: 'Latest flagship, 1M context, extended thinking', + description: 'Latest flagship, extended thinking', thinking: { type: 'budget', min: 1024, @@ -86,7 +86,9 @@ export const MODEL_CATALOG: Partial> = zeroAllowed: true, dynamicAllowed: true, }, - extendedContext: true, + // TODO: Re-enable when Antigravity backend supports 1M context (currently 256k) + // extendedContext: true, + extendedContext: false, }, { id: 'gemini-claude-opus-4-5-thinking', diff --git a/tests/unit/cliproxy/extended-context-config.test.ts b/tests/unit/cliproxy/extended-context-config.test.ts index 76d11610..e7b2f722 100644 --- a/tests/unit/cliproxy/extended-context-config.test.ts +++ b/tests/unit/cliproxy/extended-context-config.test.ts @@ -151,4 +151,23 @@ describe('applyExtendedContextConfig', () => { applyExtendedContextConfig(env, 'gemini', undefined); expect(env.ANTHROPIC_MODEL).toBeUndefined(); }); + + it('strips [1m] suffix from models that no longer support extended context', () => { + // Simulates user who had [1m] in saved settings before support was removed + const env: NodeJS.ProcessEnv = { + ANTHROPIC_MODEL: 'gemini-claude-opus-4-6-thinking[1m]', + ANTHROPIC_DEFAULT_OPUS_MODEL: 'gemini-claude-opus-4-6-thinking[1m]', + }; + applyExtendedContextConfig(env, 'agy', undefined); + expect(env.ANTHROPIC_MODEL).toBe('gemini-claude-opus-4-6-thinking'); + expect(env.ANTHROPIC_DEFAULT_OPUS_MODEL).toBe('gemini-claude-opus-4-6-thinking'); + }); + + it('strips [1m] suffix when --no-1m is explicit even if model has it', () => { + const env: NodeJS.ProcessEnv = { + ANTHROPIC_MODEL: 'gemini-2.5-pro[1m]', + }; + applyExtendedContextConfig(env, 'gemini', false); + expect(env.ANTHROPIC_MODEL).toBe('gemini-2.5-pro'); + }); }); diff --git a/ui/src/components/ui/badge.tsx b/ui/src/components/ui/badge.tsx index 45811bfd..ab895f8e 100644 --- a/ui/src/components/ui/badge.tsx +++ b/ui/src/components/ui/badge.tsx @@ -23,8 +23,7 @@ const badgeVariants = cva( ); interface BadgeProps - extends React.HTMLAttributes, - VariantProps {} + extends React.HTMLAttributes, VariantProps {} function Badge({ className, variant, ...props }: BadgeProps) { return
; diff --git a/ui/src/lib/model-catalogs.ts b/ui/src/lib/model-catalogs.ts index bbd70c1d..b9244d66 100644 --- a/ui/src/lib/model-catalogs.ts +++ b/ui/src/lib/model-catalogs.ts @@ -15,8 +15,10 @@ export const MODEL_CATALOGS: Record = { { id: 'gemini-claude-opus-4-6-thinking', name: 'Claude Opus 4.6 Thinking', - description: 'Latest flagship, 1M context, extended thinking', - extendedContext: true, + description: 'Latest flagship, extended thinking', + // TODO: Re-enable when Antigravity backend supports 1M context (currently 256k) + // extendedContext: true, + extendedContext: false, presetMapping: { default: 'gemini-claude-opus-4-6-thinking', opus: 'gemini-claude-opus-4-6-thinking',