Reflex · benchmark

Same questions. Every lane. Losses included.

Reflex · modelless is built for latency and selective accuracy (right when it answers, abstains when it can't) — not raw accuracy against a neural model. Judge it on those axes. See it play →

Words used on this page
abstain
Saying I'm not sure instead of guessing; the full probability distribution still comes back with it.
coverage
The share of questions a lane actually answered.
calibration
Whether stated confidence matches reality: answers given “eight in ten” confidence should be right about eight times in ten.
ECE
Expected calibration error — the average gap between confidence and accuracy. Lower is better.
modelless
No neural network and no training run — answers come from documents you author plus a few small numbers fitted from your labels.
lane
One way of answering the same questions — an engine plus its setup. The board compares lanes side by side.
suite
One benchmark task: a fixed set of questions with known answers.
selective accuracy
How often answers are right, counting only the questions the system chose to answer (abstentions left out). Read it beside coverage.
cc
Chance-corrected accuracy: zero is random guessing on that suite's option count, one is perfect, below zero is worse than guessing.
conformal floor
A simple, well-understood baseline for honest confidence (split conformal prediction). A calibration claim has to beat it.
record-only
Measured and published on the board, but not yet served to anyone.
tier-fallback
Where a product lane has no answer of its own on a suite, the cell shows what is actually served there — the cheaper tier's answer — marked ↩ in tables and ▲ on the radar.
encoder head
A small trained layer on top of a text encoder that turns the encoder's reading of the question into option probabilities.
vessel
The package a hosted head is built to ship in: hashed, signed and encrypted, so only the hosted reader can open it. The format is built but not yet the serving path — today's specialists are files checked against a pinned BLAKE3 digest, run on our servers.
rung
One step on the ladder: free local Reflex first; a hosted head only when the step below abstains.

The full primer — the Jev wire, prefill, macro-F1, the Jev Decision Index — is on Resources.

Filter lanes — applies to every chart and table (remembered).

Areas & index

Chance-corrected so suites with different option counts share a radius — 0 = random guessing on that suite's options, 1 = every question right. Two views: one spoke per area (the decision index), one per benchmark.

The JDI crosswalk

Where Cloudflare's Clef-flash (9B) lands against our lanes on the same splits — every measured row digest-pinned to one population; the JDI board's own rows quoted as reference only.

Efficiency frontier

Decision quality per millisecond — the cc index against the p50 latency geometric mean, one dot per lane. The view no leaderboard in this space publishes; it is where a modelless engine's story is visible. Timing methods differ per lane — the table below says which clock each number comes from.

Timing methodology

How each lane's request time was recorded — two clocks never pool silently. The p50 geometric mean is taken over exactly the suites behind the lane's index, and only over cells the run's own box check judged quotable (unfit timing stays visible in the suite tables, marked †, but is never plotted).

S1MB — the external judgment benchmark

The System One Mosaic Benchmark (S1MB) asks a model to judge — pick an answer, rate a reply, or say true/false — across thousands of everyday tasks. We bench our three serving lanes on it with our own scoring: every lane reads the same halves of the same questions and is scored on the share it gets right. That share is not comparable to S1MB's own leaderboard number, which uses a different scoring scale we don't publish. A missing cell is a disclosed gap, never a zero.

Per suite

Charts first; open a suite's table for every metric, the G1 calibration verdict and the gate fit.

loading data/bench.json …

Protocol

Corpus, calibration, floor and divergence rules (from the run's own metadata)

Instinct — the trained add-on (PoC)

Instinct (gist-rs/riir-instinct) is Reflex's trained sibling: per-domain specialist models — distilled, pinned by a BLAKE3 digest checked at every load, hot-swapped as whole artifacts — composed on top of the free engine, never instead of it. That is the family's rung model: each rung answers only what the rung below is not confident about — you pay for thinking, never for re-answering what the free floor already knows — so a fallback to Reflex or Instinct is the design, not a miss. Rethink is the same family's hosted rung (rethink.riir.ai) one level deeper; its open race is against the other published lanes, and wins, ties and losses all stay visible below. The arena TL;DR stays Reflex's until the rung stack is the best published lane on every suite it covers.

Naming: the lane names carry no qualifier — Instinct is the hybrid (serving) lane, Rethink the encoder arm — Rethink is the separate hosted product (rethink.riir.ai; its source is private). Rethink is measured on a subset of suites so far (record-only: the encoder class is refused at serve), so its radar draws a dot only where its own arm measured and a triangle (▲) where the served tier answers — the coverage count beside its row names its own measured suites, and the row never reads below the product it belongs to. Where its own arm measured below the seated one, the served answer shows (↩, the answering arm + the encoder's own read on hover); where it reads ahead, the violet record cell stands — results land as the encoder serving deploy exists.

The Instinct composition, numbered along the path in four lanes. 1 your question — the same typed question. 2 Reflex answers first: embed, route, score, and the fused gate checks confidence. If sure, 3a the answer and its receipt return in microseconds and the specialist is never paid. If not sure, the open lane takes over: 3b.1 the abstained question is pruned to the top candidates, 3b.2 the locked per-domain specialist scores them — never blended — and 3b.3 a cascade pick or prior fusion returns one calibrated answer. Still unsure escalates one rung deeper to 4 the encoder rung on our GPU hosts — measured on the board, record-only. 5 the manifest hot-swaps registered arms — each beat free Reflex on one frozen read — back into the scoring step, whole.
Registered arms only: a specialist joins the manifest solely where it beat free Reflex pre-registration, on one frozen test read (the GOAT gate). Orange = your machine · pink = the open lane (serves live) · violet = our GPU hosts (the encoder rung, record-only). Write-up: instinct_flow.md.
Step by step: what goes in and what comes out
  1. 1 · The same typed question

    Your app sends the same typed question it would send the free engine: a state plus questions — choice, score or yes-no. This spot question is one the game heads know.

    IN · POST /decide

    {
      "state": "The piece leaves no holes under it on the left edge, sits flat on the surface, and the stack stays low.",
      "questions": [
        {
          "id": "clean",
          "kind": "noul",
          "prompt": "Does the stack look clean?"
        }
      ]
    }

    captured from the reflex 0.2.4 release binary, 2026-10-03 · POST /decide (answered request)

  2. 2 · The free floor answers first

    Reflex runs before anything paid: embed, route to the corpus, score every option, and the fused gate checks confidence. On this harder triage question the gate abstains — every outcome comes back null — and that abstain is what pays the rung above.

    IN · POST /decide · a harder question

    {
      "state": "The staging deploy of release candidate 4.2 finished but the error budget is down to 12 percent and two health endpoints are flapping after the rollout. Rollback is one command. Decide what happens next.",
      "questions": [
        {
          "id": "route",
          "kind": "choice",
          "prompt": "Route this ticket to the team that owns it.",
          "options": [
            "deploy-ops",
            "billing-support"
          ]
        },
        {
          "id": "promote",
          "kind": "noul",
          "prompt": "Should the rollout be promoted to production right now?"
        },
        {
          "id": "severity",
          "kind": "score",
          "prompt": "How severe is this situation?",
          "options": [
            "routine",
            "needs-attention",
            "critical"
          ]
        }
      ]
    }

    captured from the reflex 0.2.4 release binary, 2026-10-03 · POST /decide (abstained request)

    OUT · not sure: the abstain that pays the rung

    {
      "answers": [
        {
          "question_id": "route",
          "outcome": null,
          "probabilities": [0.52583224, 0.47416782],
          "confidence": 0.0019263625
        },
        {
          "question_id": "promote",
          "outcome": null,
          "probabilities": [0.49452087],
          "confidence": 0.00008660555
        },
        {
          "question_id": "severity",
          "outcome": null,
          "probabilities": [0.3601853, 0.2878931, 0.35192165],
          "confidence": 0.004379213
        }
      ],
      "routing": {
        "lane": "modelless",
        "reason": "modelless corpus routing: ops=3 support=0; fused abstain (score+distance) armed; drafter-only=1"
      },
      "calibration": {
        "method": "none",
        "temperature": 1.0
      }
    }

    captured from the reflex 0.2.4 release binary, 2026-10-03 · POST /decide (abstained response)

  3. 3a · Sure — the specialist is never paid

    When the floor is sure, the answer goes straight back with calibrated confidence and a receipt, and no specialist is consulted. That is the rung model: you pay for thinking, never for re-answering what the free floor already knows.

    IN · POST /decide

    {
      "state": "The piece leaves no holes under it on the left edge, sits flat on the surface, and the stack stays low.",
      "questions": [
        {
          "id": "clean",
          "kind": "noul",
          "prompt": "Does the stack look clean?"
        }
      ]
    }

    captured from the reflex 0.2.4 release binary, 2026-10-03 · POST /decide (answered request)

    OUT · sure: outcome yes

    {
      "answers": [
        {
          "question_id": "clean",
          "outcome": {
            "noul": {
              "yes": true
            }
          },
          "probabilities": [0.51943666],
          "confidence": 0.51943666
        }
      ],
      "routing": {
        "lane": "modelless",
        "reason": "game-head/tetris (corpus-fitted, decoded arm)"
      },
      "calibration": {
        "method": "none",
        "temperature": 1.0
      }
    }

    captured from the reflex 0.2.4 release binary, 2026-10-03 · POST /decide (answered response)

  4. 3b.1 · Prune to the candidates

    Only the abstained question goes on. The survivors are pruned to the top candidates so the rung above scores a handful of options, not the whole list.

  5. 3b.2 · The specialist scores

    A per-domain specialist — a locked artifact whose digest is checked at every load — scores the candidates. Selection is a monotonic hot-swap of whole artifacts from the manifest: never a weighted blend, because blends do not preserve rankings.

  6. 3b.3 · Fuse into one calibrated answer

    The composition fuses the floor's read with the specialist's: a cascade pick, or prior fusion lifting the calibrated favourite. A confident pick returns as the answer, receipt attached.

  7. 4 · Still unsure — one rung deeper ○ illustrative · planned

    Where the bag view reads too coarse, a trained encoder head thinks — GPU-hosted, weights on our hosts only. It is measured on the benchmark board today, record-only: the hosted lane opens later, and this is the public request it would carry.

    IN · the abstained question, sent up

    {
      "state": "The staging deploy of release candidate 4.2 finished but the error budget is down to 12 percent and two health endpoints are flapping after the rollout. Rollback is one command. Decide what happens next.",
      "questions": [
        {
          "id": "route",
          "kind": "choice",
          "prompt": "Route this ticket to the team that owns it.",
          "options": [
            "deploy-ops",
            "billing-support"
          ]
        },
        {
          "id": "promote",
          "kind": "noul",
          "prompt": "Should the rollout be promoted to production right now?"
        },
        {
          "id": "severity",
          "kind": "score",
          "prompt": "How severe is this situation?",
          "options": [
            "routine",
            "needs-attention",
            "critical"
          ]
        }
      ]
    }

    captured from the reflex 0.2.4 release binary, 2026-10-03 · POST /decide (abstained request)

  8. 5 · The manifest hot-swaps arms

    arsenal.toml is the one selection surface: a specialist joins only where it beat free Reflex on one frozen test read, and it is swapped whole — a decision always observes one whole server.

loading the Instinct verdicts from data/bench.json…

FAQ

What are the lanes?

Reflex · modelless — no neural weights: decisions come from a per-label corpus plus a fitted sigmoid gate, so it answers in micro-seconds and is bit-deterministic on a given build. laya (rust) — our Rust port running the open-weights laya checkpoints on the local GPU (device noted per run: Metal, or the Apple Neural Engine where the lane serves it). laya (python) — the original torch reference, driven as a subprocess oracle on the same cases. clm — the external Contrastive-LM reference (Apache-2.0, not affiliated): Qwen3-8B pooling + trained heads, served on its own stack and measured on ours — a comparison lane (full detail in the clm entry below). gliner — the external GLiNER2.5-Decide zero-shot classifier (Apache-2.0, not affiliated, 340M DeBERTa-v3 encoder): their gliner2 package answers the same candidate-label questions — a comparison lane, never a product lane. agentjev — the external AgentJev-0.6B typed-decision specialist (Apache-2.0, not affiliated, Qwen3-0.6B backbone): their service answers over HTTP, measured gold-label on our split — a comparison lane, never a product lane. Instinct — the trained-specialist hybrid (open source: riir-instinct): a distilled specialist (pinned by a BLAKE3 digest checked at load) composed with Reflex — the modelless lane's fused gate decides when to consult it; the cell is the registered arm's single frozen test read over the same seat and protocol as every other lane (per suite, only where a hybrid arm won pre-registration). Rethink — the same family's encoder arm, served by the hosted Rethink product (record-only: the encoder class is refused at serve, so it is measured on a subset of suites so far and its row discloses the partial coverage). Where the encoder's own read sits below the seated arm's, the row shows the served answer with the ↩ fallback mark and the encoder's read in the note (best-of-family); where it reads ahead, the violet record cell stands on its own measurement. openthai — the external OpenThai-SystemOne decision specialist (Apache-2.0, not affiliated, Qwen3.5-0.8B backbone): their FastAPI service answers the same decision questions, measured gold-label on our splits — a comparison lane, and the board's Thai-capability row. paw — the external ProgramAsWeights compile-a-classifier lane (MIT SDK, not affiliated): one neural program compiled per question shape from our committed spec, answered over their hosted REST — or through their local llama.cpp runtime as the paw (local) posture — a comparison lane, never a product lane (free-text answers under the exact-match law, so it carries no confidence columns). clef-flash (9B) · local — Cloudflare ships two Clef decision models (not affiliated): Clef (27B) and Clef-flash (9B). This lane is Clef-flash (9B), measured as their open weights rather than their hosted API: the community 4-bit quant (mlx-community/clef-flash-4bit) served on our box behind a loopback shim — a comparison lane, never a product lane. Clef (27B) is not on the board: its hosted posture is a future owner-gated cell.

Tell me more about the clm lane

CLM (Contrastive Language Models) is an external, unaffiliated research project — an Apache-2.0 "System One" decision model (Kwok, Kang, Suresh, Saad-Falcon, Pavone, Ré, Mirhoseini — github.com/Contrastive-LM/CLM · project blog). Architecture: a frozen Qwen3-8B encoder with last-token pooling plus ~20M-parameter state/action heads trained with a contrastive (InfoNCE) objective, so a softmax over state–action scores is the answer distribution. These rows use their reference head CLM-v0.1-8B (75 MB, on Hugging Face).

How we measure it: their stack serves, ours measures. The lane runs on the 4090 box — one vLLM Qwen3-8B pooling server plus clm-serve (the heads) behind their TypeSafe-compatible /v1/systemone endpoint — and our harness drives it with the same byte-identical questions as every other lane. Their prompt/prose rendering is byte-pinned against the reference implementation (goldens generated from their own Python at the pinned commit cca045ff), so the comparison is their rendering law, not our paraphrase of it. Latency figures include the HTTP round-trip, and their published "9× vs Jev" speedup — measured against Jev's remote endpoint, network included — deliberately does not carry into these tables. CLM is a comparison lane only: it is not part of Reflex and ships in no release; accuracy columns compare it exactly as they compare everyone else.

What is the ANE device row?

Some laya (rust) runs serve from the Apple Neural Engine — the encoder executes as one compiled whole-graph Core ML model per length bucket (BC1S, FP16), while the gather and the decision head stay host-side. FP16 math fails a bit-level drift bar by nature, so the ANE rows are gated the way every device row should be: decision-level — top-1 agreement against the frozen reference captures (gate ≥ 99.9%), and every argmax flip must sit inside the near-tie band (the reference's own top-2 margin < 0.04). Every flip, near-tie or not, is listed — never hidden. Probability drift is published as observation, never as a gate. Sequences longer than the largest bucket are served by the other devices and named as skips on the ANE row.

Why does the modelless lane lose on accuracy?

It is corpus-bound by design: out-of-domain text lands near chance, and those rows are published rather than trimmed. Its axes are latency and selective accuracy — how right it is on the questions it chooses to answer (acc@50cov, abstain / sel-acc) — not raw accuracy against a neural model.

Where the gap was the scorer rather than the domain, it closes. Per-label count tables (naive-Bayes log-odds over the train rows, plus a sentence-pair view for premise/hypothesis tasks) are cal-selected per suite, and the test split is read once. When count tables landed this took several suites to or past the laya lanes at the same sub-millisecond latency. 2026-10-01 correction: the modelless cells published 2026-09-28..30 were measured on a silently truncated 4,000-row-per-suite corpus pull while every posture they serve was selected on the full pools — the board read up to 42 points low on five suites through no engine change. Both hosts were re-run on the rebuilt full pools (every cell now carries a corpus digest; the board change log keeps the record), and the earlier numbers are restored — banking77 now reads above its count-table-era cell, a real engine gain. The test split never enters a corpus. A separate transductive line under each table shows what happens if the engine may also read the test text (self-labelled, gold never read): it adds nothing, because the train rows already carry the vocabulary.

Why are the rust and python bars the same length on accuracy?

They should be: the rust lane is a port of the same checkpoints and is checked against the python oracle's own outputs per suite. What differs is latency — and the python figure includes the subprocess round-trip (IPC).

Why is the openthai massive_intent_en row so much slower on @m3-max-metal than on @4090-win?

The openthai model reads every option as prompt text — the input template inlines each option (<|ts_opt_i|> option: description) and one forward scores all 256 slots at the answer position, so per-question cost scales with option count. massive carries 59 options (~203 tokens/question) vs xnli's 3, and on MPS fp32 that prices at — per option (—/question, p50). The 4090 prices the identical prompts at — — same design, same accuracy (— on both hosts), — cheaper tokens. Every figure here is read from the massive_intent_en openthai cells in the table above. Verified as real, not box contamination: a preflight-passed exclusive-GPU re-read reproduced the number within 5% and made every @m3-max-metal openthai cell quotable from its own run.

Why is latency on a log scale?

The lanes are orders of magnitude apart. On a linear axis every modelless bar would be invisible; on the log axis each gridline is 10×, so bar length compares ratios, not differences. When a lane lands far past the readable range the axis breaks — the same slanted break sign the sizes chart uses: the log axis runs to 500 ms over most of the track, and a bar past the sign continues on a compressed scale, its exact value on the cell and in the tooltip.

What do acc@50cov and abstain / sel-acc mean?

acc@50cov is accuracy on the half of the questions the lane is most confident about. abstain / sel-acc is the fraction the calibrated gate declined to answer, and the accuracy on the rest.

What does G1 PASS / FAIL / NO CLAIM mean?

G1 gates calibration honesty only: does the fitted confidence beat both the raw readout and the conformal-naive floor? It is not an accuracy gate. FAIL means the calibrator had nothing to improve; NO CLAIM means it never fitted (the calibration window was too thin) — neither means the answers got worse.

Why is a bar missing?

That lane did not run on that suite (for example, a suite that only the LLM lane can answer). A missing bar reads "not run", never zero.

Are these numbers hand-typed?

No. Charts and tables are both drawn in your browser from data/bench.json, which is generated from the harness output. Re-publishing that file re-draws everything.

Where are the six harness families on this board?

Retired (owner call, 2026-10-02): on the honest wide-eval populations (96–100 cases, template-disjoint) the modelless engine read at chance on them, so the suites were deleted from the reflex harness and the board rows went with them — the old small-suite rows were template-shared and read high (the verdict record: HISTORY.md). The quarantined caveat page that used to carry the lanes' record was removed in the same call; its data never entered this board's areas/cc/index math.

Notes

How to read these numbers
  • Fair board — every lane sees byte-identical questions. No single "we win" number exists or will exist.
  • Instinct / Rethink are Reflex's trained sibling lanes (Instinct is open source, gist-rs/riir-instinct; Rethink is the hosted product, private source): Instinct composes distilled per-domain specialists on top of the free engine — consulted only where Reflex's calibrated gate declines; Rethink is the same family's encoder arm (record-only so far — refused at serve, a partial-coverage lane). Full description: What are the lanes? and the Instinct section above.
  • Every row names its machine with an @host tag (chip + device): @m3-max-metal is this page's baseline machine serving the laya lane from Metal, @4090-win is a different box, and @m3-max-ane is the same M3 serving the laya lane from the Apple Neural Engine — a device row (laya lanes only; the modelless lane uses no neural device and always reads from the @m3-max-metal row). Hardware for every box: Machines below.
  • † on a latency cell: the run that measured that timing judged its own machine unfit to quote latency (load or power, riir-reflex's box check) — shown so nothing is hidden, not quotable. A cell with no mark was either fit, unjudged (a host with no box probes; hover for which), or published before the check was recorded.
  • Chance level differs per suite (a 3-way and a 77-way task are not comparable) — compare lanes within a suite, never one suite's bar with another's. The cc column and the area radar are chance-corrected (cc = (acc − chance)/(1 − chance)): 0 = random guessing on that suite's options. A negative cc is real and stays negative — the ▾ / hollow-dot mark says the lane scored below random guessing on that suite, and it pulls the lane's area means and index down by design (the published scale string in data/bench.json says the same). Each edition of the table pins its chance basis by digest; the label rides meta.edition.
  • One checkpoint per laya lane — the hero chart shows the best non-multilingual checkpoint for that suite, picked once by accuracy so every metric toggle shows the same run. Every checkpoint (multilingual included) is in the per-suite tables.
  • p99 on a small suite is effectively its maximum (under ~100 samples the 99th percentile lands on the last one) — read p99 on any small suite as "worst observed", not a tail estimate.
  • Bit-identity is claimed for the modelless lane only; the laya lanes get the same repeat check, reported under det, not claimed.
  • Latency is wall-clock on the host named in the provenance line above; it moves with the machine and its power state. Modelless accuracy does not — the publisher refuses to merge a host whose modelless accuracy drifts.

Board changes

What changed on this board, and why (append-only)

loading data/changes.json …

References

Machines

Hardware of every @host
  • @m3-max-metal / @m3-max-ane — MacBook Pro (Mac15,8): Apple M3 Max — 16-core CPU (12 performance + 4 efficiency), 40-core integrated GPU (Metal 4), 64 GB unified memory, macOS 26.6.2. One machine, two device rows: @m3-max-metal serves the laya lane from Metal; @m3-max-ane is the same box with the encoder compiled as a whole-graph Core ML model on the Apple Neural Engine (FP16, decision-level gated — see the ANE entry above).
  • @4090-win — desktop, Windows 11 Pro: Intel Core i7-13700K (16 cores / 24 threads), 32 GB RAM, NVIDIA GeForce RTX 4090 (24 GB GDDR6X, driver 610.62). Serves the @4090-win laya rows (CUDA) and the clm reference lane (vLLM Qwen3-8B pooling + clm-serve heads), so those lanes share this box's silicon and thermals.

Not affiliated with, or endorsed by, TypeSafe AI; Jev is their product, named only to compare against. The laya lane loads Apache-2.0 checkpoints from the brainfunctioncollapse laya Hugging Face repositories at runtime — unmodified, SHA-256-verified, never redistributed.