Jev explained: LLMs write answers, Jev scores your options
Jev is TypeSafe's AI model for decisions, not for writing. You give it a text and questions with fixed answer options, and it tells you how likely each option is.
Key points
When software uses a large language model (LLM) such as GPT or Claude to make a decision, it has to get a text-generating system to output a structured answer and then parse that answer back.1 In TypeSafe's own test, the LLMs' answers also moved from run to run, even at temperature 0.6
Jev, a model from TypeSafe, takes a different route. You send it some context and a list of questions with fixed answer options. It returns a probability for every option.
TopicSigmoid and softmax functions: how they work and when to use each describes two functions that turn the scores of a model into probabilities.How Jev differs from an LLM
TypeSafe calls Jev a System One model, a name taken from Daniel Kahneman's book Thinking, Fast and Slow.7 8 Kahneman describes two ways of thinking. System 1 is fast and automatic, like reading a billboard or driving on an empty road; System 2 is slow and takes effort, like multiplying two-digit numbers or parking in a tight space.9
The same picture fits a software system. Routine decisions with fixed answer options can go to a fast model like Jev, while tasks that need writing or step-by-step reasoning go to an LLM. How much effort the LLM spends can be set as well: Claude, for example, has an effort setting that trades thoroughness against the number of tokens it spends.10
Jev replaces the prompt-and-parse step, in which code asks an LLM a narrow question and extracts a label from its answer.11 The main differences side by side:
| Generative LLM | Jev | |
|---|---|---|
| How it answers | Generates one token at a time8 | Generates all outputs in a single query8; each question is evaluated independently12 |
| What comes back | Generated text, such as structured output in JSON, which code has to parse113 | Typed values and probabilities, and no generated text2 |
| How it tells you how sure it is | Only if asked: in TypeSafe's test, each LLM had to write a number between 0 and 1 as part of its answer6 | A probability comes with every answer. Jev is trained to be calibrated, which means: of the answers it gives a probability of 0.2, about 20% should turn out true14 |
| A known weakness | On judgment calls, the tested LLMs disagreed with themselves from run to run6 | Without an "unknown" option, it still picked an answer on questions it could not answer15 |
How to read Jev's answers
Jev has three question types: Noul5, Choice3 and Score4. The example shows one question of each type about one support ticket, with Jev's answers.
"My checkout page shows a blank screen after I click Pay. I have tried two browsers."16
- Noul · yes or noIs the customer reporting a software defect?Jev is pretty sure that the ticket reports a defect.yes0.96
- Choice · pick oneWhich team should own this ticket?frontend 0.22 · account 0.00 · confidence 0.67payments0.78
- Score · ordered levelsHow urgent is this ticket?levels 0 and 1: 0.00 · score 1.99 · confidence 0.99level 2 · blocking revenue right now1.00
Show the code: request and response
curl https://openrouter.ai/api/alpha/decisions \ -H "Authorization: Bearer $OPENROUTER_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "typesafe/jev-1.13", "state": { "customer_tier": "enterprise", "ticket": "My checkout page shows a blank screen after I click Pay. I have tried two browsers." }, "questions": { "is_bug": { "type": "noul", "instructions": "Is the customer reporting a software defect?", "criteria": { "true": "The customer describes broken or unexpected product behavior.", "false": "The customer is asking a question or requesting a feature." } }, "team": { "type": "choice", "instructions": "Which team should own this ticket?", "criteria": { "payments": "Checkout, billing, or payment processing issues.", "frontend": "Rendering, layout, or browser compatibility issues.", "account": "Login, permissions, or profile issues." } }, "urgency": { "type": "score", "instructions": "How urgent is this ticket?", "criteria": [ "Can wait for the next release", "Should be fixed this week", "Blocking revenue right now" ] } } }'{ "id": "gen-dec-1790015143-AIaTutprXsJ5EwohRSjb", "model": "typesafe/jev-1.13-20260917", "provider": "TypeSafe", "answers": { "is_bug": { "type": "noul", "noul": 0.96 }, "team": { "type": "choice", "choice": "payments", "confidence": 0.67, "probabilities": { "payments": 0.78, "frontend": 0.22, "account": 0 } }, "urgency": { "type": "score", "score": 1.99, "confidence": 0.99, "probabilities": { "0": 0, "1": 0, "2": 1 }, "legend": { "0": "Can wait for the next release", "1": "Should be fixed this week", "2": "Blocking revenue right now" } } }, "usage": { "input_tokens": 476, "output_tokens": 70, "cost": 0.000019992 }}Source: OpenRouter's Jev tutorial, which also has the request in Python and TypeScript.
The confidence of 0.67 follows from the largest probability. For three options, TypeSafe's demo approximates it as (3 × largest probability − 1) / 2, and (3 × 0.78 − 1) / 2 = 0.67.17
Speed and cost
In TypeSafe's own test, Jev was about 16 times faster than Claude Haiku 4.5 and about 42 times cheaper per call.6
Three things to keep in mind when reading these numbers:
- Independent tests measured slower responses, but still under half a second.
- Batching questions pays: one call with 13 questions was 12.2× cheaper and 10× faster than 13 separate calls, with the same answers.19
- TypeSafe advertises "193.6x faster, 444.6x cheaper". Those figures come from its own workflow evaluations, and it expects them to be on the higher end of real-world gains.8
Where Jev fits
Jev is suited to routing, classification, verification and ranking: any point in an app where a predictable typed answer matters more than generated text.11 Here are a few examples of Jev use cases:
| Field | Job |
|---|---|
| Customer support | Sending each ticket to the right team |
| AI model routing | Letting Jev answer, and sending only its unsure cases to a larger LLM (DeepSeek V4-Pro) |
| Intent routing | Routing a query automatically when confidence is above a threshold |
| Tagging | Giving each tweet a topic |
How to build with Jev
In an app that uses Jev, your code stays in charge. It controls the order of the steps, applies the fixed rules and carries out the actions. Jev is called only where a step needs common sense or has to interpret unstructured data, for example to answer: "Does the refund policy support the refund requested in the ticket?"20
- Code checks firstKeep deterministic work in code, such as checking that the order is on the ticket and the amount fits.
- One Jev callNarrow questions that each test one thing, evaluated in parallel.
- Code acts on the answersDifferent actions for confident and unconfident answers. Thresholds scale with risk.
- Review and tuneAfter a few weeks, look at what people approved and rejected, and tighten the policy wording.
Here is that pattern in practice. Take a support agent that is allowed to issue refunds. Before a refund goes out, code checks that the order is on the ticket and that the amount fits what is left to refund. Then Jev answers three yes/no questions: did the customer ask for a refund, is it the order the customer writes about, and does the refund policy cover it?21
The code then applies one rule: it approves the refund when every answer is at least 0.9, blocks it when any answer is at most 0.1, and sends everything else to a person.21 The figure shows four such refunds.
An AI agent can sort its own commands in the same three ways.
TopicWhat is Hermes Agent? describes how one agent decides which commands pass, which are blocked and which need a person's approval.One caution before relying on such thresholds. TypeSafe says Jev "can't hallucinate" and never makes type errors.8 It can still be wrong: in an independent audit, Jev without an "unknown" option still picked an answer for questions it could not answer, and got none of them right.15 So label 100 to 200 of your own items by hand and measure before you set thresholds.22
Limits
- Jev cannot write. It does not produce reasoning, explanations or free-form text11, and it is not trained to generate text.23
- Its input is text only. Images, audio and video are not supported yet.7
- Maths belongs in code. Jev does not count reliably and reads dates as text, so TypeSafe strongly recommends implementing any mathematical logic in code.23
- It works best in English. Other languages are handled less well, and TypeSafe recommends testing on your own content first.18
The bottom line
Jev returns typed answers with probabilities instead of text. In TypeSafe's own test it did that about 16 times faster and 42 times cheaper than a small LLM. The sources agree on how to use it: keep deterministic work in code, offer an "unknown" option, and measure on your own labelled items before you set thresholds. It does not write text, and it is unreliable with maths, counting and dates.
Sources
- Introduction TypeSafe docs
- API reference TypeSafe docs
- Choice TypeSafe docs
- Score TypeSafe docs
- Noul TypeSafe docs
- Self-consistency: nouls (cookbook) TypeSafe docs
- System One TypeSafe docs
- Introducing System One models and Jev TypeSafe blog
- Thinking, Fast and Slow Wikipedia
- Effort Claude Platform docs
- Jev on OpenRouter OpenRouter docs
- Primitives (questions) TypeSafe docs
- Structured outputs Anthropic docs
- AI primer: calibrated decisions vs generated text TypeSafe docs
- Jev calibration audit (KoBBQ) Independent test, GitHub
- Tutorial: make your first decision call OpenRouter docs
- Confidence TypeSafe docs
- Models: pricing, limits, context TypeSafe docs
- Parallel questions (cookbook) TypeSafe docs
- How to build with TypeSafe TypeSafe docs
- Gate agent tool calls with Jev OpenRouter cookbook
- Classify and tag text at scale with Jev OpenRouter cookbook
- Jev 1.13 jaggedness (known weaknesses) TypeSafe docs
Written by Rahmatullah Musawi with the help of an AI assistant.