501ba36b89
Gateway injiziert chat_template_kwargs.enable_thinking=false fuer die fast- Spur (Qwen3.6 ist Reasoning-Modell → sonst lahm/leer). heavy behaelt Thinking. Env MC_FAST_NO_THINK. Hermes-Thrash war poisoned Persistent- Session (fresh=clean, 34k statt 249k verifiziert); code_execution.max_tool_ calls 50->20 auf der Box (Historie unangetastet). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
34 lines
1.3 KiB
Python
34 lines
1.3 KiB
Python
"""
|
|
Komplexitäts-Routing für `model: auto` (eingebauter Gateway).
|
|
Schnell im Alltag (fast), schwer bei Bedarf (heavy) — regelbasiert, sub-ms, ohne Cloud.
|
|
"""
|
|
|
|
import os
|
|
import re
|
|
|
|
FAST = os.environ.get("MC_ROUTE_FAST", "fast")
|
|
HEAVY = os.environ.get("MC_ROUTE_HEAVY", "heavy")
|
|
HEAVY_CHARS = int(os.environ.get("MC_GATEWAY_HEAVY_CHARS", "8000"))
|
|
# Thinking auf der fast-Spur ausschalten → flotte Alltags-Antworten (Qwen3.6 ist ein
|
|
# Reasoning-Modell). heavy behält Thinking für harte Aufgaben. Abschaltbar via Env.
|
|
FAST_NO_THINK = os.environ.get("MC_FAST_NO_THINK", "1") not in ("0", "false", "")
|
|
|
|
_HEAVY_KW = re.compile(
|
|
r"\b(beweis|prove|theorem|refactor|architect|komplex|complex|schwierig|"
|
|
r"think\s*hard|reason\s*carefully|tief\s*nachdenk|optimi[sz]e|algorithm|"
|
|
r"root\s*cause|debug|analy[sz]e\s+deeply|step[-\s]?by[-\s]?step)\b",
|
|
re.IGNORECASE,
|
|
)
|
|
|
|
|
|
def choose_model(body: dict) -> tuple[str, str]:
|
|
"""Wählt fast|heavy für eine Chat-Anfrage. Gibt (alias, begründung) zurück."""
|
|
msgs = body.get("messages") or []
|
|
text = "\n".join(str(m.get("content") or "") for m in msgs)
|
|
n = len(text)
|
|
if n > HEAVY_CHARS:
|
|
return HEAVY, f"langer Kontext ({n} > {HEAVY_CHARS} Zeichen)"
|
|
if _HEAVY_KW.search(text):
|
|
return HEAVY, "Komplexitäts-Schlüsselwort erkannt"
|
|
return FAST, "Standard"
|