mirror of
https://gitee.com/wanwujie/sub2api
synced 2026-04-26 17:34:47 +08:00
fix: antigravity 429 fallback uses final model key
This commit is contained in:
@@ -2653,7 +2653,16 @@ func (s *AntigravityGatewayService) handleUpstreamError(
|
|||||||
defaultDur := s.getDefaultRateLimitDuration()
|
defaultDur := s.getDefaultRateLimitDuration()
|
||||||
|
|
||||||
// 尝试解析模型 key 并设置模型级限流
|
// 尝试解析模型 key 并设置模型级限流
|
||||||
modelKey := resolveAntigravityModelKey(requestedModel)
|
//
|
||||||
|
// 注意:requestedModel 可能是“映射前”的请求模型名(例如 claude-opus-4-6),
|
||||||
|
// 调度与限流判定使用的是 Antigravity 最终模型名(包含映射与 thinking 后缀)。
|
||||||
|
// 因此这里必须写入最终模型 key,确保后续调度能正确避开已限流模型。
|
||||||
|
modelKey := resolveFinalAntigravityModelKey(ctx, account, requestedModel)
|
||||||
|
if strings.TrimSpace(modelKey) == "" {
|
||||||
|
// 极少数情况下无法映射(理论上不应发生:能转发成功说明映射已通过),
|
||||||
|
// 保持旧行为作为兜底,避免完全丢失模型级限流记录。
|
||||||
|
modelKey = resolveAntigravityModelKey(requestedModel)
|
||||||
|
}
|
||||||
if modelKey != "" {
|
if modelKey != "" {
|
||||||
ra := s.resolveResetTime(resetAt, defaultDur)
|
ra := s.resolveResetTime(resetAt, defaultDur)
|
||||||
if err := s.accountRepo.SetModelRateLimit(ctx, account.ID, modelKey, ra); err != nil {
|
if err := s.accountRepo.SetModelRateLimit(ctx, account.ID, modelKey, ra); err != nil {
|
||||||
|
|||||||
@@ -191,6 +191,22 @@ func TestHandleUpstreamError_429_NonModelRateLimit(t *testing.T) {
|
|||||||
require.Equal(t, "claude-sonnet-4-5", repo.modelRateLimitCalls[0].modelKey)
|
require.Equal(t, "claude-sonnet-4-5", repo.modelRateLimitCalls[0].modelKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestHandleUpstreamError_429_NonModelRateLimit_UsesMappedModelKey(t *testing.T) {
|
||||||
|
repo := &stubAntigravityAccountRepo{}
|
||||||
|
svc := &AntigravityGatewayService{accountRepo: repo}
|
||||||
|
account := &Account{ID: 20, Name: "acc-20", Platform: PlatformAntigravity}
|
||||||
|
|
||||||
|
// 429 + 普通限流响应(无 RATE_LIMIT_EXCEEDED reason)→ 走模型级限流兜底
|
||||||
|
// 场景:requestedModel 会被默认映射到 Antigravity 最终模型(例如 claude-opus-4-6 -> claude-opus-4-6-thinking)
|
||||||
|
body := buildGeminiRateLimitBody("5s")
|
||||||
|
|
||||||
|
result := svc.handleUpstreamError(context.Background(), "[test]", account, http.StatusTooManyRequests, http.Header{}, body, "claude-opus-4-6", 0, "", false)
|
||||||
|
|
||||||
|
require.Nil(t, result)
|
||||||
|
require.Len(t, repo.modelRateLimitCalls, 1)
|
||||||
|
require.Equal(t, "claude-opus-4-6-thinking", repo.modelRateLimitCalls[0].modelKey)
|
||||||
|
}
|
||||||
|
|
||||||
// TestHandleUpstreamError_503_ModelCapacityExhausted 测试 503 模型容量不足场景
|
// TestHandleUpstreamError_503_ModelCapacityExhausted 测试 503 模型容量不足场景
|
||||||
// MODEL_CAPACITY_EXHAUSTED 时应等待重试,不切换账号
|
// MODEL_CAPACITY_EXHAUSTED 时应等待重试,不切换账号
|
||||||
func TestHandleUpstreamError_503_ModelCapacityExhausted(t *testing.T) {
|
func TestHandleUpstreamError_503_ModelCapacityExhausted(t *testing.T) {
|
||||||
|
|||||||
Reference in New Issue
Block a user