HuggingFaceTB/smoltalk
Viewer • Updated • 2.2M • 27.1k • 425
Champion model from a 200+ experiment systematic optimization study on tiny reasoning LLMs.
Best overall model across 6 benchmarks (lm-eval-harness, 0-shot):
| Metric | Baseline | This Model | Δ |
|---|---|---|---|
| ARC-Easy | 54.12% | 57.28% | +3.16pp 🏆 |
| GSM8K | 0.38% | 2.35% | +1.97pp (6.2×) 🏆 |
| PIQA (norm) | 66.92% | 67.14% | +0.22pp 🏆 |
| ARC-Challenge (norm) | 27.73% | 29.18% | +1.45pp |
| HellaSwag (norm) | 42.99% | 42.95% | -0.04pp (preserved) |
| BoolQ | 43.39% | 38.99% | -4.40pp (alignment tax) |
2-stage pipeline on SmolLM2-135M-Instruct:
The most impactful finding: using a constant learning rate scheduler (instead of cosine) for DPO training produces significantly better benchmark results. This is a free improvement requiring no additional data or compute.
This model emerged from 200+ systematic experiments exploring:
Full experiment report: github.com/lldois/tiny_resoning_llm
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("lldois/SmolLM2-135M-Reasoning-exp146")
tokenizer = AutoTokenizer.from_pretrained("lldois/SmolLM2-135M-Reasoning-exp146")
messages = [{"role": "user", "content": "What is 25 + 37?"}]
input_text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tokenizer(input_text, return_tensors="pt")
outputs = model.generate(**inputs, max_new_tokens=512)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
Base model
HuggingFaceTB/SmolLM2-135M