diff --git a/backend/config.py b/backend/config.py index c18e5dc..47f4be5 100644 --- a/backend/config.py +++ b/backend/config.py @@ -26,9 +26,11 @@ DISCOVER_TTL = int(os.environ.get("MC_DISCOVER_TTL", "43200")) # 12 h # Hinweis: --prompt-cache/--prompt-cache-all sind llama-CLI-Flags, NICHT llama-server — # llama-server lehnt sie ab ("invalid argument") und startet dann nicht. Prompt-Caching # macht llama-server ohnehin automatisch pro Slot (KV-Reuse). +# --load-mode none = das frühere --no-mmap; das alte Flag ist seit llama.cpp b10936 weg +# ("invalid argument", jedes Modell stirbt beim Start — gelernt 13./17.09.2026). _DEFAULT_CMD_TEMPLATE = ( "llama-server -m {model} --host 127.0.0.1 --port ${PORT} " - "-c {ctx} -ngl 999 -fa on --no-mmap" + "-c {ctx} -ngl 999 -fa on --load-mode none" ) CMD_TEMPLATE = os.environ.get("MC_CMD_TEMPLATE", _DEFAULT_CMD_TEMPLATE) if "{model}" not in CMD_TEMPLATE: diff --git a/backend/services/maintenance.py b/backend/services/maintenance.py index 9ec3e0e..4510168 100644 --- a/backend/services/maintenance.py +++ b/backend/services/maintenance.py @@ -717,10 +717,15 @@ def _hermes_update_cmd() -> str: # grün sein. Früher schluckte das `;` vor dem Neustart jeden Update-Fehler: Job rc=0, # Badge blieb, User sah „done aber nichts passiert" (Update scheiterte real an einem # verwaisten .git/index.lock). Jetzt: RC festhalten, Dienste immer starten, RC melden. + # --no-gateway-restart (17.09.2026): `hermes update` startet das Gateway sonst selbst neu und + # endet mit Exit 1, wenn sein Fleet-Check danach keine Zeilen sieht (#93406) — unter systemd + # bei uns der Normalfall. Die &&-Kette brach ab (kein doctor, kein /hermes-ui/-Build), der + # Job war rot, autoupdate.sh rollte zurück und pinnte — bei GRÜNEM Gehirn-Check (06./17.09.). + # Der Neustart passiert unten ohnehin; Richter bleibt der Postcheck. return ("RC=0; " f"bash {backup} || true; " f"systemctl --user stop hermes-builtin-ui || true; " - f"{{ cd {path} && {py} -m hermes_cli.main update --yes " + f"{{ cd {path} && {py} -m hermes_cli.main update --yes --no-gateway-restart " f"&& {py} -m hermes_cli.main doctor " f"&& {build_cmd}; }} || RC=1; " f"systemctl --user reset-failed hermes-builtin-ui 2>/dev/null; " diff --git a/deploy/bench/brain-bench.sh b/deploy/bench/brain-bench.sh index 0af833d..35c560a 100644 --- a/deploy/bench/brain-bench.sh +++ b/deploy/bench/brain-bench.sh @@ -7,7 +7,7 @@ set -u MODEL="${BRAIN_GGUF:-/srv/models/Qwen3.6-35B-A3B-MTP-GGUF/Qwen3.6-35B-A3B-UD-Q4_K_M.gguf}" BIN="${BENCH_BIN:-/opt/llamacpp-vulkan/llama-server}" PORT="${BENCH_PORT:-5899}" -BASE="-c 65536 -ngl 999 -fa on --no-mmap --jinja --parallel 1" +BASE="-c 65536 -ngl 999 -fa on --load-mode none --jinja --parallel 1" run() { # $1=name $2=extra-flags echo "=== $1 ===" diff --git a/deploy/bench/model-bench.sh b/deploy/bench/model-bench.sh index 7fd8b3d..a4e0ef9 100644 --- a/deploy/bench/model-bench.sh +++ b/deploy/bench/model-bench.sh @@ -13,7 +13,7 @@ PORT="${BENCH_PORT:-5899}" CTX="${BENCH_CTX:-32768}" echo "=== Bench: $(basename "$MODEL") (ctx $CTX${EXTRA:+, $EXTRA}) ===" -$BIN -m "$MODEL" --host 127.0.0.1 --port "$PORT" -c "$CTX" -ngl 999 -fa on --no-mmap --jinja $EXTRA \ +$BIN -m "$MODEL" --host 127.0.0.1 --port "$PORT" -c "$CTX" -ngl 999 -fa on --load-mode none --jinja $EXTRA \ >/tmp/model-bench-server.log 2>&1 & PID=$! trap 'kill $PID 2>/dev/null; wait $PID 2>/dev/null' EXIT diff --git a/deploy/llama-swap.config.yaml b/deploy/llama-swap.config.yaml index f6d1582..00d387c 100644 --- a/deploy/llama-swap.config.yaml +++ b/deploy/llama-swap.config.yaml @@ -10,7 +10,7 @@ models: # lief aber NIE live — bewusst bei Q8_0 geblieben: Qualität vor ein paar GB, seit der # Warm-Set-Diät 07.07. ist RAM nicht mehr der Engpass.) cmd: | - llama-server -m /srv/models/Qwen3.6-35B-A3B-MTP-GGUF/Qwen3.6-35B-A3B-UD-Q4_K_M.gguf --host 127.0.0.1 --port ${PORT} -c 131072 -ngl 999 -fa on --no-mmap --jinja --parallel 2 -cram 16384 -ctk q8_0 -ctv q8_0 --spec-type draft-dflash --spec-draft-model /srv/models/Qwen3.6-35B-A3B-DFlash-GGUF/giocom-Qwen3.6-35B-A3B-DFlash-Q8_0.gguf + llama-server -m /srv/models/Qwen3.6-35B-A3B-MTP-GGUF/Qwen3.6-35B-A3B-UD-Q4_K_M.gguf --host 127.0.0.1 --port ${PORT} -c 131072 -ngl 999 -fa on --load-mode none --jinja --parallel 2 -cram 16384 -ctk q8_0 -ctv q8_0 --spec-type draft-dflash --spec-draft-model /srv/models/Qwen3.6-35B-A3B-DFlash-GGUF/giocom-Qwen3.6-35B-A3B-DFlash-Q8_0.gguf ttl: 0 aliases: - hermes @@ -28,7 +28,7 @@ models: # DFlash2-Draft (z-lab, Q4_K_M) seit 04.09.2026: gemessen 12,6 -> 31 t/s (Akzeptanz 0,78, n-max 3 default; # n-max 5 und f16-KV bringen nichts, Q4-Draft = Q8-Draft). Braucht llama.cpp >= 28.08. (PR 27342 + Vulkan-Fix 27812). cmd: | - llama-server -m /srv/models/Qwen3.8-27B-GGUF/Qwen3.8-27B-Q4_K_M.gguf --host 127.0.0.1 --port ${PORT} -c 131072 -ngl 999 -fa on --no-mmap --mmproj /srv/models/Qwen3.8-27B-GGUF/mmproj-BF16.gguf --jinja --parallel 1 -cram 16384 -ctk q8_0 -ctv q8_0 --spec-type draft-dflash --spec-draft-model /srv/models/Qwen3.8-27B-DFlash2-GGUF/Qwen3.8-27B-DFlash2-Q4_K_M.gguf + llama-server -m /srv/models/Qwen3.8-27B-GGUF/Qwen3.8-27B-Q4_K_M.gguf --host 127.0.0.1 --port ${PORT} -c 131072 -ngl 999 -fa on --load-mode none --mmproj /srv/models/Qwen3.8-27B-GGUF/mmproj-BF16.gguf --jinja --parallel 1 -cram 16384 -ctk q8_0 -ctv q8_0 --spec-type draft-dflash --spec-draft-model /srv/models/Qwen3.8-27B-DFlash2-GGUF/Qwen3.8-27B-DFlash2-Q4_K_M.gguf ttl: 5400 aliases: - coder @@ -44,7 +44,7 @@ models: # Meta Muse Glimmer 30B: Dichtes 30B-Agenten-Modell mit DFlash-Speculative-Drafting # und 1.8B Perception Multimodal Projector. Ideal als Runtime-Debugger & Fehler-Diagnostiker. cmd: | - llama-server -m /srv/models/Muse-Glimmer-30B-GGUF/Muse-Glimmer-30B-UD-Q4_K_XL.gguf --host 127.0.0.1 --port ${PORT} -c 65536 -ngl 999 -fa on --no-mmap --mmproj /srv/models/Muse-Glimmer-30B-GGUF/mmproj-kquant.gguf --jinja --spec-type draft-dflash --spec-draft-model /srv/models/Muse-Glimmer-30B-GGUF/dflash-kquant.gguf + llama-server -m /srv/models/Muse-Glimmer-30B-GGUF/Muse-Glimmer-30B-UD-Q4_K_XL.gguf --host 127.0.0.1 --port ${PORT} -c 65536 -ngl 999 -fa on --load-mode none --mmproj /srv/models/Muse-Glimmer-30B-GGUF/mmproj-kquant.gguf --jinja --spec-type draft-dflash --spec-draft-model /srv/models/Muse-Glimmer-30B-GGUF/dflash-kquant.gguf ttl: 600 aliases: - debugger @@ -55,7 +55,7 @@ models: context: 65536 Qwen3-Embedding-0.6B: cmd: | - llama-server -m /srv/models/Qwen3-Embedding-0.6B-GGUF/Qwen3-Embedding-0.6B-Q8_0.gguf --host 127.0.0.1 --port ${PORT} --embedding --pooling last -ngl 999 -fa on --no-mmap -c 8192 + llama-server -m /srv/models/Qwen3-Embedding-0.6B-GGUF/Qwen3-Embedding-0.6B-Q8_0.gguf --host 127.0.0.1 --port ${PORT} --embedding --pooling last -ngl 999 -fa on --load-mode none -c 8192 ttl: 0 aliases: - embed @@ -63,7 +63,7 @@ models: # heavy (B5-Entscheid 03.07.) + nächtlicher CHEF-GUTACHTER (04:30-Cron). 60 GB — # passt seit der Warm-Set-Diät (07.07., vision on-demand) wieder NEBEN Hirn+embed. cmd: | - llama-server -m /srv/models/gpt-oss-120b-GGUF/gpt-oss-120b-mxfp4-00001-of-00003.gguf --host 127.0.0.1 --port ${PORT} -c 32768 -ngl 999 -fa on --no-mmap --jinja --cache-reuse 256 -cram 16384 + llama-server -m /srv/models/gpt-oss-120b-GGUF/gpt-oss-120b-mxfp4-00001-of-00003.gguf --host 127.0.0.1 --port ${PORT} -c 32768 -ngl 999 -fa on --load-mode none --jinja --cache-reuse 256 -cram 16384 ttl: 600 # 04.09.2026: Rolle `heavy` an Qwen3.8-27B abgegeben (AA-Index 52 vs 24, 17 statt 60 GB, 31 t/s mit DFlash2). # Ohne Alias = Rollback-Reserve, direkt als `gpt-oss-120b` ansprechbar. @@ -74,7 +74,7 @@ models: context: 32768 Qwen3-VL-30B-A3B-Instruct: cmd: | - llama-server -m /srv/models/Qwen3-VL-30B-A3B-Instruct-GGUF/Qwen3-VL-30B-A3B-Instruct-Q4_K_M.gguf --host 127.0.0.1 --port ${PORT} -c 32768 -ngl 999 -fa on --no-mmap --mmproj /srv/models/Qwen3-VL-30B-A3B-Instruct-GGUF/mmproj-F16.gguf --jinja + llama-server -m /srv/models/Qwen3-VL-30B-A3B-Instruct-GGUF/Qwen3-VL-30B-A3B-Instruct-Q4_K_M.gguf --host 127.0.0.1 --port ${PORT} -c 32768 -ngl 999 -fa on --load-mode none --mmproj /srv/models/Qwen3-VL-30B-A3B-Instruct-GGUF/mmproj-F16.gguf --jinja ttl: 900 aliases: - vision @@ -87,7 +87,7 @@ models: # Relevanz (/v1/rerank, Mungert-GGUF — Community-Konvertierungen liefern oft Nullscores!). # Winzig (~0,7 GB) → in brains (verdrängungssicher); lädt in ~1-2 s, erste Anfrage wärmt. cmd: | - llama-server -m /srv/models/Qwen3-Reranker-0.6B-GGUF/Qwen3-Reranker-0.6B-q8_0.gguf --host 127.0.0.1 --port ${PORT} --reranking --pooling rank --embedding -ngl 999 -fa on --no-mmap -c 8192 + llama-server -m /srv/models/Qwen3-Reranker-0.6B-GGUF/Qwen3-Reranker-0.6B-q8_0.gguf --host 127.0.0.1 --port ${PORT} --reranking --pooling rank --embedding -ngl 999 -fa on --load-mode none -c 8192 ttl: 0 aliases: - reranker diff --git a/docs/wissen/FALLEN.md b/docs/wissen/FALLEN.md index a9eeb33..5b8850b 100644 --- a/docs/wissen/FALLEN.md +++ b/docs/wissen/FALLEN.md @@ -53,6 +53,12 @@ Neue Fallen: hier eintragen, mit Datum und Symptom._ - **`pkill -f` über SSH matcht die eigene Remote-Shell** → Muster als `'[g]en…'` klammern. - **Deploy restartet voice-service** → Übernacht-Jobs mit STT-QA-Gate brauchen Wiederanlauf-Logik (Backoff-Retry im hear()-Pfad). +- **llama.cpp streicht Flags ohne Vorwarnung:** `--no-mmap` gibt es seit b10936 nicht mehr + (`error: invalid argument`) → JEDES Modell stirbt 2 s nach dem Start, llama-swap meldet nur + „upstream command exited prematurely", der Stack-Check nur „rot". Ersatz: `--load-mode none` + (gleiche Leistung, gemessen 17.09.2026: Coder 32 t/s, Hirn 85 t/s). Vor einem Engine-Sprung + jede Config-Kommandozeile mit dem neuen `llama-server` parsen lassen (Port 5899, `timeout 6`, + `${PORT}` ersetzen) — Argumentfehler kommen sofort, vor dem Laden. ## Hermes @@ -84,6 +90,12 @@ Neue Fallen: hier eintragen, mit Datum und Symptom._ Erst `git add -A`, dann `git diff --cached`, „Diff leer → STOPP". - **Werkstatt-Gate:** `git -C ~/mission-control-v2 status --porcelain -uno` MUSS leer sein (curl /api/health allein ist ein Loch — alter Code läuft im RAM weiter). +- **`hermes update` meldet Exit 1 trotz Erfolg:** nach seinem eigenen Gateway-Neustart erwartet es + Zeilen vom „Fleet version check"; unter systemd kommen keine → Exit 1 (#93406). Der MC2-Job + bricht dann die `&&`-Kette ab (kein doctor, UI ohne `/hermes-ui/`-Basis), autoupdate.sh rollt + zurück und PINNT — obwohl der Gehirn-Check grün war (06. und 17.09.2026). Deshalb + `--no-gateway-restart`: Neustart und Urteil gehören dem Job. Pins stehen in + `/srv/models/mc2-pins.json` und werden NUR von Hand gelöst — gepinnt = still eingefroren. ## Lucy / Windows-PC diff --git a/docs/wissen/STACK.md b/docs/wissen/STACK.md index ac9578b..9248002 100644 --- a/docs/wissen/STACK.md +++ b/docs/wissen/STACK.md @@ -1,7 +1,8 @@ # Stack-Wahrheiten — Infrastruktur, Dienste, Modelle _Live gegen die Box verifiziert am **19.08.2026** (Dienste-Liste, llama-swap-Config, hermes ---version v0.20.4, llama.cpp b10502, /api/health). Bei Widerspruch zu älteren Docs gewinnt +--version, /api/health); Engine, Hermes und llama-swap-Config nachgemessen am **17.09.2026** +(llama.cpp b11026, Hermes v0.21.3, `--load-mode none`). Bei Widerspruch zu älteren Docs gewinnt diese Datei. Wer sie ändert: erst messen, dann schreiben._ ## Maschinen & Zugänge @@ -28,11 +29,11 @@ diese Datei. Wer sie ändert: erst messen, dann schreiben._ | Dienst | Port | Zweck | |---|---|---| -| `llama-swap` (System-Dienst) | `:8080` | Modell-Router; Engine = llama.cpp **Vulkan/RADV** (`/opt/llamacpp-vulkan`, b10502) | +| `llama-swap` (System-Dienst) | `:8080` | Modell-Router; Engine = llama.cpp **Vulkan/RADV** (`/opt/llamacpp-vulkan`, b11026 seit 17.09.) | | `mission-control-2` (User) | `:9001` | MC2 Cockpit (FastAPI + React Frontend) & Steuerpult | | `mc2-gateway` (User) | `:9010` | `/v1`-Datenpfad (model:auto Routing + native Bildweiche) | | `mc2-steward` (User) | — | Hintergrundwächter (Re-Warm, Health-Sentry, Mem0-Dedupe) | -| `hermes-gateway` (User) | `:8642` | Hermes Agent Core API (v0.20.4, Bot Mode) | +| `hermes-gateway` (User) | `:8642` | Hermes Agent Core API (v0.21.3, Bot Mode) | | `hermes-builtin-ui` (User) | `:9119` (loopback) | Eingebaute Hermes-GUI; LAN-Zugang via MC2-Proxy `/hermes-ui/` | | `mem0-service` (User) | `:8765` | Semantischer Chroma-Gedächtnis-Sidecar | | `voice-service` (User) | `:8650` | STT (faster-whisper) + TTS (Piper/Chatterbox) | @@ -49,7 +50,7 @@ Qwen3.6-35B-A3B + Qwen3-Embedding-0.6B + Qwen3-Reranker-0.6B. Sonst NICHTS dauer | Alias/Rolle | Modell | ttl | Notizen | |---|---|---|---| | `hermes` + `fast` | Qwen3.6-35B-A3B (UD-Q4_K_M, DFlash) | 0 | Agent-Hirn. `-c 131072 --parallel 2` → **65536/Slot**, KV **q8_0**, ~70–90 t/s | -| `coder` | Qwen3.8-27B (Q4_K_M, mmproj BF16) | 5400 | **131072 ctx** — `--parallel 1`, der Coder bekommt den ganzen Slot (34a9862). Multimodal, ~12,7 t/s (dicht = bandbreitengebunden) | +| `coder` | Qwen3.8-27B (Q4_K_M, mmproj BF16) | 5400 | **131072 ctx** — `--parallel 1`, der Coder bekommt den ganzen Slot (34a9862). Multimodal, **~32 t/s mit DFlash2-Draft** (17.09.), ohne Draft 12,7 (dicht = bandbreitengebunden) | | `debugger` | Muse-Glimmer-30B (Q4_K_XL, DFlash) | 600 | 65536 ctx; Runtime-Diagnostik & Fehler-Debugger (multimodal) | | `vision` | Qwen3-VL-30B-A3B-Instruct (Q4_K_M) | 900 | 32768 ctx; Multimodal-Augen (On-Demand) | | `heavy` | **= Qwen3.8-27B** (zweiter Alias des Coders, seit 04.09.) | 5400 | Planen/Review (OpenChamber) + chat-Lane des Gateways. gpt-oss-120b (60 GB, AA-Index 24 vs 52) liegt ohne Rolle als Rollback bereit, direkt als `gpt-oss-120b` ansprechbar | @@ -68,7 +69,7 @@ Config: `/etc/llama-swap/config.yaml` (sudo zum Schreiben). ## Hermes (Agent) -- **v0.20.6** (2026.8.27, git-Install `~/.hermes/hermes-agent`), Config `~/.hermes/config.yaml`, Persona `~/.hermes/SOUL.md` = **Lucy**. +- **v0.21.3** (2026.9.14; git-Install `~/.hermes/hermes-agent`, main @ dd13b475 vom 17.09.2026), Config `~/.hermes/config.yaml`, Persona `~/.hermes/SOUL.md` = **Lucy**. - **Bot-Roster: leer** (live geprüft 27.08.2026). Hermes *kann* mehrere Bots, genutzt wird es nicht — die Profile fahren `hermes`, `fast` und `vision`. Frühere Fassungen behaupteten hier einen Roster mit `Coder`/`Qwen3-Coder-Next` und `Debugger`; beides trifft nicht zu. @@ -97,10 +98,12 @@ Config: `/etc/llama-swap/config.yaml` (sudo zum Schreiben). | 10 9, 16.08. | **Gedaechtnis-Check** (einmalig: Gedächtnis-Schutt räumen, alte Einträge bereinigen) | | So 04:30 | **Auto-Update** Router→Engine→Hermes (Fangnetz: Backup→Postcheck→Auto-Rollback+Pin) | -**`mc2-autoupdate.timer` ist AN (User-Entscheid 10.07.,** ersetzt „nur bestätigt" vom 04.07.): -Fremd-Software-Updates (Router/Engine/Hermes) dürfen automatisch laufen; der User klickt sie -zusätzlich oft manuell im Wartungs-Drawer. deploy.sh enablet den Timer bewusst NICHT selbst — -der Schaltzustand wird nur von Hand geändert. Manueller Lauf: `bash deploy/autoupdate.sh`. +**Sonntags-Update = Hermes-Cron `0ec52231783b`** (`~/.hermes/scripts/sonntags-update.sh` → +`deploy/autoupdate.sh`, seit dem KISS-Umbau 21.08.); `mc2-autoupdate.timer` ist disabled — gewollt. +Fremd-Software-Updates (Router/Engine/Hermes) dürfen automatisch laufen (User-Entscheid 10.07.); der +User klickt sie zusätzlich oft manuell im Wartungs-Drawer. Rot ⇒ Rollback + Pin in +`/srv/models/mc2-pins.json`; gepinnte Ebenen werden **still übersprungen**, bis der Pin von Hand +gelöst wird (06.–17.09.2026 stand die Box so zwei Wochen still). Manueller Lauf: `bash deploy/autoupdate.sh`. OS-Sicherheitsupdates laufen separat via unattended-upgrades. ## Security (Stufe 0, live)