86 lines
3.4 KiB
Markdown
86 lines
3.4 KiB
Markdown
# 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 app.py 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:
|
|
|
|
```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}`
|