Benchmark report
TypeSafe sells Jev on calibrated confidence. We ran it against 11,900 labelled prompts and four rivals. It won on ranking, won decisively on over‑defense, and lost on calibration — the one thing the marketing leads with.
Jev is a model that never writes text. You hand it a blob of state and a set of typed questions; it returns typed answers with probabilities. No tokens are generated. It launched in September 2026 from TypeSafe AI, and it is roughly 100× cheaper than asking a chat model the same question.
Two people had already built prompt‑injection filters on top of it. Both were abandoned weekend projects, and neither had evidence that the idea worked: each author wrote their own test cases — 42 in one repo, 50 in the other — ran their tool on them, and reported near‑perfect scores. That is grading your own exam.
Public, independently‑built attack corpora exist and are free to download. Nobody had run Jev against any of them. So we did.
The verdict
Four public datasets, normalised into one corpus of 11,900 prompts after dropping 703 duplicates. Every detector is wrapped behind one interface that takes text and returns a score from 0 to 1, so comparing them is a matter of arithmetic rather than judgement.
| Source | Rows | Role |
|---|---|---|
| xTRam1/safe-guard-prompt-injection | 10,028 | attacks + benign |
| jackhhao/jailbreak-classification | 872 | jailbreaks |
| deepset/prompt-injections | 661 | the classic set |
| leolee99/NotInject | 339 | harmless, trigger-worded |
The five contenders: Jev in two question phrasings, Claude Haiku 4.5 asked to judge the same text, PromptGuard‑2 (Meta’s purpose‑built detector), and PIGuard (from an ACL 2025 paper on reducing over‑defense).
Injection detectors have a known failure: they fire on innocent text that merely contains scary words. Write “please ignore the outliers in this dataset” and a keyword matcher blocks you. The NotInject set exists to catch exactly this.
Harmless text wrongly flagged, at a matched 95% catch rate
339 benign prompts containing trigger words · lower is better
All five detectors tuned so they catch the same share of real attacks. Jev‑v2 wrongly flags 16.5% of harmless trigger‑worded text; Claude flags more than half of it.
At each tool’s own default 0.5 cutoff the ordering holds and the numbers are smaller: Jev‑v2 1.5%, Jev‑v1 2.1%, PromptGuard‑2 4.4%, Claude 6.2%, PIGuard 11.5%. But at that cutoff PromptGuard‑2 catches only 52.6% of attacks and PIGuard 66.8% — neither is a deployable operating point.
TypeSafe’s central pitch is that Jev’s confidence numbers are honest: when it says 90%, it should be right about 90% of the time. That claim has no published paper, no reliability curves, and no error metric behind it. It is also the main reason to choose Jev over anything else, so it is worth checking.
Is the confidence honest?
claimed probability vs. how often it was really an attack · 3 of 5 shown · the diagonal is perfect
Jev sits above the diagonal across the whole middle of the range: it says 24% and is right 60% of the time, says 34% and is right 82%. It is smooth and consistently over‑cautious. Claude’s line looks wilder, but almost nothing sits under it — its middle bins hold between 2 and 163 rows, while 98% of its answers land in the two end bins, which are accurate. That is why it wins on ECE while looking worse here. Hover any point for its row count. The two purpose‑built detectors are left out because five curves overlap into noise; both are worse than either (ECE 0.103 PIGuard, 0.133 PromptGuard‑2, against 0.058 Jev‑v2 and 0.021 Claude).
Measured as expected calibration error — which weights each bin by how many rows it holds — Claude scores 0.021 and Jev‑v2 scores 0.058. The chat model that was simply asked to state a confidence is roughly three times more honest than the model sold on calibrated confidence.
False alarm rate by how many trigger words the harmless prompt contains
113 prompts per group · at each detector’s 0.5 cutoff
The gradient is monotonic everywhere, which validates NotInject as a probe. PIGuard is worst at every level and reaches 18.6% on three trigger words; Jev‑v2 stays at 3.5%.
Precision against catch rate, at every possible cutoff
threshold-free · upper right is better
Jev dominates across the whole curve, not just at one convenient operating point. It orders attacks above harmless text better than Claude Haiku 4.5 does, at roughly 1% of the cost and a median 290ms.
We ran Jev twice with two phrasings of the same question. Overall they agree closely — correlation 0.987, verdicts flip on 2.1% of rows, ranking quality essentially identical.
But the panic rate moved from 23.0% to 16.5%. Same meaning, different words, 28% relative change in the metric the whole project is about. A benchmark that tests one phrasing reports one of those two numbers as if it were the answer. Neither existing Jev guard varies its prompt.
Claude’s bill was three times our estimate, because output tokens averaged 121 per row rather than the ~20 a JSON verdict needs — the model writes prose when it is not cleanly classifying. Jev cannot do that, which is the cost argument in one sentence.
Four things were wrong in the plan and were only caught by running against reality. They are worth listing because each one would have produced confident, wrong numbers.
protectai/prompt-injection-validation, taken from an
unverified search result. It is not on HuggingFace. The corpus was rebuilt from four
datasets that do exist — which turned out larger and better structured.
noul. The Vercel gateway
renames it to boolean and rejects noul with a 400. Both spellings
are now supported and pinned with a regression test.
/home/user to “act as a linux
terminal”. Mostly harmless roleplay prompts — but the instruction hierarchy leaked.
Jev has no generative channel, so this failure is impossible for it by construction.
python -m jevbench.fetch # 11,900 rows, deduped
python -m jevbench.cli run --detector jev-v1
python -m jevbench.cli batch --model claude-haiku-4-5
python -m jevbench.cli report
Every raw prediction is cached to parquet, so the API calls are paid for once and every table and chart regenerates for free. Runs resume after a crash rather than re‑spending.