refactor(thinking): simplify ModeNone and budget validation logic

This commit is contained in:
hkfires
2026-01-15 14:03:08 +08:00
parent ee2976cca0
commit 5c40a2db21
2 changed files with 16 additions and 21 deletions

View File

@@ -777,8 +777,8 @@ func GetAntigravityModelConfig() map[string]*AntigravityModelConfig {
"gemini-3-pro-high": {Thinking: &ThinkingSupport{Min: 128, Max: 32768, ZeroAllowed: false, DynamicAllowed: true, Levels: []string{"low", "high"}}, Name: "models/gemini-3-pro-high"}, "gemini-3-pro-high": {Thinking: &ThinkingSupport{Min: 128, Max: 32768, ZeroAllowed: false, DynamicAllowed: true, Levels: []string{"low", "high"}}, Name: "models/gemini-3-pro-high"},
"gemini-3-pro-image": {Thinking: &ThinkingSupport{Min: 128, Max: 32768, ZeroAllowed: false, DynamicAllowed: true, Levels: []string{"low", "high"}}, Name: "models/gemini-3-pro-image"}, "gemini-3-pro-image": {Thinking: &ThinkingSupport{Min: 128, Max: 32768, ZeroAllowed: false, DynamicAllowed: true, Levels: []string{"low", "high"}}, Name: "models/gemini-3-pro-image"},
"gemini-3-flash": {Thinking: &ThinkingSupport{Min: 128, Max: 32768, ZeroAllowed: false, DynamicAllowed: true, Levels: []string{"minimal", "low", "medium", "high"}}, Name: "models/gemini-3-flash"}, "gemini-3-flash": {Thinking: &ThinkingSupport{Min: 128, Max: 32768, ZeroAllowed: false, DynamicAllowed: true, Levels: []string{"minimal", "low", "medium", "high"}}, Name: "models/gemini-3-flash"},
"claude-sonnet-4-5-thinking": {Thinking: &ThinkingSupport{Min: 1024, Max: 128000, ZeroAllowed: true, DynamicAllowed: false}, MaxCompletionTokens: 64000}, "claude-sonnet-4-5-thinking": {Thinking: &ThinkingSupport{Min: 1024, Max: 128000, ZeroAllowed: true, DynamicAllowed: true}, MaxCompletionTokens: 64000},
"claude-opus-4-5-thinking": {Thinking: &ThinkingSupport{Min: 1024, Max: 128000, ZeroAllowed: true, DynamicAllowed: false}, MaxCompletionTokens: 64000}, "claude-opus-4-5-thinking": {Thinking: &ThinkingSupport{Min: 1024, Max: 128000, ZeroAllowed: true, DynamicAllowed: true}, MaxCompletionTokens: 64000},
} }
} }

View File

@@ -159,27 +159,22 @@ func ValidateConfig(config ThinkingConfig, modelInfo *registry.ModelInfo, provid
normalized = convertAutoToMidRange(normalized, support, provider, model) normalized = convertAutoToMidRange(normalized, support, provider, model)
} }
// ModeNone handling varies by provider/model capability: if normalized.Mode == ModeNone && provider == "claude" {
// - Claude can always disable thinking via thinking.type="disabled". // Claude supports explicit disable via thinking.type="disabled".
// - Some models/providers cannot be fully disabled; for those we force minimal thinking // Keep Budget=0 so applier can omit budget_tokens.
// while hiding thoughts (ModeNone + Budget>0 and/or Level set).
if normalized.Mode == ModeNone {
if provider == "claude" {
normalized.Budget = 0 normalized.Budget = 0
normalized.Level = "" normalized.Level = ""
} else if !support.ZeroAllowed { } else {
if support.Min > 0 { switch normalized.Mode {
normalized.Budget = support.Min case ModeBudget, ModeAuto, ModeNone:
} normalized.Budget = ClampBudget(normalized.Budget, modelInfo, provider)
if normalized.Level == "" && normalized.Budget > 0 && len(support.Levels) > 0 {
normalized.Level = ThinkingLevel(support.Levels[0])
}
}
} }
switch normalized.Mode { // ModeNone with clamped Budget > 0: set Level to lowest for Level-only/Hybrid models
case ModeBudget, ModeAuto: // This ensures Apply layer doesn't need to access support.Levels
normalized.Budget = ClampBudget(normalized.Budget, modelInfo, provider) if normalized.Mode == ModeNone && normalized.Budget > 0 && len(support.Levels) > 0 {
normalized.Level = ThinkingLevel(support.Levels[0])
}
} }
return &normalized, nil return &normalized, nil