diff --git a/backend/services/router_logic.py b/backend/services/router_logic.py index 3c2ac43..05ac53d 100644 --- a/backend/services/router_logic.py +++ b/backend/services/router_logic.py @@ -20,8 +20,9 @@ CODER = os.environ.get("MC_ROUTE_CODER", "coder") # Schwellen (Zeichen). HEAVY_CHARS = int(os.environ.get("MC_GATEWAY_HEAVY_CHARS", "8000")) # chat → heavy -CODING_HEAVY_CHARS = int(os.environ.get("MC_CODING_HEAVY_CHARS", "24000")) # coding → heavy -CODING_TRIVIAL_CHARS = int(os.environ.get("MC_CODING_TRIVIAL_CHARS", "240")) # coding → fast (nur ohne Code) +# coding-Lane: leichter/schneller Coder als Default (wenn gesetzt = Phase 2b), starker Coder als Eskalation. +CODER_LITE = os.environ.get("MC_ROUTE_CODER_LITE", "").strip() # z.B. "coder-lite" +CODING_ESCALATE_CHARS = int(os.environ.get("MC_CODING_ESCALATE_CHARS", "120000")) # darüber → starker Coder # Thinking auf der fast-Spur aus → flotte Alltags-Antworten (Qwen3.6 ist ein Reasoning-Modell). FAST_NO_THINK = os.environ.get("MC_FAST_NO_THINK", "1") not in ("0", "false", "") @@ -71,11 +72,13 @@ def _route_chat(text: str, n: int) -> tuple[str, str]: def _route_coding(text: str, n: int) -> tuple[str, str]: - if n > CODING_HEAVY_CHARS or _CODING_HEAVY_KW.search(text): - return HEAVY, "großer/architektonischer Coding-Kontext" - if n < CODING_TRIVIAL_CHARS and not _CODE_HINT.search(text): - return FAST, "triviale Kurzfrage (kein Code)" - return CODER, "Coding-Standard" + # Agentisches Coden (OpenCode/RooCode/…) bleibt IMMER beim dedizierten Coder — NIE heavy/fast + # (das sind Allzweck-Modelle, schwächer bei Code). Die Qwen-Coder packen 256K–1M Kontext selbst, + # langer Repo-Kontext ist bei Agenten der Normalfall und darf NICHT zu heavy umrouten. + # (Phase 2b: warme schnelle Coder-Stufe CODER_LITE als Default + CODER als Eskalation.) + if CODER_LITE and not _CODING_HEAVY_KW.search(text) and n <= CODING_ESCALATE_CHARS: + return CODER_LITE, "Coding (schneller Coder)" + return CODER, "Coding -> starker Coder" def choose_for_lane(lane: str, body: dict) -> tuple[str, str]: