MARC-1 · MARC-2 · MARC-3 — a code-only, contamination-proof test of rule induction for ≤ 2B models. No dataset. Just a harness, a rule grammar, and your model.
Run it on any Hugging Face model in one command. python marc.py --hf HuggingFaceTB/SmolLM2-360M --chat
EM = exact grid match. fmt = output parses as a grid. Overall = mean across MARC-1/2/3. pass@n > EM means the model has latent rule inference it doesn't always land. Highlighted cells mark the best value in the current view.
Understanding the graphs: Small models often fall back on statistical guessing rather than solving the rule.
The Red dashed line is the mathematical random-guessing baseline.
The Yellow dashed line is 2× the random baseline. Scoring below this generally means the model is just guessing, or worse, copying the input.
Pattern
Periodic sequence continuation.
Object
Cross-grid spatial movement and transformation.
Counting
Read and tally marked cells.
Compositional
Chain two or more rules together.
#
Model
Org
pattern
object
counting
compositional
AVG
Cell value = EM for that family. Color scales from clay (low) to sage (high). pattern tests periodicity, object tests cross-grid comparison, counting tests read-and-tally, compositional tests two- to three-step rule chains.
EM by tier
Each model contributes three bars. MARC-1 = easy, MARC-2 = medium, MARC-3 = hard.
Format validity vs EM
High fmt + low EM = rule induction failure. Low fmt = instruction/format failure.
Family profile
Average EM per family. Sensible ordering is pattern > counting > object.