You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A partial substring override such as { "gemini-3.8": { "maxOutputTokens": 1000, "isThinking": true } } previously replaced the complete bundled spec. The omitted thinkingBudget reached thinking normalization as undefined, became NaN, and serialized to thinkingBudget: null.
Shared configuration normalization also rebuilt the configuration without modelSpecs, so validated API and persisted configurations silently lost those overrides. Separately, /v1/models reflected a valid contextWindow override while getAntigravityContextWindow() continued returning the bundled value.
Strict TDD evidence
RED: the original partial exact/substring override regressions failed before the effective-spec merge fix
RED: three maintainer regressions failed with normalized modelSpecs missing and exact/substring context helpers returning 1,000,000 instead of 222,222/333,333
GREEN: all focused regressions pass, including persisted partial specs, unknown top-level field filtering, JSON serialization without null thinking budgets, valid zero budgets, and exact/substring context overrides
Thanks for the follow-up work. I found one blocking issue that needs to be addressed before merge:
[P1] Preserve modelSpecs through configuration normalization
applyConfigDefaults() rebuilds the configuration object but does not copy config.modelSpecs. Both getCachedConfig() and setCachedConfig() call this function, so a modelSpecs section loaded from accounts.json or submitted through the config API is silently dropped before index.ts calls setModelSpecsOverride(). As a result, the partial-override fix works in direct unit tests but is not usable through the normal persisted configuration path. Please preserve modelSpecs in applyConfigDefaults() and add a regression test covering the validated/normalized configuration path (ideally load/save as well).
I also noticed that the newly accepted contextWindow override is reflected in /v1/models, but getAntigravityContextWindow() still returns the static/dynamic value and ignores the operator override. Please either wire that helper into the same effective-spec resolution or clarify/document that it is intentionally not overrideable.
The current tests and CI checks are green, but I recommend addressing the P1 before merging.
Thank you for the follow-up work and for addressing the review findings. The configuration persistence and context-window handling are now covered, and the PR has been merged. Your contribution is appreciated!
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Follow-up to merged #30 for regressions found by the post-merge blind audit and maintainer review:
modelSpecsoverrides over the effective dynamic, static, or family defaultsmodelSpecsthrough shared configuration normalization and persisted save/load pathsRegressions
A partial substring override such as
{ "gemini-3.8": { "maxOutputTokens": 1000, "isThinking": true } }previously replaced the complete bundled spec. The omittedthinkingBudgetreached thinking normalization asundefined, becameNaN, and serialized tothinkingBudget: null.Shared configuration normalization also rebuilt the configuration without
modelSpecs, so validated API and persisted configurations silently lost those overrides. Separately,/v1/modelsreflected a validcontextWindowoverride whilegetAntigravityContextWindow()continued returning the bundled value.Strict TDD evidence
modelSpecsmissing and exact/substring context helpers returning1,000,000instead of222,222/333,333nullthinking budgets, valid zero budgets, and exact/substring context overridesVerification
npm run check: 730/730 tests passedgit diff --check