With the default USE_LOCAL_VOICE=auto, importing server.py constructs VoiceEngine(prefer_local=True) (server.py:113-120), whose _init_local() → ensure_models() → install_local_voice() runs pip install mlx-whisper mlx-audio (local_voice.py:40-52) synchronously at startup if the packages aren't present.
Consequences:
- First boot can block for up to the 300s pip timeout before the server answers.
- Under the
KeepAlive LaunchAgent, a slow/failing install can throttle-restart in a loop.
- Surprising network/disk activity on a config that's labelled "auto … fall back to cloud".
Fix: never install from within the server process. Detect availability and silently fall back to cloud when MLX isn't importable; do model/dependency installation only via the installer or an explicit python local_voice.py --install step.
With the default
USE_LOCAL_VOICE=auto, importingserver.pyconstructsVoiceEngine(prefer_local=True)(server.py:113-120), whose_init_local()→ensure_models()→install_local_voice()runspip install mlx-whisper mlx-audio(local_voice.py:40-52) synchronously at startup if the packages aren't present.Consequences:
KeepAliveLaunchAgent, a slow/failing install can throttle-restart in a loop.Fix: never install from within the server process. Detect availability and silently fall back to cloud when MLX isn't importable; do model/dependency installation only via the installer or an explicit
python local_voice.py --installstep.