Files
ARIA-AGENT/xtts/voxtral
duffyduckandClaude Opus 4.8 ec78eb8efe feat(compute): Redundanz-Routing per targetInstance (Stage 3)
Mehrere Instanzen pro Dienst nutzbar: Anfragen werden gezielt an eine freie
Instanz adressiert statt an alle gebroadcastet. Mehrere f5tts → naechstes
freies; mehrere LLM → parallele Turns (Multitasking); STT-Redundanz ueber
mehrere Apps via Lease.

- Worker (alle vier): filtern am Loop-Eingang — targetInstance gesetzt und
  != eigener INSTANCE_ID → Nachricht ignorieren. Feld fehlt → wie bisher.
- bridge (TTS/LLM, emittiert die Bridge selbst): _pick_worker() waehlt eine
  online+freie Instanz (Round-Robin), stempelt targetInstance auf
  xtts_request / llm_request. Keine Instanz bekannt → Broadcast.
- bridge (STT-Lease, emittiert die App): neuer stt_lease_request-Handler →
  _pick_stt_worker() (voxtral vor whisper) → stt_lease {instanceId}.
- app (audio.ts): requestSttLease() vor dem Stream, stempelt targetInstance
  auf stt_stream_start / stt_audio_chunk / stt_stream_end (+cancel). Kurzer
  Timeout → '' (Broadcast), Aufnahme haengt nie.

Voll rueckwaertskompatibel: Routing aktiviert sich erst, wenn Worker sich per
worker_hello (Stage 2) registriert haben — sonst bleibt alles Broadcast.
Braucht APK-Rebuild fuer die STT-Lease-Seite.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-18 12:27:51 +02:00
..

Voxtral-STT-3B-Satellit (Transformers)

Streaming-STT via Voxtral-Mini-3B-2507 (Mistral, Apache 2.0) über 🤗 Transformers. Ersetzt whisper als STT — genauer, und ohne Treiber-Upgrade: läuft auf dem Trixie-Standardtreiber (550/CUDA 12.4) via torch 2.6.0+cu124 (derselbe Trick wie bei f5tts).

  • Modell ~9 GB (bf16) → GPU 1 (die 12-GB-Karte; per Compose gepinnt).
  • F5-TTS + LLM bleiben auf GPU 0 (8 GB).
  • Arbeitsweise = chunked wie whisper: live PCM → alle ~1 s transkribieren (Partials) → adaptiver Endpointer (Rausch-Boden-VAD + semantische Stagnation, aus M0.1) feuert stt_endpoint. RVS-Protokoll identisch → drop-in.

Starten (Profil voxtral)

cd xtts
docker compose stop whisper-bridge          # sonst beantworten beide stt_*
docker compose --profile voxtral up -d --build
docker logs -f aria-voxtral-bridge          # Modell laedt (mehrere GB), dann "RVS verbunden"

Zurück zu whisper: docker compose --profile voxtral down && docker compose up -d whisper-bridge.

⚠️ Auf echter Hardware verifizieren (blind gebaut)

  1. Transformers-API. Die exakte Voxtral-Transkriptions-API ist in bridge.py in einer Methode gekapselt (VoxtralRunner._transcribe_blocking), modelliert nach der HF-Modelcard (apply_transcription_requestgeneratebatch_decode). Beim ersten Lauf gegen die Modelcard prüfen und dort anpassen.
  2. HF-Gating. Ist Voxtral-Mini-3B-2507 gated, HF_TOKEN in xtts/.env setzen (wird als HUGGING_FACE_HUB_TOKEN durchgereicht).
  3. VRAM/Tempo. 3B in bf16 ~9 GB auf der 12-GB-Karte — Rest fürs KV-Cache. Ist die Partial-Transkription (alle 1 s) zu schwer, STREAM_TRANSCRIBE_INTERVAL_MS hochsetzen.
  4. torch-Konflikt. Falls transformers/mistral-common beim Build torch>2.6 erzwingen, meldet der Constraint einen Konflikt → dann brauchen wir doch das Treiber-Upgrade (bootstrap.sh --upgrade-driver via NVIDIA-CUDA-Repo) + cu126-torch.

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, stt_stream_done.

TTS

Bleibt F5-TTS (klingt gut, passt auf GPU 0). Voxtral-TTS bräuchte ~24 GB — separates Thema.

Quellen