Claude Code in a Box
Collection
How to replace Claude Code with a Mac Studio: https://spicyneuron.substack.com/p/a-mac-studio-for-local-ai-6-months • 5 items • Updated • 2
How to use spicyneuron/GLM-5.1-MLX-2.9bit with MLX:
# Make sure mlx-lm is installed
# pip install --upgrade mlx-lm
# Generate text with mlx-lm
from mlx_lm import load, generate
model, tokenizer = load("spicyneuron/GLM-5.1-MLX-2.9bit")
prompt = "Write a story about Einstein"
messages = [{"role": "user", "content": prompt}]
prompt = tokenizer.apply_chat_template(
messages, add_generation_prompt=True
)
text = generate(model, tokenizer, prompt=prompt, verbose=True)How to use spicyneuron/GLM-5.1-MLX-2.9bit with Pi:
# Install MLX LM: uv tool install mlx-lm # Start a local OpenAI-compatible server: mlx_lm.server --model "spicyneuron/GLM-5.1-MLX-2.9bit"
# Install Pi:
npm install -g @mariozechner/pi-coding-agent
# Add to ~/.pi/agent/models.json:
{
"providers": {
"mlx-lm": {
"baseUrl": "http://localhost:8080/v1",
"api": "openai-completions",
"apiKey": "none",
"models": [
{
"id": "spicyneuron/GLM-5.1-MLX-2.9bit"
}
]
}
}
}# Start Pi in your project directory: pi
How to use spicyneuron/GLM-5.1-MLX-2.9bit with Hermes Agent:
# Install MLX LM: uv tool install mlx-lm # Start a local OpenAI-compatible server: mlx_lm.server --model "spicyneuron/GLM-5.1-MLX-2.9bit"
# Install Hermes: curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash hermes setup # Point Hermes at the local server: hermes config set model.provider custom hermes config set model.base_url http://127.0.0.1:8080/v1 hermes config set model.default spicyneuron/GLM-5.1-MLX-2.9bit
hermes
How to use spicyneuron/GLM-5.1-MLX-2.9bit with MLX LM:
# Install MLX LM uv tool install mlx-lm # Interactive chat REPL mlx_lm.chat --model "spicyneuron/GLM-5.1-MLX-2.9bit"
# Install MLX LM
uv tool install mlx-lm
# Start the server
mlx_lm.server --model "spicyneuron/GLM-5.1-MLX-2.9bit"
# Calling the OpenAI-compatible server with curl
curl -X POST "http://localhost:8000/v1/chat/completions" \
-H "Content-Type: application/json" \
--data '{
"model": "spicyneuron/GLM-5.1-MLX-2.9bit",
"messages": [
{"role": "user", "content": "Hello"}
]
}'GLM 5.1 optimized to run comfortably on a Mac Studio M3 512. This is the smaller, compact version. Quality-first version here.
# Start server at http://localhost:8080/chat/completions
uvx --from mlx-lm mlx_lm.server \
--host 127.0.0.1 \
--port 8080 \
--model spicyneuron/GLM-5.1-MLX-2.9bit
| metric | baa-ai/GLM-5.1-RAM-270GB-MLX | 2.9 bit (this model) | 3.6 bit |
|---|---|---|---|
| bpw | 3.110 | 2.906 | 3.645 |
| base memory | 269.303 | 251.702 | 315.648 |
| peak memory (1024/512) | 291.257 | 272.358 | 341.020 |
| prompt tok/s (1024) | 194.958 ± 0.075 | 194.216 ± 0.167 | 190.508 ± 0.880 |
| gen tok/s (512) | 21.381 ± 0.050 | 19.527 ± 0.035 | 17.873 ± 0.156 |
| kl mean | 0.686 ± 0.054 | 0.268 ± 0.009 | 0.117 ± 0.004 |
| kl p95 | 1.478 ± 0.054 | 0.537 ± 0.009 | 0.236 ± 0.004 |
| perplexity | 4.780 ± 0.020 | 4.118 ± 0.016 | 3.945 ± 0.016 |
| piqa | 0.776 ± 0.010 | 0.794 ± 0.009 | 0.820 ± 0.017 |
Tested on a Mac Studio M3 Ultra with:
mlx_lm.kld --baseline-model path/to/mlx-full-precision
mlx_lm.perplexity --sequence-length 2048 --seed 123
mlx_lm.benchmark --prompt-tokens 1024 --generation-tokens 512 --num-trials 5
mlx_lm.evaluate --tasks piqa --seed 123 --num-shots 0 --limit 500
Note:
mlx_lm.kld is approximate, based on top_k not full logits. Here's the code.Quantized with a mlx-lm fork, drawing inspiration from Unsloth/AesSedai/ubergarm style mixed-precision GGUFs. MLX quantization options differ from llama.cpp, but the principles are the same:
2-bit
Base model
zai-org/GLM-5.1