47f7a85510
Die Ampel-Nachruestung deckte 317/337 vorbestehende ruff-Verstoesse im ganzen Repo auf. Aufgeraeumt: - ruff.toml: intentionale Muster als Projekt-Politik ausgenommen (BLE001 blind-except, S110/S112 try-except-pass/continue, PLW1510 subprocess-best-effort, B008 FastAPI- Depends/File-Idiom, EXE001 Shebang, + wenige Stil-Regeln). __init__.py-Re-Exports geschuetzt (F401). - ruff --fix: 128 mechanische (Import-Sortierung, PEP585/604-Annotationen, tote Imports, ueberfluessige noqa) auto-behoben. - 12 echte Reste von Hand: PERF402/102, PLC3002 (Lambda->walrus), ISC004 (String-Concat geklammert), F841/RUF059 (ungenutzte Vars), PIE810 (startswith-Tuple), UP031 (f-string), UP035 (veraltete typing-Imports). Ergebnis: 'ruff check .' = 0, 'compileall' grün. Kein Verhaltenswechsel (nur Stil/Modernisierung). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
57 lines
2.2 KiB
Python
57 lines
2.2 KiB
Python
"""
|
|
Routing-Gateway-Status. Seit UMBAU v3 P1 bedient der EIGENSTÄNDIGE mc2-gateway-
|
|
Prozess den /v1-Pfad (MC_V1_UPSTREAM gesetzt, MC2 reicht nur roh durch); ohne
|
|
V1_UPSTREAM gilt der alte eingebaute Modus (MC2 serviert /v1 selbst).
|
|
"""
|
|
|
|
import httpx
|
|
from config import PORT, V1_UPSTREAM
|
|
|
|
from services.llamaswap import engine_reachable
|
|
from services.routing_policy import load_policy
|
|
|
|
|
|
def routing_summary() -> dict:
|
|
p = load_policy()
|
|
coding_default = p["coder_lite"] or p["coder"]
|
|
return {
|
|
"mode": "gateway (eigener Prozess)" if V1_UPSTREAM else "builtin",
|
|
"endpoint": f":{PORT}/v1 (OpenAI-kompatibel)",
|
|
# Virtuelle Lanes, die Clients/IDEs als „Modell" wählen (Router pickt das echte Alias).
|
|
"lanes": [
|
|
{
|
|
"name": "chat",
|
|
"aka": "auto",
|
|
"target": f"{p['fast']} ↔ {p['heavy']} (nach Komplexität)",
|
|
"threshold_chars": p["heavy_chars"],
|
|
},
|
|
{
|
|
"name": "coding",
|
|
"target": f"{coding_default} ↔ {p['coder']} (Eskalation)",
|
|
"escalate_chars": p["coding_escalate_chars"],
|
|
},
|
|
],
|
|
# Rückwärtskompatible Flach-Liste (alte UI/Clients).
|
|
"routes": [
|
|
{"name": "chat", "target": f"{p['fast']} ↔ {p['heavy']} (nach Komplexität)"},
|
|
{"name": "coding", "target": f"{coding_default} ↔ {p['coder']} (Eskalation)"},
|
|
{"name": "<alias>", "target": "llama-swap-Passthrough (lädt bei Bedarf)"},
|
|
],
|
|
"heavy_threshold_chars": p["heavy_chars"],
|
|
"fallbacks": [],
|
|
"context_window_fallbacks": [],
|
|
}
|
|
|
|
|
|
def gateway_reachable() -> bool:
|
|
"""Erreichbarkeit des ECHTEN Denkpfads. Mit V1_UPSTREAM ist das der eigenständige
|
|
mc2-gateway-Prozess (:9010) — vorher meldete diese Funktion nur die Engine, d. h.
|
|
ein toter Gateway blieb in Health/Diensten/Cockpit unsichtbar (Review 15.07.)."""
|
|
if V1_UPSTREAM:
|
|
try:
|
|
return httpx.get(f"{V1_UPSTREAM}/v1/models", timeout=2.0).status_code == 200
|
|
except Exception:
|
|
return False
|
|
# Eingebauter Modus: der Gateway lebt in MC selbst und proxyt llama-swap.
|
|
return engine_reachable()
|