Unverified Commit 9dccbe1b authored by Wesley Liddick's avatar Wesley Liddick Committed by GitHub
Browse files

Merge pull request #1169 from touwaeriol/pr/credits-exhausted-fix

fix(antigravity): correctly mark credits exhausted on "Resource has been exhausted" 429
parents 9a88df7f 21b6f2d5
...@@ -45,6 +45,7 @@ var ( ...@@ -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 ...@@ -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) { ...@@ -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) {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment