NeoHorse-1

Towards Recursive Self-Improvement via Agentic Post-Training with Routing Harness.

Hugging Face ModelScope Company Twitter / X License: Apache-2.0
Technical Report
NeoHorse-1 is a family of causal language models and an initial prototype on the path toward **recursive self-improvement (RSI)**. The 4B and 9B checkpoints are post-trained from Qwen3.5 for text-based agent harnesses, tool use, coding, and instruction following. The routing harness assigns tasks to a heterogeneous model pool, records tool interactions and outcomes, estimates capability demand, and feeds capability-level feedback into the next training mixture. Updated models can return to the harness, forming a prototype evaluation鈥搒election鈥搖pdate loop; extending this loop across successive iterations is the next step toward RSI. ## News - **[2026-09-09]** 馃搫 **Technical report on arXiv!** Our [technical report](https://arxiv.org/abs/2609.08183) is now available, covering the routing harness, agentic post-training, and evaluation of NeoHorse-1. - **[2026-09-08]** 馃摝 **GGUF and quantized models on Hugging Face!** We release [NeoHorse-1-4B-GGUF](https://huggingface.co/TokenRhythm/NeoHorse-1-4B-GGUF) and [NeoHorse-1-9B-GGUF](https://huggingface.co/TokenRhythm/NeoHorse-1-9B-GGUF). Both include **16-bit (BF16) weights** and **smaller 8-bit, 5-bit, and 4-bit quantized versions** that use less disk space and memory, making it easier to run NeoHorse on your own hardware. - **[2026-09-08]** 馃殌 **Now on ModelScope!** [NeoHorse-1-4B](https://www.modelscope.cn/models/TokenRhythm/NeoHorse-1-4B) and [NeoHorse-1-9B](https://www.modelscope.cn/models/TokenRhythm/NeoHorse-1-9B) are now available on ModelScope. - **[2026-09-07]** 馃帀 **NeoHorse-1 is here!** We release [NeoHorse-1-4B](https://huggingface.co/TokenRhythm/NeoHorse-1-4B) and [NeoHorse-1-9B](https://huggingface.co/TokenRhythm/NeoHorse-1-9B) under the **Apache 2.0** license.

NeoHorse-1-4B evaluation results

NeoHorse-1-9B evaluation results

## Highlights - **Agentic post-training framework:** routing-guided curriculum SFT and routing-guided on-policy distillation turn execution trajectories into training signal while preserving execution and harness context. - **Data quality:** exact and near-duplicate removal, evaluation decontamination, structural validation, six-dimensional semantic evaluation, and subscene-level Scene/Goal/Outcome labeling. - **Two release sizes:** 4B for a lighter local deployment footprint and 9B for higher capacity on the same text-first serving interface. ## Model Downloads | Checkpoint | Parameters | Hugging Face | ModelScope | Base model | | --- | :---: | --- | --- | --- | | NeoHorse-1-4B | ~4B | [NeoHorse-1-4B](https://huggingface.co/TokenRhythm/NeoHorse-1-4B) | [NeoHorse-1-4B](https://www.modelscope.cn/models/TokenRhythm/NeoHorse-1-4B) | Qwen3.5-4B | | NeoHorse-1-9B | ~9B | [NeoHorse-1-9B](https://huggingface.co/TokenRhythm/NeoHorse-1-9B) | [NeoHorse-1-9B](https://www.modelscope.cn/models/TokenRhythm/NeoHorse-1-9B) | Qwen3.5-9B | Both checkpoints are released as text input/text output language-model weights for self-hosted inference. Each model card contains its model-specific evaluation table and deployment notes. ## Model Details
PropertyNeoHorse-1-4BNeoHorse-1-9B
Model familyNeoHorse Agent-Native Causal Language ModelNeoHorse Agent-Native Causal Language Model
ParametersApproximately 4BApproximately 9B
Post-trainingRouting-guided agentic post-trainingRouting-guided agentic post-training
InterfaceText input and text outputText input and text output
Context length262,144 natively; base capability extensible up to 1,010,000 tokens262,144 natively; base capability extensible up to 1,010,000 tokens
Weight format / precisionSafetensors / BF16Safetensors / BF16
## Evaluation The tables report the ten-benchmark protocol from the technical report. Results are grouped by capability. Higher is better; `螖` is NeoHorse minus the same-size Qwen baseline. **Bold** marks the best result in each benchmark row; ties share the same formatting. ### 4B track The 4B comparison includes five representative open-weight baselines. Underline marks the second-best result in each benchmark row.
BenchmarkQwen3.5-4BGemma-4-E4B-itNanbeige-4.2-3BAgents-A1-4BSpark-X2.5-4BNeoHorse-1-4B螖 vs Qwen3.5-4B
馃 Agentic
QwenClawBench38.4722.9840.6643.1643.5244.68+6.21
WorkBuddy Bench24.6211.6521.0333.3726.4734.41+9.79
PinchBench71.1947.6066.7875.0762.3777.33+6.14
VitaBench21.505.0031.5039.2537.0032.00+10.50
BFCL v461.0247.1867.2846.6063.7161.79+0.77
tau2-Bench84.2943.6085.0881.0077.7288.46+4.17
馃捇 Coding
HumanEval87.2084.7698.7892.6892.0796.95+9.75
LiveCodeBench v653.7152.0072.50*56.5754.8659.43+5.72
馃摎 Instruction Following
IFBench60.3340.0055.0063.3373.3365.33+5.00
IFEval87.0674.6884.4783.5591.1388.35+1.29
馃搳 Overall
Ten-benchmark average58.9442.9562.3161.4662.2264.87+5.93
### 9B track The 9B comparison includes five representative open-weight baselines from the technical report. Underline marks the second-best result in each benchmark row.
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
QwenClawBench37.0144.0447.2743.5346.1148.73+4.69
WorkBuddy Bench35.0739.6029.2929.6545.8540.15+0.55
PinchBench56.9374.5568.2258.8971.3582.25+7.70
VitaBench23.0031.2526.7536.5048.5042.25+11.00
BFCL v452.0664.8865.0362.0653.7467.43+2.55
tau2-Bench62.2888.0483.6859.3776.6490.82+2.78
馃捇 Coding
HumanEval96.3492.6893.90100.0098.1798.17+5.49
LiveCodeBench v672.0065.1447.4373.1465.7165.14+0.00
馃摎 Instruction Following
IFBench78.0066.3340.0077.6778.6766.33+0.00
IFEval92.9889.4671.3594.2793.9089.09-0.37
馃搳 Overall
Ten-benchmark average60.5765.6057.2963.5167.8669.04+3.44
`*` Nanbeige-4.2-3B LiveCodeBench v6 result is reported from its official blog post or technical report. > **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 with `enable_thinking=true` and `force_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 These examples serve a checkpoint downloaded to local disk. Set `MODEL_PATH` to the directory containing `config.json`, tokenizer files, and weights. The request `model` value is the served alias (`neohorse-1-4B` or `neohorse-1-9B`), not the filesystem path. ### SGLang ```bash pip install "sglang==0.5.17" MODEL_PATH="/path/to/NeoHorse-1-4B" # or /path/to/NeoHorse-1-9B python3 -m sglang.launch_server \ --model-path "$MODEL_PATH" \ --served-model-name neohorse-1-4B \ --host 0.0.0.0 --port 30000 \ --context-length 262144 \ --reasoning-parser qwen3 \ --tool-call-parser qwen3_coder ``` ### vLLM ```bash pip install -U vllm MODEL_PATH="/path/to/NeoHorse-1-4B" # or /path/to/NeoHorse-1-9B vllm serve "$MODEL_PATH" \ --served-model-name neohorse-1-4B \ --host 0.0.0.0 --port 8000 \ --max-model-len 262144 \ --reasoning-parser qwen3 \ --enable-auto-tool-choice \ --tool-call-parser qwen3_coder ``` The 262,144-token setting is a configured limit; actual capacity depends on GPU memory and serving settings. Reduce it if needed. The examples below target vLLM at `http://127.0.0.1:8000`. For SGLang, use `http://127.0.0.1:30000`. For the 9B checkpoint, use `--model neohorse-1-9B` and launch the server with `--served-model-name neohorse-1-9B`. ### Send a Request Install the client dependency: ```bash pip install requests ``` Run the provided [chat example](examples/chat.py) from the repository root: ```bash python examples/chat.py \ --url http://127.0.0.1:8000 \ --model neohorse-1-4B ``` This example sends a predefined prompt to the deployed model and prints the generated response. Alternatively, send an OpenAI-compatible request directly: ```bash curl http://127.0.0.1:8000/v1/chat/completions \ -H 'Content-Type: application/json' \ -d '{"model":"neohorse-1-4B","messages":[{"role":"user","content":"Write a Python function that returns the first n Fibonacci numbers."}],"max_tokens":512}' ``` ### Tool Calling Run the provided [tool-calling example](examples/tool_call.py) from the repository root: ```bash python examples/tool_call.py \ --url http://127.0.0.1:8000 \ --model neohorse-1-4B ``` This example sends a predefined weather query and prints the tool call generated by the model. ## License NeoHorse-1 is released under the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). The upstream models are Qwen3.5-4B and Qwen3.5-9B. ## 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} } ```