Skip to content

Commit 81bdffc

Browse files
authored
fix: ensure the alibaba provider errors are retried (anomalyco#21355)
1 parent 2549a38 commit 81bdffc

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

packages/opencode/src/session/retry.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,19 @@ export namespace SessionRetry {
5858
return error.data.message.includes("Overloaded") ? "Provider is overloaded" : error.data.message
5959
}
6060

61+
// Check for rate limit patterns in plain text error messages
62+
const msg = error.data?.message
63+
if (typeof msg === "string") {
64+
const lower = msg.toLowerCase()
65+
if (
66+
lower.includes("rate increased too quickly") ||
67+
lower.includes("rate limit") ||
68+
lower.includes("too many requests")
69+
) {
70+
return msg
71+
}
72+
}
73+
6174
const json = iife(() => {
6275
try {
6376
if (typeof error.data?.message === "string") {

packages/opencode/test/session/retry.test.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,25 @@ describe("session.retry.retryable", () => {
145145
expect(SessionRetry.retryable(error)).toBeUndefined()
146146
})
147147

148+
test("retries plain text rate limit errors from Alibaba", () => {
149+
const msg =
150+
"Upstream error from Alibaba: Request rate increased too quickly. To ensure system stability, please adjust your client logic to scale requests more smoothly over time."
151+
const error = wrap(msg)
152+
expect(SessionRetry.retryable(error)).toBe(msg)
153+
})
154+
155+
test("retries plain text rate limit errors", () => {
156+
const msg = "Rate limit exceeded, please try again later"
157+
const error = wrap(msg)
158+
expect(SessionRetry.retryable(error)).toBe(msg)
159+
})
160+
161+
test("retries too many requests in plain text", () => {
162+
const msg = "Too many requests, please slow down"
163+
const error = wrap(msg)
164+
expect(SessionRetry.retryable(error)).toBe(msg)
165+
})
166+
148167
test("does not retry context overflow errors", () => {
149168
const error = new MessageV2.ContextOverflowError({
150169
message: "Input exceeds context window of this model",

0 commit comments

Comments
 (0)