In short
- Amada 3.1 answers yes/no questions right 96 % of the time and picks the right option 92 % of the time on our English tests, 98 % in 11 other languages.
- Its probabilities can be trusted: calibration error is under 0.02 for yes/no and choice (0.17 in 3.0).
- On non-English MASSIVE it beats Laya, GLiNER2.5 and Von; only Jev (closed) and Kev do better.
- It is weak on TREC (0.39), Banking77 (0.60), ordinal scores (76 %) and very long texts. All four are named below, with the numbers.
- Amada has never been trained on TREC, Banking77, SST-2, AG News or the test sets used here. Every public score on this page is zero-shot.
How we measure
Amada does not write text. It reads a text and a question, and returns probabilities: yes / no / "the text does not say" (noul), one option among a list (choice), or a level on a scale (score). So two things are measured:
- Accuracy: how often the most likely answer is the right one.
- Calibration (ECE): when Amada says 80 %, is it right 80 % of the time? Expected calibration error over 10 bins. 0 is perfect.
The test sets
| Name | What it is | Size | Seen in training? |
|---|---|---|---|
| Short tests, English | Real reviews, support messages, notes and dictations, with questions written and answered by GPT‑6 Luna | 2,000 texts | No (held out since v1) |
| Short tests, 11 languages | Personal notes in Arabic, Chinese, Dutch, French, German, Italian, Japanese, Polish, Portuguese, Spanish, Turkish | 1,320 texts | No |
| Public datasets | SST‑2, AG News, Banking77, emotion, tweet_topic, prompt injection, When2Call | 13,413 texts | No, never |
| system-one-benchmark | Public comparison of decision models: SST‑2, TREC, Banking77, MASSIVE in 8 languages | 2,100 texts | No, never |
| Messy writing | The same short tests rewritten with typos, SMS spelling and lost accents, plus 20 hand-written trap messages | 3,340 texts | No |
Version by version
Same tests for every version, run on the same computer. 3.0.1 is 3.0 with new temperatures only, so its accuracy is identical; 3.1 is a short fine-tune of 3.0.
| Version | Base model | Yes / no | Choice | Score | English, all | 11 languages | Max length |
|---|---|---|---|---|---|---|---|
| 1.0 | ModernBERT-large | 0.896 | 0.832 | 0.762 | 0.842 | 0.418 | 512 |
| 2.0 | mmBERT-base | 0.965 | 0.924 | 0.761 | 0.904 | 0.987 | 512 |
| 3.0 | mmBERT-base | 0.959 | 0.916 | 0.770 | 0.901 | 0.985 | 8,192 |
| 3.0.1 | = 3.0, recalibrated | 0.959 | 0.916 | 0.770 | 0.901 | 0.985 | 8,192 |
| 3.1 current | mmBERT-base | 0.961 | 0.915 | 0.760 | 0.899 | 0.984 | 8,192 |
All question types, accuracy
On these short tests, nothing has really moved since 2.0: differences of 0.1 to 0.5 points are within noise. Versions 3.0 and 3.1 were made for other things: long texts, long option lists, trap texts and near-identical labels. Those gains show in the public datasets (section 04), not here.
Calibration
This is where Amada changed the most. A model that says "95 %" and is wrong one time in four is dangerous to automate with. Since 3.0.1, temperatures depend on the length of the text and on the number of options.
| ECE (lower is better) | 1.0 | 2.0 | 3.0 | 3.0.1 | 3.1 |
|---|---|---|---|---|---|
| Yes / no, English | 0.045 | 0.053 | 0.057 | 0.010 | 0.004 |
| Choice, English | 0.106 | 0.128 | 0.169 | 0.022 | 0.016 |
| Score, English | 0.128 | 0.113 | 0.129 | 0.021 | 0.032 |
| Yes / no, 11 languages | 0.170 | 0.057 | 0.060 | 0.001 | 0.002 |
| Choice, 11 languages | 0.042 | 0.122 | 0.180 | 0.020 | 0.016 |
Choice ECE, English
Scale: full bar = 0.20.
Public datasets vs Jev
Seven public datasets with human labels, full test splits, zero-shot: Amada only gets the question and the names of the options. The Jev column is the score TypeSafe published for its closed model Jev 1.14; we did not run Jev ourselves.
| Dataset | Task | Texts | 2.0 | 3.0 / 3.0.1 | 3.1 | Jev 1.14 closed |
|---|---|---|---|---|---|---|
| SST‑2 | Movie review sentiment, 2 labels | 872 | 0.906 | 0.893 | 0.899 | 0.954 |
| AG News | News topic, 4 labels | 2,000 | 0.714 | 0.790 | 0.800 | 0.843 |
| Banking77 | Bank support intent, 77 labels | 3,080 | 0.337 | 0.605 | 0.611 | 0.800 |
| emotion | Emotion of a tweet, 6 labels | 2,000 | 0.369 | 0.447 | 0.471 | 0.587 |
| tweet_topic | Topic of a tweet | 1,693 | 0.707 | 0.722 | 0.740 | 0.793 |
| Prompt injection | Is this text an attack on an AI? | 116 | 0.759 | 0.810 | 0.845 | 0.965 |
| When2Call | Should an AI agent call a tool? | 3,652 | 0.335 | 0.287 | 0.324 | — |
Amada 3.1 as a share of Jev's score
From 2.0 to 3.1, Banking77 went from 0.337 to 0.611 and emotion from 0.369 to 0.471, thanks to long option lists (3.0) and near-neighbour labels (3.1). Jev is still ahead on every dataset. Amada runs on a laptop CPU; Jev is a hosted service.
Against other decision models
The system-one-benchmark (MIT) gives the same 300 examples per dataset and the same questions to every decision model. We ran Amada 3.1 on exactly the same rows and scored it with the same code. Numbers for the other models come from that repository.
| Model | Weights | SST‑2 | TREC | Banking77 | MASSIVE en | MASSIVE, 7 other langs |
|---|---|---|---|---|---|---|
| Jev 1.13 | closed, API | 0.963 | 0.927 | 0.813 | 0.913 | 0.872 |
| Kev‑0.8B † | open, Apache‑2.0 | 0.920 | 0.953 † | 0.823 † | 0.760 | 0.656 |
| Amada 3.1 | this project | 0.900 | 0.390 | 0.603 | 0.707 | 0.575 |
| Laya (multilingual) | open, Apache‑2.0 | 0.857 | 0.860 | 0.367 | 0.653 | 0.544 |
| Laya (English) | open, Apache‑2.0 | 0.920 | 0.773 | 0.363 | 0.687 | 0.307 |
| GLiNER2.5‑Decide | not stated | 0.857 | 0.417 | 0.567 | 0.773 | 0.488 |
| Von 1.2 | not stated | 0.940 | 0.663 | 0.793 | 0.727 | 0.168 |
† Kev's model card lists Banking77 and TREC among its training data: its scores on those two are not zero-shot. Laya, GLiNER2.5 and Von do not publish their training data; nothing in their numbers suggests they saw these tests. 300 examples per dataset: differences under ~5 points are within the margin of error.
| Calibration (ECE) | SST‑2 | TREC | Banking77 |
|---|---|---|---|
| Jev 1.13 | 0.020 | 0.020 | 0.083 |
| Kev‑0.8B † | 0.032 | 0.030 | 0.128 |
| Amada 3.1 | 0.081 | 0.286 | 0.181 |
| Laya (English) | 0.015 | 0.049 | 0.506 |
| GLiNER2.5‑Decide | 0.059 | 0.146 | 0.246 |
| Von 1.2 | 0.075 | 0.210 | 0.170 |
Languages
Amada 3.1 on the short tests, all question types, per language. Training covered these 12 languages; Korean and Hindi (MASSIVE, section 05) were never in training and still reach 0.50 and 0.53.
Accuracy per language · clean text vs messy text
Messy writing
Real messages are not clean: "jpeu pa venir demin jsui malade". We rewrote the same tests with keyboard typos (AZERTY, QWERTZ, QWERTY), swapped letters, lost accents, SMS spelling and homophones, without ever touching numbers or negations. Same questions, same answers.
| Amada 3.1 | Clean | Messy | Lost |
|---|---|---|---|
| English, all types | 0.899 | 0.887 | −1.2 pts |
| 11 languages, all types | 0.984 | 0.963 | −2.2 pts |
| German | 0.986 | 0.932 | −5.4 pts |
| Dutch | 1.000 | 0.962 | −3.8 pts |
| Yes / no ECE, 11 languages | 0.002 | 0.028 | too sure of itself |
| MASSIVE, 60 voice intents, 12 languages | 0.632 | 0.590 | −4.2 pts |
On 20 hand-written trap messages, Amada 3.1 gets 17 right, 3 of them with little confidence. It misses, for example, "mé parents von au ciné ce soir mai moi jreste a la maison" → "Is the person going to the cinema?" (it says yes, 68 %), and the famous "Léa mange 4 gateau au fraise" → "léa mange t'elle des gateau ?" (yes, but only 70 %). This is the main target of Amada 4.
Where Amada is weak
| Weak spot | Score | Why | Plan for 4.0 |
|---|---|---|---|
| Kind of answer a question expects (TREC) | 0.390 | Answers the topic, not the answer type | ~6,000 new questions labelled by the kind of answer they ask for, 12 languages (never TREC itself) |
| Near-identical intents (Banking77) | 0.611 | "Card not arrived" vs "card delayed" vs "card lost" | ~200 support label sets built from near-identical intents, banking left out on purpose |
| Ordinal scores | 0.760 | Old score data was labelled after the fact, 38 % on the lowest level | Texts written for one precise level of a scale, or exactly between two levels |
| Very long texts (QuALITY, 4 options) | 0.44 | The answer is in one passage of a 5,000-word story | New questions on ~1,500 more long public texts |
| Emotion of a tweet | 0.471 | Six emotions, often mixed in one short tweet | — |
| When to call a tool (When2Call) | 0.324 | Agent-specific task, almost absent from training | — |
Speed
Average time per text on a Windows laptop CPU, 4 threads, ONNX Runtime, on the short tests (several questions per text).
Milliseconds per text (lower is better)
Scale: full bar = 400 ms. Time grows with the number of options: one SST‑2 sentence takes 42 ms, a Banking77 message with all 77 intents 723 ms.
What comes next
Amada 4 is being prepared: messy writing (MASSIVE 1.1 and 88milSMS, both CC BY 4.0, plus half of the old data rewritten with typos), and the four weak spots of section 08. Starting point: the 3.1 weights.
Reproduce it
| Numbers | Script | Where it ran |
|---|---|---|
| Short tests, calibration, speed | kaggle_bakeoff/eval_v1_onnx.py --v31 | Windows laptop, CPU |
| Public datasets | kaggle_jevbench_v31/jevbench_amada.py | Kaggle, T4 GPU |
| Decision models | bench_rivals/amada_sob.py | Windows laptop, CPU |
| Messy writing | data/build_noisy_test.py then eval_v1_onnx.py --v31 --noisy | Windows laptop, CPU |
Questions or a number that looks wrong: liamdb.work@gmail.com.