Reference · rapid-mlx 0.10.3 · ← Back to README

Troubleshooting

Common symptoms on rapid-mlx 0.10.3, mapped to root causes and fixes. Every entry on this page was verified against the shipped CLI — if we couldn't trace a symptom to a real error message or source path, we left it off.

Start here — run the doctor

rapid-mlx doctor is the one-shot self-diagnostic — Apple Silicon detection, macOS + Darwin versions, free disk, HF cache size, Python version, mlx / mlx-lm / transformers / fastapi / uvicorn / rapid-mlx versions, optional-extras status, and network probes. Run it before filing an issue.

$ rapid-mlx doctor
$ rapid-mlx doctor -v          # verbose per-probe detail

Performance

Getting much lower tok/s than the community benchmarks?

By far the most common cause: the model is reasoning before answering. Qwen 3.5 and 3.6 default to thinking-on, which roughly doubles the wall-clock work per response.

Tracked as issue #567 — recognised as the most common bug report.

Slow first response, fast follow-ups

Two causes stack:

OOM and boot failures

Out of memory, or very slow (< 5 tok/s)

Model too big for your RAM. Pick a smaller quant or a smaller model — see the Hardware tiers map for canonical picks per RAM budget. The four safe choices are:

Pre-flight disk-space check aborts serve

rapid-mlx serve aborts before download if the model won't fit on the filesystem backing the HuggingFace cache. If your cache actually lives on an external drive (via HF_HOME) that has room, add --force-disk-check to skip the guard.

Free disk dropped after upgrade — check stale cache

Older rapid-mlx installs used ~/.cache/vllm-mlx. After the rebrand this directory is no longer read, but existing bytes hang around. If rapid-mlx doctor reports a high HF cache size and low free disk, verify:

$ ls -lah ~/.cache/vllm-mlx     # stale — safe to remove
$ rm -rf ~/.cache/vllm-mlx

The live cache lives at ~/.cache/huggingface/hub/ (the standard HF path); rapid-mlx rm <alias> cleans individual repos from there.

Output behaviour

Empty responses

Usually a parser mismatch. If you passed --reasoning-parser to a non-thinking model, the parser will strip everything as reasoning_content. Fixes:

Tool calls arriving as plain text

Set the right --tool-call-parser for your model — the canonical values are listed under rapid-mlx serve --help (parsers section). Or rely on auto-detection: aliases in aliases.json ship with the right parser pre-wired, so passing just --enable-auto-tool-choice is often enough. Even without either, rapid-mlx auto-recovers most cases from the served checkpoint's tokenizer + config.

"parameters not found in model" warnings at startup

Normal for vision-language models (VLMs) — vision weights are auto-skipped when the boot path is text-only. If you actually want vision, install the extra (pip install "rapid-mlx[vision]==0.10.3") and remove --no-mllm / --text-only if you set it.

Reasoning models leak raw <think> tokens

Two knobs — pick whichever fits:

Shell integration

Tab completion doesn't fire

Homebrew installs activate argcomplete for rapid-mlx automatically. For pip / install.sh paths, activate once:

# zsh / bash — add to ~/.zshrc or ~/.bashrc
$ eval "$(register-python-argcomplete rapid-mlx)"

# Or system-wide:
$ activate-global-python-argcomplete

argcomplete>=3.6 is a hard dependency (not optional) so the CLI is Tab-completable out of the box once the shell hook is wired.

Platform

"Rapid-MLX requires Apple Silicon"

Intel Macs are not supported — MLX is Apple Silicon (M1 / M2 / M3 / M4) only. Same story for Linux and Windows.

"Rapid-MLX requires macOS 13 (Ventura) or later"

The install.sh platform check enforces macOS 13+. Upgrade to Ventura or later; there is no rapid-mlx build path for earlier macOS.

Service management

"Is there a server already running?"

rapid-mlx ps lists every running rapid-mlx serve process — PID, port, loaded model, uptime. Kill by PID if you need to reclaim a port.

Port already in use

Pick another port with --port <n>, or find the culprit with lsof -i :<port> and stop it. On macOS, note that a wildcard-bound listener (--host 0.0.0.0) can coexist with a more-specific loopback listener on the same port; the serve pre-flight bind check probes 127.0.0.1 explicitly when --host is a wildcard to keep that bypass closed.

Not on this page

This page ships only entries we could verify against 0.10.3 code or a reproducible CLI error message. Other README-level tips that required more digging than the wall budget allowed — cookie rotation for 429s (irrelevant here), specific webhook integrations, per-model quirks — will be added in a follow-up pass with source-of-truth citations. If you hit a symptom missing here, file an issue at github.com/raullenchai/Rapid-MLX/issues.

Next steps