Noul
Check a reply.
A Noul question asks a yes/no question and returns the probability of yes. Here it checks one narrow thing: does a draft reply address every explicit request in the customer's message?
Noul
Check a reply
Shows recorded and illustrative answers. This site's own live testing is unavailable.
Probability: 0.95
Likely addresses all requestsJev Guide's label, not TypeSafe's
- Yes95.0%
Jev returns only the probability above; the plain-language label is this page's own reading of it, not an official threshold. This checks explicit requests only. It does not verify facts in the reply, confirm that any described action was actually taken, or explain what, if anything, was missed. Jev returns a probability, not a generated explanation.
Not a live or recorded response. Shown to illustrate the shape of an answer.
Build this
import { noul, TypeSafeClient } from "@typesafe-ai/sdk"; const client = new TypeSafeClient(); // reads TYPESAFE_API_KEY, defaults to jev-latest const customerMessage = "Can you refund my last payment and send me a confirmation email once it's done?";const draftReply = "I've processed a refund for your last payment. You'll receive a confirmation email at the address on file within the next few minutes."; const { answers } = await client.systemOne({ state: { customer_message: customerMessage, draft_reply: draftReply }, model: "jev-latest", questions: { addresses_requests: noul( "Does the draft reply address every explicit request the customer made in their message?", { true: "The reply responds to each specific thing the customer explicitly asked for", false: "The reply ignores, skips, or only partly addresses one or more of the customer's explicit requests", }, ), },}); const { noul: coverage } = answers.addresses_requests; // A value near 1 is a strong yes, near 0 a strong no, near 0.5 means Jev is unsure.if (coverage >= 0.7) { console.log("Likely addresses all requests.", coverage);} else if (coverage <= 0.3) { console.log("Likely misses a request.", coverage);} else { console.log("Unclear, check both messages yourself.", coverage);}Type-checked against @typesafe-ai/sdk 0.6.0 as part of this site's build. Not executed against the live API by this guide.
npm install @typesafe-ai/sdk. Requires Node.js 20+. Set TYPESAFE_API_KEY in your environment.
Keep TYPESAFE_API_KEY on the server. Never embed it in client code or ship it in a browser bundle.
Reading the three samples
Both requests handled. The customer asks for a refund and a confirmation email, and the reply covers both. The probability should sit near the top of the range.
One request skipped. The reply cancels the subscription but never mentions the billing email change. That is a clear miss, and the probability should sit near the bottom.
Action taken, detail missing. The reply fixes the invoice but never states the new total the customer asked for. The criteria count a request addressed only in part as a no, but the reply does engage with the request, so this is the sample most likely to land in the middle. A live or recorded answer would show where Jev actually places it. Illustrative values are hand-authored guesses at that pattern, not measured output.
What this does and does not check
The returned probability says whether the reply engages with each thing the customer explicitly asked for. It does not say whether the reply is factually correct, whether it is polite, or whether the action it describes was actually taken.
Jev returns a single number, not a list of what was missed. This page does not generate one either, because inventing an explanation the model did not produce would be misleading. If coverage looks incomplete, read both messages yourself.
Where this fails
It only sees explicit requests. A customer who hints at what they want (“I suppose a refund is out of the question?”) may or may not count as asking, and TypeSafe notes that Jev reads instructions literally. If implied requests matter to you, ask a separate question about them.
It checks one draft against one message. In a long thread, a request made three messages ago is only covered if you include it in the state.
A narrow check, not a gate
Treat this as one signal among several before a reply goes out automatically. Combine it with your own rules for anything customer-facing, refund-related, or otherwise high-stakes.
Wondering whether a call like this one should use Jev or a general-purpose LLM in the first place? See Jev vs LLMs: when to use TypeSafe AI.