JEV RECIPES

Intent classification and ticket triage with Jev

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.

Why this job suits a decision model

Every number on this page comes from our own 2,390-question run; method and limits are in the benchmark report (written in Chinese).

Recipe 1

Support ticket triage

Team, urgency and whether a human needs to take it — one call.

One call, all 3 questions

The option descriptions are the rubric. "Payments, invoices and refunds" classifies far better than a bare label like "billing".

Show the code
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?' },
  },
});
Recipe 2

Sort product feedback

Bug, request, praise, complaint or question — plus whether it is concrete enough to file.

One call, all 3 questions
Show the code
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'] },
  },
});
Recipe 3

Score a sales lead

Buying intent, fit and the next action, read off a conversation.

One call, all 3 questions
Show the code
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' } },
  },
});

Questions people ask

How many options can I have?

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.

Does it need training or examples?

No training. The description attached to each option is the rubric, and writing those boundaries precisely does more for accuracy than supplying examples.

Are the results stable?

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.

Can it classify and extract at the same time?

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.

Open-source projects doing this

Each of these has a line of code that calls Jev. More of them in awesome-jev-verified.

Bring your own questions

The questions above are fixed. To write your own criteria, options and score levels, open the playground.

Open the playground

Other recipes