fix(runtime-fallback): classify localized balance failures
This commit is contained in:
@@ -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)
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user