Tau Workbench report
Banking77: which of 77 intents is this customer message?
This report measures how far 3 model(s) can be trusted on "Which banking customer-service intent does this message express?", using banking77 data (1,000 held-out items). Reference: the dataset's gold labels; every rate below is accuracy against them. Out of the box, laya-en is 37.2% accurate with a calibration error (ECE) of 0.502; after calibration its ECE is 0.065, 87.1% lower, which meets the 50% goal. At a 5.0% target error, laya-en-ft-banking77 keeps 73.6% of decisions local, the most of any model (von-1.2.0, the least, keeps 4.5%); the cascade is 93.2% accurate against 94.2% for claude-opus-5-5 alone, at an estimated £1,031 per million decisions against £3,898 (list prices, 2026-09-27). The classic baseline minilm-l6-banking77 (not served through Tau) does better, keeping 94.7% local at 94.2% blended accuracy. The frontier model disagrees with the gold labels on 5.8% of 1,000 items, which bounds how much any accuracy figure here can be trusted.
Generated 2026-09-27T17:15:19Z (UTC) on NVIDIA GeForce RTX 3080 Ti. Every number below is in report.json beside this file; the metadata block at the end says how to reproduce it.
Dataset
- Name
- banking77
- Source
- PolyAI-LDN/task-specific-datasets
- Pinned revision
- 9d081458ff52e53cf7e848f414e6e9344e4e6696
- Licence
- CC-BY-4.0
- Synthetic
- No
- Fine-tune split
- 9,003 items
- Calibration split
- 1,000 items
- Held-out split
- 1,000 items
- Question
- intent (choice, 77 answers): Which banking customer-service intent does this message express?
Calibrators and thresholds are fitted on the calibration split only and every result is judged on the held-out split, which nothing was tuned on. The splits are fixed by the dataset manifest (seed 42), and each file's sha256 is checked before use.
Accuracy and calibration, before and after
| Model | Items | Accuracy raw | Accuracy calibrated | ECE raw | ECE calibrated | ECE change | Brier raw → cal. | Log loss raw → cal. | Calibrated view |
|---|---|---|---|---|---|---|---|---|---|
| laya-en | 1,000 | 37.2% | 37.2% | 0.502 | 0.065 | −87.1% | 1.096 → 0.812 | 9.841 → 2.906 | Runtime with calibrators loaded; matches the Workbench's offline calibration to within 1.2e-1 in any probability |
| von-1.2.0 | 1,000 | 77.1% | 77.0% | 0.185 | 0.039 | −78.9% | 0.411 → 0.354 | 3.723 → 1.078 | Runtime with calibrators loaded; matches the Workbench's offline calibration to within 1.5e-1 in any probability |
| laya-en-ft-banking77 | 1,000 | 87.3% | 87.1% | 0.071 | 0.061 | −13.6% | 0.221 → 0.210 | 0.702 → 0.721 | Runtime with calibrators loaded; matches the Workbench's offline calibration to within 2.3e-2 in any probability |
Held-out items only. ECE (expected calibration error) is the average gap between how confident a model is and how often it is right, over 15 confidence bins; lower is better and 0 is perfect. Confidence for ECE and thresholds is max(p), the probability of the chosen answer, not the contract's confidence field, which for choice and score questions is not a calibrated probability. The goal is a 50% cut in ECE. The largest cut is laya-en's (87.1%) and the smallest is laya-en-ft-banking77's (13.6%); a model whose confidence is still off after calibration should not be trusted to gate decisions on its own.
Reliability diagrams
Each point is one confidence bin on the held-out split: how confident the model was (across) against how often it was right (up). Points below the diagonal are overconfident, points above it underconfident. After calibration the points should sit close to the diagonal; where they don't, a threshold on that model's confidence will not deliver the accuracy it promises.
Table view: every bin
| Model | Bin | Raw items | Raw confidence | Raw accuracy | Cal. items | Cal. confidence | Cal. accuracy |
|---|---|---|---|---|---|---|---|
| laya-en | 0.00–0.07 | 5 | 0.059 | 0.000 | 56 | 0.041 | 0.125 |
| laya-en | 0.07–0.13 | 14 | 0.098 | 0.071 | 75 | 0.103 | 0.133 |
| laya-en | 0.13–0.20 | 10 | 0.176 | 0.100 | 70 | 0.167 | 0.243 |
| laya-en | 0.20–0.27 | 10 | 0.238 | 0.200 | 79 | 0.238 | 0.203 |
| laya-en | 0.27–0.33 | 10 | 0.308 | 0.200 | 79 | 0.301 | 0.241 |
| laya-en | 0.33–0.40 | 10 | 0.359 | 0.100 | 97 | 0.368 | 0.371 |
| laya-en | 0.40–0.47 | 15 | 0.437 | 0.067 | 95 | 0.433 | 0.284 |
| laya-en | 0.47–0.53 | 32 | 0.500 | 0.188 | 156 | 0.505 | 0.410 |
| laya-en | 0.53–0.60 | 23 | 0.563 | 0.087 | 293 | 0.547 | 0.601 |
| laya-en | 0.60–0.67 | 29 | 0.637 | 0.172 | 0 | n/a | n/a |
| laya-en | 0.67–0.73 | 25 | 0.697 | 0.280 | 0 | n/a | n/a |
| laya-en | 0.73–0.80 | 39 | 0.773 | 0.179 | 0 | n/a | n/a |
| laya-en | 0.80–0.87 | 45 | 0.832 | 0.200 | 0 | n/a | n/a |
| laya-en | 0.87–0.93 | 64 | 0.902 | 0.219 | 0 | n/a | n/a |
| laya-en | 0.93–1.00 | 669 | 0.993 | 0.469 | 0 | n/a | n/a |
| von-1.2.0 | 0.00–0.07 | 0 | n/a | n/a | 1 | 0.051 | 0.000 |
| von-1.2.0 | 0.20–0.27 | 0 | n/a | n/a | 6 | 0.248 | 0.167 |
| von-1.2.0 | 0.27–0.33 | 0 | n/a | n/a | 10 | 0.310 | 0.500 |
| von-1.2.0 | 0.33–0.40 | 0 | n/a | n/a | 25 | 0.364 | 0.400 |
| von-1.2.0 | 0.40–0.47 | 1 | 0.415 | 0.000 | 50 | 0.439 | 0.340 |
| von-1.2.0 | 0.47–0.53 | 8 | 0.520 | 0.250 | 45 | 0.504 | 0.556 |
| von-1.2.0 | 0.53–0.60 | 17 | 0.568 | 0.471 | 54 | 0.566 | 0.593 |
| von-1.2.0 | 0.60–0.67 | 14 | 0.643 | 0.500 | 93 | 0.629 | 0.699 |
| von-1.2.0 | 0.67–0.73 | 19 | 0.692 | 0.526 | 21 | 0.695 | 0.667 |
| von-1.2.0 | 0.73–0.80 | 28 | 0.773 | 0.357 | 139 | 0.762 | 0.719 |
| von-1.2.0 | 0.80–0.87 | 36 | 0.835 | 0.500 | 37 | 0.854 | 0.730 |
| von-1.2.0 | 0.87–0.93 | 47 | 0.896 | 0.574 | 492 | 0.893 | 0.909 |
| von-1.2.0 | 0.93–1.00 | 830 | 0.995 | 0.830 | 27 | 0.938 | 1.000 |
| laya-en-ft-banking77 | 0.00–0.07 | 21 | 0.055 | 0.524 | 1 | 0.039 | 0.000 |
| laya-en-ft-banking77 | 0.07–0.13 | 29 | 0.095 | 0.483 | 1 | 0.122 | 0.000 |
| laya-en-ft-banking77 | 0.13–0.20 | 17 | 0.168 | 0.588 | 32 | 0.165 | 0.375 |
| laya-en-ft-banking77 | 0.20–0.27 | 5 | 0.232 | 0.000 | 16 | 0.240 | 0.688 |
| laya-en-ft-banking77 | 0.27–0.33 | 8 | 0.307 | 0.500 | 17 | 0.309 | 0.529 |
| laya-en-ft-banking77 | 0.33–0.40 | 8 | 0.358 | 0.625 | 19 | 0.373 | 0.474 |
| laya-en-ft-banking77 | 0.40–0.47 | 5 | 0.425 | 0.200 | 7 | 0.413 | 0.429 |
| laya-en-ft-banking77 | 0.47–0.53 | 5 | 0.505 | 0.400 | 6 | 0.498 | 0.333 |
| laya-en-ft-banking77 | 0.53–0.60 | 3 | 0.568 | 0.667 | 16 | 0.568 | 0.625 |
| laya-en-ft-banking77 | 0.60–0.67 | 3 | 0.630 | 0.667 | 8 | 0.632 | 0.625 |
| laya-en-ft-banking77 | 0.67–0.73 | 8 | 0.702 | 0.500 | 18 | 0.704 | 0.500 |
| laya-en-ft-banking77 | 0.73–0.80 | 8 | 0.769 | 0.625 | 10 | 0.768 | 0.400 |
| laya-en-ft-banking77 | 0.80–0.87 | 11 | 0.839 | 0.727 | 16 | 0.846 | 0.813 |
| laya-en-ft-banking77 | 0.87–0.93 | 54 | 0.904 | 0.574 | 44 | 0.910 | 0.795 |
| laya-en-ft-banking77 | 0.93–1.00 | 815 | 0.966 | 0.950 | 789 | 0.983 | 0.949 |
Calibrators fitted
| Model | Scope | Items | Chosen | Temperature T | Temperature ECE / log loss | Isotonic knots | Isotonic ECE / log loss | Before: ECE / log loss |
|---|---|---|---|---|---|---|---|---|
| laya-en | question type | 1,000 | temperature | 3.049 | 0.095 / 2.977 | 86 | 0.080 / 2.998 | 0.500 / 9.808 |
| laya-en | 11+ options | 1,000 | temperature | 3.049 | 0.095 / 2.977 | 86 | 0.080 / 2.998 | 0.500 / 9.808 |
| von-1.2.0 | question type | 1,000 | isotonic | 2.256 | 0.049 / 1.170 | 100 | 0.038 / 1.116 | 0.205 / 3.584 |
| von-1.2.0 | 11+ options | 1,000 | isotonic | 2.256 | 0.049 / 1.170 | 100 | 0.038 / 1.116 | 0.205 / 3.584 |
| laya-en-ft-banking77 | question type | 1,000 | isotonic | 1.018 | 0.064 / 0.761 | 96 | 0.065 / 0.655 | 0.065 / 0.761 |
| laya-en-ft-banking77 | 11+ options | 1,000 | isotonic | 1.018 | 0.064 / 0.761 | 96 | 0.065 / 0.655 | 0.065 / 0.761 |
Both methods are fitted on the calibration split's raw probabilities, and the one with the lower calibration-split log loss is written for the Runtime to load; the scores in this table are on the calibration split, so they show the fit, not the result (the held-out result is in the first table). Isotonic regression needs at least 200 items and falls back to temperature scaling below that.
- laya-en: A spec asks one question, so every item has 77 options and the 11+ bucket calibrator is fitted on the same items as the question-type one. The Runtime prefers the bucket file for 77-option requests; the type-level file covers other option counts.
- von-1.2.0: A spec asks one question, so every item has 77 options and the 11+ bucket calibrator is fitted on the same items as the question-type one. The Runtime prefers the bucket file for 77-option requests; the type-level file covers other option counts.
- laya-en-ft-banking77: A spec asks one question, so every item has 77 options and the 11+ bucket calibrator is fitted on the same items as the question-type one. The Runtime prefers the bucket file for 77-option requests; the type-level file covers other option counts.
How much can stay local
Each line shows, on held-out items, what happens as the confidence threshold τ rises: fewer decisions are kept local (moving left) and those kept are more often right (moving up). The dot marks the τ chosen on the calibration split for a 5.0% target error. A line that never reaches the target line means no threshold makes that model safe enough on its own at that target. Thresholds that keep fewer than 10 items are left off the chart because a handful of items says little; every point is in report.json. Dashed lines are baselines, not served through Tau, put through exactly the same threshold rule on their own calibration lines.
| Model | Confidences from | τ | Kept local (calibration) | Kept local (held-out) | Accuracy on kept (held-out) | Result |
|---|---|---|---|---|---|---|
| laya-en | offline | n/a | n/a | n/a | n/a | No threshold meets the 5.0% target error on the calibration split. The lowest error any threshold reaches is 37.9%, at τ = 0.54, accepting 28.2% of items. No threshold is invented. |
| von-1.2.0 | offline | 0.92 | 4.0% | 4.5% | 100.0% | τ = 0.92 is the smallest threshold whose calibration-split error is at most 5.0%. On held-out it accepts 4.5% of items with 100.0% accuracy. |
| laya-en-ft-banking77 | offline | 0.95 | 71.9% | 73.6% | 96.2% | τ = 0.95 is the smallest threshold whose calibration-split error is at most 5.0%. On held-out it accepts 73.6% of items with 96.2% accuracy. |
| minilm-l6-banking77 (baseline) | baseline-calibrated | 0.58 | 94.6% | 94.7% | 94.7% | τ = 0.58 is the smallest threshold whose calibration-split error is at most 5.0%. On held-out it accepts 94.7% of items with 94.7% accuracy. |
Cascade: local first, frontier for the rest
| Model | τ | Kept local | Escalated | No frontier answer | Local only | Frontier only | Cascade | Local p50 latency |
|---|---|---|---|---|---|---|---|---|
| laya-en | n/a | n/a | n/a | n/a | 37.2% (1,000) | 94.2% (1,000) | No cascade: no threshold met the 5.0% target error on the calibration split. | 96.9 ms |
| von-1.2.0 | 0.92 | 4.5% | 95.5% | 0 | 77.0% (1,000) | 94.2% (1,000) | 94.2% (1,000) | 91.8 ms |
| laya-en-ft-banking77 | 0.95 | 73.6% | 26.4% | 0 | 87.1% (1,000) | 94.2% (1,000) | 93.2% (1,000) | 244.0 ms |
| minilm-l6-banking77 (baseline, not served through Tau: local latency and energy not measured) | 0.58 | 94.7% | 5.3% | 0 | 91.7% (1,000) | 94.2% (1,000) | 94.2% (1,000) | not measured |
Accuracy is on held-out items, with the number of items each figure covers in brackets. The cascade keeps the local answer when its confidence is at least τ and uses the frontier model's cached answer otherwise; an escalated item with no cached answer is counted and left out, never guessed. If the cascade is close to frontier-only accuracy while keeping a large share local, most of the frontier cost can be avoided. Frontier latency is not measured: no API call was made, so the latency mix covers the local side only.
Cost for laya-en Estimates, not measured bills
| Price basis | Frontier only, per million (USD) | Frontier only, per 1,000 | Frontier only, per million | Cascade, per 1,000 | Cascade, per million | Saving, per million |
|---|---|---|---|---|---|---|
| claude-opus-5-5 at list price (the model that produced the frontier answers) | $5,165 | £3.90 | £3,898 | n/a | n/a | n/a |
| claude-opus-5-5-batch: the same model at a different rate | $2,583 | £1.95 | £1,949 | n/a | n/a | n/a |
| claude-sonnet-5: price only, if escalations went to this model; its accuracy was not measured | $2,583 | £1.95 | £1,949 | n/a | n/a | n/a |
| claude-haiku-4-5: price only, if escalations went to this model; its accuracy was not measured | $1,291 | £0.9744 | £974 | n/a | n/a | n/a |
No cascade: no threshold met the target, so there is nothing to price.
Every figure in this table is an estimate from list prices and estimated token counts, not a measured bill. It shows what the same decisions would cost through the API, and what share of that the cascade avoids. Basis:
- Frontier tokens are estimated, not counted: characters / 4 (Anthropic's rule of thumb) × 1.3 for the tokenizer, averaged over 1,000 cached answers: 1258.9 input and 6.5 output tokens per decision.
- List prices in US dollars per million tokens, checked 2026-09-27 (platform.claude.com/docs/en/about-claude/pricing (checked 2026-09-27)).
- USD to GBP at 0.75458 (ECB euro foreign exchange reference rates, 2026-09-25).
- Frontier answers for this benchmark came from an interactive Claude Code session, not the API; the costs price what the same work would cost through the API.
- Local energy: 337.8 W mean whole-GPU power × 0.02446 s per decision (phase duration / items) = 2.295e-6 kWh per decision, at £0.2632 per kWh (www.ofgem.gov.uk/news/changes-energy-price-cap-between-1-october-and-31-december-2026). Hardware purchase and depreciation are excluded.
Cost for von-1.2.0 Estimates, not measured bills
| Price basis | Frontier only, per million (USD) | Frontier only, per 1,000 | Frontier only, per million | Cascade, per 1,000 | Cascade, per million | Saving, per million |
|---|---|---|---|---|---|---|
| claude-opus-5-5 at list price (the model that produced the frontier answers) | $5,165 | £3.90 | £3,898 | £3.72 | £3,723 | £175 |
| claude-opus-5-5-batch: the same model at a different rate | $2,583 | £1.95 | £1,949 | £1.86 | £1,862 | £87.13 |
| claude-sonnet-5: price only, if escalations went to this model; its accuracy was not measured | $2,583 | £1.95 | £1,949 | £1.86 | £1,862 | £87.13 |
| claude-haiku-4-5: price only, if escalations went to this model; its accuracy was not measured | $1,291 | £0.9744 | £974 | £0.9312 | £931 | £43.28 |
Every figure in this table is an estimate from list prices and estimated token counts, not a measured bill. It shows what the same decisions would cost through the API, and what share of that the cascade avoids. Basis:
- Frontier tokens are estimated, not counted: characters / 4 (Anthropic's rule of thumb) × 1.3 for the tokenizer, averaged over 1,000 cached answers: 1258.9 input and 6.5 output tokens per decision.
- List prices in US dollars per million tokens, checked 2026-09-27 (platform.claude.com/docs/en/about-claude/pricing (checked 2026-09-27)).
- USD to GBP at 0.75458 (ECB euro foreign exchange reference rates, 2026-09-25).
- Frontier answers for this benchmark came from an interactive Claude Code session, not the API; the costs price what the same work would cost through the API.
- Local energy: 338.2 W mean whole-GPU power × 0.02318 s per decision (phase duration / items) = 2.178e-6 kWh per decision, at £0.2632 per kWh (www.ofgem.gov.uk/news/changes-energy-price-cap-between-1-october-and-31-december-2026). Hardware purchase and depreciation are excluded.
- Cascade: every decision runs locally, and 95.5% are also sent to the frontier model.
Cost for laya-en-ft-banking77 Estimates, not measured bills
| Price basis | Frontier only, per million (USD) | Frontier only, per 1,000 | Frontier only, per million | Cascade, per 1,000 | Cascade, per million | Saving, per million |
|---|---|---|---|---|---|---|
| claude-opus-5-5 at list price (the model that produced the frontier answers) | $5,165 | £3.90 | £3,898 | £1.03 | £1,031 | £2,867 |
| claude-opus-5-5-batch: the same model at a different rate | $2,583 | £1.95 | £1,949 | £0.5160 | £516 | £1,433 |
| claude-sonnet-5: price only, if escalations went to this model; its accuracy was not measured | $2,583 | £1.95 | £1,949 | £0.5160 | £516 | £1,433 |
| claude-haiku-4-5: price only, if escalations went to this model; its accuracy was not measured | $1,291 | £0.9744 | £974 | £0.2588 | £259 | £716 |
Every figure in this table is an estimate from list prices and estimated token counts, not a measured bill. It shows what the same decisions would cost through the API, and what share of that the cascade avoids. Basis:
- Frontier tokens are estimated, not counted: characters / 4 (Anthropic's rule of thumb) × 1.3 for the tokenizer, averaged over 1,000 cached answers: 1258.9 input and 6.5 output tokens per decision.
- List prices in US dollars per million tokens, checked 2026-09-27 (platform.claude.com/docs/en/about-claude/pricing (checked 2026-09-27)).
- USD to GBP at 0.75458 (ECB euro foreign exchange reference rates, 2026-09-25).
- Frontier answers for this benchmark came from an interactive Claude Code session, not the API; the costs price what the same work would cost through the API.
- Local energy: 338.9 W mean whole-GPU power × 0.06121 s per decision (phase duration / items) = 5.763e-6 kWh per decision, at £0.2632 per kWh (www.ofgem.gov.uk/news/changes-energy-price-cap-between-1-october-and-31-december-2026). Hardware purchase and depreciation are excluded.
- Cascade: every decision runs locally, and 26.4% are also sent to the frontier model.
Cost for minilm-l6-banking77 (baseline, not served through Tau: local latency and energy not measured) Estimates, not measured bills
| Price basis | Frontier only, per million (USD) | Frontier only, per 1,000 | Frontier only, per million | Cascade, per 1,000 | Cascade, per million | Saving, per million |
|---|---|---|---|---|---|---|
| claude-opus-5-5 at list price (the model that produced the frontier answers) | $5,165 | £3.90 | £3,898 | £0.2066 | £207 | £3,691 |
| claude-opus-5-5-batch: the same model at a different rate | $2,583 | £1.95 | £1,949 | £0.1033 | £103 | £1,846 |
| claude-sonnet-5: price only, if escalations went to this model; its accuracy was not measured | $2,583 | £1.95 | £1,949 | £0.1033 | £103 | £1,846 |
| claude-haiku-4-5: price only, if escalations went to this model; its accuracy was not measured | $1,291 | £0.9744 | £974 | £0.0516 | £51.65 | £923 |
Every figure in this table is an estimate from list prices and estimated token counts, not a measured bill. It shows what the same decisions would cost through the API, and what share of that the cascade avoids. Basis:
- Frontier tokens are estimated, not counted: characters / 4 (Anthropic's rule of thumb) × 1.3 for the tokenizer, averaged over 1,000 cached answers: 1258.9 input and 6.5 output tokens per decision.
- List prices in US dollars per million tokens, checked 2026-09-27 (platform.claude.com/docs/en/about-claude/pricing (checked 2026-09-27)).
- USD to GBP at 0.75458 (ECB euro foreign exchange reference rates, 2026-09-25).
- Frontier answers for this benchmark came from an interactive Claude Code session, not the API; the costs price what the same work would cost through the API.
- Local energy is not included: no GPU power was measured for the local model, so the cascade figures price the frontier calls only.
- Cascade: every decision runs locally, and 5.3% are also sent to the frontier model.
Frontier labels: noise and agreement
Label noise is how often claude-opus-5-5 disagrees with the dataset's gold label on the same item; it is measured before any human override. Some of that disagreement is the frontier model's error and some is the gold label's, so it bounds how precisely any accuracy here can be read. Agreement between two wordings of the prompt shows how much the frontier answers depend on phrasing. Answers came from claude-code-session: subagent answer sheet; the prompt's fixed part shown once per batch of up to 200 items, each item judged on its own; no API, dated 2026-09-27 to 2026-09-27; no paid API call was made.
Baselines
| Model | Held-out items | Accuracy | ECE raw | Log loss raw | ECE calibrated | Log loss calibrated | Note |
|---|---|---|---|---|---|---|---|
| minilm-l6-banking77 (baseline) | 1,000 | 91.5% | 0.030 | 0.369 | 0.024 | 0.394 | Calibrated with isotonic fitted on the file's 1000 calibration lines |
| laya-en (Tau) | 1,000 | 37.2% | 0.502 | 9.841 | 0.065 | 2.906 | for comparison |
| von-1.2.0 (Tau) | 1,000 | 77.1% | 0.185 | 3.723 | 0.039 | 1.078 | for comparison |
| laya-en-ft-banking77 (Tau) | 1,000 | 87.3% | 0.071 | 0.702 | 0.061 | 0.721 | for comparison |
A classic small encoder, fine-tuned on the same training split, scored with exactly the same metric code as the Tau models. It is here to test the claim that a fixed task favours classic fine-tuning: where it beats a Tau model, that is listed under the misses, and it is a reason to prefer the classic model for this task.
Where the models go wrong
laya-en: most frequent confusions (calibrated, 1,000 items)
| Gold answer | Model's answer | Items |
|---|---|---|
| card_about_to_expire | disposable_card_limits | 13 |
| top_up_limits | top_up_reverted | 13 |
| getting_virtual_card | virtual_card_not_working | 12 |
| card_swallowed | atm_support | 11 |
| get_disposable_virtual_card | virtual_card_not_working | 11 |
| unable_to_verify_identity | verify_my_identity | 11 |
| why_verify_identity | verify_my_identity | 11 |
| card_acceptance | supported_cards_and_currencies | 10 |
| card_payment_wrong_exchange_rate | wrong_exchange_rate_for_cash_withdrawal | 10 |
| declined_card_payment | declined_transfer | 10 |
| pending_top_up | top_up_reverted | 10 |
| top_up_failed | top_up_reverted | 9 |
| topping_up_by_card | top_up_reverted | 9 |
| visa_or_mastercard | supported_cards_and_currencies | 9 |
| beneficiary_not_allowed | declined_transfer | 7 |
von-1.2.0: most frequent confusions (calibrated, 1,000 items)
| Gold answer | Model's answer | Items |
|---|---|---|
| beneficiary_not_allowed | failed_transfer | 9 |
| declined_card_payment | declined_transfer | 8 |
| why_verify_identity | verify_my_identity | 7 |
| wrong_exchange_rate_for_cash_withdrawal | cash_withdrawal_charge | 6 |
| Refund_not_showing_up | request_refund | 5 |
| top_up_by_bank_transfer_charge | transfer_into_account | 5 |
| balance_not_updated_after_bank_transfer | failed_transfer | 4 |
| disposable_card_limits | getting_spare_card | 4 |
| edit_personal_details | exchange_via_app | 4 |
| balance_not_updated_after_cheque_or_cash_deposit | top_up_by_cash_or_cheque | 3 |
| cash_withdrawal_not_recognised | declined_cash_withdrawal | 3 |
| direct_debit_payment_not_recognised | extra_charge_on_statement | 3 |
| extra_charge_on_statement | card_payment_fee_charged | 3 |
| get_disposable_virtual_card | getting_virtual_card | 3 |
| order_physical_card | card_delivery_estimate | 3 |
laya-en-ft-banking77: most frequent confusions (calibrated, 1,000 items)
| Gold answer | Model's answer | Items |
|---|---|---|
| beneficiary_not_allowed | failed_transfer | 4 |
| wrong_exchange_rate_for_cash_withdrawal | cash_withdrawal_charge | 3 |
| balance_not_updated_after_cheque_or_cash_deposit | top_up_by_cash_or_cheque | 2 |
| card_arrival | card_delivery_estimate | 2 |
| compromised_card | terminate_account | 2 |
| disposable_card_limits | getting_spare_card | 2 |
| fiat_currency_support | country_support | 2 |
| getting_spare_card | age_limit | 2 |
| order_physical_card | get_physical_card | 2 |
| supported_cards_and_currencies | card_acceptance | 2 |
| top_up_by_bank_transfer_charge | receiving_money | 2 |
| top_up_by_cash_or_cheque | topping_up_by_card | 2 |
| transfer_into_account | top_up_by_bank_transfer_charge | 2 |
| transfer_not_received_by_recipient | pending_transfer | 2 |
| transfer_timing | balance_not_updated_after_bank_transfer | 2 |
With 77 answers a full matrix is too large to read, so these tables list the 15 most frequent mistakes per model. Pairs that recur across models are usually answers whose descriptions overlap, which is where clearer option descriptions would help most.
The misses
- Calibration cut laya-en-ft-banking77's held-out ECE by only 13.6% (from 0.071 to 0.061), short of the 50% goal.
- Calibration helped laya-en-ft-banking77 least: 13.6% lower held-out ECE.
- Baseline minilm-l6-banking77 beats laya-en on held-out accuracy: 91.5% against 37.2%.
- After calibration, minilm-l6-banking77 is also better calibrated than laya-en: ECE 0.024 against 0.065.
- Baseline minilm-l6-banking77 beats von-1.2.0 on held-out accuracy: 91.5% against 77.1%.
- After calibration, minilm-l6-banking77 is also better calibrated than von-1.2.0: ECE 0.024 against 0.039.
- Baseline minilm-l6-banking77 beats laya-en-ft-banking77 on held-out accuracy: 91.5% against 87.3%.
- After calibration, minilm-l6-banking77 is also better calibrated than laya-en-ft-banking77: ECE 0.024 against 0.061.
- Baseline minilm-l6-banking77 keeps 94.7% local against laya-en-ft-banking77's 73.6%, at 94.2% against 93.2% blended accuracy.
- laya-en: No threshold meets the 5.0% target error on the calibration split. The lowest error any threshold reaches is 37.9%, at τ = 0.54, accepting 28.2% of items. No threshold is invented.
- Label noise: the frontier model disagrees with gold on 5.8% (58 of 1,000).
These are the results that don't flatter Tau: label noise, calibration that helped little, baselines that win, and anything excluded. They are published with the wins so the favourable numbers can be weighed against them.
Run metadata
- Date (UTC)
- 2026-09-27T17:15:19Z
- Command
- tau report examples/banking77/decision.yaml
- Git commit
- 8954e9b095b40f68ee34139ca7c413fad4386300 (clean, outputs excluded)
- Workbench
- 0.1.0
- GPU
- NVIDIA GeForce RTX 3080 Ti (driver 610.47)
- CPU
- 11th Gen Intel(R) Core(TM) i9-11900K @ 3.50GHz, 16 logical processors
- OS and runtime
- Microsoft Windows 10.0.19045; .NET 10.0.11
- Endpoint
- localhost:18093/ (Tau Runtime at localhost:18093/ (3 model(s) installed))
- /v1/models: laya-en
- sha256 866a05b244e47e96820660d18ee050c518c2de0f60c39e2e9a89dfeb056e1eec, revision 55cf4c4ebb4ebe31b2550e8bdf3bd21b99753851
- /v1/models: von-1.2.0
- sha256 0777bb988636663b770775ae0b4eb961d6fbee176c9bea1d1da823723b1eb3f3, revision 5df8185a4f2327ad0a7cd117cc4f701ac557b9ae
- /v1/models: laya-en-ft-banking77
- sha256 198e563957ce43348f944a10739bdf17929bc3d2175f22a72239b4601d421556, revision 469442c64b974d12d1c397c6fab2baeeb1cdd8cc
- Measured model laya-en
- 866a05b244e47e96820660d18ee050c518c2de0f60c39e2e9a89dfeb056e1eec
- Measured model von-1.2.0
- 0777bb988636663b770775ae0b4eb961d6fbee176c9bea1d1da823723b1eb3f3
- Measured model laya-en-ft-banking77
- 198e563957ce43348f944a10739bdf17929bc3d2175f22a72239b4601d421556
- Dataset manifest sha256
- 7ff6d7b0974afb66a781fccbeae9f58db38a37ebd2a0398792d5f2550ac6c79e
- Dataset revision (cache keys)
- 9d081458ff52
- Reference labels
- gold: Scored against the dataset's gold labels (data.reference: gold).
- Frontier model
- claude-opus-5-5
- Prompt versions
- v1, v1-alt
- Frontier cache
- v1: 1,000 answers, v1-alt: 200 answers
- Confidence
- Confidence for ECE and thresholds is max(p), the probability of the chosen answer, not the contract's confidence field, which for choice and score questions is not a calibrated probability.
This block ties every figure above to a machine, a model hash, a dataset revision, a date and a command. Re-running the command on the same checkout and models should reproduce the numbers; anything that differs should be explained by what changed here.