docs(main): ATR-only baseline on Garak + PINT (per #66) - #75
Conversation
There was a problem hiding this comment.
Pull request overview
Adds a reproducible benchmark note capturing an ATR-only baseline on two corpora (Garak and Lakera PINT) to support the ongoing discussion in issue #66 about potential ATR rule bundling and like-for-like comparison against Defender.
Changes:
- Documented pinned ATR baseline results for Garak (recall) and PINT (precision/recall/F1), including scope caveats.
- Added step-by-step reproduction commands pinned to a specific
agent-threat-rulescommit for repeatability.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Defender column (same corpora as this baseline)Ran locally against the same Garak + PINT inputs pinned in this PR (
Notes for reading this honestly:
Happy to fold this into |
Rebuilt on current main. Two corrections to the framing rather than the measurements. The corpus described as 'Lakera's public Prompt Injection Test set' is not one. It is a self-built 850-sample corpus in PINT's format, assembled from deepset/prompt-injections and Lakera/gandalf_ignore_instructions; Lakera's actual benchmark is private and roughly five times larger. The numbers stand, the label did not, and the distinction matters to anyone comparing engines against it. Made the version pinning explicit. Every figure is measured on commit 1831d0d5 (v3.5.7, 714 rules), and the upstream table has moved since — the all-families garak figure in particular. Anyone adding a second engine column should pin to the same commit or re-run both on a newer one.
c0b0c6a to
d351bca
Compare
|
@hiskudin — thank you for running it rather than taking the table at face value, and for reporting T1 and T1+T2 separately. A single "Defender" cell would have been the easier and worse choice. Two things I owe you, both about the ATR column you compared against. The PINT row was mislabelled, and I have corrected it in this PR. I described that corpus as "Lakera's public Prompt Injection Test set". It is not. It is a self-built 850-sample corpus in PINT's format, assembled from The ATR figures you compared against are pinned to an older commit, and the newer ones moved more than I expected. Everything in this document is If you want the comparison to stand as a decision input for #66, the clean version is both engines re-run on one newer commit. I am happy to produce the ATR column for whichever commit you pick, and to have the result be whatever it is — including it going against ATR. On folding this into |
|
@eeee2345 — thanks for this, and sorry for the slow reply. Both corrections are exactly the kind that make the comparison worth trusting, so let's redo it cleanly rather than land stale numbers. Plan:
Your "these corpora are jailbreak-shaped, not tool-result traffic, and this doc doesn't stand in for a tool-result FP check" point stays prominent in the text — I'll keep that measurement where it belongs, as part of scoping the opt-in Tier-1 pack rather than here. Once that's in, I'll fold it into I'll get the Defender numbers on v4.0.0 turned around within a week. |
|
@eeee2345 — re-ran it on ATR v4.0.0 (
How I ran it:
Your v3.5.7→v4.0.0 warning was right — Garak in-scope rose 74.4%→80.5%, so ATR now leads Defender T1+2 there (80.5 vs 76.5); the old "roughly tied" reading is gone. On PINT-format, Defender T1+2 leads on F1 (83.9 vs 79.1) by buying +20 pts recall for 86 benign FPs, where ATR has 0. Footnotes I'll carry in the doc so no cell gets over-read:
If the ATR row matches on your side (or you spot a config I got wrong), I'll fold it into |
|
@hiskudin — I re-ran both benchmarks on your exact commit rather than checking your table against a different build, and also ran one ablation that answers your second footnote directly. Everything below is at All three ATR cells reproduce.
Your footnote about the PINT cell using a different engine is literally true but numerically inert. I re-ran the PINT harness at your commit with the Tier-2.5 embedding stage disabled: the confusion matrix is identical, TP=295 FP=0 TN=399 FN=156. The embedding contributes exactly one match, and it lands on a sample regex rules already catch. So the PINT cell is reproducible as a pure regex result, and in that respect it is comparable to the Garak cells. Where the embedding does distort something is our per-rule block — Three caveats the PINT column still needs. All about ATR, not about your method. It isn't Lakera's PINT. Our README says so in that row's footnote: not the official benchmark — that corpus is private and roughly 5x larger. Ours is 850 samples assembled in PINT's format from The 100% precision is in-sample, in two distinct ways. Eight rules reference this corpus at your commit. Five were mined from its false negatives — And the column is concentrated. On the channel question — the mechanism you spotted is real, and the naming is defensible; what doesn't carry over is the consequence. Two channels is right. The second is a The part that doesn't follow is admitting every rule regardless of scoping. That needs an event whose type is itself So the practical consequence is: our two rows aren't measured at the same width — PINT through the canonical shape set including that admit-all shape plus On your footnotes, individually rather than in a block:
For the Tier-1 pack scoping: these corpora are jailbreak-shaped rather than tool-result traffic, so the separate tool-result benign FP check you're keeping out of this doc is the one that should drive that decision. Point me at whatever corpus you use for it and I'll run it on our side, so you get a second independent number rather than one from our harness. |
Update the ATR-only baseline from v3.5.7 (714 rules, 1831d0d5) to the v4.0.0 figures both sides re-ran and verified in StackOneHQ#75, taken from the committed reports at tag v4.0.0 (464548b4): garak-full-report.json and pint-eval-report.json. - Garak in-scope 74.4% -> 80.5% (1,429/1,775); overall 38.2% -> 57.2%. - PINT P 99.7%/R 63.6%/F1 77.7% (FP=1) -> P 100%/R 65.4%/F1 79.1% (FP=0), TP=295 TN=399 FN=156. Real v4.0.0 per-family breakdown filled in. - Add the caveats the contributor raised: PINT precision is in-sample (8 rules reference the corpus), the column is concentrated (ATR-2026-00001 = 226/295), and the two rows are measured at different widths (not directly comparable). - Note the Tier-2.5 embedding stage is inert on the PINT matrix (pure-regex). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
Thanks for the thorough re-run — that verification is what makes this citable. I've updated Separately, for the Tier-1-pack decision: I'll point you at our tool-result benign corpus for the FP run — that's the number that should drive it, since these corpora are jailbreak-shaped. |
@hiskudin — as you asked in #66, here it is as a PR rather than a comment: the reproducible ATR-only baseline on Garak and PINT.
benchmarks/atr-baseline.mdcontains:snowball,harmbench) called out and excluded from the headline number.agent-threat-rulescommit1831d0d5, with the exact scripts to regenerate both reports.The Defender-side column is intentionally left blank — this is the ATR half of a like-for-like table, for your team to fill in on the same corpora, per your offer to review on your side.
Happy to adjust the file's location or format, or to align on the tool-result-focused subset you raised in #66 as a starting point for a bundled pack.