Neuere llama-swap-Versionen liefern /running als Liste von Objekten
({model,state,...}) statt Strings. get_running_models() normalisiert nun auf
Namens-Strings → running.includes(name) im Frontend matcht wieder (ActiveModels-
Card + RolesCard 'warm'-Badges). Logger in llamaswap.py ergänzt.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- ActiveModelsCard: zeigt geladene Modelle (aus /running via useModels) mit
Rolle, Größe (Unified-RAM) und warm-Status; globaler "Inferenz aktiv"-Puls
via useTokenStats-Delta. Prominent oben im Dashboard. Kein Backend-Change.
- maintenance.logs(): journalctl ohne sudo zuerst (User in Gruppe adm darf das
System-Journal lesen), nur bei fehlenden Rechten sudo-Fallback. Behebt
"Unbekannter Fehler" beim llama-swap-Log im MC2-UI.
tsc + Build grün; Dashboard rendert die Live-Karte (Leerzustand lokal, da Engine
offline), keine Konsolenfehler.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
llama-server lehnt --prompt-cache/--prompt-cache-all ab ("invalid argument")
und startet dann nicht — dadurch ließ sich KEIN Modell mehr wecken (u.a. das
Hermes-WebUI bekam "empty stream"). Die Flags gehören zu llama-cli, nicht zum
Server; Prompt-Caching macht llama-server automatisch pro Slot (KV-Reuse).
- config.py: Flags aus _DEFAULT_CMD_TEMPLATE entfernt (+ Warnhinweis).
- migrate_config.py: statt die Flags hinzuzufügen, entfernt es sie nun aus
bestehenden cmds (Reparatur-Migration).
Box-config.yaml wurde bereits direkt korrigiert (alle 7 Modelle); verifiziert:
Hermes lädt + streamt wieder sauber.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Neuer services/pricing.py: PRICING-Dict + compute_savings() aus dem
system-Router extrahiert; Router ist jetzt dünn (nur role_map + Aufruf).
- /system/token-stats liefert zusätzlich das pricing-Dict → Frontend zeigt
die Tarife daraus an statt sie im Text zu hartkodieren.
- SPEC_DRAFT_MODEL_PATH in config.py (MC_SPEC_DRAFT_MODEL); llamaswap.py und
migrate_config.py referenzieren die Konstante statt des doppelten Literals.
- Ersparnis-Berechnung verhaltensneutral verifiziert (35,09 $ / 32,28 €).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
W2: install akzeptiert HF-URL ODER org/repo (normalize_repo); GET /api/hf/
search + /api/hf/quants; Frontend AddModel-Panel (URL+Quant-Dropdown+freie
Suche) im Discover-Tab. W3: POST /api/models/{id}/role + /ctx; Installiert-
Tab mit Rollen-Select (fast/heavy/coder/...), ctx-Edit, Loeschen → LLM
tauschen per Klick.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
LiteLLM baut auf Python 3.14 nicht (orjson-Pin ohne cp314-Wheel). Stattdessen
eingebauter Gateway in MC2: routers/gateway_proxy.py (/v1/chat/completions,
/completions, /models) + services/router_logic.py (Komplexitaets-Routing
fast<->heavy, Streaming-Passthrough). gateway.py/routing.py/connect.py auf
builtin umgestellt (Endpunkt = MC :PORT/v1). Gleicher OpenAI-Vertrag,
spaeter gegen LiteLLM austauschbar.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
model_id_from_path steigt bei Quant-Ordner (Q4_K_M/, UD-Q4_K_M/) eine
Ebene hoch zum Repo-Ordner. Sonst hiess das Heavy-Modell Q4_K_M.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Real-Box-Befund: GPU ist card1 (nicht hardcoded card0), Connector-Dirs
uebersprungen. Zusaetzlich GTT (echter Unified-Memory-Pool) statt nur
VRAM-Carve-out. Frontend zeigt GTT bevorzugt.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>