Enforcement Actions
The complete reference for verdicts and how to act on each one.
Verdicts
| Verdict | Default band | Intent |
|---|---|---|
ALLOW | ≥ 0.85 | Trusted — deliver as-is. |
WARN | 0.60–0.85 | Deliver, but log/annotate for review. |
REVIEW | 0.40–0.60 | Hold for human review or use a fallback. |
BLOCK | < 0.40 | Do not deliver. |
Two additional states can appear in the SDK: PENDING (background evaluation not yet complete) and UNKNOWN (evaluation could not be completed — treat per your fail-open/closed choice).
Acting on a verdict
Python
r = client.evaluate_sync(prompt=p, response=draft)
if r.verdict == "BLOCK":
final = SAFE_FALLBACK
elif r.verdict == "REVIEW":
final = enqueue_for_human_review(draft)
else: # ALLOW or WARN
final = draft
if r.verdict == "WARN":
log_warning(r.request_id, r.all_flags)
Hard-block flags
These flags force BLOCK regardless of the aggregate score:
prompt_injection_detectedexplicit_content_detectedcontent_unsafe(critical)policy_violation_critical,policy_violation_high
Recommended patterns
For user-facing chat, evaluate inline only on the final answer and block on
BLOCK; for everything else, evaluate in the background so latency is untouched and you still get the full audit trail.Was this page helpful?