# ════════════════════════════════════════════════
#  ARIA Gamebox Stack — GPU F5-TTS + Whisper STT
#  Laeuft auf dem Gaming-PC (RTX 3060)
#  Verbindet sich zum RVS fuer TTS/STT-Requests
# ════════════════════════════════════════════════
#
#  Voraussetzungen:
#    - Docker Desktop mit WSL2
#    - NVIDIA Container Toolkit
#    - .env mit RVS-Verbindungsdaten
#
#  Start: docker compose up -d
# ════════════════════════════════════════════════

services:

  # ─── F5-TTS Bridge (GPU) ──────────────────────
  # Ersetzt den frueheren XTTS-Stack. Empfaengt xtts_request via RVS,
  # rendert via F5-TTS mit Voice-Cloning, streamt PCM an die App.
  # Voice-Upload: speichert WAV und laesst whisper-bridge den Referenz-
  # text transkribieren — der User muss nichts eintippen.
  f5tts-bridge:
    build: ./f5tts
    container_name: aria-f5tts-bridge
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]
    volumes:
      - ./voices:/voices                         # WAV + TXT Referenz
      - ./hf-cache:/root/.cache/huggingface      # HF-Cache als Bind-Mount.
                                                 # Direkt sichtbar im xtts/hf-cache/,
                                                 # einfach manuell zu loeschen, kein
                                                 # Docker-Desktop .vhdx Bloat.
                                                 # Wird mit whisper-bridge geteilt.
    environment:
      # Bootstrap-only — alle anderen F5-TTS-Settings (Modell, cfg_strength,
      # nfe_step, Custom-Checkpoint) kommen ueber Diagnostic via RVS-config.
      - RVS_HOST=${RVS_HOST}
      - RVS_PORT=${RVS_PORT:-443}
      - RVS_TLS=${RVS_TLS:-true}
      - RVS_TLS_FALLBACK=${RVS_TLS_FALLBACK:-true}
      - RVS_TOKEN=${RVS_TOKEN}
      - F5TTS_DEVICE=${F5TTS_DEVICE:-cuda}
      - VOICES_DIR=/voices
    restart: unless-stopped

  # ─── Whisper STT (GPU) ────────────────────────
  # Faster-Whisper auf der Gamebox statt auf der VM (CPU) —
  # deutlich schneller. Verbindet sich selbst per WebSocket an
  # den RVS und nimmt dort stt_request Nachrichten der aria-bridge
  # entgegen, antwortet mit stt_response. Zusaetzlich nutzt die
  # f5tts-bridge Whisper intern fuer die Referenz-Transkription bei
  # Voice-Uploads. Laedt das Modell beim Start vor; auf Config-
  # Broadcasts (Diagnostic → whisperModel) wird zur Laufzeit hot-
  # swapped.
  whisper-bridge:
    build: ./whisper
    container_name: aria-whisper-bridge
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: 1
              capabilities: [gpu]
    environment:
      - RVS_HOST=${RVS_HOST}
      - RVS_PORT=${RVS_PORT:-443}
      - RVS_TLS=${RVS_TLS:-true}
      - RVS_TLS_FALLBACK=${RVS_TLS_FALLBACK:-true}
      - RVS_TOKEN=${RVS_TOKEN}
      - WHISPER_MODEL=${WHISPER_MODEL:-small}
      - WHISPER_DEVICE=${WHISPER_DEVICE:-cuda}
      - WHISPER_COMPUTE_TYPE=${WHISPER_COMPUTE_TYPE:-float16}
      - WHISPER_LANGUAGE=${WHISPER_LANGUAGE:-de}
    volumes:
      - ./hf-cache:/root/.cache/huggingface      # gleicher Cache wie f5tts-bridge —
                                                 # ein Modell muss nur einmal pro
                                                 # Maschine geladen werden, kein
                                                 # Re-Download bei Container-Restart.
    restart: unless-stopped
