MLX backend uses CPU variant on Apple Silicon despite gpu_available=true (M5 Pro)
## Environment
- macOS Darwin 25.5.0, Apple M5 Pro, 24 GB
- Voicebox v0.5.0 (DMG `Voicebox_0.5.0_aarch64.dmg`)
- Model: Qwen3-TTS-12Hz-1.7B-Base (loaded)
- Settings → GPU enabled
## Symptom
`GET /health` correctly detects MPS but reports `backend_variant: cpu`:
```json
{
"status": "healthy",
"model_loaded": true,
"model_size": "1.7B",
"gpu_available": true,
"gpu_type": "MPS (Apple Silicon)",
"backend_type": "mlx",
"backend_variant": "cpu",
"gpu_compatibility_warning": null
}
```
`~/Library/Application Support/sh.voicebox.app/backends/` contains only an empty `cuda/` subfolder — no MPS-variant directory shipped.
## Performance impact
End-to-end test through `POST /generate` (Petrus PT-BR cloned profile, ~80 chars input):
- Wall-clock to `status=completed`: **20.1 s**
- Audio duration: **5.44 s**
- **RTF: 3.7** (vs. Qwen3-TTS upstream claim of sub-realtime via Metal/MLX)
`POST /generate/stream` is non-streaming in practice — it returns audio/wav only after the full clip is rendered (TTFB = total time, 15.5 s in another test).
## Repro
```bash
curl -X POST http://127.0.0.1:17493/generate \
-H "Content-Type: application/json" \
-d '{"profile_id":"<your-petrus-id>","text":"Bom dia, doutor. Tudo bem?","language":"pt","engine":"qwen","model_size":"1.7B"}'
# poll GET /history/{id} until status=completed
```
## Expected
On Apple Silicon, MLX should use the Metal backend (typically 5-10× faster than CPU for autoregressive LMs of this size). Qwen3-TTS reports ~97 ms TTFB and sub-realtime RTF on properly configured Apple Silicon stacks.
## Suggested
- Ship MLX-Metal variant alongside MLX-CPU in the `backends/` distribution
- OR: expose a runtime override so users can pull the Metal variant on first launch
- Bonus: make `/generate/stream` actually stream chunks as they're produced (Qwen3-TTS supports incremental output)
Happy to test a build with the Metal variant when ready. Voicebox is otherwise excellent — voice clone quality on Brazilian Portuguese is the first non-paid alternative I've found that holds up against ElevenLabs PVC.
0 条评论