Cap runaway chat generations in router

This commit is contained in:
Mikei386
2026-08-26 07:01:04 +02:00
parent 400de54ff9
commit d1eed44341
3 changed files with 59 additions and 0 deletions
+35
View File
@@ -113,6 +113,7 @@ SWITCH_TIMEOUT = float(os.environ.get("SWITCH_TIMEOUT", "600")) # s, Warten
REQUEST_TIMEOUT = float(os.environ.get("REQUEST_TIMEOUT", "600")) # s, Read-Timeout Upstream
CONNECT_TIMEOUT = float(os.environ.get("CONNECT_TIMEOUT", "10")) # s, Connect-Timeout
POLL_INTERVAL = float(os.environ.get("POLL_INTERVAL", "2")) # s, Polling-Intervall
MAX_GENERATION_TOKENS = int(os.environ.get("MAX_GENERATION_TOKENS", "8192"))
# --- Bildgenerierung (FLUX.2 [klein] 4B Base) ---
LLAMA_SERVICE = os.environ.get("LLAMA_SERVICE", "mike-ai-llama-ui.service")
@@ -1166,6 +1167,39 @@ def _normalize_llamacpp_reasoning(data: dict) -> dict:
return data
def _cap_chat_generation(data: dict) -> dict:
"""Apply a client-independent upper bound to one chat generation.
Some OpenAI-compatible clients omit both token-limit fields. llama.cpp
interprets that as ``n_predict=-1`` and can remain in hidden reasoning
until the context is exhausted. Smaller explicit limits are preserved.
"""
cap = MAX_GENERATION_TOKENS
if cap <= 0:
return data
fields = ("max_tokens", "max_completion_tokens")
present = False
for field in fields:
if field not in data:
continue
present = True
value = data[field]
if isinstance(value, bool):
data[field] = cap
continue
try:
parsed = int(value)
except (TypeError, ValueError):
data[field] = cap
continue
data[field] = min(parsed, cap) if parsed > 0 else cap
if not present:
data["max_tokens"] = cap
return data
# ---------------------------------------------------------------------------
# HTTP-Handler
# ---------------------------------------------------------------------------
@@ -1975,6 +2009,7 @@ class Handler(BaseHTTPRequestHandler):
switch_profile(profile, implicit=True)
data = _normalize_llamacpp_reasoning(data)
data = _cap_chat_generation(data)
if _request_has_image(data):
data = _normalize_chat_images(data)