Instructions to use TokenRhythm/NeoHorse-1-9B-MLX with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- MLX
How to use TokenRhythm/NeoHorse-1-9B-MLX 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("TokenRhythm/NeoHorse-1-9B-MLX") 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) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- LM Studio
- Pi
How to use TokenRhythm/NeoHorse-1-9B-MLX with Pi:
Start the MLX server
# Install MLX LM: uv tool install mlx-lm # Start a local OpenAI-compatible server: mlx_lm.server --model "TokenRhythm/NeoHorse-1-9B-MLX"
Configure the model in Pi
# Install Pi: npm install -g @earendil-works/pi-coding-agent # Add to ~/.pi/agent/models.json: { "providers": { "mlx-lm": { "baseUrl": "http://localhost:8080/v1", "api": "openai-completions", "apiKey": "none", "models": [ { "id": "TokenRhythm/NeoHorse-1-9B-MLX" } ] } } }Run Pi
# Start Pi in your project directory: pi
- MLX LM
How to use TokenRhythm/NeoHorse-1-9B-MLX with MLX LM:
Generate or start a chat session
# Install MLX LM uv tool install mlx-lm # Interactive chat REPL mlx_lm.chat --model "TokenRhythm/NeoHorse-1-9B-MLX"
Run an OpenAI-compatible server
# Install MLX LM uv tool install mlx-lm # Start the server mlx_lm.server --model "TokenRhythm/NeoHorse-1-9B-MLX" # Calling the OpenAI-compatible server with curl curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "TokenRhythm/NeoHorse-1-9B-MLX", "messages": [ {"role": "user", "content": "Hello"} ] }' - Hermes Agent
How to use TokenRhythm/NeoHorse-1-9B-MLX with Hermes Agent:
Start the MLX server
# Install MLX LM: uv tool install mlx-lm # Start a local OpenAI-compatible server: mlx_lm.server --model "TokenRhythm/NeoHorse-1-9B-MLX"
Configure Hermes
# 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 TokenRhythm/NeoHorse-1-9B-MLX
Run Hermes
hermes
- Atomic Chat
- OpenClaw
How to use TokenRhythm/NeoHorse-1-9B-MLX with OpenClaw:
Start the MLX server
# Install MLX LM: uv tool install mlx-lm # Start a local OpenAI-compatible server: mlx_lm.server --model "TokenRhythm/NeoHorse-1-9B-MLX"
Configure OpenClaw
# Install OpenClaw: npm install -g openclaw@latest # Register the local server and set it as the default model: openclaw onboard --non-interactive --mode local \ --auth-choice custom-api-key \ --custom-base-url http://127.0.0.1:8080/v1 \ --custom-model-id "TokenRhythm/NeoHorse-1-9B-MLX" \ --custom-provider-id mlx-lm \ --custom-compatibility openai \ --custom-text-input \ --accept-risk \ --skip-health
Run OpenClaw
openclaw agent --local --agent main --message "Hello from Hugging Face"
MLX local inference
This is the unquantized BF16 MLX version of NeoHorse-1-9B for Apple Silicon. Converted from the original BF16 weights with MLX-LM. No weight quantization is applied; MLX-LM adapts tensor names/layouts and normalization representation for its runtime. Benchmark scores below refer to the original model, not a separate evaluation of this MLX version.
pip install "mlx-lm>=0.31.3"
mlx_lm.chat --model TokenRhythm/NeoHorse-1-9B-MLX
The model downloads automatically from Hugging Face. The original chat template is preserved. See Deployment for local checkpoints, the chat API, and tool calling.
NeoHorse-1-9B
Towards Recursive Self-Improvement via Agentic Post-Training with Routing Harness.
NeoHorse-1-9B is a 9B causal language model and an initial prototype on the path toward recursive self-improvement (RSI). It is post-trained from Qwen3.5-9B for text-based agent harnesses, tool use, coding, and instruction following.
Derived from Qwen/Qwen3.5-9B and fine-tuned by TokenRhythm. The source checkpoint was repackaged for text-only inference. This repository contains language-model weights only, converted to MLX BF16 without weight quantization.
Highlights
- Path toward RSI: the routing harness assigns tasks to a heterogeneous model pool, records tool interactions and outcomes, estimates capability demand, and uses capability-level feedback to shape the next training mixture. Updated models can return to the harness, closing a prototype evaluation–selection–update loop; extending this loop across successive iterations is the next step toward RSI.
- Agentic post-training framework: the associated research explores routing-guided curriculum SFT and routing-guided on-policy distillation to turn execution trajectories into training signal while preserving execution and harness context around each response.
- Data quality: exact and near-duplicate removal, evaluation decontamination, structural validation, six-dimensional semantic evaluation, and subscene-level Scene/Goal/Outcome labeling.
- Broad gains: 69.04 macro average across ten benchmarks versus 65.60 for Qwen3.5-9B (+3.44).
Model Details
| Property | Value |
|---|---|
| Model family | NeoHorse Agent-Native Causal Language Model |
| Parameters | Approximately 9B |
| Base model | Qwen3.5-9B |
| Post-training | Routing-guided agentic post-training |
| Interface | Text input and text output |
| Context length | 262,144 natively and extensible up to 1,010,000 tokens. |
| Weight format / precision | MLX Safetensors / BF16 (unquantized) |
Evaluation
The 9B track compares NeoHorse-1-9B with five representative open-weight baselines: Granite-4.2-8B, Qwen3.5-9B, Ornith-1.5-9B, Gemma-4-12B-it, and Muse-Glimmer-30B. Results cover ten benchmarks and are grouped by capability. Higher is better; Δ is NeoHorse-1-9B minus Qwen3.5-9B. Bold and underline mark the best and second-best results in each benchmark row, respectively; ties share the same formatting.
| Benchmark | Granite-4.2-8B | Qwen3.5-9B | Ornith-1.5-9B | Gemma-4-12B-it | Muse-Glimmer-30B | NeoHorse-1-9B | Δ vs Qwen3.5-9B |
|---|---|---|---|---|---|---|---|
| 🤖 Agentic | |||||||
QwenClawBench | 37.01 | 44.04 | 47.27 | 43.53 | 46.11 | 48.73 | +4.69 |
WorkBuddy Bench | 35.07 | 39.60 | 29.29 | 29.65 | 45.85 | 40.15 | +0.55 |
PinchBench | 56.93 | 74.55 | 68.22 | 58.89 | 71.35 | 82.25 | +7.70 |
VitaBench | 23.00 | 31.25 | 26.75 | 36.50 | 48.50 | 42.25 | +11.00 |
BFCL v4 | 52.06 | 64.88 | 65.03 | 62.06 | 53.74 | 67.43 | +2.55 |
tau2-Bench | 62.28 | 88.04 | 83.68 | 59.37 | 76.64 | 90.82 | +2.78 |
| 💻 Coding | |||||||
HumanEval | 96.34 | 92.68 | 93.90 | 100.00 | 98.17 | 98.17 | +5.49 |
LiveCodeBench v6 | 72.00 | 65.14 | 47.43 | 73.14 | 65.71 | 65.14 | +0.00 |
| 📚 Instruction Following | |||||||
IFBench | 78.00 | 66.33 | 40.00 | 77.67 | 78.67 | 66.33 | +0.00 |
IFEval | 92.98 | 89.46 | 71.35 | 94.27 | 93.90 | 89.09 | -0.37 |
| 📊 Overall | |||||||
Ten-benchmark average | 60.57 | 65.60 | 57.29 | 63.51 | 67.86 | 69.04 | +3.44 |
Reported protocol: SGLang v0.5.17 ·
temperature=1.0·top_p=0.95·top_k=20·min_p=0.0·presence_penalty=1.5·repetition_penalty=1.0· thinking mode enabled withenable_thinking=trueandforce_nonempty_content=true. QwenClawBench, WorkBuddy Bench, and tau2-Bench use three runs; PinchBench and VitaBench use one run; the remaining benchmarks follow their official protocols. VitaBench uses the DeepSeek-V4-Flash simulator and judge.
Deployment
Use MLX-LM on an Apple Silicon Mac to run this checkpoint.
Install and select a local checkpoint
pip install "mlx-lm>=0.31.3"
MODEL_PATH="/path/to/NeoHorse-1-9B-MLX"
Set MODEL_PATH to the downloaded MLX directory containing config.json, tokenizer files, chat_template.jinja, and model weights. You can also use TokenRhythm/NeoHorse-1-9B-MLX as the model path to download it automatically from Hugging Face.
Chat locally
mlx_lm.chat --model "$MODEL_PATH"
Start an API server
mlx_lm.server \
--model "$MODEL_PATH" \
--host 127.0.0.1 \
--port 8080
The server exposes an OpenAI-compatible /v1/chat/completions endpoint. In the requests below, default_model refers to the checkpoint selected with --model.
Basic Usage
After the server starts, run this request in another terminal:
curl http://127.0.0.1:8080/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{
"model": "default_model",
"messages": [
{"role": "user", "content": "Write a Python function that returns the first n Fibonacci numbers."}
],
"max_tokens": 2048,
"stream": false
}'
The generated reply is returned in choices[0].message.content.
Tool Calling
Pass function definitions in the tools field:
curl http://127.0.0.1:8080/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{
"model": "default_model",
"messages": [
{"role": "user", "content": "Use get_weather to check the current weather in Beijing in celsius."}
],
"tools": [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get the current weather for a city.",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "City name."},
"unit": {"type": "string", "enum": ["celsius", "fahrenheit"]}
},
"required": ["city", "unit"]
}
}
}
],
"max_tokens": 2048,
"stream": false
}'
MLX-LM reads the preserved chat template to format tool requests and parse generated calls. When the model chooses to call a tool, the call is returned in choices[0].message.tool_calls. Your application executes the function, appends the assistant message and a role: "tool" result with the matching tool_call_id, then sends the conversation back to the same endpoint for the final answer.
License
NeoHorse-1-9B is released under the Apache License 2.0.
The upstream model is Qwen/Qwen3.5-9B. Its original copyright notice, Copyright 2026 Alibaba Cloud, is retained in the license file. TokenRhythm fine-tuned and repackaged the source checkpoint for text-only inference. This repository provides its MLX BF16 conversion without weight quantization.
Citation
@misc{neohorse2026,
title = {NeoHorse-1: Towards Recursive Self-Improvement via Agentic Post-Training with Routing Harness},
author = {NeoHorse Team},
year = {2026},
howpublished = {arXiv preprint},
eprint = {2609.08183},
archivePrefix = {arXiv},
primaryClass = {cs.CL},
url = {https://arxiv.org/abs/2609.08183}
}
For questions or issue reports, use the NeoHorse project repository.
- Downloads last month
- -
Quantized