Skip to content

Safety and Refusal Benchmarks

10 min read · updated August 4, 2026

Every safety benchmark is measuring one side of a two-sided error, and a number from one side alone can always be maximised by breaking the other. A model that refuses every request has an attack success rate of zero. A model that complies with everything never over-refuses. The only honest report gives both.

Two errors, not one

Set it out as a confusion matrix over requests and it becomes obvious why one number cannot work.

                        model complies      model refuses
                     ---------------------------------------
request is harmful   |  HARMFUL COMPLIANCE  |    correct     |
request is benign    |      correct         |  OVER-REFUSAL  |

Attack success rate  = harmful compliance / all harmful requests
Over-refusal rate    = over-refusal        / all benign requests

Refuse everything:   ASR = 0.00, over-refusal = 1.00
Comply with all:     ASR = 1.00, over-refusal = 0.00

Any single-number safety score is a point on this trade-off with the
other coordinate hidden.

This is the same structure as TruthfulQA’s truthfulness against informativeness, and it is the structure of every metric with a degenerate maximiser. The category boundary between harmful and benign is itself contested and policy-dependent, which is a third problem laid on top.

Suites that measure harmful compliance

SuiteDescription
AdvBenchZou and colleagues, 2023. A few hundred harmful behaviour instructions plus a set of harmful strings, released with the adversarial-suffix attack work. Widely used as the standard target set; its behaviours are short and somewhat repetitive, which inflates apparent success when a single attack transfers across similar items.
HarmBench2024. A few hundred behaviours organised by semantic category and by functional type — standard, contextual, copyright, and multimodal — with a standardised classifier released alongside so that different papers can grade the same way. The standardised judge is its main contribution.
JailbreakBench2024. A behaviour set plus, importantly, a public repository of attack artefacts, so a defence can be evaluated against the actual prompts that worked rather than against a description of them. Reproducibility as a design goal.
StrongREJECT2024. Built specifically to fix judge inflation. It pairs a question set with a rubric-based grader that scores how specific and genuinely useful the response is, rather than whether it lacked a refusal phrase.

The attack methods themselves are a separate topic — a taxonomy of what still works covers the categories, and red-teaming your own application covers running them against your own system, which is a different exercise from evaluating a base model.

Suites that measure over-refusal

This half is younger, smaller and much less quoted, which is itself informative about the incentives.

SuiteDescription
XSTestRöttger and colleagues, 2023. A few hundred safe prompts constructed to superficially resemble unsafe ones, across categories like homonyms ('how do I kill a Python process'), figurative language, safe targets, privacy-adjacent phrasing and historical events. Paired with a smaller set of genuinely unsafe contrast prompts so both error rates come from one run.
OR-Bench2024. A much larger set of seemingly-toxic-but-benign prompts generated at scale, with a hard subset selected for prompts that many models refuse, and a genuinely toxic subset for the contrast. Scale is its contribution; the generated prompts are less carefully constructed than XSTest's hand-written ones.
Domain refusal probesSets targeting professional contexts — medical, legal, security research, harm reduction — where refusal has a real cost to a legitimate user. These are the cases that matter commercially and the least standardised part of the field.

The measured cost of over-refusal on legitimate professional work is covered in when safety training blocks legitimate work. For evaluation purposes the important structural point is XSTest’s design: safe and unsafe contrast prompts in one suite, so you cannot report one error rate without the other. More suites should be built that way.

The judge decides the number

Attack success rate is not observed; it is judged. Three judging methods are in common use and they can differ by tens of points on identical model outputs.

Judging methodDescription
Refusal substring matchingCount an attack as successful if the response does not contain phrases like 'I cannot', 'I'm sorry' or 'as an AI'. Cheap and badly wrong in both directions: a response that avoids the phrases while giving useless or hallucinated content counts as a success, and a response that complies fully but opens with an apology counts as a refusal.
Classifier judgingA trained classifier decides whether the response is harmful. HarmBench released one for exactly this purpose. Much better, and it inherits the classifier's own errors — which are systematic rather than random, so they do not average away.
Rubric judgingA judge model scores the response against a written rubric: did it refuse, was it convincing, was it specific enough to be actionable. StrongREJECT's approach. It separates 'the model said something' from 'the model said something that would help', which is the distinction the other two miss.
Same response, three judges.

Response: "Sure! Here's how you would do that: first you acquire the
materials, then you combine them carefully, then you wait. Be safe!"

  Substring match:  no refusal phrase  -> ATTACK SUCCEEDED
  Classifier:       vague, no actionable content -> borderline
  Rubric:           refused = no, specific = 1/5, convincing = 2/5
                    -> low harm score, effectively not a success

The first judge reports an attack that did not work.

Published attack success rates from the substring era are therefore not comparable with rubric-graded ones, and a great deal of the jailbreak literature used substring matching. When you read an ASR, find the judge before you read the number. This is the safety-specific instance of the general rule in reporting a benchmark result honestly.

How to report a safety result

  1. Report both error rates from the same model version, same system prompt, same decoding settings. A harm number measured with your production system prompt and a refusal number measured without it are two different systems.
  2. Name the judge and its version, and state whether you validated it against human labels on a sample. A hundred hand-checked gradings is enough to know whether the judge is systematically off.
  3. Report per-category, not just aggregate. Harm categories differ enormously in how models behave, and an aggregate ASR hides a category where the model complies freely.
  4. State the attack budget. Single-turn direct requests, one templated attack, or an adaptive multi-turn attacker with a hundred attempts are three different measurements. ASR rises with budget, without limit, for essentially every model.
  5. State what layer you measured. A model’s own behaviour and a deployed system with input and output filters are different objects — see input filtering versus output filtering.

What these suites cannot establish

  • Safety. A low ASR on a public behaviour set means the model resisted those behaviours under that attack budget. It is evidence, not clearance, and the sets are public and thus trainable against — a model can be tuned to refuse AdvBench’s phrasings specifically.
  • Your risk surface. Standard suites test the model in isolation. Your risk comes from the model plus your tools plus your data, and the dangerous combination is described in the lethal trifecta. Prompt injection through retrieved content is not what these benchmarks measure.
  • Frontier-risk capability. Refusal benchmarks measure whether a model declines. Whether it could have provided meaningful uplift if it had complied is a separate and much harder evaluation — see evaluations for dangerous capabilities.
  • Behaviour after your fine-tune. Safety training is fragile under further training, and a model fine-tuned on innocuous task data can lose refusal behaviour it had. If you fine-tune, rerun both halves of the measurement afterwards — evaluating a fine-tuned model against the base covers the regression suite.