SIGN IN SIGN UP

Drop mlx-lm as a core dependency

mlx-lm moves to an optional [llm] extra, needed only by the speech-to-speech
pipeline's in-process LLM responder - the one place that loads an arbitrary
chat model rather than a speech model's own transformer. Its imports move
inside LocalLLMResponseEngine, with an actionable ImportError.

This also fixes a live bug: voice_pipeline imported mlx_lm at module scope, so
'pip install mlx-audio[sts]' could not import VoicePipeline at all. The modular
CI job only passed because the [all] install happened to pull mlx-lm in.

Adds test_no_mlx_lm.py as a permanent guard: an AST walk rejecting mlx_lm
imports outside the allowed file, a regex sweep for the dynamic
importlib/__import__ form, and a check that mlx-lm never returns to
[project.dependencies].

Verified with mlx-lm uninstalled: 1237 passed, 40 skipped, no collection
errors; parity modules skip cleanly.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
A
Alazar Manakelew committed
3d277bcaaad39b40eb12f9dd05d225dfae77b6e6
Parent: ee1d78a