An open multiple-choice benchmark for sub-1B-parameter language models. 100 hand-written questions across 10 categories, balanced position bias, two prompt formats, deterministic decoding, and open data and code.
Established multi-choice benchmarks — MMLU, ARC, HellaSwag, TruthfulQA — were designed for, and calibrated against, much larger models. Run them against a 200M-parameter model and most produce uninformative leaderboards: scores cluster near chance, sub-1B models look indistinguishable, and the small differences that do exist are buried in noise.
Featherweight v1 is calibrated for the sub-1B parameter class. The questions are chosen so that a well-trained 200M-parameter model has a fighting chance of scoring meaningfully above chance, while leaving headroom for larger and better-trained models to score higher still. The goal is to give small models a place to actually compete — not to compete with multi-billion-parameter models, but to be informatively ranked against each other.
Each item is a single multi-choice question with exactly four labelled choices (A through D) and exactly one correct answer. The benchmark contains 100 items, partitioned evenly across 10 categories of 10 items each:
Scoring is one point per correct answer, no partial credit, no negative marking. Final score is reported as a percentage. Random baseline is 25%; a model that always answers a single letter scores 25% by construction (see §06).
Multiple-choice benchmarks are sensitive to prompt format. Models that have been instruction-tuned on multi-choice data tend to score higher on prompts that look like instructions; non-instruction-tuned base models tend to score higher on prompts that look like text completions. To avoid privileging either family, Featherweight specifies two prompt templates and runs the full evaluation under both. Both columns are reported.
Closer to a deployed chat interface. Used as the canonical "instruction-style" baseline. Fed to the model as the user turn.
prompt_template (plain){question}
A) {choice_0}
B) {choice_1}
C) {choice_2}
D) {choice_3}
Answer with just the letter of the correct choice.
An MMLU-style format ending with a bare "Answer:". Fed as a raw text prefix the model is asked to continue. Fairer to base models that have not seen explicit instruction-following data.
prompt_template (completion)Question: {question}
A) {choice_0}
B) {choice_1}
C) {choice_2}
D) {choice_3}
Answer:
For chat-templated models (TinyLlama-Chat, SmolLM-Instruct), the prompt above is wrapped in the model's tokenizer chat template via apply_chat_template(messages, add_generation_prompt=True). The user message is the same text as for non-chat models — only the surrounding tokens differ.
Every model in every run uses identical greedy decoding parameters. There is no temperature sampling, no top-p or top-k truncation, and no repetition penalty. The same model on the same prompt produces the same output every time.
sampling parameters (all models, all runs)temperature = 0.0 top_p = 1.0 top_k = 1 max_new_tokens = 20 repetition_penalty = 1.0 no_repeat_ngram = 0
The max_new_tokens = 20 cap is generous — the expected output is a single letter, and 20 tokens leaves room for a short preamble like "The answer is A". Across all 12 models tested for v1, no model was truncated mid-letter under this cap.
Deterministic decoding means the benchmark has no run-to-run variance from sampling noise. The only sources of variance are (a) the model itself, (b) the prompt format, and (c) potential floating-point non-determinism in some inference backends, which is generally below 0.5pp and below the noise floor set by sample size.
The model produces up to 20 tokens of free-form text. The benchmark must reduce this to one of {A, B, C, D, parse-error}. The extraction algorithm is a fixed priority list, applied to the model's reply in this order:
(A), (B), (C), or (D) anywhere, that letter is returned. Catches "(B) Paris" outputs.
answer (case-insensitive) followed by an optional is, optional punctuation, and a standalone letter A–D, that letter is returned. Catches "The answer is B" and "Answer: C".
parse_errors field so format-following failures can be distinguished from knowledge failures.
The ordering is significant. Strong-format patterns (parenthesized, "Answer is", reply-starts-with) win over choice-text matching, because a model that explicitly outputs "A) Berlin" deserves to be scored against A even if "Paris" also appears later in its reply. Choice-text matching is necessary because base and small chat-trained models frequently answer in prose ("The capital of France is Paris.") without ever emitting a letter; without choice-text fallback those models score near chance regardless of underlying knowledge.
The full implementation lives in extract_letter() in run_featherweight.py and is <40 lines of Python with no dependencies beyond re.
A model that answers each item with a letter drawn uniformly at random scores 25% in expectation. A model that always answers a single letter (e.g. always C) also scores 25%, because answer positions are exactly balanced — 25 of the 100 items have answer A, 25 have B, 25 have C, 25 have D. No position-bias-only strategy can exceed chance.
With n = 100, the standard error on an individual model's score is roughly sqrt(p(1-p)/100), which is 5pp at p = 50% and 4.5pp at p = 30%. The 95% confidence interval on a single score is therefore approximately ±9 percentage points in the relevant range. A 7pp gap between two models is at the edge of statistical significance; a 13pp gap is well clear of it.
In practical terms: claims of the form "H2 beats every model up to 410M by 13 or more points" are defensible. Claims of the form "Qwen 2.5 0.5B beats TinyLlama 1.1B by 10 points" (70% vs 60%) are at the edge — the gap is plausible but should not be over-stated without replication.
Per-category resolution is 10 percentage points (one question = 10pp), so per-category accuracy is informative for spotting clear strengths or weaknesses but should not be over-interpreted. A model that scores 70% on geography and 60% on history is not reliably "better at geography" — that's a 1-question difference.
The answer-position distribution is verifiable by running a one-line script against the JSONL file. The build script that generates Featherweight v1 contains an assertion that fails if the distribution is ever not 25/25/25/25:
assert answer_counts == {"A": 25, "B": 25, "C": 25, "D": 25}
All 100 questions were hand-written by the benchmark author for the v1 release. No questions were sourced from existing benchmarks (MMLU, ARC, HellaSwag, BIG-bench, etc.), from scraped web data, or from any source that might appear in a model's training corpus in identifiable form. The 10 category quotas were set in advance and questions written to fill them.
For each category, questions were drafted to satisfy four criteria:
After drafting, the position of the correct answer in each item was assigned to enforce the 25/25/25/25 distribution. Within each category, the 10 questions are split exactly 2–3–2–3 or 3–2–3–2 across A/B/C/D positions. This is verified by an assertion in the build script and is checkable against the published JSONL.
The Featherweight v1 question set was finalized before any of the 12 v1 comparison models — including Haiku H2 — was scored against it. The benchmark file featherweight.jsonl was committed and frozen prior to the first comparison run. This eliminates the possibility of post-hoc question selection to favour any particular model. (See §12 for the conflict-of-interest disclosure and its mitigations.)
Representative items, drawn verbatim from featherweight.jsonl. The full set of 100 is published as a single JSONL file (see §13).
Twelve open small language models were evaluated against Featherweight v1 on 2026-06-13 using the methodology specified above. Models range from distilgpt2 (82M, 2019) to TinyLlama 1.1B Chat (2024). The full bar chart is the canonical Featherweight v1 leaderboard.
For Haiku H2's per-category profile and the discussion of what these numbers mean for individual models, see the H2 model card. The benchmark itself is model-agnostic; future submissions from other model developers are welcome (see §13 for the runner).
Featherweight is not a replacement for established multi-domain benchmarks. It occupies a specific niche: multi-domain multi-choice evaluation at a difficulty level appropriate to sub-1B parameter models. Where existing benchmarks fit:
| Benchmark | Size | Difficulty | Sub-1B suitability |
|---|---|---|---|
| MMLU | 14,042 across 57 subjects | Undergraduate / professional | Most subjects unreachable for sub-1B; scores cluster near 25% chance |
| ARC-Easy | ~2,300 grade-school science | Elementary science | Tractable but single-domain; no broader knowledge coverage |
| ARC-Challenge | ~1,170 grade-school science | Harder grade-school science | Mostly out of reach for sub-1B base models |
| HellaSwag | ~10,000 sentence completions | Common-sense completion | Different task (4-way completion, not MCQ); tractable but not multi-domain |
| WinoGrande | ~44,000 pronoun resolutions | Binary common-sense | Different task (2-way); chance is 50% so resolution is different |
| TruthfulQA | 817 factual / misinformation | Adversarial truthfulness | Designed to fool large models; not calibrated for small models |
| Featherweight v1 | 100 across 10 categories | Basic multi-domain knowledge | Calibrated for 200M–1B; meaningful scores above chance for trained models |
Featherweight does not claim to be a replacement for MMLU at scale. It claims to be a more informative benchmark in the parameter range where MMLU is largely uninformative. A small model that scores 60% on Featherweight tells you more than the same model scoring 25% on MMLU.
Featherweight v1 has known limitations that any user of the benchmark should be aware of before drawing conclusions from a score.
Featherweight v1 was developed by Rootcomputer. Rootcomputer also develops the Haiku family of small language models, of which Haiku H2 (217M) is the second-generation release. H2 is one of the 12 models scored on Featherweight v1, and the benchmark is referenced in H2's model card.
This is a meaningful conflict of interest. A benchmark built by a model developer to evaluate that developer's own model is, in the absence of safeguards, an unreliable signal.
The mitigations we have applied:
(1) Temporal ordering. The Featherweight v1 question set was finalized and frozen before any model — including H2 — was scored. There was no opportunity to add, remove, or rewrite questions to favour any particular model after seeing its scores.
(2) Identical methodology. All 12 models, including H2, are scored using the same prompt templates, the same sampling parameters, the same answer extraction algorithm, and the same scoring rubric. The code used to score H2 is identical to the code used to score every other model; this code is open.
(3) Open data, open code. The full featherweight.jsonl file and the run_featherweight.py runner are published under CC-BY-4.0. Anyone can replicate the comparison table against open-weights models on commodity hardware, and anyone can score H2 against the benchmark by hitting the public chathaiku.com endpoint.
(4) Honest reporting. The published H2 scores show H2 trailing Qwen 2.5 0.5B by ~30 points and TinyLlama 1.1B Chat by ~20 points on the completion prompt — the largest gaps in the dataset. H2's weakest category (categorization at 20%) is reported alongside its strongest, and the qwen and tinyllama wins are reported in equal detail.
The residual risk we cannot mitigate is post-hoc training-set contamination: if a future Rootcomputer model trains on data that includes Featherweight v1 questions (whether deliberately or through corpus contamination), that model's score on v1 will be inflated. To mitigate this risk going forward, we commit to publishing Featherweight v2 with disjoint questions before any Rootcomputer model claims a score on v2, and we recommend that future readers treat v1 scores from any post-2026 Rootcomputer model with appropriate caution.
All data and code are open. Reproducing the v1 comparison table for the open-weights models requires a CUDA GPU with at least 8GB of VRAM (the largest model, TinyLlama 1.1B in float16, uses ~2.2GB), Python 3.9 or newer, and a one-line dependency install.
setuppip install transformers torch curl -O https://rootcomputer.dev/source/downloads/featherweight.jsonl curl -O https://rootcomputer.dev/source/downloads/run_featherweight.py curl -O https://rootcomputer.dev/source/downloads/models.example.json cp models.example.json models.jsonrun
python3 run_featherweight.py --prompt-style plain python3 run_featherweight.py --prompt-style completion
Each run produces a timestamped directory under results/ containing one JSON file per model (with full per-question detail), a summary.csv for spreadsheet analysis, and a summary.json for programmatic consumption. Total runtime on a single RTX 3060 Ti is approximately 15–20 minutes per prompt style for the full 12-model lineup, dominated by HuggingFace model downloads on the first run.
The runner also supports OpenAI-compatible chat-completions endpoints (vLLM, ollama, LM Studio) and arbitrary chathaiku-shape HTTP endpoints. To benchmark a model not in the default models.json, add an entry with the appropriate backend; documentation is in the runner's README.
featherweight.jsonl is one JSON object per line. The first line is an optional metadata header. Each subsequent line is a single question record:
{"_meta": true, "name": "Featherweight v1", "version": "1.0", ...}
{"id": "geo01", "category": "geography",
"question": "What is the capital of France?",
"choices": ["Paris", "Berlin", "Madrid", "Rome"],
"answer": "A"}
{"id": "geo02", ...}
...
The format is intentionally minimal so it can be consumed by any evaluation runner with about 20 lines of glue code. The answer field accepts either a letter ("A") or a zero-indexed integer (0); both are normalized identically.
Substantive changes to the question set will be released as new major versions (v2, v3, ...) with their own JSONL files. Typo fixes and metadata corrections that do not change the meaning or correct answer of any question may be released as minor versions (v1.0.1, v1.0.2) with a changelog. Any change that could affect a previously published score will require a major version bump.
Featherweight v1 is released under the Creative Commons Attribution 4.0 International license (CC-BY-4.0). You may share and adapt the benchmark, including for commercial use, provided you give appropriate credit, provide a link to the license, and indicate if changes were made.
Suggested citation:
Issues, corrections, and proposed v2 additions can be sent via the contact link on rootcomputer.dev/business.