services: asr: build: context: ../asr-server container_name: asr restart: unless-stopped ports: - '8020:8020' environment: - 'ASR_AUTH_TOKEN=${ASR_AUTH_TOKEN}' deploy: resources: reservations: devices: - driver: nvidia count: 1 capabilities: [gpu] tts: build: context: ../tts-server container_name: tts restart: unless-stopped ports: - '8010:8010' environment: - 'TTS_AUTH_TOKEN=${TTS_AUTH_TOKEN}' - 'HF_HOME=/app/data' # Fallback voice for direct /v1/audio/speech calls that use # AUDIO_TTS_MODEL=sopro-v2-turbo without a `voice` field. Set to the # basename (no .wav) of a clip dropped into services/tts-server/voices/. # - 'TTS_SOPRO_DEFAULT_VOICE=your_voice_name' volumes: # Caches the downloaded Kokoro + Sopro weights across rebuilds. - tts-data:/app/data # Sopro voice reference clips (.wav); drop files in here on the # host and reference them by name via AUDIO_TTS_VOICE / `voice`. - ../tts-server/voices:/app/voices:ro deploy: resources: reservations: devices: - driver: nvidia count: 1 capabilities: [gpu] open-webui: depends_on: - asr - tts environment: - 'AUDIO_STT_ENGINE=openai' - 'AUDIO_STT_OPENAI_API_BASE_URL=http://asr:8020/v1' - 'AUDIO_STT_OPENAI_API_KEY=${ASR_AUTH_TOKEN}' - 'AUDIO_STT_MODEL=nemotron-3.5-asr-streaming-0.6b' - 'AUDIO_TTS_ENGINE=openai' - 'AUDIO_TTS_OPENAI_API_BASE_URL=http://tts:8010/v1' - 'AUDIO_TTS_OPENAI_API_KEY=${TTS_AUTH_TOKEN}' # To switch back to Kokoro (fixed presets), set: # AUDIO_TTS_MODEL=kokoro-82m # AUDIO_TTS_VOICE=af_heart - 'AUDIO_TTS_MODEL=sopro-v2-turbo' - 'AUDIO_TTS_VOICE=jarvis-target' wyoming-openai: image: ghcr.io/roryeckel/wyoming_openai:latest container_name: wyoming-openai restart: unless-stopped depends_on: - asr - tts ports: - '10300:10300' environment: - 'STT_OPENAI_URL=http://asr:8020/v1' - 'STT_OPENAI_KEY=${ASR_AUTH_TOKEN}' - 'STT_MODELS=nemotron-3.5-asr-streaming-0.6b' - 'TTS_OPENAI_URL=http://tts:8010/v1' - 'TTS_OPENAI_KEY=${TTS_AUTH_TOKEN}' - 'TTS_MODELS=sopro-v2-turbo' - 'TTS_VOICES=jarvis-target' - 'TTS_SPEED=1.2' volumes: tts-data: {}