补齐 Grok CC bridge 同号重试

This commit is contained in:
IanShaw
2026-08-20 06:25:57 -07:00
parent 17c0ee3859
commit 5ae254f771
2 changed files with 8 additions and 1 deletions
@@ -633,11 +633,15 @@ func (s *OpenAIGatewayService) forwardGrokChatCompletionsViaResponses(
})
s.handleGrokAccountUpstreamError(withGrokTeamRateLimitModel(ctx, upstreamModel), account, resp.StatusCode, resp.Header, respBody)
if s.shouldFailoverGrokUpstreamError(resp.StatusCode, respBody) {
retryable, retryDelay, retryDeadline := grokSameAccountRetryMetadata(account, resp.StatusCode, respBody)
return nil, &UpstreamFailoverError{
StatusCode: resp.StatusCode,
ResponseBody: respBody,
ResponseHeaders: resp.Header.Clone(),
RetryableOnSameAccount: account.IsPoolMode() && account.IsPoolModeRetryableStatus(resp.StatusCode),
RetryableOnSameAccount: retryable,
RequestScopedTransient: retryable && resp.StatusCode == http.StatusTooManyRequests,
SameAccountRetryDelay: retryDelay,
SameAccountRetryDeadline: retryDeadline,
}
}
return s.handleChatCompletionsErrorResponse(resp, c, account, billingModel)
@@ -614,6 +614,9 @@ func TestForwardGrokChatViaResponses429UsesGrokRateLimitPolicy(t *testing.T) {
var failoverErr *UpstreamFailoverError
require.True(t, errors.As(err, &failoverErr))
require.Equal(t, http.StatusTooManyRequests, failoverErr.StatusCode)
require.True(t, failoverErr.RetryableOnSameAccount)
require.Equal(t, 500*time.Millisecond, failoverErr.SameAccountRetryDelay)
require.False(t, failoverErr.SameAccountRetryDeadline.IsZero())
require.Equal(t, "45", failoverErr.ResponseHeaders.Get("Retry-After"))
require.Equal(t, xai.DefaultCLIBaseURL+"/responses", upstream.lastReq.URL.String())
require.Equal(t, grokChatResponsesEndpoint, GetActualOpenAIUpstreamEndpoint(c))