#!/usr/bin/env python3 """ Local macOS Audio Worker — runs outside Docker so macOS 'say' works. """ import os import subprocess from dotenv import load_dotenv BASE_DIR = os.path.dirname(os.path.abspath(__file__)) ENV_FILE = os.path.join(BASE_DIR, ".env") # Load .env if present if os.path.exists(ENV_FILE): load_dotenv(ENV_FILE) print(f"[AUDIO-LOCAL] Loaded .env from {ENV_FILE}") else: print("[AUDIO-LOCAL] WARNING: no .env found") def main(): print("=====================================================") print(" LOCAL macOS AUDIO WORKER") print(" Queue : audio") print(" Voice :", os.getenv("AUDIO_VOICE")) print(" Rate :", os.getenv("AUDIO_RATE")) print("=====================================================") # ---------------------------------------------------------- # OVERRIDES: Local Redis instead of Docker internal hostname # ---------------------------------------------------------- broker = os.getenv("REDIS_BROKER_LOCAL", "redis://127.0.0.1:6379/0") backend = os.getenv("REDIS_BACKEND_LOCAL", "redis://127.0.0.1:6379/1") os.environ["CELERY_BROKER_URL"] = broker os.environ["CELERY_RESULT_BACKEND"] = backend print(f"[AUDIO-LOCAL] Using Redis broker : {broker}") print(f"[AUDIO-LOCAL] Using Redis backend: {backend}") # ---------------------------------------------------------- # Celery command # macOS requires prefork pool, and we use a single-line list. # ---------------------------------------------------------- cmd = [ "celery", "-A", "celery_app", "worker", "-Q", "audio", "-n", "audio_local@%h", "-l", "INFO", "--pool=prefork", "--concurrency=2", ] print("[AUDIO-LOCAL] Launching Celery via subprocess…") subprocess.run(cmd, check=False) if __name__ == "__main__": main()