Files
AI-Profile-Router/docs/CURRENT_REFERENCE.md
T

342 lines
17 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Aktueller produktiver Referenzstand
Stand: 24. August 2026. Dieses Dokument beschreibt die auf Athena installierte
und geprüfte Docker-Referenz. Die verbindlichen Profilparameter stehen in
`STANDARD_PROFILE_MATRIX.md`.
## Hardware und Betriebssystem
| Bereich | Referenz |
|---|---|
| Betriebssystem | Debian 13 `trixie` |
| Kernel | 6.12.101+deb13-amd64 |
| CPU | AMD Ryzen 5 5600, 6 Kerne/12 Threads |
| RAM | 48 GiB DDR4-2666 |
| GPUs | NVIDIA GeForce RTX 5080, 16 GiB + RTX 3060, 12 GiB VRAM |
| NVIDIA-Treiber | 610.57.04 |
| System-SSD | Samsung 980 PRO 1 TB |
| Daten-SSD | WD Blue SN580 1 TB, unter `/data` |
Die früher verwendete Radeon RX 470 ist ausgebaut und gehört nicht zur
Zielplattform.
## Produktiver Text-Stack
| Eigenschaft | Aktueller Wert |
|---|---|
| Runtime | llama.cpp |
| Repository | `https://github.com/ggml-org/llama.cpp.git` |
| Commit | `3f545beccee69d9975f466ec7e45fd9aacd8ba90` |
| Compiler | GCC 14.2 |
| Hauptdienst | jeweils ein Container `mike-ai-llama-<profil>` |
| llama.cpp-Port | 8080, ausschließlich im internen Docker-Netz |
| Client-Port | 8081 über den Router |
| MCP-Konfiguration | getrennte Container unter `/opt/mike-ai/stack/platform/mcp` |
### Aktives Standardprofil
- Qwen3.8-27B IQ4_XS Pure
- Dateigröße: 14.534.384.640 Bytes
- SHA256: `ea5a3c45d407f9b9e5d2c0d647f0ea600f486f6b86b92b56d0823ba073dae675`
- Quelle: `jpetrina/Qwen3.8-27B-IQ4_XS-pure-GGUF`
- Kontext 160.000
- RTX 5080 + RTX 3060 im Verhältnis 90:10
- Flash Attention
- KV-Cache Q4_0 für K und V
- MTP Draft, maximal drei Tokens
- MTP-Akzeptanzschwelle 0,05; im Referenzlauf 77,26 statt 73,88 Tok/s
- sechs Threads und sechs Batch-Threads
- Batch 64, Micro-Batch 32
- ein paralleler Slot
- Jinja und automatisches Reasoning
- erhaltener Reasoning-Zustand über Werkzeugrunden (`--reasoning-preserve`)
- Temperatur 0,2, Top-p 0,8, Top-k 20
### Profile
| Profil | Virtuelles Modell | Kontext | Besonderheit |
|---|---|---:|---|
| Fast | `qwen-fast` | 76.800 | IQ4-MIX, MTP2, Text auf RTX 5080, mmproj auf RTX 3060 |
| Medium **(Standard)** | `qwen-medium` | 160.000 | IQ4_XS Pure, MTP3, beide GPUs 90:10, mmproj auf RTX 3060 |
| Large | `qwen-large` | 192.000 | IQ4_XS Pure, MTP3, beide GPUs 86:14, mmproj auf RTX 3060 |
| Ultra | `qwen-ultra` | 262.144 | IQ4_XS Pure, MTP2, beide GPUs 80:20, text-only; 68,2 Tok/s und 220K-Fülltest bestanden |
| Uncensored | `qwen-uncensored` | 80.000 | Abliterated Q4_K_M, MTP2, beide GPUs 90:10, eigener mmproj auf RTX 3060; etwa 52,2 Tok/s |
## Router
- Container: `mike-ai-router`
- Port: 8081
- Upstream: `llama-upstream:8080` im internen Inferenznetz
- Commit des Plattform-Repositories: siehe jeweils aktuelles `main`
- Umschaltung: `mike-ai-profile-controller` mit fester Container-Allowlist
- Timeout für Profilwechsel und Requests: 600 Sekunden
Der Router übernimmt:
- OpenAI-kompatibles Chat-Proxying und Streaming
- virtuelle Modelle und automatische Profilumschaltung
- Tool Calls
- direkte integrierte Vision in Fast, Medium, Large und Uncensored
- FLUX-Hotswap zur Bildgenerierung
- Whisper Speech-to-Text
- XTTS-v2 über das TTS-Gateway als primäre Text-to-Speech-Ausgabe
- Piper als automatischer CPU-Fallback
- Zustands- und Modellendpunkte
## Hermes Agent
- Container: `mike-ai-hermes`
- Standardsprache: Deutsch (`display.language`, deutsches `SOUL.md`)
- Spracheingabe: lokales Faster-Whisper, Modell `base`, Sprachhinweis `de`
- Sprachausgabe: Athena-TTS über die OpenAI-kompatible Router-API; XTTS v2
mit **Annmarie Nele**, Piper als automatischer Fallback
- Bei einer entfernten Hermes-Desktop-App läuft Audio bewusst über das
Hermes-Backend (`voice.client_direct: false`), weil Router und TTS nur im
internen Docker-Netz erreichbar sind.
- Version: 0.20.5, offizielles Image per OCI-Digest gepinnt
- Standardmodell: `qwen-medium`, 160.000 Kontext, über den Profile Router
- Dashboard: WireGuard-Port 9119 mit Basic-Auth
- Agent-API: WireGuard-Port 8642 mit eigenem Bearer-Key
- persistenter Zustand: `/data/hermes`
- lokales Terminal: ausschließlich `/data/hermes/workspace` im Container
- MCPs: Athena-Plattform, Athena-Operator, allgemeines Web, GitHub, Home
Assistant, ARR, Navidrome und ein gemeinsamer MUA-Unraid-Zugang
- kein Docker-Socket, kein Host-Root-Mount und keine Veröffentlichung auf der
Universitätsadresse
- Start verweigert, wenn die verwaltete Konfiguration nicht lesbar ist oder
nicht ausdrücklich `custom` und den lokalen Router als Provider nennt
## Vision
| Bereich | Referenz |
|---|---|
| Text-/Visionmodell | jeweils aktives Qwen3.8-27B-Profil |
| Projektor | BF16-mmproj |
| Speicherort des Projektors | RTX 3060 (`MTMD_BACKEND_DEVICE=CUDA1`) |
| Kontext | entspricht Fast/Medium/Large; Ultra ist bewusst text-only |
Vision ist Bestandteil von Fast, Medium, Large und Uncensored. Der Router prüft Bildgröße und URL,
leitet das Bild dann direkt weiter und führt keinen Modellwechsel mehr aus.
## Bildgenerierung
- Modell: FLUX.2 Klein 4B Distilled, Apache-2.0
- Runtime: eigener PyTorch-2.11/CUDA-12.8-/Diffusers-0.40-Container
- fest auf vier Schritte und Guidance 1,0 destilliert
- Worker läuft ausschließlich auf der RTX 5080 und ist im Normalbetrieb gestoppt
- der Controller beendet Qwen vor dem Job; Bildprompts bleiben im internen Netz
- Worker wird nach jedem Job vollständig beendet
- Qwen wird anschließend mit exakt dem vorherigen Profil wiederhergestellt
- gemessene reine Bildgenerierung bei 1024 × 1024: 11,67 bis 14,59 Sekunden
- gemessener kompletter Hot-Swap einschließlich Qwen-Wiederherstellung: etwa 31 Sekunden
- OpenWebUI ist global auf den OpenAI-kompatiblen Router-Endpunkt, vier Schritte
und 1024 × 1024 Pixel vorkonfiguriert
- OpenWebUI zeigt aus Kompatibilitätsgründen den Alias `gpt-image-1`; tatsächlich
rechnet ausschließlich das lokale FLUX.2-Klein-Modell, es fließen keine Daten
an OpenAI
- Bilder werden zwischen Router und OpenWebUI als eingebettete Base64-Daten
übertragen. Dadurch bleibt OpenWebUIs SSRF-Schutz für private URLs aktiv,
ohne die lokale Bildrückgabe zu blockieren
## Sprache
### Whisper
- Modell: large-v3-turbo
- lokale Standardsprache: Deutsch
- CPU-Ausführung
- acht Threads im produktiven Worker
- Port 8084, nur localhost
- ffmpeg für Eingabeumwandlung
### XTTS
Der aktuelle Docker-Stack nutzt Coqui XTTS-v2 als primäre Sprachausgabe.
Der isolierte Eignungs- und Ausfalltest ist in
[`XTTS_EVALUATION_2026-08-23.md`](XTTS_EVALUATION_2026-08-23.md) dokumentiert.
- Modell: Coqui XTTS-v2, offizielles CUDA-12.1-Image per Digest gepinnt
- GPU: ausschließlich RTX 3060 über ihre stabile GPU-UUID
- Stimme: `Annmarie Nele`
- Deutsch und Englisch; bekannte englische IT-Begriffe werden segmentiert
- kein veröffentlichter Port, nur Docker-intern erreichbar
- serielles TTS-Gateway vor XTTS, weil der Server nur einen Auftrag zugleich
zuverlässig verarbeitet
- Piper mit `de_DE-thorsten-high` bleibt als automatischer CPU-Fallback aktiv
- OpenWebUI behält aus Kompatibilitätsgründen `model=piper` und `voice=alloy`;
der Router leitet diese Werte an das Gateway weiter
## Websuche
- Docker Compose
- SearXNG, per Digest gepinnt
- TinySearch 0.6.1, per Digest gepinnt
- TinySearch ausschließlich im internen Docker-Netz, ohne Host-Port
- lokale ONNX-Embeddings
- OpenWebUI-native allgemeine Suche und Seitenabruf in allen normalen Profilen
- portabler TinySearch-Upstream-MCP mit vier breiten Werkzeugen auf VPN-Port 8203
- die frühere sechsfach spezialisierte Web-Fassade ist nur noch Rollback-Profil
- aktuelle Suchen erhalten keinen pauschalen Wikipedia-Fallback
- strukturierter API-Pfad für Hugging Face; GitHub-Quellcode läuft über den
getrennten offiziellen GitHub-MCP
## MCP-Referenz
Aktuell existieren funktionale Adapter für:
- Athena-Plattformwissen, Laufzeitsnapshot und kontrollierte Docs-Pflege
- Athena Operator: Entwicklung, Docker/MCP/Modelle, Tests, Git und Recovery
- Websuche
- Home Assistant
- Sonarr/Radarr
- GitHub Repository read-only (offizieller Server, drei begrenzte Werkzeuge)
- Navidrome-Bibliothek und Last.fm-Empfehlungen
- Unraid read-only
- eigener Unraid-Administrationsserver
OpenWebUI bindet nicht pauschal sämtliche großen Fachkataloge ein. Der lokale
`MikeAI Auto Tool Selector` hält das allgemeine Web immer verfügbar und ergänzt
anhand der jüngsten Nutzernachricht alle passenden Fach-MCP-Verbindungen. Eine echte
Mehrdomänen-Aufgabe erhält automatisch ein begrenztes mittleres Reasoning-
Budget; einfache Aufgaben bleiben schnell. Allgemeine
Webrecherche erfolgt über Open WebUIs native `search_web`/`fetch_url`-Werkzeuge;
für andere Clients liegt TinySearch direkt auf Port 8203. Dadurch bleiben
Fachkataloge klein und kurze Profile verlieren keinen unnötigen Kontext. Reine
Unraid-Abfragen erhalten nur MUA read-only. Verlangt die aktuelle Nachricht
ausdrücklich eine Unraid-Änderung, stellt die Automatik zusätzlich den
Verwaltungszugang für die feste Kette Prüfen → Ändern → Verifizieren bereit.
Die Bereitstellung ersetzt niemals die ausdrückliche Änderungsanweisung.
Unraid ist ausschließlich über das MUA-Plugin angebunden. Die Verbindungen
`mua-readonly-local` und `mua` nutzen denselben MUA-Endpunkt. Mehrere bestätigte
Docker-Updates laufen ab MUA r019 gebündelt und idempotent; echte Image-IDs
verhindern Neuerstellungen aufgrund eines veralteten Statuscaches.
Ab MUA r021 inventarisiert `unraid_files_inventory` Datei- und Ordnernamen
begrenzt, ohne Dateiinhalte zu lesen, und beendet eine gefilterte Erkennung an
einem passenden Sammlungsordner. Auto Tool Selector 3.5 hält ausdrücklich
lesende Bibliotheksprüfungen bei MUA read-only und verwechselt Hörspielfolgen
nicht mit Sonarr-Episoden. Verlangt derselbe Auftrag aktuelle Onlinebelege,
aktiviert er zusätzlich die native Websuche. Der Ablauf steht in
`docs/UNRAID_MEDIA_AUDIT_WORKFLOW.md`. Der frühere GraphQL-basierte Unraid-MCP wurde
entfernt und gehört weder zum Start noch zum Recovery.
Ab MUA r022 stehen für lange, explizit autorisierte Arbeiten zusätzlich
`unraid_system_job_start`, `unraid_system_job_status` und
`unraid_system_job_cleanup` bereit. Der Start kehrt sofort mit einer Job-ID
zurück; Statusabfragen liefern nur kompakte, redigierte Ausgaben. Damit blockiert
ein Download, Transcode oder vergleichbarer Auftrag weder Open WebUI noch Hermes
oder Pi bis zum Prozessende. Die drei Werkzeuge erben dieselbe ausdrücklich
erteilte Berechtigung wie die uneingeschränkte Shell.
Ab MUA r023 begrenzt `unraid_system_shell_readonly` seine Ausgabe bereits auf
dem Unraid-Server standardmäßig auf 12.000 Zeichen; pro Aufruf sind explizit
1.000 bis 30.000 Zeichen möglich. Auto Tool Selector 4.7 ergänzt für offene
Diagnosen eine allgemeine Beweiskette: kompakten Status oder Benachrichtigung
prüfen, das neueste exakte Artefakt lokalisieren, nur entscheidende Zeilen
lesen, die führende Ursache mit einem unabhängigen Fakt bestätigen und dann
antworten. Vollständige Konfigurationen, rekursive Verzeichnisbäume und breite
historische Logs sind kein zulässiger Standardweg.
Auto Tool Selector 4.7 kennzeichnet allgemeine lange Operator-Aufgaben
produktunabhängig. Der OpenWebUI-Agentenloop stellt dafür bis zu 64
Werkzeugausführungen insgesamt und 24 je Werkzeug bereit; normale Aufgaben
bleiben bei 40/12. Zusätzlich verlangt der Systemhinweis das generische
Start-Status-Ergebnis-Muster und reserviert den Abschluss für Verifikation,
Zielablage und Aufräumen.
Der GitHub-Container läuft produktiv. Token-Datei, interner
Streamable-HTTP-Handshake, fehlende Host-Portfreigabe und exakt drei
read-only Werkzeuge wurden am 24. August 2026 verifiziert.
Die Transportbrücke verwendet den OpenWebUI-kompatiblen `mcp-proxy` 0.12.0 im
stateless Betrieb. Supergateway wurde nach reproduzierbaren HTTP-400-Fehlern
bei `notifications/initialized` aus diesem Pfad entfernt.
Die agentische OpenWebUI-Schleife führt bei normalen Aufgaben höchstens 40
einzelne Werkzeuge und höchstens zwölf Aufrufe desselben Werkzeugnamens aus.
Allgemeine lange Operator-Aufgaben erhalten 64 beziehungsweise 24. Exakt
dieselbe Signatur bleibt stets auf zwei Wiederholungen begrenzt. Nach Ende des
Budgets stehen zusätzliche interne Runden ausschließlich für eine sichtbare
werkzeugfreie Schlussantwort bereit. Das produktive OpenWebUI-Derivat trägt
den Tag `mike-ai/openwebui:main-01f4282-agent-loop-v9`.
Das in V9 enthaltene Verhalten aus V8 begrenzt zusätzlich die
Werkzeugantworten in OpenWebUIs internen Fortsetzungsrunden auf 12.000 Zeichen
je Ergebnis und 64.000 Zeichen pro Antwortlauf. Damit greift die Begrenzung
auch bei Ergebnissen, die erst nach dem ersten Request entstehen.
Auto Tool Selector 4.3 hält native Websuche immer verfügbar, ergänzt bei
expliziter Webrecherche den TinySearch-Fallback und erkennt unter anderem
`Home Assistant`, `Home-Assistant` sowie direkte `ha_*`-Werkzeugbezüge. Für
Home Assistant verlangt er gezielte Zustandsabfragen und verbietet die
Ableitung einer `entity_id` aus einer YAML-`id`.
Auto Tool Selector 4.3 ergänzt ein site-unabhängiges Marketplace-Protokoll.
Es begrenzt normale Kaufsuchen auf wenige fokussierte Recherche- und
Verifikationsschritte, nutzt Ergebnis-/Kategorieseiten bei blockierten
Detailseiten und verlangt einen aktuellen Beleg, bevor ein Angebot als aktiv
bezeichnet wird. Dafür existiert kein eBay-, MakerWorld- oder Shop-spezifischer
MCP. OpenWebUI V8 setzt für erkannte Marketplace-Aufträge über beide breiten
Webengines zusammen höchstens drei Such- und fünf Abrufoperationen durch;
danach folgt die sichtbare Synthese aus den vorhandenen Belegen.
Der produktive eBay-Praxistest am 24. August 2026 endete nach exakt drei
TinySearch-Suchen und drei konkreten Seitenabrufen. Qwen lieferte danach eine
sichtbare Antwort, trennte verifizierte, plausible und nicht verifizierbare
Angebote und sortierte Notebook, Zubehör sowie ein Ersatzteilgerät aus. Das
belegt sowohl die technische Grenze als auch eine brauchbare Synthese; ein
eBay-spezifischer MCP war nicht erforderlich.
Auto Tool Selector 4.6 erkennt zusätzlich allgemeine operative Arbeit über
Fähigkeitsklassen: Eine ausdrückliche Ausführungs- oder Änderungsabsicht in
Verbindung mit Host, Dateisystem, Kommando, Dienst, Pfad oder typischen
Kommandozeilenwerkzeugen stellt den Athena Operator bereit. Dadurch benötigen
neue Programme wie Download- oder Medienwerkzeuge keine eigene Selector-Regel.
Bei Unraid-Arbeit werden MUA für kompakte Bestandsaufnahme und der Operator für
die ausdrücklich verlangte allgemeine Schreibarbeit gemeinsam angeboten.
Lange Operator-Aufgaben werden dabei produktunabhängig markiert und folgen dem
Start-Status-Ergebnis-Muster, damit Recherche und Vorbereitung nicht das
Budget für Ausführung, Verifikation und Aufräumen verbrauchen.
Für andere Clients gilt `docs/CLIENT_TOOL_STANDARD.md`. Hermes lädt die drei
Kern-MCPs Web, Operator und Plattformwissen direkt per Streamable HTTP; die
Vorlage liegt unter `config/hermes-mcp-core.yaml.example`. Damit hängt die
Fähigkeit nicht vom OpenWebUI-Filter ab.
Der Platform Context MCP läuft ohne Docker-Socket, Shell, Egress oder Secrets.
Ein root-eigener Minutentimer erzeugt nur einen begrenzten Laufzeitsnapshot.
Der Schreibpfad ist auf `docs/*.md`, Vorschau, ausdrückliche Freigabe, atomare
Sicherung und sichtbare Git-/Recovery-Nacharbeit begrenzt.
Der Athena Operator MCP ersetzt die frühere begrenzte Terminal-Fassade. Er ist
die zusammenhängende Bedienebene, mit der Qwen die KI-Plattform selbst
weiterentwickeln und betreiben kann. Quellenlesen, Dateiänderungen, Tests,
Compose-Deployments, Containeraktionen, Modell-Downloads, Benchmarks,
Git-Publishing und Recovery sind strukturiert verfügbar. Zusätzlich bietet er
ein breites, ausgabebegrenztes Root-Terminal für Docker, Dateien, Git, HTTP,
Modelle und SSH zu konfigurierten Zielsystemen. Strombefehle und Änderungen an
Athenas SSH, Netzwerk, WireGuard, Firewall, Boot, Kernel, Mounts und Partitionen
sind serverseitig blockiert.
Ein separater allgemeiner Shell-MCP wird nicht benötigt; die breite Fähigkeit
ist portabel im Athena Operator auf VPN-Port 8202 enthalten.
## Bekannte Probleme des alten Hosts
- Systempartition vollständig gefüllt
- Datenpartition nahezu vollständig gefüllt
- etwa 1,27 TB Modelle, darunter Duplikate
- mehrere alte llama.cpp-Builds
- RX-Dienste trotz ausgebauter Karte
- aktivierte Benchmark-/Race-Dienste
- alte systemd-Overrides und Sicherungskopien
- unvollständiger großer Modelldownload
- zu viele MCP-Werkzeuge gleichzeitig im Kontext
Diese Punkte erklären den Neuaufbau, sind aber keine Bestandteile der neuen
Plattform.
Zusätzliche bekannte Sicherheitsabweichung: llama.cpp auf Port 8080 und XTTS
auf Port 8085 sind im alten Zustand breiter gebunden als im Zielsystem. Beim
Neuaufbau werden beide auf localhost begrenzt; Clients verwenden ausschließlich
den Router auf Port 8081.