fix(runtime-fallback): classify localized balance failures

This commit is contained in:
Qihao
2026-05-11 10:41:27 +08:00
parent b213d0dab1
commit 583fa2420f
2 changed files with 25 additions and 1 deletions
@@ -97,6 +97,13 @@ export function extractErrorName(error: unknown): string | undefined {
return undefined
}
function isLocalizedQuotaExhaustionMessage(message: string): boolean {
return (
(/预扣费额度失败/i.test(message) && /用户剩余额度/i.test(message)) ||
(/用户剩余额度/i.test(message) && /需要预扣费额度/i.test(message))
)
}
export function classifyErrorType(error: unknown): string | undefined {
const message = getErrorMessage(error)
const errorName = extractErrorName(error)?.toLowerCase()
@@ -135,7 +142,8 @@ export function classifyErrorType(error: unknown): string | undefined {
/out\s+of\s+credits?/i.test(message) ||
/payment.?required/i.test(message) ||
/usage\s+limit/i.test(message) ||
/credit\s+balance.*too\s+low/i.test(message)
/credit\s+balance.*too\s+low/i.test(message) ||
isLocalizedQuotaExhaustionMessage(message)
) {
return "quota_exceeded"
}
@@ -73,4 +73,20 @@ describe("runtime-fallback quota error regressions", () => {
// Volcano Engine quota errors trigger fallback to the next model
expect(retryable).toBe(true)
})
test("classifies UnifyLLM pre-charge balance failures as quota_exceeded", () => {
//#given
const error = {
message:
"预扣费额度失败, 用户剩余额度: 0.265718, 需要预扣费额度: 0.680208 (request id: test-request-id)",
}
//#when
const errorType = classifyErrorType(error)
const retryable = isRetryableError(error, [429, 500, 502, 503, 504])
//#then
expect(errorType).toBe("quota_exceeded")
expect(retryable).toBe(true)
})
})