fix(openai-wrapper): Kontext-Ueberlauf als OpenAI-400 context_length_exceeded
Bisher kam context_exceeded als 502 an — OpenAI-Clients (litellm/OpenHands) hielten das fuer einen Serverfehler statt zu kuerzen/verdichten. Jetzt 400 mit code context_length_exceeded und dem OpenAI-ueblichen Text inkl. Zahlen. Doku: Abschnitt "Den Verlauf verwaltet das Programm" (Kuerzen, Verdichten, Gedaechtnis) fuer Drittprogramme. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -228,6 +228,15 @@ async def handle(reader: asyncio.StreamReader, writer: asyncio.StreamWriter) ->
|
||||
return await reply(writer, 503, oai_error(_unreachable(e), "cluster_unreachable", "server_error"))
|
||||
if not res.get("ok"):
|
||||
code = res.get("errorCode") or "model_error"
|
||||
if code == "context_exceeded":
|
||||
# Wie OpenAI: 400 + context_length_exceeded und die Zahlen im
|
||||
# Text — daran erkennen OpenAI-Clients (litellm/OpenHands & Co.)
|
||||
# einen Kontext-Ueberlauf und kuerzen/verdichten selbst.
|
||||
n_ctx, n_req = res.get("ctx"), res.get("promptTokens")
|
||||
msg = (f"This model's maximum context length is {n_ctx} tokens. However, your "
|
||||
f"messages resulted in {n_req} tokens. Please reduce the length of the messages."
|
||||
if n_ctx and n_req else (res.get("error") or "context length exceeded"))
|
||||
return await reply(writer, 400, oai_error(msg, "context_length_exceeded"))
|
||||
status = {"bad_request": 400, "model_unavailable": 404, "timeout": 504}.get(code, 502)
|
||||
return await reply(writer, status, oai_error(
|
||||
res.get("error") or "Fehler", "model_not_found" if code == "model_unavailable" else code,
|
||||
|
||||
Reference in New Issue
Block a user