JEV RECIPES
Triage produces an enum and a priority, not prose. With a generative model you spend the prompt talking it into returning only those values, and then handle the times it improvises anyway. With Jev the answer space is part of the call.
Every number on this page comes from our own 2,390-question run; method and limits are in the benchmark report (written in Chinese).
Team, urgency and whether a human needs to take it — one call.
The option descriptions are the rubric. "Payments, invoices and refunds" classifies far better than a bare label like "billing".
import { experimental_evaluate as evaluate } from 'ai';
const { answers } = await evaluate({
model: 'typesafe-ai/jev',
state, // Paste a support ticket
questions: {
dept: { type: 'choice', instructions: 'Which team should own this ticket?',
criteria: { logistics: 'Shipping and delivery', billing: 'Payments, invoices and refunds', technical: 'Product bugs and failures', account: 'Accounts and sign-in', other: 'None of the above' } },
urgency: { type: 'score', instructions: 'How urgent is this ticket?',
criteria: ['Can wait in the queue', 'Reply today', 'Reply within hours', 'Interrupt someone now'] },
escalate: { type: 'boolean', instructions: 'Has the customer's tone or demand reached the point where a person must take over?' },
},
});Bug, request, praise, complaint or question — plus whether it is concrete enough to file.
import { experimental_evaluate as evaluate } from 'ai';
const { answers } = await evaluate({
model: 'typesafe-ai/jev',
state, // Paste a piece of user feedback
questions: {
type: { type: 'choice', instructions: 'Which kind of feedback is this?',
criteria: { bug: 'Reports a defect or failure', feature: 'Requests a new capability or improvement', praise: 'Expresses satisfaction', complaint: 'Expresses dissatisfaction without a specific issue', question: 'Asks for help or information' } },
actionable: { type: 'boolean', instructions: 'Is this specific enough to open a development task from as it stands?' },
priority: { type: 'score', instructions: 'If it were scheduled, how worth doing is it?',
criteria: ['Not worth doing', 'Someday', 'Should be scheduled', 'Do it soon'] },
},
});Buying intent, fit and the next action, read off a conversation.
import { experimental_evaluate as evaluate } from 'ai';
const { answers } = await evaluate({
model: 'typesafe-ai/jev',
state, // Paste a lead or a snippet of a conversation
questions: {
intent: { type: 'boolean', instructions: 'Has this person expressed a concrete intention to buy?' },
fit: { type: 'score', instructions: 'How well does this lead fit a B2B software product aimed at mid-sized companies?',
criteria: ['No fit', 'Marginal', 'Reasonable fit', 'Strong fit'] },
next: { type: 'choice', instructions: 'What should sales do next?',
criteria: { call: 'Get them on a call now', demo: 'Send an approach and book a demo', nurture: 'Drop into the nurture sequence', drop: 'Not worth pursuing' } },
},
});Four-way classification measured 88%; one-of-77 fell to 68%. Ten is a sensible ceiling. When you need more, split it: classify the broad bucket, then classify within it. Two calls still cost far less than one call to a large model.
No training. The description attached to each option is the rubric, and writing those boundaries precisely does more for accuracy than supplying examples.
Asked five times and rephrased three ways, the verdict never flipped and the probability moved at most 0.09. GPT-5.6 Terra and Luna, which reason before answering, did flip answers on repeat runs.
It can classify, score and answer yes/no, but not extract. Jev generates no text — it only picks inside the answer space you gave it. Pull the order number with a regular expression, or with a generative model.
Each of these has a line of code that calls Jev. More of them in awesome-jev-verified.
The questions above are fixed. To write your own criteria, options and score levels, open the playground.
Open the playground