fix: return HTTP 400 (not 502) for client ModelError/bad model requests
This commit is contained in:
@@ -513,6 +513,7 @@ class RouterHandler(BaseHTTPRequestHandler):
|
||||
|
||||
last_error = ""
|
||||
success = False
|
||||
client_error = False # True=客户端请求错误(400/ModelError),应返回 4xx 而非 502
|
||||
|
||||
for attempt, k in enumerate(ranked_keys):
|
||||
kid = k["key_id"]
|
||||
@@ -553,6 +554,7 @@ class RouterHandler(BaseHTTPRequestHandler):
|
||||
break
|
||||
if status == 400:
|
||||
log.warning("client error 400, returning to caller without retry")
|
||||
client_error = True
|
||||
success = False
|
||||
break
|
||||
if status in (401, 403):
|
||||
@@ -561,6 +563,7 @@ class RouterHandler(BaseHTTPRequestHandler):
|
||||
if "ModelError" in last_error or "model is not" in last_error.lower() \
|
||||
or "not supported" in last_error.lower() or "model not found" in last_error.lower():
|
||||
log.warning("client ModelError (bad model name '%s'), returning 400 without cooling keys", model_name)
|
||||
client_error = True
|
||||
success = False
|
||||
break
|
||||
mark_key_failed(kid, last_error, cooldown=FAIL_COOLDOWN_SEC)
|
||||
@@ -590,8 +593,13 @@ class RouterHandler(BaseHTTPRequestHandler):
|
||||
last_error = (f"all keys in cooldown until "
|
||||
f"{datetime.fromtimestamp(earliest).strftime('%H:%M:%S')}"
|
||||
f"{' (' + reason_str + ')' if reason_str else ''}")
|
||||
log.error("✗ %s ALL KEYS EXHAUSTED (%.2fs): %s", model_name, elapsed, last_error)
|
||||
self._error_response(502, f"All OCG keys exhausted: {last_error}")
|
||||
if client_error:
|
||||
# 客户端请求错误(400/ModelError):返回 400,不是服务端故障
|
||||
log.warning("✗ %s client error (%.2fs): %s", model_name, elapsed, last_error)
|
||||
self._error_response(400, last_error)
|
||||
else:
|
||||
log.error("✗ %s ALL KEYS EXHAUSTED (%.2fs): %s", model_name, elapsed, last_error)
|
||||
self._error_response(502, f"All OCG keys exhausted: {last_error}")
|
||||
|
||||
def _forward_request(self, api_key, body, is_stream):
|
||||
"""转发单次请求到指定 key。返回 {ok, status, error}。"""
|
||||
|
||||
Reference in New Issue
Block a user