From cc892744bc4ae2e57df7d37f571d70a6e015dc78 Mon Sep 17 00:00:00 2001 From: song Date: Fri, 16 Jan 2026 18:09:34 +0800 Subject: [PATCH] =?UTF-8?q?fix(antigravity):=20429=20fallback=20=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=205=20=E5=88=86=E9=92=9F=E5=B9=B6=E9=99=90=E6=B5=81?= =?UTF-8?q?=E6=95=B4=E4=B8=AA=E8=B4=A6=E6=88=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - fallback 时间从 1 分钟改为 5 分钟 - fallback 时直接限流整个账户而非仅限制 quota scope --- .../service/antigravity_gateway_service.go | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/backend/internal/service/antigravity_gateway_service.go b/backend/internal/service/antigravity_gateway_service.go index 5ef2afd9..716fa3c4 100644 --- a/backend/internal/service/antigravity_gateway_service.go +++ b/backend/internal/service/antigravity_gateway_service.go @@ -1328,18 +1328,12 @@ func (s *AntigravityGatewayService) handleUpstreamError(ctx context.Context, pre if statusCode == 429 { resetAt := ParseGeminiRateLimitResetTime(body) if resetAt == nil { - // 解析失败:Gemini 有重试时间用 5 分钟,Claude 没有用 1 分钟 - defaultDur := 1 * time.Minute - if bytes.Contains(body, []byte("Please retry in")) || bytes.Contains(body, []byte("retryDelay")) { - defaultDur = 5 * time.Minute - } + // 解析失败:默认 5 分钟,直接限流整个账户 + defaultDur := 5 * time.Minute ra := time.Now().Add(defaultDur) - log.Printf("%s status=429 rate_limited scope=%s reset_in=%v (fallback)", prefix, quotaScope, defaultDur) - if quotaScope == "" { - return - } - if err := s.accountRepo.SetAntigravityQuotaScopeLimit(ctx, account.ID, quotaScope, ra); err != nil { - log.Printf("%s status=429 rate_limit_set_failed scope=%s error=%v", prefix, quotaScope, err) + log.Printf("%s status=429 rate_limited account=%d reset_in=%v (fallback)", prefix, account.ID, defaultDur) + if err := s.accountRepo.SetRateLimited(ctx, account.ID, ra); err != nil { + log.Printf("%s status=429 rate_limit_set_failed account=%d error=%v", prefix, account.ID, err) } return }