What Is Jev AI? The Judgment Model by TypeSafe AI Explained
In September 2026, TypeSafe AI released Jev, the first model in its “System One” line. The pitch is unusual on purpose: Jev does not chat. It answers questions that have a bounded answer space — judgment questions, choice questions and scoring questions — and returns a structured answer with a confidence score. If most of your LLM calls end with you parsing a paragraph to extract a yes/no, this guide explains what the Jev model is, how its output is shaped, and when it is the right tool.
TL;DR: Jev AI is a judgment model by TypeSafe AI, not a chat model. It specializes in three question primitives — judgment (yes/no/unclear), choice (pick one option) and scoring (a number on a scale) — and returns JSON with an answer, a confidence score and a rationale. It is accessed like a normal LLM through OpenRouter’s OpenAI-compatible endpoint, which makes it easy to drop into existing pipelines.
What Jev is — and what it is not
The fastest way to understand the Jev model is to draw a hard line around it.
Jev is:
- A specialized judgment model designed for bounded questions: is this X, which of these is Y, how good is Z on a scale.
- A model that returns a structured answer: an
answerfield, aconfidencescore and arationaleexplaining the call. - Accessible through OpenAI-compatible channels — the main demo channel is OpenRouter, so you can call it with the same request shape you already use.
Jev is not:
- A chatbot. It will not hold a conversation, role-play or draft your blog posts.
- A replacement for a general-purpose LLM. Long-form generation, summarization and multi-turn dialogue belong to chat models.
- A magic accuracy boost. It moves the shape of the interaction from prose to structured judgment; the quality of your question design still matters.
The three primitives at a glance
Every Jev call maps to one of three question primitives. This is the core mental model of the jev ai API surface.
| Primitive | Typical question | Answer space | Example answer (example fixture) |
|---|---|---|---|
| Judgment | “Is this comment spam?” | yes / no / unclear | {"answer":"yes","confidence":0.97,"rationale":"..."} |
| Choice | “Which team should own this ticket?” | One of the listed options | {"answer":"billing","confidence":0.94,"rationale":"..."} |
| Scoring | “Rate this support answer from 1 to 10” | A number on the given scale | {"answer":8,"scale":[1,10],"confidence":0.86,"rationale":"..."} |
Three details worth noticing:
- Judgment answers are three-valued.
unclearis a real answer, not an error. It gives you a natural bucket for “I need a human” routing. - Choice answers are constrained. If you enumerate the options in the question, the answer comes back as one of them — which makes downstream code trivial.
- Scoring answers carry their scale. The
scalefield in the response fixture makes the range explicit, so a “7” is never ambiguous about whether it was out of 10 or 100.
What the output looks like in code
Because the main demo channel is OpenRouter, you call Jev through the standard chat completions endpoint. Here is a minimal curl for a judgment question:
# Confirm the exact model slug on the OpenRouter model page
curl https://openrouter.ai/api/v1/chat/completions \
-H "Authorization: Bearer $OPENROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "typesafe/jev-1.13",
"messages": [
{
"role": "user",
"content": "Judgment question: does this comment contain spam? Comment: \"Buy followers now at cheap-bots.example\""
}
]
}'
The request uses the ordinary OpenAI-compatible body — model id plus a user message. The judgment lives in how the question is phrased; confirm the exact model slug on the OpenRouter model page before shipping.
The parsed answer looks like this — example fixture, confirm exact field names in the official documentation:
{
"answer": "yes",
"confidence": 0.97,
"rationale": "The comment promotes a third-party follower-selling service and contains an unrelated link."
}
In Python the round trip is equally short:
import json, os, requests
resp = requests.post(
"https://openrouter.ai/api/v1/chat/completions",
headers={"Authorization": f"Bearer {os.environ['OPENROUTER_API_KEY']}"},
json={
# Confirm the exact model slug on the OpenRouter model page
"model": "typesafe/jev-1.13",
"messages": [{"role": "user", "content": "Judgment question: does this comment contain spam? Comment: \"Buy followers now at cheap-bots.example\""}],
},
timeout=30,
)
payload = resp.json()
result = json.loads(payload["choices"][0]["message"]["content"])
print(result["answer"], result["confidence"])
The outer payload is the standard OpenAI-compatible envelope; the inner result is an example fixture — the response shape shown here is illustrative, and the official field names should be confirmed against the official API documentation on typesafe.ai.
Where Jev fits — and where it does not
Good fits, based on the three primitives:
- Content moderation: spam detection, toxicity checks, policy-violation flags on every comment or post.
- Support routing: classify an inbound ticket into one of your teams (a choice question), then judge whether it is actionable.
- Screening and scoring: rate resumes, answers or leads on a fixed scale before a human looks at them.
- Evaluation gates: score model outputs or RAG answers as part of a pipeline.
Poor fits:
- Drafting content, writing code or producing long analysis — use a chat model.
- Open-ended conversations where the user expects dialogue.
- Questions where you cannot enumerate the answer space or the scale. If you cannot state the bounded options, Jev has nothing to anchor on.
If you are weighing Jev against a general chat model for one of these jobs, the head-to-head in our Jev vs LLMs guide breaks down the trade-offs, and the three-primitives guide goes deeper on question design. For a working end-to-end example of the moderation use case, see the spam comment detection case.
This guide applies to Jev 1.13.