diff --git a/internal/runtime/executor/antigravity_executor.go b/internal/runtime/executor/antigravity_executor.go index 155193da..683285d1 100644 --- a/internal/runtime/executor/antigravity_executor.go +++ b/internal/runtime/executor/antigravity_executor.go @@ -839,9 +839,12 @@ func normalizeAntigravityThinking(model string, payload []byte) []byte { effectiveMax, setDefaultMax := antigravityEffectiveMaxTokens(model, payload) if effectiveMax > 0 && normalized >= effectiveMax { normalized = effectiveMax - 1 - if normalized < 1 { - normalized = 1 - } + } + minBudget := antigravityMinThinkingBudget(model) + if minBudget > 0 && normalized >= 0 && normalized < minBudget { + // Budget is below minimum, remove thinking config entirely + payload, _ = sjson.DeleteBytes(payload, "request.generationConfig.thinkingConfig") + return payload } if setDefaultMax { if res, errSet := sjson.SetBytes(payload, "request.generationConfig.maxOutputTokens", effectiveMax); errSet == nil { @@ -869,3 +872,12 @@ func antigravityEffectiveMaxTokens(model string, payload []byte) (max int, fromM } return 0, false } + +// antigravityMinThinkingBudget returns the minimum thinking budget for a model. +// Falls back to -1 if no model info is found. +func antigravityMinThinkingBudget(model string) int { + if modelInfo := registry.GetGlobalRegistry().GetModelInfo(model); modelInfo != nil && modelInfo.Thinking != nil { + return modelInfo.Thinking.Min + } + return -1 +}