Adversarial Robustness Testing
Test model resilience against five adversarial attack types. Required for NIST AI RMF MEASURE-ME4, FDA SaMD, and EU AI Act Art. 9.
Overview
Adversarial robustness evaluation tests how much a model's accuracy degrades when inputs are deliberately perturbed. The platform supports simulation mode (statistical estimates — no model endpoint needed) and full mode (live perturbation testing via model endpoint).


Attack Types
Five attack types are supported.
| Attack | Type | Typical Accuracy Drop | Use Case |
|---|---|---|---|
| FGSM | Single-step L∞ | 5–15% | Fast baseline test |
| PGD | Iterative L∞ | 10–20% | Standard robustness benchmark |
| Carlini-Wagner (C&W) | Optimisation-based | 15–25% | Highest-fidelity attack |
| DeepFool | Minimum-norm | 8–18% | Geometry of decision boundary |
| Square Attack | Score-based black-box | 4–12% | No gradient access required |
Running a Robustness Evaluation
Submit via API with attack types, epsilon, and mode.
1const result = await client.robustnessEvals.create(
2 "model_fraud_v2",
3 {
4 attack_types: ["fgsm", "pgd", "carlini_wagner"],
5 epsilon: 0.1,
6 num_steps: 20,
7 mode: "simulation", // no endpoint needed
8 clean_accuracy: 0.86,
9 }
10);
11
12// result.passed → true if robustness_score >= 0.70
13// result.robustness_score → 0.74
14// result.findings → [{attack_type, severity, note}, ...]Pass Criteria
An evaluation passes when: robustness_score ≥ 0.70 AND robust_accuracy ≥ 0.50. The robustness_score is the mean robust accuracy across all attack types, normalised to [0, 1]. When passed is false, a robustness_eval.failed webhook fires automatically. This event also triggers the IncidentResponseAgent, which classifies severity (critical if score < 0.40), generates an LLM incident summary, and notifies configured Slack, JIRA, and PagerDuty channels. Critical incidents page on-call immediately via PagerDuty Events API v2.