From 3f05263b6349581f6a460f71e3997fa3130baee0 Mon Sep 17 00:00:00 2001 From: Hitonabi Date: Thu, 24 Sep 2026 20:41:50 +0200 Subject: [PATCH] aufraeumen: tote MCP-Route, Patch-Traeger-Warnung, Parakeet-Text, .aiexclude, Abhaengigkeiten gepinnt - mcp/mcp_mc.py: Werkzeug set_route entfernt. Es rief PUT /api/routing/route, eine Route, die es nie gab; die Routing-Policy hat seit dem Box-Wart-Umbau keine Schreib-Route mehr (lesen bleibt: routing_overview). Die Datei bleibt, weil die Hermes-Config auf der Box den Server mission-control-stack noch eingetragen hat (enabled: false). - deploy/hermes-postcheck.sh: Block fuer den Patch-Traeger (deploy/hermes-patches/apply.py) entfernt; der Traeger ist seit 1e68f62 weg, die Pruefung warnte nur noch bei jedem Lauf. - voice_service/app.py: Kopftext nennt Parakeet-TDT (onnx-asr) als Standard und faster-whisper als Rueckfall, wie der Code es tut; den Verweis auf den abgebauten Mem0-Sidecar gestrichen. - .aiexclude entfernt (galt nur dem abgeloesten Antigravity). - requirements: gepinnt auf pip freeze der Box (Python 3.14) und des Containers 107 (Python 3.13): gleiche Version "==", sonst ein Bereich ueber beide. Ausnahme mcp==1.28.1: mcp 2.x hat FastMCP entfernt (from mcp.server.fastmcp scheitert), der Container hat 2.2.0, nutzt mcp aber nicht. Auf der Box aendert pip damit nichts; im Container zieht einrichten.sh mcp beim naechsten Ausrollen auf 1.28.1 zurueck. pytest==9.1.1 (nur Box). Co-Authored-By: Claude Opus 5.5 --- .aiexclude | 27 --------------------------- backend/requirements-dev.txt | 3 ++- backend/requirements.txt | 25 ++++++++++++++++--------- deploy/hermes-postcheck.sh | 25 +++---------------------- mcp/mcp_mc.py | 18 ++++-------------- voice_service/app.py | 14 ++++++++------ 6 files changed, 33 insertions(+), 79 deletions(-) delete mode 100644 .aiexclude diff --git a/.aiexclude b/.aiexclude deleted file mode 100644 index ecd39a6..0000000 --- a/.aiexclude +++ /dev/null @@ -1,27 +0,0 @@ -# .aiexclude — was der KI-Assistent (Antigravity/Gemini) NICHT lesen/indexieren soll. -# Gitignore-Syntax. Ziel: der Review fokussiert auf QUELLCODE, nicht auf Abhängigkeiten, -# Build-Output oder Binärdateien. - -# Abhängigkeiten & Build-Output (kein Review-Ziel) -backend/.venv/ -frontend/node_modules/ -frontend/dist/ -**/__pycache__/ -*.pyc -.git/ - -# Große / binäre / sensible Dateien -*.vrm -*.gguf -*.onnx -*.safetensors -*.wav -*.env -.env -credentials* -*.key -*.pem - -# Lokale Scratch-/Recon-Skripte -box_recon* -gemma_swap* diff --git a/backend/requirements-dev.txt b/backend/requirements-dev.txt index 59f5fa6..3a2a659 100644 --- a/backend/requirements-dev.txt +++ b/backend/requirements-dev.txt @@ -1,2 +1,3 @@ # Nur fürs Prüftor (deploy/pruefen.sh) — die Dienste selbst brauchen das nicht. -pytest>=8 +# Gepinnt am 24.09.2026 auf den Stand im venv der Box (der Container installiert diese Datei nicht). +pytest==9.1.1 diff --git a/backend/requirements.txt b/backend/requirements.txt index aaebbc8..cbd4edb 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -1,9 +1,16 @@ -fastapi>=0.115 -python-multipart>=0.0.9 -uvicorn[standard]>=0.30 -httpx>=0.27 -ruamel.yaml>=0.18 -psutil>=5.9 -huggingface_hub>=0.27 -mcp>=1.2.0 -tzdata>=2024.1 +# Gepinnt am 24.09.2026 auf das, was nachweislich läuft: `pip freeze` im venv der KI-Box (Python 3.14) und im +# Homelab-Container 107 (/opt/mc2/backend/.venv, Python 3.13). Gleiche Version = „==“, sonst ein Bereich, der +# beide Stände abdeckt — so installiert weder deploy.sh (Box) noch einrichten.sh (Container) etwas Neues. +# Wer eine Grenze anhebt: vorher deploy/probelauf-box.sh, und die neue Version in beiden Umgebungen prüfen. +fastapi>=0.139.0,<=0.141.1 +python-multipart==0.0.32 +uvicorn[standard]>=0.51.0,<=0.53.0 +httpx==0.28.1 +ruamel.yaml==0.19.1 +psutil==7.2.2 +huggingface_hub>=1.23.0,<=2.0.0 +# mcp braucht nur die MCP-Server in mcp/ (Hermes startet sie mit diesem venv, auf der Box). mcp 2.x hat FastMCP +# entfernt — `from mcp.server.fastmcp import FastMCP` scheitert dort. Der Container hat 2.2.0, nutzt es aber nicht; +# deshalb hier der Stand der Box (einrichten.sh zieht den Container beim nächsten Ausrollen auf 1.28.1). +mcp==1.28.1 +tzdata>=2026.3,<=2026.4 diff --git a/deploy/hermes-postcheck.sh b/deploy/hermes-postcheck.sh index c3a706e..8476a2c 100644 --- a/deploy/hermes-postcheck.sh +++ b/deploy/hermes-postcheck.sh @@ -17,28 +17,9 @@ fail=0 echo "=== Hermes Post-Update: Gehirn-Check ===" -# --- Hermes-Runtime-Patch-Traeger (20.07.2026): ein Update setzt den Quellbaum --- -# --- zurueck → unsere Fixes (needs_input-wartet, Startreife-Gate, Orphan-Guard, --- -# --- Kontext-Vererbung, Etappen-Kette) hier RE-eintragen. Exit 10 = etwas neu --- -# --- angewandt → Gateway neu laden; Exit 1 = ein Patch passt nicht mehr → ROT. --- -PATCH_APPLY="${MC2_SRC:-$HOME/mission-control-v2}/deploy/hermes-patches/apply.py" -if [ -f "$PATCH_APPLY" ]; then - python3 "$PATCH_APPLY" >/dev/null 2>&1; _prc=$? - if [ "$_prc" -eq 10 ]; then - systemctl --user try-restart hermes-gateway >/dev/null 2>&1 || true - echo "PASS · Hermes-Runtime-Patches nach Update RE-angewandt (Gateway neu geladen)" - elif [ "$_prc" -eq 0 ]; then - echo "PASS · Hermes-Runtime-Patches unveraendert vorhanden" - else - echo "FAIL · Hermes-Runtime-Patches: ein Patch passt nicht mehr zum aktualisierten Quellcode — pruefen"; fail=1 - fi -else - # Kein Fehler: Der Patch-Traeger wurde mit dem MC2-Kahlschlag (1e68f62) entfernt. Seine - # Fixes zielten auf einen Hermes-Stand, der inzwischen tausende Commits zurueckliegt — - # sie wuerden auf dem heutigen Quellcode ohnehin nicht mehr greifen. WARN statt FAIL, damit - # es sichtbar bleibt, falls jemand wieder Runtime-Patches braucht. - echo "WARN · hermes-patches/apply.py nicht vorhanden (mit 1e68f62 bewusst entfernt) — uebersprungen" -fi +# Der Block fuer den Hermes-Runtime-Patch-Traeger (deploy/hermes-patches/apply.py) ist am 24.09.2026 entfallen: +# Der Traeger wurde mit 1e68f62 bewusst entfernt (Hermes-Quellcode wird nicht gepatcht, AGENTS.md), und die +# Pruefung meldete seitdem bei jedem Lauf nur noch „WARN · nicht vorhanden“. # --- Config-Drift-Wächter (Lehre aus v0.18, 02.07.2026): Hermes fällt bei unbekannten --- # --- Config-Werten STILL auf Defaults zurück (approvals.mode 'auto' -> manual -> alle --- diff --git a/mcp/mcp_mc.py b/mcp/mcp_mc.py index 085232c..507a8a0 100644 --- a/mcp/mcp_mc.py +++ b/mcp/mcp_mc.py @@ -3,7 +3,7 @@ Mission Control 2.0 — Stack-Management MCP Server (für Hermes). Gibt dem Hermes-Agenten Werkzeuge, um den lokalen LLM-Stack SELBST zu steuern: -Modelle ansehen/entdecken/installieren/löschen, Rollen & Routing setzen, Modelle +Modelle ansehen/entdecken/installieren/löschen, Rollen setzen, Routing ansehen, Modelle laden/entladen, Backups, Dienste prüfen/neu starten, Updates prüfen/anwenden, System-Status lesen. Spricht die MC-2-REST-API (/api/*). @@ -45,12 +45,6 @@ def _post(path: str, data: dict | None = None): return r.json() -def _put(path: str, data: dict): - r = httpx.put(f"{MC_URL}{path}", headers=_h(), json=data, timeout=20) - r.raise_for_status() - return r.json() - - def _delete(path: str): r = httpx.delete(f"{MC_URL}{path}", headers=_h(), timeout=30) r.raise_for_status() @@ -180,13 +174,9 @@ def set_model_role(model_id: str, role: str = "") -> str: return f"Rolle für '{model_id}': {role or '— (entfernt)'}" -@mcp.tool() -def set_route(name: str, target_alias: str) -> str: - """Setzt das Gateway-Routing: Gateway-Modellname (fast/heavy/auto/…) → llama-swap-Alias.""" - _put("/api/routing/route", {"name": name, "target_alias": target_alias}) - return f"Routing gesetzt: {name} → {target_alias}" - - +# Kein Werkzeug zum Umstellen des Routings mehr (24.09.2026): set_route rief PUT /api/routing/route, eine Route, +# die es nie gab. Die Routing-Policy steht in mc2-routing.json und hat seit dem Box-Wart-Umbau keine Schreib-Route; +# lesen geht weiter über routing_overview. @mcp.tool() def routing_overview() -> str: """Zeigt das aktuelle Gateway-Routing + Fallbacks.""" diff --git a/voice_service/app.py b/voice_service/app.py index d306747..0d1ffc8 100644 --- a/voice_service/app.py +++ b/voice_service/app.py @@ -2,14 +2,16 @@ """ Voice-Sidecar für Mission Control 2.0 — lokales STT + gestuftes TTS für „Mit Hermes reden". -WARUM ein eigener Dienst? Die ML-Stacks (faster-whisper, piper, chatterbox + torch) brauchen -ihr eigenes Python-3.12-venv — das MC2-Backend läuft auf Python 3.14 und kann sie nicht -importieren. Genau wie der Mem0-Sidecar (mem0_service/) kapselt dieser schlanke FastAPI-Dienst -die schwere Voice-Logik und exponiert sie auf localhost. MC2 (backend/routers/voice.py) proxyt -ihn nach außen; der Browser-Voice-Client (Frontend „Sprechen"-Tab) redet nie direkt mit ihm. +WARUM ein eigener Dienst? Die ML-Stacks (onnx-asr/Parakeet, faster-whisper, piper, chatterbox + torch) +brauchen ihr eigenes Python-3.12-venv — das MC2-Backend läuft auf Python 3.14 und kann sie nicht +importieren. Dieser schlanke FastAPI-Dienst kapselt die schwere Voice-Logik und exponiert sie auf +localhost. MC2 (backend/routers/voice.py) proxyt ihn nach außen; der Browser-Voice-Client (Frontend +„Sprechen"-Tab) redet nie direkt mit ihm. Pipeline-Rolle: -- STT : faster-whisper (Default `medium`, int8, CPU, Sprache=de) — Mikro-Audio → Text. +- STT : Parakeet-TDT 0.6B v3 über onnx-asr (Standard, int8, CPU) — Mikro-Audio → Text. + faster-whisper (`medium`, int8, CPU, Sprache=de) nur als Rückfall, wenn Parakeet nicht lädt + oder eine Anfrage `engine=whisper` verlangt. - TTS : GESTUFT, Engine im Request wählbar (kein Lock-in): * `piper` — schneller Standard, CPU, quasi-sofort, robustes Deutsch (thorsten). * `chatterbox` — Premium/Wunschstimme (MIT), Voice-Cloning, dt. über Multilingual.