Neuer xtts/voxtral-Container (RVS<->vLLM-Realtime-WS, adaptiver Endpointer), hinter Compose-Profil 'voxtral' (braucht >=16GB VRAM, startet nicht im Default). Bestehende Satelliten auf die zwei 3060 gepinnt: whisper->GPU0, f5tts->GPU1, llama-swap->GPU0. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Voxtral-STT-Satellit (M0.3)
Streaming-STT via Voxtral-Mini-4B-Realtime-2602 (Mistral, Apache 2.0) auf vLLM. Ersetzt whisper als STT — genauer (~5,9 % WER vs 7,4 % FLEURS) und mit echtem Realtime-Streaming. Deutsch ist in den 13 Sprachen abgedeckt.
Zwei Container:
voxtral-vllm— das Modell auf vLLM (GPU). Exponiert die Realtime-WS-API.voxtral-bridge— CPU-Glue: RVS ⇄ vLLM-Realtime-WS. Macht das Endpointing selbst (adaptiver Rausch-Boden-VAD, identisch zur whisper-Bridge / M0.1).
⚠️ Hardware-Realität — läuft NICHT auf der 3060
Das Realtime-Modell braucht laut vLLM-Rezept ≥ 16 GB VRAM (BF16, keine Quant). Die RTX 3060 hat 12 GB → passt nicht.
- Interim-gpubox (nur 3060): whisper (mit M0.1-Fix) + F5-TTS bleiben aktiv. Voxtral NICHT starten.
- Ab der 24-GB-Karte: Voxtral-Profil hochziehen, whisper wird Fallback.
Deshalb liegen beide Services hinter dem Compose-Profil voxtral und starten
NUR explizit — sonst würden whisper und voxtral dieselben stt_*-Messages
beantworten (Kollision).
Starten (erst wenn die 24-GB-Karte drin ist)
cd xtts
docker compose --profile voxtral up -d --build
docker logs -f aria-voxtral-vllm # laedt Modell (mehrere GB, dauert)
docker logs -f aria-voxtral-bridge # "RVS verbunden" + service_status ready
Whisper vorher stoppen, damit nur eine STT-Engine antwortet:
docker compose stop whisper-bridge
⚠️ Auf echter Hardware verifizieren (blind gebaut, kein Test hier)
- vLLM-Version ≥ 0.20.0 und die Serve-Form. Das Rezept nutzt
vllm serve <model> …. Falls dasvllm/vllm-openai-Image einen anderen Entrypoint hat, dascommand:indocker-compose.ymlanpassen (Rezept-Command steht dort als Kommentar). - Realtime-WS-Frames. Die exakten Event-Namen sind in
bridge.pyganz oben als Konstanten gebündelt (VLLM_SEND_APPEND,VLLM_DELTA_SUFFIXES, …), modelliert nach dem OpenAI-Realtime-Schema. Gegen das offizielle vLLM-Realtime-Client-Beispiel prüfen und dort anpassen — nur an dieser einen Stelle. Das Response-Handling ist bereits defensiv (mehrere Feldnamen). - Endpoint-URL/Port. Default
ws://voxtral-vllm:8000/v1/realtime— prüfen ob vLLM auf 8000 lauscht und/v1/realtimeregistriert (Log-ZeileRoute: /v1/realtime). - Endpointing. Voxtral liefert keine eigene VAD → unser adaptiver Endpointer
entscheidet (akustisch + semantisch am Delta-Wachstum).
endpointMskommt wie bei whisper aus der App;voiceFactorper Session tunebar.
Protokoll (RVS, identisch zu whisper — drop-in)
Rein: stt_stream_start, stt_audio_chunk (16 kHz mono s16le, base64), stt_stream_end.
Raus: stt_partial, stt_endpoint (das Event, auf das aria-bridge horcht), stt_stream_done.
TTS-Hinweis
Voxtral-TTS (Voice-Cloning) ist hier NICHT enthalten — braucht ebenfalls
16 GB VRAM und ist ein eigener Bau. Bis zur 24-GB-Karte bleibt F5-TTS aktiv.
Danach: eigener voxtral-tts-Satellit (separates Ticket).