This repository has been archived on 2026-07-22. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Hitonabi 82d15d82db fix(phase-a): Kontext-Cap, Download-State, Recipe-Edit, OS-Badge, Swap-Flash
A1: 32768-Kontext-Cap entfernt (install-recipe, install-model, register) →
    max_ctx_for() liefert nun bis zu 128k auf Strix Halo; behebt "context
    size exceeded" bei externen Tools.
A2: Download-State jetzt im Status-Endpoint sichtbar: Modelle zeigen
    "↓ Download X%" statt "bereit" während Job läuft (Backend + Frontend).
A3: PUT /api/cookbook/user-recipe/{id} + Edit-Button (✎) für eigene Setups.
    Download-Modal setzt Kontext-Input automatisch auf optimal.
A4: /api/updates liefert apt_cache_age_h; Badge zeigt Tooltip + ⚠ wenn >24h.
A5: Swap-Flash: Topbar-Text pulst kurz teal wenn Modell den State wechselt.
A6: LLM-Engine-Update fragt jetzt per confirmModal nach (Konsistenz).
A7: Event-Delegation statt per-render addEventListener in models.js.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-22 21:33:03 +02:00
2026-06-21 14:48:25 +02:00
2026-06-21 14:48:25 +02:00

Mission Control

Eine schlanke Steuerzentrale für deinen lokalen llama-swap-Stack auf dem Bosgame M5. Ein FastAPI-Backend + ein HTML-Dashboard. Kein Build-Schritt, keine Datenbank.

Was sie kann

  • Modelle & Ports sehen — liest llama-swap (/running, /v1/models) + deine config.yaml
  • Modell holen — lädt eine GGUF-Datei von HuggingFace (hf download) als Hintergrund-Job mit Live-Log
  • Einpflegen — schreibt das Modell automatisch in deine config.yaml; llama-swap lädt mit -watch-config neu
  • Wartung — Container/Toolbox aktualisieren, Modelle aus dem Speicher werfen
  • Schnelltest — Chat-Box, um ein Modell zu wecken und zu prüfen

Was sie bewusst nicht macht: Chat-Logs, Inferenz-Monitoring im Detail — dafür hat llama-swap schon /ui und /log. Mission Control ergänzt nur, was fehlt.

Voraussetzungen

  • Python 3.11+
  • hf CLI installiert (pip install -U "huggingface_hub[cli]")
  • ein laufendes llama-swap — gestartet mit -watch-config, sonst greift das Auto-Einpflegen nicht

Installation

sudo mkdir -p /opt/mission-control && sudo chown $USER /opt/mission-control
cp -r *.py routers static /opt/mission-control/
cd /opt/mission-control
python3 -m venv .venv && . .venv/bin/activate
pip install -r requirements.txt
uvicorn app:app --host 0.0.0.0 --port 9000

Dann im Browser im LAN: http://<bosgame-ip>:9000

Als Dienst (Autostart)

Pfade in mission-control.service anpassen, dann:

sudo cp mission-control.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now mission-control

Konfiguration (Umgebungsvariablen)

Variable Default Zweck
MC_LLAMA_SWAP_URL http://127.0.0.1:8080 wo llama-swap lauscht
MC_CONFIG_PATH /etc/llama-swap/config.yaml die llama-swap-Config
MC_MODELS_DIR /srv/models wohin GGUFs geladen werden
MC_CMD_TEMPLATE siehe unten Startbefehl pro Modell
MC_UPDATE_CMD (leer) Befehl für „Container aktualisieren"
MC_DEFAULT_TTL 300 Sekunden bis Auto-Unload
MC_TOKEN (leer) optionales Zugriffs-Token

Wichtig: MC_CMD_TEMPLATE an deinen Start anpassen

Das ist der Befehl, der pro Modell in die config.yaml geschrieben wird. {model} und {ctx} werden von Mission Control ersetzt, ${PORT} bleibt stehen (das ersetzt llama-swap selbst).

Direkt auf dem Host (llama-server im PATH):

llama-server -m {model} --host 127.0.0.1 --port ${PORT} -c {ctx} -ngl 999 -fa 1 --no-mmap

Über den kyuz0-Container (distrobox) — Beispiel, an deinen Toolbox-Namen anpassen:

distrobox enter llama-vulkan-radv -- llama-server -m {model} --host 127.0.0.1 --port ${PORT} -c {ctx} -ngl 999 -fa 1 --no-mmap

-fa 1 (Flash Attention) und --no-mmap sind auf Strix Halo Pflicht, sonst drohen Crashes/Slowdowns.

⚠️ Sicherheit

Mission Control führt Shell-Befehle aus (Downloads, Updates) und schreibt deine Config. Niemals offen ins Internet hängen. Betrieb nur im vertrauenswürdigen LAN. Wenn du trotzdem etwas Schutz willst, setz MC_TOKEN und trag es oben rechts im Dashboard ein. Für echten Remote-Zugriff: per SSH-Tunnel oder Tailscale, nicht per Portfreigabe.

API (falls du es skripten willst)

GET /api/status · POST /api/download · POST /api/register · POST /api/unload[?model=] · POST /api/update · POST /api/chat · GET /api/jobs · GET /api/jobs/{id}

S
Description
Mission Control Panel für das AI Arbeitstier (192.168.178.151)
Readme 22 MiB
Languages
Python 41.4%
Svelte 35.8%
TypeScript 12.6%
CSS 6.1%
JavaScript 2.7%
Other 1.4%