Small models, measured in the open.
We train and post-train small open models and publish what each step changes, including what gets worse.
OpenGrad · Qwen3.5-2B
Tool-call F1
1,277 held-out tool-use prompts
- Base0.63
- Post-trained0.75
GSM8K solved
1,319 questions, asked without worked examples
- Base67.4%
- Post-trained0%
From scratch · 151M
GSM8K answer format
200 questions, after SFT and after GRPO, with DPO between
- After SFT5.5%
- After GRPO98.5%
GSM8K solved
The same 200 questions
- After SFT2 of 200
- After GRPO3 of 200
In both, the number the training aimed at rose and the one beside it did not follow.
- OpenGradStudy 001 publishedPost-training a 2B model for tool use, and measuring the side effects
- Tool-choice contrastIn developmentA test set that holds the question fixed and changes the tools
- From scratchRun completeA 151M model trained through five stages on one GPU
- Taglish sentimentResults on GitHubSentiment for Tagalog, Taglish and English text
OpenGradStudy 001 published
What tool-use training cost a 2B model.
OpenGrad post-trains Qwen3.5-2B to decide when to call a tool, then measures what else changed. The checkpoint we promoted calls tools better and does worse on general benchmarks than the model it started from. Finding that cost $11.39 of GPU time.
General ability, before and after tool-use training
IFEval strict
refuses 19%
67.8% Base45.1% After SFT−22.7 pts
GSM8K 8-shot
refuses 0%
70.4% Base56.3% After SFT−14.1 pts
MMLU-Pro 5-shot
refuses 0%
49.0% Base37.0% After SFT−12.0 pts
Upstream benchmarks and scorers, one engine configuration for every stage. On the bottom two rows the model refuses nothing, so those drops are lost ability rather than refusals. Two gaps carry a caveat about the token limit. On IFEval, 47 base and 67 SFT answers of 541 hit it, and no interval was computed. The MMLU-Pro gap is a point estimate that lies between 6.4 and 33.1 points depending on how its truncated answers resolve. DPO on top of SFT changed every score by under one point.
Why the promotion gate missed it
What the 1,277 held-out examples asked the model to do
- Call a tool453
- Say it can't453
- Ask to clarify371
- Just answerNo examples0
Compressed for llama.cpp: nine sizes, two pass the main gate
Tool-use decisions unchanged from the uncompressed model on llama.cpp
- Q2_K0.90 GiB53.4%
- IQ3_M0.99 GiB77.1%
- Q3_K_M1.02 GiB77.1%
- IQ4_XS1.11 GiB88.3%
- Q4_K_S1.13 GiB87.9%
- Q4_K_M1.19 GiB87.2%
- Q5_K_M1.31 GiB95.0%
- Q6_K1.45 GiB98.0%
- Q8_01.87 GiB98.7%
Passes the main gate
The training data
OpenGrad ToolPolicy Canonical v2
173,237 records from four public function-calling datasets, mapped to one schema. Each record keeps its source and licence, so attribution travels with the row. It carries no single licence: its sources use two.
Read Study 001The auditWeightsGGUF buildsDatasetOpenGrad Source
- glaive-function-calling-v2Apache-2.098,339
- xlam-function-calling-60kCC-BY-4.057,342
- ToolACEApache-2.011,051
- When2CallCC-BY-4.06,505
Tool-choice contrastIn development, nothing measured yet
Same question, different tools.
A test set built for the gap OpenGrad found. Each question is asked three times, word for word, with different tools on offer. In one family the right response is always a direct answer; in the other it changes with the tools while the question does not.
Answer directly
One question, unchanged, asked with
- No toolsAnswer
- One irrelevant toolAnswer
- Three to five irrelevant toolsAnswer
Decide about a tool
One question, unchanged, asked with
- The right tool, every parameter knownCall it
- The right tool, a parameter missingAsk
- The right tool swapped for a wrong oneSay it can't
From scratchRun complete
A 151M model, trained from scratch.
Five stages, applied end to end to one small model on one H100: pretraining and midtraining on about 10B tokens, then SFT, DPO and GRPO, in 13.7 hours of training. The training code is not public yet.
Pretrain7.26 h
loss, lower is better
9.992.999.99 to 3.04
Midtrain1.76 h
loss, lower is better
3.132.083.13 to 2.29
SFT3.78 h
loss, lower is better
1.781.271.78 to 1.36
DPO0.39 h
preference accuracy
0.840.440.50 to 0.59
GRPO0.49 h
reward; a well-formed wrong answer scores 0.2
0.280.010.01 to 0.23
Scroll the table sideways for every benchmark.
| After | Perplexity | HellaSwag | ARC-e | MMLU | GSM8K |
|---|---|---|---|---|---|
| Pretrain | 20.85 | 38.5% | 45.8% | 24.0% | 1.0% |
| Midtrain | 19.70 | 37.3% | 45.1% | 26.6% | 4.0% |
| SFT | 25.11 | 37.4% | 48.1% | 23.8% | 1.0% |
| DPO | 25.07 | 37.3% | 47.9% | 24.3% | 2.5% |
| GRPO | 25.10 | 37.3% | 47.7% | 23.8% | 1.5% |
The multiple-choice differences between stages are within noise: HellaSwag and MMLU were scored on 1,000 questions each, ARC-e on 570 and GSM8K on 200. Perplexity rises at SFT because it is measured on web text while the model is being trained for dialogue.
What changed was behaviour. Midtraining taught the GSM8K answer format, SFT lost it, and GRPO brought it back. After GRPO 3 of 200 answers were correct, against 2 after SFT, with DPO between.
Taglish sentimentResults on GitHub
Sentiment in Tagalog, Taglish and English.
A three-class sentiment model for Filipino reviews and posts, fine-tuned from XLM-RoBERTa. Its data is de-duplicated across splits, near-duplicates included, and an int8 ONNX build runs on a CPU.
Macro-F1 on the test set, by language
- Tagalog0.813
- Taglish0.817
- English0.700
Median time to classify one text, Apple M5 CPU
- PyTorch11.8 ms
- ONNX int85.1 ms
The people behind it.
Alpha Romer Coma
Co-Founder
LinkedIn, Alpha Romer ComaJohn Andrew Balbarosa
Co-Founder
Arjhine Ty
Co-Founder
LinkedIn, Arjhine TyXynil Jhed Lacap
Co-Founder
GitHub, Xynil Jhed LacapJC Diamante
Core Contributor
GitHub, JC Diamante
Working on small models?
Tell us the model, what you trained it to do, and what you measured.