Each probe sends a prompt to the model a few times (probes/base.py#L299-L304), and the attack success rate represents how many of those replies resulted in a breach.
The problem that I see with this approach is that an attacker doesn't need the model to fail most of the time. They need it to fail once, and they can just try again. So a jailbreak that only lands on 1 try in 5 is effectievly a full break of that prompt, but it shows up as only 20% ASR, missing the point of a critical vulnerability.
an approach I would suggest is pass@k, the metric introduced in OpenAI's Codex paper (Chen et al., 2021). instead of pooling, you ask, per prompt: "given k tries, does at least one get through? "
it gives a more meaningful ASR reading as it reflects how the model actually gets attacked, because, fundamentally, an attacker can keep trying.
Each probe sends a prompt to the model a few times (
probes/base.py#L299-L304), and the attack success rate represents how many of those replies resulted in a breach.The problem that I see with this approach is that an attacker doesn't need the model to fail most of the time. They need it to fail once, and they can just try again. So a jailbreak that only lands on 1 try in 5 is effectievly a full break of that prompt, but it shows up as only 20% ASR, missing the point of a critical vulnerability.
an approach I would suggest is
pass@k, the metric introduced in OpenAI's Codex paper (Chen et al., 2021). instead of pooling, you ask, per prompt: "given k tries, does at least one get through? "it gives a more meaningful ASR reading as it reflects how the model actually gets attacked, because, fundamentally, an attacker can keep trying.