mirror of
https://github.com/router-for-me/CLIProxyAPI.git
synced 2026-02-03 04:50:52 +08:00
Merge pull request #787 from sususu98/fix/antigravity-429-retry-delay-parsing
fix(antigravity): parse retry-after delay from 429 response body
This commit is contained in:
@@ -157,7 +157,13 @@ func (e *AntigravityExecutor) Execute(ctx context.Context, auth *cliproxyauth.Au
|
|||||||
log.Debugf("antigravity executor: rate limited on base url %s, retrying with fallback base url: %s", baseURL, baseURLs[idx+1])
|
log.Debugf("antigravity executor: rate limited on base url %s, retrying with fallback base url: %s", baseURL, baseURLs[idx+1])
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
err = statusErr{code: httpResp.StatusCode, msg: string(bodyBytes)}
|
sErr := statusErr{code: httpResp.StatusCode, msg: string(bodyBytes)}
|
||||||
|
if httpResp.StatusCode == http.StatusTooManyRequests {
|
||||||
|
if retryAfter, parseErr := parseRetryDelay(bodyBytes); parseErr == nil && retryAfter != nil {
|
||||||
|
sErr.retryAfter = retryAfter
|
||||||
|
}
|
||||||
|
}
|
||||||
|
err = sErr
|
||||||
return resp, err
|
return resp, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -171,7 +177,13 @@ func (e *AntigravityExecutor) Execute(ctx context.Context, auth *cliproxyauth.Au
|
|||||||
|
|
||||||
switch {
|
switch {
|
||||||
case lastStatus != 0:
|
case lastStatus != 0:
|
||||||
err = statusErr{code: lastStatus, msg: string(lastBody)}
|
sErr := statusErr{code: lastStatus, msg: string(lastBody)}
|
||||||
|
if lastStatus == http.StatusTooManyRequests {
|
||||||
|
if retryAfter, parseErr := parseRetryDelay(lastBody); parseErr == nil && retryAfter != nil {
|
||||||
|
sErr.retryAfter = retryAfter
|
||||||
|
}
|
||||||
|
}
|
||||||
|
err = sErr
|
||||||
case lastErr != nil:
|
case lastErr != nil:
|
||||||
err = lastErr
|
err = lastErr
|
||||||
default:
|
default:
|
||||||
@@ -261,7 +273,13 @@ func (e *AntigravityExecutor) executeClaudeNonStream(ctx context.Context, auth *
|
|||||||
log.Debugf("antigravity executor: rate limited on base url %s, retrying with fallback base url: %s", baseURL, baseURLs[idx+1])
|
log.Debugf("antigravity executor: rate limited on base url %s, retrying with fallback base url: %s", baseURL, baseURLs[idx+1])
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
err = statusErr{code: httpResp.StatusCode, msg: string(bodyBytes)}
|
sErr := statusErr{code: httpResp.StatusCode, msg: string(bodyBytes)}
|
||||||
|
if httpResp.StatusCode == http.StatusTooManyRequests {
|
||||||
|
if retryAfter, parseErr := parseRetryDelay(bodyBytes); parseErr == nil && retryAfter != nil {
|
||||||
|
sErr.retryAfter = retryAfter
|
||||||
|
}
|
||||||
|
}
|
||||||
|
err = sErr
|
||||||
return resp, err
|
return resp, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -326,7 +344,13 @@ func (e *AntigravityExecutor) executeClaudeNonStream(ctx context.Context, auth *
|
|||||||
|
|
||||||
switch {
|
switch {
|
||||||
case lastStatus != 0:
|
case lastStatus != 0:
|
||||||
err = statusErr{code: lastStatus, msg: string(lastBody)}
|
sErr := statusErr{code: lastStatus, msg: string(lastBody)}
|
||||||
|
if lastStatus == http.StatusTooManyRequests {
|
||||||
|
if retryAfter, parseErr := parseRetryDelay(lastBody); parseErr == nil && retryAfter != nil {
|
||||||
|
sErr.retryAfter = retryAfter
|
||||||
|
}
|
||||||
|
}
|
||||||
|
err = sErr
|
||||||
case lastErr != nil:
|
case lastErr != nil:
|
||||||
err = lastErr
|
err = lastErr
|
||||||
default:
|
default:
|
||||||
@@ -602,7 +626,13 @@ func (e *AntigravityExecutor) ExecuteStream(ctx context.Context, auth *cliproxya
|
|||||||
log.Debugf("antigravity executor: rate limited on base url %s, retrying with fallback base url: %s", baseURL, baseURLs[idx+1])
|
log.Debugf("antigravity executor: rate limited on base url %s, retrying with fallback base url: %s", baseURL, baseURLs[idx+1])
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
err = statusErr{code: httpResp.StatusCode, msg: string(bodyBytes)}
|
sErr := statusErr{code: httpResp.StatusCode, msg: string(bodyBytes)}
|
||||||
|
if httpResp.StatusCode == http.StatusTooManyRequests {
|
||||||
|
if retryAfter, parseErr := parseRetryDelay(bodyBytes); parseErr == nil && retryAfter != nil {
|
||||||
|
sErr.retryAfter = retryAfter
|
||||||
|
}
|
||||||
|
}
|
||||||
|
err = sErr
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -657,7 +687,13 @@ func (e *AntigravityExecutor) ExecuteStream(ctx context.Context, auth *cliproxya
|
|||||||
|
|
||||||
switch {
|
switch {
|
||||||
case lastStatus != 0:
|
case lastStatus != 0:
|
||||||
err = statusErr{code: lastStatus, msg: string(lastBody)}
|
sErr := statusErr{code: lastStatus, msg: string(lastBody)}
|
||||||
|
if lastStatus == http.StatusTooManyRequests {
|
||||||
|
if retryAfter, parseErr := parseRetryDelay(lastBody); parseErr == nil && retryAfter != nil {
|
||||||
|
sErr.retryAfter = retryAfter
|
||||||
|
}
|
||||||
|
}
|
||||||
|
err = sErr
|
||||||
case lastErr != nil:
|
case lastErr != nil:
|
||||||
err = lastErr
|
err = lastErr
|
||||||
default:
|
default:
|
||||||
@@ -794,12 +830,24 @@ func (e *AntigravityExecutor) CountTokens(ctx context.Context, auth *cliproxyaut
|
|||||||
log.Debugf("antigravity executor: rate limited on base url %s, retrying with fallback base url: %s", baseURL, baseURLs[idx+1])
|
log.Debugf("antigravity executor: rate limited on base url %s, retrying with fallback base url: %s", baseURL, baseURLs[idx+1])
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
return cliproxyexecutor.Response{}, statusErr{code: httpResp.StatusCode, msg: string(bodyBytes)}
|
sErr := statusErr{code: httpResp.StatusCode, msg: string(bodyBytes)}
|
||||||
|
if httpResp.StatusCode == http.StatusTooManyRequests {
|
||||||
|
if retryAfter, parseErr := parseRetryDelay(bodyBytes); parseErr == nil && retryAfter != nil {
|
||||||
|
sErr.retryAfter = retryAfter
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return cliproxyexecutor.Response{}, sErr
|
||||||
}
|
}
|
||||||
|
|
||||||
switch {
|
switch {
|
||||||
case lastStatus != 0:
|
case lastStatus != 0:
|
||||||
return cliproxyexecutor.Response{}, statusErr{code: lastStatus, msg: string(lastBody)}
|
sErr := statusErr{code: lastStatus, msg: string(lastBody)}
|
||||||
|
if lastStatus == http.StatusTooManyRequests {
|
||||||
|
if retryAfter, parseErr := parseRetryDelay(lastBody); parseErr == nil && retryAfter != nil {
|
||||||
|
sErr.retryAfter = retryAfter
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return cliproxyexecutor.Response{}, sErr
|
||||||
case lastErr != nil:
|
case lastErr != nil:
|
||||||
return cliproxyexecutor.Response{}, lastErr
|
return cliproxyexecutor.Response{}, lastErr
|
||||||
default:
|
default:
|
||||||
@@ -968,7 +1016,13 @@ func (e *AntigravityExecutor) refreshToken(ctx context.Context, auth *cliproxyau
|
|||||||
}
|
}
|
||||||
|
|
||||||
if httpResp.StatusCode < http.StatusOK || httpResp.StatusCode >= http.StatusMultipleChoices {
|
if httpResp.StatusCode < http.StatusOK || httpResp.StatusCode >= http.StatusMultipleChoices {
|
||||||
return auth, statusErr{code: httpResp.StatusCode, msg: string(bodyBytes)}
|
sErr := statusErr{code: httpResp.StatusCode, msg: string(bodyBytes)}
|
||||||
|
if httpResp.StatusCode == http.StatusTooManyRequests {
|
||||||
|
if retryAfter, parseErr := parseRetryDelay(bodyBytes); parseErr == nil && retryAfter != nil {
|
||||||
|
sErr.retryAfter = retryAfter
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return auth, sErr
|
||||||
}
|
}
|
||||||
|
|
||||||
var tokenResp struct {
|
var tokenResp struct {
|
||||||
|
|||||||
Reference in New Issue
Block a user