Evaluations
How patches are evaluated
A patch is only worth installing if it fixes the failure on cases it never trained on and doesn't break other things. This is the protocol the evaluation harness runs today, including what it can't tell you.
Data
Splits by template family and payee
The first task turns a payment instruction into a strict create_payment tool call. Every case is generated from first-party templates. The split is made by sentence template family and by payee pool, not by shuffling rows, so a held-out case never shares a sentence shape or a payee name with anything the adapter trained on.
| Split | Families | Payees | Suite size | Used for |
|---|---|---|---|---|
| Train | 6 | 20 | Set per training run | Gradient updates and the three few-shot examples for the prompt-only control |
| Validation | 2 | 5 | 60 cases | Development checks. Its cases may be published as examples, so it is never the headline benchmark |
| Held-out | 4 | 10 | 120 cases | The only split a published version may cite. Sealed and never used to tune anything |
Suites are built deterministically from a fixed seed, and each report records the sha256 of the exact suite it ran, so a later run on a different suite can't be passed off as the same one.
Benchmark
Sealed held-out cases
Held-out cases are not published. Publishing them would let anyone, including us, tune a later version against the benchmark.
Their digest is published instead, along with aggregate counts and per-field error counts. Reviewers with access can reproduce the run. The public case gallery on a patch page comes from the validation split. Those cases were visible during development, so they are examples of behaviour, not proof of it.
Harness
One harness, four arms
The base checkpoint is loaded once, and every arm uses the same tokenizer, chat template, system prompt and decoding settings.
- Arm 01BaseThe unmodified model on the target suite and on the regression suite.
- Arm 02Prompt-only controlThe base model with three worked examples from the train split added to the system prompt. If a cheaper prompt change matches the patch, the result says so.
- Arm 03PatchedThe adapter loaded with PEFT, on both suites.
- Arm 04Rollback checkThe same loaded model with the adapter disabled. Its outputs must match the base arm character for character, and the report records whether they did.
Decoding is greedy with a 128-token output limit. The report pins the grader source digests, the library versions, the device and the dtype.
Grading
Strict graders, every case eligible
The target grader passes a case only if the entire reply is one JSON object, with no prose or code fences around it, no extra keys, and all six fields exactly equal to the expected call. Amounts must be in minor units and relative dates must be resolved.
def grade(output, expected): parsed = json.loads(output.strip()) # any parse error is a failure # must be a JSON object, no extra keys, # and all six fields equal to the expected callEvery generated case is eligible. Empty, unparseable and truncated replies count as failures. Nothing is excluded after the fact, so the denominator on a patch page is always the full suite size.
Side effects
Regression suite
general-regression-v1 has 60 cases spread evenly across six families of unrelated behaviour, graded by exact match. A case counts as a regression introduced when the base model passed it and the patched model failed it.
| Family | What it asks |
|---|---|
| arithmetic | Two-digit addition, subtraction or multiplication, answer with only the number |
| capital | Capital city of one of 15 countries, answer with only the city |
| uppercase | Write a given word in uppercase |
| reverse_list | Reverse a comma-separated list of three words |
| echo | Reply with exactly one given word |
| contact_json | Extract name, age and city into JSON with a different schema from the patch's task |
contact_json is there on purpose. A patch that teaches the model to force every JSON request into the payment schema fails it.
Statistics
Intervals and thresholds
Every score is shown as correct over eligible, with a Wilson 95% interval. Changes are reported in absolute percentage points, never as a relative "times better". The pass thresholds are declared before the held-out run and written into the manifest of every version.
- Minimum gain
- +10 pp
- on the held-out suite
- Regression allowance
- ≤2
- regression cases introduced
The packager assigns the starting state from those numbers alone. No gain, or a regression drop beyond the allowance, is DEGRADED. Meeting both thresholds is IMPROVED_ON_SCOPE. Anything in between is EXPERIMENTAL. Only an operator can move a version to verified.
States
Evidence states
Each version carries exactly one of these states. The badge on a patch page links here.
- evaluated
EVALUATED - Metrics exist. Improvement is not necessarily established.
- improved on scope
IMPROVED_ON_SCOPE - The target improvement was observed under the declared protocol. Regressions are disclosed.
- verified for scope
VERIFIED_FOR_SCOPE - An operator reproduced the result, checked license and provenance, confirmed compatibility, and the minimal regression gates were satisfied.
- experimental
EXPERIMENTAL - Useful research, but the evidence is insufficient for the declared threshold.
- degraded
DEGRADED - Target or regression tests got worse.
- withdrawn
WITHDRAWN - A known bad or unsafe version. Its historical evidence stays accessible.
Scope
What verified for scope does not mean
- It doesn't mean the model is better in general. It covers the one declared task, on the held-out suite named in the report.
- It doesn't cover other checkpoints, other sizes in the same family, quantized bases or merged weights.
- It doesn't mean every held-out case passes. The remaining failures are counted on the patch page.
- It doesn't mean nothing regressed. Introduced regressions are allowed up to the declared limit and are listed.
- A signature proves who published the exact bytes. It says nothing about output quality.
- An onchain registration proves a record was made at a point in time. It is not evidence that the patch works.
Known limitations
What this protocol can't tell you yet.
See the artifact docs for how to check a package yourself.
Synthetic first-party data
The payment task is generated from templates we wrote. Real instructions are messier, and the held-out families can't represent all of them.
A small base model
Genesis supports one 1.5B-parameter checkpoint. Results don't transfer to larger models by assumption.
One hardware class
Training and evaluation run on Apple Silicon through PyTorch MPS. CUDA and CPU numerics can differ slightly, and that hasn't been measured.
Greedy decoding only
Sampled decoding with temperature is not evaluated, so there are no repeated-seed variance figures yet.
Self-evaluation
The first patch is built and evaluated by Retoque. Independent reproduction by outside reviewers is not in place yet.