# 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 ```bash 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://:9000` ### Als Dienst (Autostart) Pfade in `mission-control.service` anpassen, dann: ```bash 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}`