{% extends "base.html" %} {% block title %}AI CAPTCHA — Model Benchmark{% endblock %} {% block content %}

⚡ Model Benchmark

Which models can clear which puzzles — at which difficulty. Each cell is {{ bench.meta.get('trials', 10) }} independent solves of a freshly generated puzzle; a model must pass the puzzle consistently, not once. Scored against the exact same validation the live server uses.

{% if bench.meta.get('generated_utc') %}

Run: {{ bench.meta.get('generated_utc') }} · models: {{ bench.meta.get('agents', []) | join(', ') }}

{% endif %}
{% if not bench.tiers %}

No benchmark data yet

Run benchmarks/run_all.sh then python benchmarks/model_benchmark.py merge to populate benchmarks/results.json, and this table will appear here.

{% else %} {% set tiers = bench.tiers %} {% set models = bench.model_order %} {% set types = bench.type_order %}
{% for tier in ['easy','medium','hard'] %} {% endfor %}
{% for tier in ['easy','medium','hard'] %} {% set col_types = bench.tier_types.get(tier, []) %}
{% if tier in tiers and col_types %}
{% for t in col_types %} {% endfor %} {% for m in models if m in tiers[tier] %} {% set row = tiers[tier][m] %} {% set ns = namespace(total=0, count=0) %} {% for t in col_types %} {% if t in row %} {% set c = row[t] %} {% set ns.total = ns.total + c.correct %} {% set ns.count = ns.count + c.trials %} {% else %} {% endif %} {% endfor %} {% endfor %}
Model{{ bench_labels.get(t, t) }}Avg
{{ model_labels.get(m, m) }} {{ (c.pass_rate * 100)|round|int }}% – {{ ((ns.total / ns.count * 100) if ns.count else 0)|round|int }}%
{% else %}

No data for the {{ tier }} tier yet.

{% endif %}
{% endfor %}
100% — flawless ≥80% — passes (MIN_PASS_RATE) <80% — fails

Notes

{% endif %} {% endblock %}