Merge pull request #1169 from touwaeriol/pr/credits-exhausted-fix
fix(antigravity): correctly mark credits exhausted on "Resource has been exhausted" 429
This commit is contained in:
@@ -45,6 +45,7 @@ var (
|
|||||||
"minimumcreditamountforusage",
|
"minimumcreditamountforusage",
|
||||||
"minimum credit amount for usage",
|
"minimum credit amount for usage",
|
||||||
"minimum credit",
|
"minimum credit",
|
||||||
|
"resource has been exhausted",
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -147,9 +148,9 @@ func shouldMarkCreditsExhausted(resp *http.Response, respBody []byte, reqErr err
|
|||||||
if resp.StatusCode >= 500 || resp.StatusCode == http.StatusRequestTimeout {
|
if resp.StatusCode >= 500 || resp.StatusCode == http.StatusRequestTimeout {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
if isURLLevelRateLimit(respBody) {
|
// 注意:不再检查 isURLLevelRateLimit。此函数仅在积分重试失败后调用,
|
||||||
return false
|
// 如果注入 enabledCreditTypes 后仍返回 "Resource has been exhausted",
|
||||||
}
|
// 说明积分也已耗尽,应该标记。clearCreditsExhausted 会在后续成功时自动清除。
|
||||||
if info := parseAntigravitySmartRetryInfo(respBody); info != nil {
|
if info := parseAntigravitySmartRetryInfo(respBody); info != nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -406,10 +406,16 @@ func TestShouldMarkCreditsExhausted(t *testing.T) {
|
|||||||
require.False(t, shouldMarkCreditsExhausted(resp, []byte(`{"error":"Insufficient credits"}`), nil))
|
require.False(t, shouldMarkCreditsExhausted(resp, []byte(`{"error":"Insufficient credits"}`), nil))
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("URL 级限流不标记", func(t *testing.T) {
|
t.Run("Resource has been exhausted 应标记为积分耗尽", func(t *testing.T) {
|
||||||
resp := &http.Response{StatusCode: http.StatusTooManyRequests}
|
resp := &http.Response{StatusCode: http.StatusTooManyRequests}
|
||||||
body := []byte(`{"error":{"message":"Resource has been exhausted"}}`)
|
body := []byte(`{"error":{"message":"Resource has been exhausted"}}`)
|
||||||
require.False(t, shouldMarkCreditsExhausted(resp, body, nil))
|
require.True(t, shouldMarkCreditsExhausted(resp, body, nil))
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Resource has been exhausted (check quota) 完整格式应标记", func(t *testing.T) {
|
||||||
|
resp := &http.Response{StatusCode: http.StatusTooManyRequests}
|
||||||
|
body := []byte(`{"error":{"code":429,"message":"Resource has been exhausted (e.g. check quota).","status":"RESOURCE_EXHAUSTED"}}`)
|
||||||
|
require.True(t, shouldMarkCreditsExhausted(resp, body, nil))
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("结构化限流不标记", func(t *testing.T) {
|
t.Run("结构化限流不标记", func(t *testing.T) {
|
||||||
|
|||||||
Reference in New Issue
Block a user