Definition
TypeSafe calls Jev the first System One model: a model built for the fast, intuitive judgments a program needs thousands of times a day — route this, block that, rate this — rather than for conversation or long-form reasoning. It is a discriminative model (it classifies and scores) that, unlike a classic classifier, needs no task-specific training: the options are described in plain language at request time.[6]
How it works
Every request has three parts: a model, a state and a map of questions.[3]
- State — the input to judge: a string, a JSON object, or an array of strings (Jev 1.14 also accepts images).[2] Questions can refer to fields of a JSON state by name in backticks.
- Questions — each has an id you choose, a
type, aninstructionsstring and, for most types,criteriathat describe the allowed answers. The model never sees the id, so all meaning must live in the instructions and criteria.[7] - Answers — one typed answer per question under the same id: the pick, a probability for every option and a confidence value.
state + typed questions
↓ one parallel pass (no token-by-token generation)
choice / score / noul + probabilities + confidence
↓ your code
act automatically / ask for confirmation / escalate to a human
All questions in one request are answered in parallel against a single read of the state, so they cannot depend on each other. If question B needs the answer to question A, make two calls.[6]
The three question types
Jev's core API is built from three primitives. Jev 1.14 adds a fourth, Box, for locating something in an image; it is marked early and Jev 1.13 rejects it.[7]
1. Choice — pick one option
Use it when the answer is one of a fixed, unordered set: which team, which category, which tool. criteria is a map of option name → description. TypeSafe says Jev supports a cardinality of up to 255 options.[1] The answer returns the chosen option, a probability per option and a confidence value.
{
"state": "I was billed twice for the Pro plan this month and I only have one workspace.",
"questions": {
"team": {
"type": "choice",
"instructions": "Which team should own this support ticket?",
"criteria": {
"billing": "Charges, invoices, refunds and plan changes",
"technical": "Bugs, outages and features that do not work",
"account": "Sign-in, passwords and profile settings"
}
}
}
}
2. Score — place it on an ordered scale
Use it when the answer is a position on a spectrum: severity, urgency, quality. criteria is an ordered list of level descriptions from low to high — at least two levels, and the API accepts up to 10.[4] The returned score is the probability-weighted average of the level indexes, so it can land between levels (for example 1.2).
{
"state": "CSV export returns a 500 error for every workspace since this morning. JSON export still works, but finance can only import CSV.",
"questions": {
"severity": {
"type": "score",
"instructions": "How severe is this bug report?",
"criteria": [
"Cosmetic: nothing is functionally broken",
"Degraded: something is broken but a workaround exists",
"Blocking: work is stopped and there is no workaround"
]
}
}
}
3. Noul — yes or no
Use it for a true/false proposition. You only need instructions; the answer is a single probability between 0 and 1 that the answer is yes. There is no separate confidence field — for a binary question, a value near 0.5 already means “unsure”.[7][8]
{
"state": "I was billed twice this month. Please send the duplicate charge back to my card.",
"questions": {
"wants_refund": {
"type": "noul",
"instructions": "Is the customer asking for money back?"
}
}
}
Speed and cost
| Metric | What TypeSafe reports |
|---|---|
| Latency | 70–500 ms end-to-end per request; TypeSafe says its published evals were run from laptops on the US West Coast, where the service is based.[1] |
| Price | $0.042 per million input tokens ($42 per billion) for both Jev 1.14 and 1.13; output tokens are free.[2] |
| Context | 64k tokens per request and 32k per question (state + one question); an opt-in long-context header raises both to 262k, at lower speed and accuracy.[2] |
| Speed-up claims | 40–200× faster than frontier LLMs on System One-shaped queries; TypeSafe notes its workflow benchmarks were built by its own team and may be biased.[1] |
For scale: OpenRouter measured a three-question support-ticket call at 447 input tokens costing about $0.000019.[7] All of these figures are vendor- or partner-reported; measure on your own traffic.
Key characteristics and limitations
- No free-form text. Jev will not write, summarize, explain or chat. If you need words, use an LLM and let Jev route or check its output.
- No off-schema output. Answers are always one of your options, levels or a 0–1 probability, so there is nothing to parse and no type errors.[1]
- It can still be confidently wrong. “Cannot hallucinate” is a claim about format, not truth: Jev can pick the wrong valid option with high confidence.[8] Confidence measures how concentrated the probabilities are, not whether the answer is correct.[5]
- Calibrated in aggregate. A 0.8 means “right about 80% of the time for answers like this”, averaged across many calls — set thresholds from your own labelled data.[7]
- Weak spots. Exact arithmetic, counting and date comparison; compute those in code and give Jev the semantic part. English is the strongest language; test other languages before relying on them.[2]
- No fine-tuning. The same weights serve every account; you adapt Jev through state, instructions and criteria.[2]
Jev vs LLMs vs text classifiers
| Generative LLM | Trained text classifier | Jev | |
|---|---|---|---|
| Output | Text (prose, code, JSON you asked for) | A label from a fixed set | Typed answers + probabilities + confidence |
| New labels | Edit the prompt | Collect data and retrain | Edit the criteria — no training |
| Shape guaranteed | Only with structured-output modes | Yes | Yes, by design |
| Uncertainty | Hidden in prose; self-reported confidence is unreliable | Scores, often poorly calibrated | Calibrated probabilities on every answer |
| Typical latency | Seconds | Milliseconds (self-hosted) | 70–500 ms (hosted) |
| Best for | Writing, coding, chat | Stable, high-volume label sets with lots of labelled data | Routing, gating, scoring, checking inside software |
In practice they combine: Jev routes and verifies, the LLM writes. See also Jev vs LLM JSON mode and the blog post on Jev vs traditional text classifiers.
Training: RLCD
TypeSafe trains Jev with what it calls Reinforcement Learning for Calibrated Decisions (RLCD). Where RLHF optimizes for answers human raters prefer, RLCD optimizes for decisions with honest probabilities — higher confidence should mean higher accuracy.[1] TypeSafe has not published the method's details or the architecture beyond describing it as transformer-based; outside descriptions of RLCD as a calibration-penalizing loss are speculation.[6] Jev is not trained on customer requests.[2]
Where the name comes from
“System One” comes from Daniel Kahneman's Thinking, Fast and Slow: fast, intuitive System 1 versus slow, deliberate System 2. “Jev” honours the 19th-century economist William Stanley Jevons, whose Jevons paradox observed that more efficient coal use increased total demand. TypeSafe's bet is the same for intelligence: every big drop in the cost of a decision unlocks many more uses.[1]
Versions and where to run it
| Version | Released | Notes |
|---|---|---|
Jev 1.14 (jev-1.14.0) | Oct 14, 2026 | Newest release; adds image input and the Box question type. TypeSafe alias jev-preview.[2] |
Jev 1.13 (jev-1.13.0) | Sep 2026 (launch line) | Still served; TypeSafe's jev-latest alias pointed here when we checked. Used by every example on this site.[2] |
- Flatkey —
POST https://router.flatkey.ai/api/alpha/decisionswith modeltypesafe/jev-1.13. This is what our code samples and use-case demos call. Open Jev 1.13 on Flatkey → - OpenRouter — the same Decisions request shape at
https://openrouter.ai/api/alpha/decisionswithtypesafe/jev-1.14ortypesafe/jev-1.13; OpenRouter also liststypesafe/jev-router.[7] - TypeSafe API —
POST https://api.typesafe.ai/v1/systemone, plus the official Python and TypeScript SDKs.[2]
What Jev is used for
Anywhere a program would otherwise ask an LLM a question and regex out an enum or boolean. Each page below has a live demo and copyable curl / Node.js / Python code.
Copy the code
One call that asks a Choice, a Score and a Noul about the same ticket. Set FLATKEY_API_KEY and run any tab.
typesafe/jev-1.13curl -sS https://router.flatkey.ai/api/alpha/decisions \
-H "Authorization: Bearer $FLATKEY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "typesafe/jev-1.13",
"state": {
"ticket": "Hi, I was charged twice for Pro this month. Please fix it before our payroll run on Friday."
},
"questions": {
"team": {
"type": "choice",
"instructions": "Which team should own this support ticket?",
"criteria": {
"billing": "Charges, invoices, refunds and plan changes",
"technical": "Bugs, outages and features that do not work",
"account": "Sign-in, passwords and profile settings"
}
},
"urgency": {
"type": "score",
"instructions": "How urgent is `ticket`?",
"criteria": [
"Routine: no deadline mentioned",
"Soon: the customer wants a fix but nothing is blocked",
"Now: a deadline is named or work is blocked"
]
},
"wants_refund": {
"type": "noul",
"instructions": "Is the customer in `ticket` asking for money back?"
}
}
}'// Node.js 18+ (built-in fetch). Run: FLATKEY_API_KEY=... node jev.mjs
const body = {
"model": "typesafe/jev-1.13",
"state": {
"ticket": "Hi, I was charged twice for Pro this month. Please fix it before our payroll run on Friday."
},
"questions": {
"team": {
"type": "choice",
"instructions": "Which team should own this support ticket?",
"criteria": {
"billing": "Charges, invoices, refunds and plan changes",
"technical": "Bugs, outages and features that do not work",
"account": "Sign-in, passwords and profile settings"
}
},
"urgency": {
"type": "score",
"instructions": "How urgent is `ticket`?",
"criteria": [
"Routine: no deadline mentioned",
"Soon: the customer wants a fix but nothing is blocked",
"Now: a deadline is named or work is blocked"
]
},
"wants_refund": {
"type": "noul",
"instructions": "Is the customer in `ticket` asking for money back?"
}
}
};
const res = await fetch("https://router.flatkey.ai/api/alpha/decisions", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.FLATKEY_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify(body),
});
if (!res.ok) throw new Error(`Jev request failed: ${res.status} ${await res.text()}`);
const { answers, usage } = await res.json();
console.log(JSON.stringify(answers, null, 2), usage);# Python 3.8+ (pip install requests). Run: FLATKEY_API_KEY=... python jev.py
import json, os, requests
body = json.loads(r"""{
"model": "typesafe/jev-1.13",
"state": {
"ticket": "Hi, I was charged twice for Pro this month. Please fix it before our payroll run on Friday."
},
"questions": {
"team": {
"type": "choice",
"instructions": "Which team should own this support ticket?",
"criteria": {
"billing": "Charges, invoices, refunds and plan changes",
"technical": "Bugs, outages and features that do not work",
"account": "Sign-in, passwords and profile settings"
}
},
"urgency": {
"type": "score",
"instructions": "How urgent is `ticket`?",
"criteria": [
"Routine: no deadline mentioned",
"Soon: the customer wants a fix but nothing is blocked",
"Now: a deadline is named or work is blocked"
]
},
"wants_refund": {
"type": "noul",
"instructions": "Is the customer in `ticket` asking for money back?"
}
}
}""")
res = requests.post(
"https://router.flatkey.ai/api/alpha/decisions",
headers={"Authorization": f"Bearer {os.environ['FLATKEY_API_KEY']}"},
json=body,
timeout=60,
)
res.raise_for_status()
data = res.json()
print(json.dumps(data["answers"], indent=2), data.get("usage"))
No key yet? Get one for Jev 1.13 on Flatkey → · Read answers as answers.team.choice, answers.urgency.score, answers.wants_refund.noul.
FAQ
What is Jev in one sentence?
Jev is TypeSafe AI's decision model: you send it state (text or JSON) plus typed questions, and it returns typed answers with probabilities and confidence instead of generated text.
Is Jev an LLM?
No. It reads natural language like an LLM, but it does not generate tokens. Every answer is a choice, a score, a yes/no probability (or, on Jev 1.14, an image box) that you defined in advance.
How do I integrate Jev with Python or JavaScript?
Send one HTTPS POST with model, state and questions, then read answers by the keys you chose. The curl, Node.js and Python snippets on this page call Flatkey's decisions endpoint (https://router.flatkey.ai/api/alpha/decisions) and run as-is with FLATKEY_API_KEY set. TypeSafe also ships official SDKs: typesafe-sdk for Python and @typesafe-ai/sdk for TypeScript.
How does Jev compare to traditional text classifiers?
A classic classifier must be trained on labelled data for one fixed label set. Jev needs no task-specific training: you describe the options in plain language at request time, change them without retraining, and still get calibrated probabilities. A trained classifier can still be cheaper or more accurate on a stable, high-volume label set with plenty of labelled data.
Can Jev be used for content moderation?
Yes. Moderation is a natural fit: a Choice for the policy category, a Score for severity and a Noul for 'should this be hidden', all in one call, with low-confidence cases routed to a human. TypeSafe's docs include a Twitch chat filter cookbook built this way.
How is Jev priced?
TypeSafe lists Jev 1.14 and 1.13 at $0.042 per million input tokens ($42 per billion), and output tokens are free. OpenRouter lists the same input price for Jev 1.14. Check the provider page before budgeting, because prices can change.
How fast is Jev?
TypeSafe reports 70–500 ms end-to-end per request in its launch post, measured from the US West Coast. All questions in a request are answered in parallel, so adding questions adds tokens but little latency. These are vendor figures, not independent benchmarks.
Can Jev hallucinate?
It cannot return an off-schema value or a type error, because outputs are limited to the options you defined. It can still choose the wrong option, sometimes with high confidence, so gate important actions on confidence and keep exact checks in code.
Which Jev version should I use?
Jev 1.14 (jev-1.14.0) is the newest release, available from October 14, 2026, and adds image input and the Box question type. Jev 1.13 (jev-1.13.0) is still served and is what TypeSafe's jev-latest alias pointed to at the time of writing. The examples on this site use typesafe/jev-1.13 on Flatkey.
Is Jev open source?
No. TypeSafe has not published weights or a technical paper; Jev runs only as a hosted API (TypeSafe, OpenRouter, Flatkey). Open community projects may copy the interface, but they are not Jev.
See Jev on a real workflow
31 use cases, each with a live demo, the exact schema and copy-paste code.
Sources
- TypeSafe AI — Introducing System One Models & Jev (Sep 15, 2026)
- TypeSafe docs — Models (Jev 1.14 / 1.13, pricing, context, aliases)
- TypeSafe docs — Primitives (Choice, Score, Noul)
- TypeSafe docs — Score
- TypeSafe docs — Confidence
- Wikipedia — Jev (AI model)
- OpenRouter — What Is Jev? TypeSafe's Decision Model Explained
- Sanity glossary — Jev (TypeSafe AI model)
Last reviewed 2026-10-22. Prices, versions and limits change; check the provider before you budget. jev-llm.com is independent and not affiliated with TypeSafe AI.