Vision: Q3-Augen-Orchestrierung + Folgefragen-Sanitize
- Automatische Vision-Orchestrierung: temporärer Q3-Vision-Server (llama.cpp + mmproj) analysiert Bilder, Hauptmodell (Fast/Medium/Long) erzeugt die finale Antwort. Zentrale GPU-Lock (Ausschluss mit FLUX), Drain, Timeouts, Restore in jedem Fehlerfall. - Vision-Analyse wird als interne User-Message injiziert (nie als Assistant-Turn in Open WebUI). - Analyse-Cache (LRU, keyed by Bild-Hash): Folgefragen triggern keinen neuen Hotswap. - Sanitize: alle Bild-Parts (image_url/Base64) werden bei jedem Request durch die gecachte Analyse ersetzt, Bilddaten entfernt - das Nicht-Vision-Hauptmodell bekommt keine Bilder mehr (kein image input is not supported). - /v1/streams/lookup fail-fast während Vision-Swap; /props-Regression behoben; POST /vision/test für direkten Test. - systemd-Unit: VISION_*-Umgebungsvariablen; README dokumentiert Vision.
This commit is contained in:
@@ -44,6 +44,7 @@ Sprachausgabe bereit (XTTS-v2, CPU-only, OpenAI-kompatibel).
|
||||
| `POST /v1/audio/transcriptions` | Deutsche Spracherkennung (whisper.cpp, OpenAI-kompatibel) |
|
||||
| `GET /v1/audio/models` | Verfügbare Audio-Modelle (STT + TTS) |
|
||||
| `GET /v1/audio/voices` | Verfügbare TTS-Stimmen |
|
||||
| `POST /vision/test` | Direkter Vision-Test (Bild + Frage → Q3-Analyse) |
|
||||
| alles andere | Transparente Weiterleitung an llama.cpp |
|
||||
|
||||
### Verhalten
|
||||
@@ -174,6 +175,42 @@ VRAM-Check).
|
||||
Das Venv liegt unter `/opt/mike-ai/ai-profile-router/venv/` und wird von
|
||||
`install.sh` automatisch angelegt/aktualisiert.
|
||||
|
||||
## Vision (Q3 "Augen")
|
||||
|
||||
Bilder in `POST /v1/chat/completions` werden automatisch analysiert, ohne
|
||||
dass das Hauptmodell (Fast/Medium/Long) ein Vision-Modell braucht:
|
||||
|
||||
1. **Neues Bild** (in der letzten User-Message, noch nicht analysiert):
|
||||
Der Router entlädt das Hauptprofil, startet kurzzeitig einen
|
||||
Q3-Vision-Server (llama.cpp + mmproj, Port `VISION_PORT`), analysiert
|
||||
das Bild und stellt das Hauptprofil wieder her. Die Analyse wird im
|
||||
internen Cache (keyed by Bild-Hash) gespeichert.
|
||||
2. **Finale Antwort**: Das (wiederhergestellte) Hauptmodell erzeugt die
|
||||
sichtbare Antwort. Die Vision-Analyse wird als interne User-Message
|
||||
injiziert – sie erscheint **nie** als Assistant-Turn in Open WebUI.
|
||||
3. **Folgefragen**: Open WebUI schickt den multimodalen Verlauf erneut.
|
||||
Der Router ersetzt **alle** Bild-Parts durch die gecachte Analyse
|
||||
(klar gekennzeichnet) und entfernt Base64/URLs komplett – das
|
||||
Nicht-Vision-Hauptmodell bekommt also keine Bilddaten mehr
|
||||
(kein `image input is not supported`). Bereits analysierte Bilder
|
||||
triggern **keinen** neuen Hotswap (Cache-Treffer).
|
||||
|
||||
- **Zentrale GPU-Lock**: Vision und FLUX schließen sich gegenseitig aus
|
||||
(kein gleichzeitiges Modell-Laden).
|
||||
- **Fehlerbehandlung**: Bei jedem Fehler wird das Hauptprofil
|
||||
wiederhergestellt; `finally` dient nur als Cleanup-Sicherung.
|
||||
- **Test**: `POST /vision/test` mit `{"image_url": "...", "question": "..."}`
|
||||
liefert die Analyse direkt (ohne finale Hauptmodell-Antwort).
|
||||
|
||||
### Verhalten während eines Vision-Jobs
|
||||
|
||||
- `GET /status` → `vision.phase` (`idle`, `stopping-main`,
|
||||
`loading-vision`, `analyzing`, `unloading-vision`, `restoring-main`)
|
||||
und `vision.analysis_cache_size`.
|
||||
- `/v1/streams/lookup` antwortet fail-fast (`[]`), statt zu blockieren.
|
||||
- Timing-Log: `Vision-Timing: main_unload=… vision_load=… vision_infer=…
|
||||
vision_unload=… main_restore=… | Gesamt … s`.
|
||||
|
||||
## Sprachausgabe (XTTS-v2, CPU-only)
|
||||
|
||||
Der Router stellt lokale Sprachausgabe bereit. Die Synthese läuft
|
||||
@@ -433,6 +470,16 @@ Die Installation ist idempotent (Update = erneut ausführen).
|
||||
| `TTS_WORKER_URL` | `http://127.0.0.1:8085` | TTS-Worker (Router-Seite) |
|
||||
| `TTS_TIMEOUT` | `300` | Timeout pro Synthese (s) |
|
||||
| `TTS_CONNECT_TIMEOUT` | `5` | Connect-Timeout TTS-Worker (s) |
|
||||
| `VISION_MODEL` | `/opt/mike-ai/models/qwen3.8-27b/Qwen3.8-27B-Q3_K_M.gguf` | Q3-Vision-Modell |
|
||||
| `VISION_MMPROJ` | `/opt/mike-ai/models/qwen3.8-27b-nvfp4/mmproj-BF16.gguf` | Vision-Projektor |
|
||||
| `VISION_CTX` | `32768` | Kontext des Vision-Servers |
|
||||
| `VISION_PORT` | `8086` | Port des Vision-Servers (nur lokal) |
|
||||
| `VISION_LOAD_TIMEOUT` | `300` | Warten auf Vision-Ready (s) |
|
||||
| `VISION_INFER_TIMEOUT` | `300` | Timeout pro Vision-Inferenz (s) |
|
||||
| `VISION_UNLOAD_TIMEOUT` | `120` | Warten auf VRAM-Freiheit (s) |
|
||||
| `VISION_MAX_TOKENS` | `4096` | Max. Tokens der Vision-Analyse |
|
||||
| `VISION_CACHE_MAX` | `64` | Größe des Analyse-Caches (LRU) |
|
||||
| `VISION_LOG` | `/opt/mike-ai/ai-profile-router/vision_server.log` | Vision-Server-Log |
|
||||
|
||||
TTS-Worker (`mike-ai-xtts.service`):
|
||||
|
||||
|
||||
Reference in New Issue
Block a user