Le Gros Chaton
A 9B coding agent built on Qwen3.5-9B (hybrid Gated-Attention + Gated-DeltaNet).
Terminal-Bench 2.0: 25%.
What is this?
le-gros-chaton is a coding agent for the terminal. It runs tool-calling loops
inside Docker containers, plans, edits files, runs commands, and finishes
when the task verifier passes.
It is the result of stacking three LoRA fine-tunes on top of the base Qwen3.5-9B:
| Step | Adapter | Purpose |
|---|---|---|
| 1 | Fable5 | Tool-call format alignment (Code-Functional-Mixture, 91.2% adapter) |
| 2 | Trajectory SFT (16K) | Real agentic trace imitation on Terminal-Bench 2.0 tasks |
| 3 | (merged) | base + Fable5 + traj → merged-16k (this repo, bf16, text-only) |
A fourth step (RLVR with diversity reward) was attempted and the step-10 adapter is on HF for the record. The public release uses the merge through step 2.
What can it do
- Read and write files inside a sandbox
- Run bash commands and parse output
- Loop with timeout-aware context management
- Recover from tool failures (loop detection, dead-end pivot, doc-retrieve)
- Stop only when the task's hidden test passes (finish-gate)
Benchmark: Terminal-Bench 2.0 — 25%
5 tasks × 5 attempts each (eval/tbench_eval.py):
| Task | Pass rate |
|---|---|
| fix-git | 3/5 |
| log-summary-date-ranges | 2/5 |
| overfull-hbox | 0/5 |
| regex-log | 1/5 |
| count-dataset-tokens | 0/5 |
| **Total | 6/25 |
A 9B model reaching 25% on TB-2.0 is in the small-model sweet spot (small models average ~15%; frontier + agent stacks reach ~36% with Kimi K2 Thinking + Terminus 2). The strong suit is git orchestration, where the trajectory SFT coverage was concentrated.
The 5×5 pilot run is in benchmark_results.jsonl (filter by
adapter=merged). Trial traces are in eval/tb_traces/.
How to use
The model exposes the same API as the base Qwen3.5-9B — it's a drop-in text-completion / chat-completion model.
vLLM (recommended)
vllm serve mateo0093/le-gros-chaton \
--port 8000 \
--dtype bfloat16 \
--max-model-len 32768
Note: this model has 12 hybrid LoRA target modules (8 Gated-Attention
- 24 Gated-DeltaNet).
vllm>=0.27knows theQwen3_5ForCausalLMarchitecture natively — no patches required.
Transformers
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained(
"mateo0093/le-gros-chaton",
torch_dtype="bfloat16",
device_map="cuda:0",
)
tok = AutoTokenizer.from_pretrained("mateo0093/le-gros-chaton")
Agent loop
eval/tb_agent.py is the harness that drives TB-2.0 evaluation. It is
not part of this model release but is in the project repository at
Mateooo93/le-gros-chaton.
The 4 reactive fixes in the harness (finish-gate, doc-retrieve, dead-end
pivot, scheduled compaction) are designed to help a 9B model recover from
common failure modes.
Limitations (areas for follow-on training)
- Multi-file synthesis. Tasks that require reading N files and producing a derived artifact remain weak. A future trajectory SFT pass that targets these shapes is the obvious next step.
- Side-effect reasoning. Tasks where an edit's correctness depends on a downstream recompile or re-execution need better planning data.
- Input discovery. Tasks whose inputs aren't named explicitly benefit from richer exploration traces.
These are tracked as follow-on work in devlog/018_release.md.
Project structure
le-gros-chaton-qwen-merged-16k # this repo (17 GB bf16 model)
le-gros-chaton-qwen # Fable5 adapter
le-gros-chaton-qwen-traj-sft-16k # trajectory SFT adapter (12 modules)
le-gros-chaton-qwen-rlvr-step10 # RLVR step-10 (kept for the record)
License
Apache-2.0 (inherited from Qwen3.5-9B base model). The LoRA adapters are also Apache-2.0.
Citation
@misc{le-gros-chaton-2026,
author = {Mateo},
title = {Le Gros Chaton: a 9B coding agent},
year = {2026},
note = {Qwen3.5-9B + Fable5 + 16K trajectory SFT, Terminal-Bench 2.0 = 25\%},
url = {https://huggingface.co/mateo0093/le-gros-chaton},
}
Reproduction
git clone https://github.com/Mateooo93/le-gros-chaton
cd le-gros-chaton
bash setup_mi300x.sh # ROCm + venv on the GPU box
# download merged model + base + Fable5 + traj adapters
# python eval/tbench_eval.py --model-server http://<box>:8000 \
# --model-name le-gros-chaton --label le-gros-chaton-16k \
# --adapter merged --attempts 5
See devlog/017_mi300x_vllm_serving.md and devlog/018_release.md for
the full training and serving history.