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
|
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 {
|
export function classifyErrorType(error: unknown): string | undefined {
|
||||||
const message = getErrorMessage(error)
|
const message = getErrorMessage(error)
|
||||||
const errorName = extractErrorName(error)?.toLowerCase()
|
const errorName = extractErrorName(error)?.toLowerCase()
|
||||||
@@ -135,7 +142,8 @@ export function classifyErrorType(error: unknown): string | undefined {
|
|||||||
/out\s+of\s+credits?/i.test(message) ||
|
/out\s+of\s+credits?/i.test(message) ||
|
||||||
/payment.?required/i.test(message) ||
|
/payment.?required/i.test(message) ||
|
||||||
/usage\s+limit/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"
|
return "quota_exceeded"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -73,4 +73,20 @@ describe("runtime-fallback quota error regressions", () => {
|
|||||||
// Volcano Engine quota errors trigger fallback to the next model
|
// Volcano Engine quota errors trigger fallback to the next model
|
||||||
expect(retryable).toBe(true)
|
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