JEV RECIPES

Content moderation with Jev

Moderation output is a handful of booleans and a disposition, not a paragraph. Run it through a generative model and every item costs you a second of latency, a round of tokens, and some JSON parsing you would rather not maintain.

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

Five risk categories in one call

Harassment, spam, personal data, self-harm and adult content — five booleans, one request.

One call, all 5 questions

Give a high-stakes category like self-harm its own low threshold — escalate at 0.3 — rather than sharing one cutoff with spam.

Show the code
import { experimental_evaluate as evaluate } from 'ai';

const { answers } = await evaluate({
  model: 'typesafe-ai/jev',
  state,                     // Paste a piece of user-generated content
  questions: {
    toxic: { type: 'boolean', instructions: 'Does the content contain insults, personal attacks or hateful language?' },
    spam: { type: 'boolean', instructions: 'Is the content promoting a product, recruiting, or driving traffic off-platform?' },
    pii: { type: 'boolean', instructions: 'Does the content expose a phone number, email, home address or government ID that identifies a person?' },
    selfHarm: { type: 'boolean', instructions: 'Does the content express an intention of self-harm or suicide?' },
    adult: { type: 'boolean', instructions: 'Does the content contain sexual or pornographic description?' },
  },
});
Recipe 2

Publish, review or block

A disposition and a severity you can wire straight into a queue.

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-generated content
  questions: {
    action: { type: 'choice', instructions: 'How should this content be handled?',
      criteria: { publish: 'Publish as is, nothing wrong with it', review: 'Contested; needs a human look', block: 'Clearly against policy, block it' } },
    severity: { type: 'score', instructions: 'If there is a problem, how serious is it?',
      criteria: ['No problem at all', 'Mildly off', 'Clear violation', 'Severe, act immediately'] },
    targeted: { type: 'boolean', instructions: 'Is the content attacking a specific identifiable person?' },
  },
});
Recipe 3

Sentiment and usefulness

Not just good or bad, but whether a comment is worth pinning or answering.

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 comment
  questions: {
    sentiment: { type: 'choice', instructions: 'What is the overall sentiment of this comment?',
      criteria: { positive: 'Positive', neutral: 'Neutral or factual', negative: 'Negative' } },
    constructive: { type: 'boolean', instructions: 'Does the comment contain specific, actionable information or suggestions?' },
    needsReply: { type: 'boolean', instructions: 'Does this comment warrant an official response?' },
  },
});

Questions people ask

How does this differ from OpenAI's moderation endpoint?

You define the categories instead of accepting a fixed label set. A policy that is specific to your platform — off-platform solicitation, spoilers, low-effort AI filler — becomes one more typed question rather than a classifier you have to train.

What does one item cost?

Input is billed at $0.042 per million tokens and output is free. We were billed $0.0485 for 1,154,813 input tokens, which matches the published rate. A few hundred words with five questions attached lands in the region of one hundredth of a cent.

Can users talk it out of a verdict?

Rarely. Across 80 injection attempts it was misled once, tied with GPT-5.6 Sol for best of the five models we tested, where GPT-4.1-mini fell for 73. But once is not never — keep a deterministic check behind any high-impact action.

How well does it handle non-English content?

TypeSafe says it is weaker outside English and our run agrees: the same XNLI items scored 79.3% in English and 68.7% in Chinese. All three GPT-5.6 variants dropped further (13–16 points) than Jev did. Label a couple of hundred of your own items before trusting a threshold.

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