82 lines
2.9 KiB
Markdown
82 lines
2.9 KiB
Markdown
# Architektur
|
|
|
|
## Ziel
|
|
|
|
Die Plattform stellt eine private, lokal betriebene OpenAI-kompatible API
|
|
bereit. Jede Komponente hat genau eine Aufgabe und kann unabhängig ersetzt
|
|
werden. Ein Neuaufbau darf keine Dateien vom alten Host voraussetzen, die nicht
|
|
in diesem Repository oder im Modellmanifest beschrieben sind.
|
|
|
|
## Komponenten
|
|
|
|
| Komponente | Port | Ausführung | Aufgabe |
|
|
|---|---:|---|---|
|
|
| AI Profile Router | 8081 | systemd, unprivilegiert empfohlen | zentrale Client-API und Orchestrierung |
|
|
| llama.cpp | 8080 | systemd | Textmodell, Tool Calling und MCP |
|
|
| Whisper | 8084, nur localhost | systemd | Speech-to-Text |
|
|
| XTTS | 8085, nur localhost | systemd | Text-to-Speech |
|
|
| TinySearch | 8000, nur localhost | Docker | kompakte Websuche |
|
|
| SearXNG | intern | Docker | Suchmaschinen-Metasuche |
|
|
| LLama-GUI | 5240, optional | systemd | manuelle Administration |
|
|
| Glances | lokal, optional | systemd | Systemmetriken |
|
|
|
|
## Request-Fluss
|
|
|
|
1. Ein Client verwendet ausschließlich Port 8081.
|
|
2. Der Router veröffentlicht `qwen-fast`, `qwen-medium` und `qwen-long`.
|
|
3. Passt das aktive Profil nicht zum virtuellen Modell, wird llama.cpp kontrolliert
|
|
mit dem passenden Profil neu gestartet.
|
|
4. Der Router wartet auf Modellname und erwartete Kontextgröße.
|
|
5. Erst dann wird die Anfrage an Port 8080 weitergeleitet.
|
|
|
|
## Profilprinzip
|
|
|
|
Die Profile sind vollständige systemd-Overrides. Ein Profilwechsel kopiert die
|
|
gewählte Datei atomar auf `override.conf`, lädt systemd neu und startet genau
|
|
einen llama.cpp-Dienst neu. Es gibt niemals mehrere Textmodelle gleichzeitig.
|
|
|
|
## GPU-Hotswap
|
|
|
|
Vision und Bildgenerierung teilen sich die RTX mit dem Textmodell. Der Router:
|
|
|
|
1. sperrt die GPU-Orchestrierung,
|
|
2. merkt sich das aktive Textprofil,
|
|
3. stoppt llama.cpp,
|
|
4. startet vorübergehend Vision oder FLUX,
|
|
5. beendet den Hilfsprozess vollständig,
|
|
6. stellt das ursprüngliche Textprofil wieder her,
|
|
7. prüft Modell und Kontext vor der Freigabe.
|
|
|
|
## Verzeichnislayout auf dem Zielhost
|
|
|
|
```text
|
|
/opt/mike-ai/
|
|
ai-profile-router/ Routercode und eigenes Venv
|
|
llama.cpp/ exakt ein produktiver Build
|
|
models/ Modelle nach Manifest
|
|
whisper.cpp/ Speech-to-Text Runtime
|
|
xtts/ XTTS Runtime und Cache
|
|
web-search/ Docker Compose für TinySearch/SearXNG
|
|
|
|
/etc/mike-ai/
|
|
mcp-servers.json lokale, geheime produktive Konfiguration
|
|
*.env Credentials, niemals im Git
|
|
|
|
/etc/systemd/system/
|
|
mike-ai-*.service
|
|
mike-ai-llama-ui.service.d/
|
|
override.conf
|
|
profile-fast.conf.disabled
|
|
profile-medium.conf.disabled
|
|
profile-long.conf.disabled
|
|
```
|
|
|
|
## Nicht Teil der Zielarchitektur
|
|
|
|
- parallele llama.cpp-Builds
|
|
- allgemeiner Shell-MCP im Standardprofil
|
|
- doppelte Unraid-MCPs
|
|
- RX-spezifische Dienste ohne eingebaute RX
|
|
- automatisch startende Benchmark-Dienste
|
|
- Modellkopien außerhalb des dokumentierten Modellverzeichnisses
|