Cap runaway chat generations in router
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user