No more error user messages

This commit is contained in:
reanon
2025-08-08 12:58:41 +02:00
parent 1604246cf1
commit bc85a71c2a
+21 -10
View File
@@ -294,7 +294,8 @@ const handleUpstreamErrors: ProxyResHandlerWithBody = async (
// Xai specific - insufficient balance
if (service === "xai") {
keyPool.disable(req.key!, "quota");
errorPayload.proxy_note = `Assigned key has insufficient balance. Please try again.`;
await reenqueueRequest(req);
throw new RetryableError("XAI key has insufficient balance, retrying with different key.");
}
} else if (statusCode === 403) {
switch (service) {
@@ -318,7 +319,8 @@ const handleUpstreamErrors: ProxyResHandlerWithBody = async (
case "UnrecognizedClientException":
// Key is invalid.
keyPool.disable(req.key!, "revoked");
errorPayload.proxy_note = `Assigned API key is invalid or revoked, please try again.`;
await reenqueueRequest(req);
throw new RetryableError("AWS key is invalid, retrying with different key.");
break;
case "AccessDeniedException":
const isModelAccessError =
@@ -338,10 +340,13 @@ const handleUpstreamErrors: ProxyResHandlerWithBody = async (
return;
case "mistral-ai":
case "gcp":
keyPool.disable(req.key!, "revoked");
await reenqueueRequest(req);
throw new RetryableError("GCP key is invalid, retrying with different key.");
case "moonshot":
keyPool.disable(req.key!, "revoked");
errorPayload.proxy_note = `Assigned API key is invalid or revoked, please try again.`;
return;
await reenqueueRequest(req);
throw new RetryableError("Moonshot key is invalid, retrying with different key.");
}
} else if (statusCode === 429) {
switch (service) {
@@ -480,7 +485,8 @@ async function handleAnthropicAwsBadRequestError(
"Anthropic key has hit spending limit and will be disabled."
);
keyPool.disable(req.key!, "quota");
errorPayload.proxy_note = `Assigned key has hit its spending limit. ${error?.message}`;
await reenqueueRequest(req);
throw new RetryableError("Claude key hit spending limit, retrying with different key.");
return;
}
@@ -494,7 +500,8 @@ async function handleAnthropicAwsBadRequestError(
"Anthropic/AWS key has been disabled."
);
keyPool.disable(req.key!, "revoked");
errorPayload.proxy_note = `Assigned key has been disabled. (${error?.message})`;
await reenqueueRequest(req);
throw new RetryableError("Claude key has been disabled, retrying with different key.");
return;
}
@@ -655,17 +662,20 @@ async function handleOpenAIRateLimitError(
case "invalid_request_error": // this is the billing_hard_limit_reached error seen in some cases
// Billing quota exceeded (key is dead, disable it)
keyPool.disable(req.key!, "quota");
errorPayload.proxy_note = `Assigned key's quota has been exceeded. Please try again.`;
await reenqueueRequest(req);
throw new RetryableError("Google AI key quota exceeded, retrying with different key.");
break;
case "access_terminated":
// Account banned (key is dead, disable it)
keyPool.disable(req.key!, "revoked");
errorPayload.proxy_note = `Assigned key has been banned by OpenAI for policy violations. Please try again.`;
await reenqueueRequest(req);
throw new RetryableError("Google AI key banned for policy violations, retrying with different key.");
break;
case "billing_not_active":
// Key valid but account billing is delinquent
keyPool.disable(req.key!, "quota");
errorPayload.proxy_note = `Assigned key has been disabled due to delinquent billing. Please try again.`;
await reenqueueRequest(req);
throw new RetryableError("Google AI key billing not active, retrying with different key.");
break;
case "requests":
case "tokens":
@@ -724,7 +734,8 @@ async function handleGoogleAIBadRequestError(
"Google API key appears to be inoperative."
);
keyPool.disable(req.key!, "revoked");
errorPayload.proxy_note = `Assigned API key cannot be used.`;
await reenqueueRequest(req);
throw new RetryableError("Google API key inoperative, retrying with different key.");
} else {
req.log.warn(
{ key: req.key?.hash, error: text },