fix(antigravity): 修复 429 限流处理逻辑

- 只有 5 次重试全部失败后才标记账户限流
- 使用 Gemini 格式解析 429 响应中的重试时间
- Claude 模型无重试时间时默认 1 分钟,Gemini 默认 5 分钟
- 添加生图模型映射 gemini-3-pro-image-preview
This commit is contained in:
song
2025-12-29 21:28:28 +08:00
parent 42e2c5061d
commit caa8c47b68
2 changed files with 29 additions and 6 deletions

View File

@@ -1883,7 +1883,7 @@ func (s *GeminiMessagesCompatService) handleGeminiUpstreamError(ctx context.Cont
if statusCode != 429 {
return
}
resetAt := parseGeminiRateLimitResetTime(body)
resetAt := ParseGeminiRateLimitResetTime(body)
if resetAt == nil {
ra := time.Now().Add(5 * time.Minute)
_ = s.accountRepo.SetRateLimited(ctx, account.ID, ra)
@@ -1892,7 +1892,8 @@ func (s *GeminiMessagesCompatService) handleGeminiUpstreamError(ctx context.Cont
_ = s.accountRepo.SetRateLimited(ctx, account.ID, time.Unix(*resetAt, 0))
}
func parseGeminiRateLimitResetTime(body []byte) *int64 {
// ParseGeminiRateLimitResetTime 解析 Gemini 格式的 429 响应,返回重置时间的 Unix 时间戳
func ParseGeminiRateLimitResetTime(body []byte) *int64 {
// Try to parse metadata.quotaResetDelay like "12.345s"
var parsed map[string]any
if err := json.Unmarshal(body, &parsed); err == nil {