Use case · Noul
Agent output guardrails with Jev
Ask several yes/no verification questions about a draft response in one parallel call, and block or regenerate when any probability crosses your line.
The problem
Verifying LLM output usually means a second LLM pass (doubling cost and latency) or a pile of brittle regexes that miss anything semantic.
How Jev handles it
Because questions run in parallel against one state, a battery of checks costs about what one costs. Put it on the way out, between generation and the user.
response = client.system_one(
model="jev-latest",
state=draft_response,
questions={
"answers": Noul(
instructions="Does this answer the user's question?",
criteria=NoulCriteria(true="Directly addresses the ask",
false="Evasive or off-topic"),
),
"no_pii": Noul(
instructions="Is this free of personal data?",
criteria=NoulCriteria(true="No names, emails, addresses or IDs",
false="Contains personal data"),
),
"on_brand": Noul(
instructions="Is the tone professional?",
criteria=NoulCriteria(true="Courteous and appropriate",
false="Rude, flippant or off-brand"),
),
"no_promise": Noul(
instructions="Is this free of commitments we cannot keep?",
criteria=NoulCriteria(true="Makes no guarantee about dates or outcomes",
false="Promises a refund, date or result"),
),
},
)
a = response.answers
if a["no_pii"].noul < 0.9 or a["answers"].noul < 0.7:
return regenerate_or_escalate()Notes from the field
- Guardrails are where free output tokens matter most — you are only paying to read the draft.
- Because Jev cannot generate text, a prompt-injected draft cannot make the checker emit anything harmful.
- Log every check result. The distribution over time tells you which failure mode your prompts actually have.