A generation request does not start at the model. It starts with a stack of small judgement calls that already live in production code: is this prompt allowed, which model should take it, is the first result good enough to show, does this ticket need a person. We keep hitting the same fork. A regex is cheap and brittle. A frontier model is accurate enough for the easy cases, then spends seconds and cents writing a sentence we immediately throw away so we can read a boolean out of it.
Jev is a third option. You send a state and a map of typed questions. You get probabilities back. No prose. The honest article is about whether that belongs in front of a generation, and what breaks if you put it there.
A typed answer instead of a sentence
TypeSafe calls the category System One Models, after the fast intuitive System 1 in Kahneman’s Thinking, Fast and Slow. The model is named after William Stanley Jevons, whose paradox says that when the cost per unit falls, total demand rises. That is the bet. If a decision that used to cost a thinking-model round-trip now costs a fraction of a second and a price that rounds to nothing, people will ask more of those questions, not fewer.
Jev is transformer-based. It is not an LLM. It generates no text at all. The training method is Reinforcement Learning for Calibrated Decisions, which optimises for honest probabilities, rather than RLHF, which optimises for answers human raters prefer, or RLVR, which optimises for programmatically verifiable outputs. Sampling is parallel: every question in the request is answered in a single pass, instead of one token at a time conditioned on the last. That is the speed trade. You give up the paragraph. You buy a structured decision with a number attached.
TypeSafe came out of stealth on 15 September 2026 with Jev in early access, after two years in stealth and a $40 million seed round led by DCVC. The founder, Diogo Almeida, previously worked at OpenAI on the instruction-following methods that became the research behind ChatGPT. Direct TypeSafe API keys are still behind an early-access waitlist. The same jev-1.13 model is reachable without that approval through OpenRouter, the Vercel AI Gateway and Cloudflare Workers AI, where it is listed with a 32,000-token context window. Within days of launch, Cloudflare Workers AI, the Vercel AI SDK, LangChain, Langfuse and Pydantic AI had all shipped support.
Pricing is $0.042 per million input tokens with output tokens free. TypeSafe publishes end-to-end response times of 70ms to 500ms, against 3 to 329 seconds for frontier models on comparable work. TypeSafe’s launch post is where those architecture and training claims are set out, along with the caveats the company attaches to its own numbers. The 70–500ms range is not a guarantee from another region. TypeSafe states its published latency evaluations were generally run from laptops on the West Coast, where the service is currently hosted.
Because the set of valid outputs is defined in the schema before the call, a type error is structurally impossible. That is a guarantee about shape, not about correctness. A wrong answer that fits the schema is still available. The launch discussion spent most of its energy on what “cannot hallucinate” is actually claiming, and that is the right argument to have. You cannot get a stray sentence. You can still get a confident, well-typed miss.
What you send, and what comes back
The request is a state plus a map of named typed questions. The state can be a plain string, or structured JSON such as a ticket plus an order plus a policy. Every answer comes back under the key you chose for it. The key is not sent to the model and plays no part in inference. Name it for your code.
There are exactly three question types. A noul is a yes/no question and returns the probability of yes as a number from 0 to 1. A choice picks one option from a set you define, capped at 255 options, and returns the winning option, the full probability distribution over all options, and a confidence from 0 to 1. A score rates the state against an ordered rubric of between 2 and 10 levels you write, and returns a probability-weighted value that can land between levels, plus the legend, the per-level probabilities and a confidence. Every question carries an instructions field and an optional criteria field where you describe what each option or level means.
The API reference is the source for that shape. Cloudflare’s Workers AI listing shows a full worked request and response, including a routing example and a risk-scoring example. A generation front-door looks like this:
{
"model": "jev-latest",
"state": {
"prompt": "cotton twill shirt, three colourways, studio light, no logos",
"policy": "block photorealistic people and brand marks"
},
"questions": {
"block": {
"type": "noul",
"instructions": "Should `prompt` be blocked under `policy`?",
"criteria": {
"true": "It asks for a photorealistic person or a brand mark",
"false": "It asks for neither"
}
},
"family": {
"type": "choice",
"instructions": "Which generation family should handle this request?",
"criteria": {
"photoreal": "Camera-like stills",
"illustration": "Drawn, painted or graphic looks",
"video": "Anything with motion"
}
},
"campaign": {
"type": "score",
"instructions": "How likely are outputs from this prompt to read as one campaign?",
"criteria": [
"Unrelated looks",
"Loosely related",
"Shared fabric, light and crop"
]
}
}
}Each type takes its own criteria shape, and that is easy to get wrong on the first try: a noul takes an object describing what a yes and a no mean, a choice takes a map of option to rubric, and a score takes an ordered array of level descriptions. Mismatch one and you get a 422 back that names the offending field.
Three questions, one pass. The annoying part is the writing. Instructions and criteria are the whole interface. If they contradict each other, the model degrades. If the state is stuffed with material the questions do not need, accuracy falls. There is no fine-tuning and no LoRA. Closed weights. Text-only input: no image, audio or video. The request budget is 64,000 tokens, with 32,000 for the state plus the longest question. Strongest performance is in English, with lower accuracy on CJK languages. If your state is a frame, this is the wrong tool.
Four places this already has a job
None of these are hypotheticals. They are the four families of code that already sit in front of, beside, or after a generation.
Routing and classification. PicX Studio runs 33 image and video models behind one interface, billed from a single credit balance, so “which model fits this request” is ordinary production code. A choice over families, styles, or duration bands replaces a prompt-classifier LLM call, or the regex that pretends to be one. A noul can sit in front as a cheap “is this even in-distribution” gate. The catch is that a router is only useful if it changes the next hop. A routing experiment found that a Jev-based difficulty router and a retrieval-only ablation scored identically, 62.4%, at essentially the same cost. The improvement came from the retrieval step rather than from Jev. If the downstream models are interchangeable for that request, you paid for a typed opinion that did not move the needle.
Moderation and guardrails. The policy is already written down somewhere. The current implementation is either a keyword list that fails on paraphrase, or a second model that writes a refusal paragraph you then have to interpret. A noul against the policy text, asked in parallel with a choice over violation class, is the same decision without the paragraph. It is still a judgement. Adversarial content inside the state can steer it. Treat the probability as a tripwire, not as a verdict you would defend in a review.
Scoring and eval judging. This is the use case the independent write-ups keep returning to. A score against a rubric you already use for “is this output good enough to show” or “did this agent run pass” is a drop-in for an LLM-as-judge call, minus the rationale. Langfuse reported a 6,003-rubric regrade in which Jev matched Claude Fable 5.1 on 91.5% of verdicts at $160 per million graded answers against $33,000 for Fable, and separately flags that Jev returns no rationale, cannot abstain unless you add an explicit unknown option, and shows context rot on long traces. Langfuse’s evaluation write-up is the one to read for that trade. A LangChain judge test on five fixed agent runs repeated 500 times reported 100% binary agreement with a single human oracle at $0.34 total against $28.17 for Claude, and warned that the corpus is tiny and that a cheap judge which is consistently wrong scales its mistakes. Arize’s analysis concluded Jev is a plausible cheap judge for pass/fail, routing and labelling, that its main loss against an LLM judge is the missing written explanation, and recommended running Jev on every trace while sampling failures with an LLM judge.
Real-time loops. Ten banners that must look like one campaign. A fabric texture that has to read as cotton. A video clip that has to stay on-brief across retries. Those loops currently either skip the quality gate or pay a thinking-model tax on every attempt. Parallel typed questions let you score brief-fit, policy-fit and retry-worthiness in one call, then decide whether to show, retry, or escalate. The loop is the product. The model is the cheap sensor inside it.
Thresholds, not verdicts
The interesting return value is not the winning option. It is the probability.
A noul at 0.97 and a noul at 0.54 are both “yes” if you round. They are not the same operational fact. The first can auto-allow. The second should page a human, or fall through to a slower model that can explain itself. One call, two behaviours, depending on a threshold you own. That is the whole point of paying for calibration rather than for a preferred answer.
It also means the threshold is part of the system. Tune it on production traffic, not on a demo. Do not copy it across primitives. The jaggedness page documents two calibration quirks that matter here: a noul and its negation need not sum to 1, and a published example sums to 1.19; a noul and a choice asked the same yes/no question need not agree. A cutoff that is sane on a noul is not a cutoff you can paste onto a choice.
This is also where the sharpest public criticism lands. One practitioner ran 16,500 predictions across eight tabular datasets and reported that Jev failed calibration on seven of the eight and was around ten times more miscalibrated than a gradient-boosted baseline, systematically overstating bad outcomes. That calibration audit is the most substantive public pushback so far. If your use case is “is this prompt closer to cotton or to silk,” a slightly miscalibrated probability with a conservative threshold is still useful. If your use case is “price this risk as if the number were a frequency,” it is not. It depends, and it depends on whether you needed a ranked signal or a number you would treat as a rate.
The jaggedness is the spec
TypeSafe publishes a model-jaggedness page for jev-1.13, last reviewed 17 September 2026, listing nine documented failure modes. Read that page before you design around the model. The failure modes decide fit.
It reads negations literally. “Do not generate a photorealistic person” is not the same question as “is this a request for a photorealistic person,” and the model will not generously infer the one from the other. Write the question as the decision you actually want.
It counts unreliably. “Are there three colourways in this brief” is a bad noul. Count in your own code. Ask Jev whether the colourways are specified at all, or whether they look like one campaign.
It compares numbers and hex values weakly. Hex palettes, seed integers, duration in seconds, credit costs: if the decision is an inequality, do not send it here.
It handles date and time ordering poorly. SLA windows, “generated after the brief was updated,” “this retry is older than the last good frame.” Those are clock questions. Keep them out of the state you expect the model to reason over, or extract the ordering yourself and put a boolean in the state.
It struggles with multi-hop indirection. “Using the policy in section B, and the exception in the customer’s last ticket, is this prompt allowed” is two hops. Flatten it. Put the resolved policy next to the prompt and ask a direct noul.
It loses accuracy when the state carries a lot of irrelevant material. Dumping the full conversation, the full ticket history, and the full model catalogue into the state because you might need it later is a good way to make the actual question worse. Send the slice the questions need.
It can be steered by adversarial content inside the state. A user prompt that contains instructions aimed at the judge is not a curiosity. It is a documented failure mode. If the state includes untrusted text, say so in the instructions, and do not let that text also be the instructions.
It degrades when instructions and criteria contradict each other. This is the easy one to introduce in review. Two authors, two slightly different rubrics, one question. The model will not tell you they conflict. It will just get worse.
It cannot generate text. There is no rationale, no suggested rewrite, no “here is a safer prompt.” If you needed the sentence, you still need a language model.
Those limits are not a disclaimer at the bottom of a datasheet. They are the design constraints. A quality gate on visual brief-fit, written as a score against a rubric you control, with a short state, in English, with a threshold and an escalate path, is in-distribution. A 77-way intent classifier over banking utterances is the kind of thing that already showed up as a miss: an independent open evaluation on 300-item public sets put Jev ahead of two small frontier models on Enron spam at 98.7%, SST-2 at 95.7% and AG News at 91.3%, at 5 to 56 times lower cost, but behind both on 77-way Banking77 classification at 76.0%. Wide choice sets with fine labels are a different job.
What the numbers measure, and a check before you swap the call
The 193.6x faster and 444.6x cheaper figures on the TypeSafe homepage come from its own four-workflow evaluation, where the reference answer is the average of two frontier models, GPT-6 Astra and Fable 5.1, rather than human labels. The headline accuracy of roughly 68% is agreement with other models, not ground truth. TypeSafe states the workflows were built by its own model-capabilities team, that some bias could exist, and that it expects these numbers to be at the high end of real-world gains. Treat them as an upper bound on the pitch, not as a measurement of your traffic.
Independent timing cuts both ways. One independent timing run measured a single yes/no call at 477ms of server time on 18 September 2026, slower than Gemini 3.1 Flash Lite and Claude Haiku 4.5 on that one call, but measured 100.7x faster and 7,499x cheaper when six sequential thinking-model calls, 74.42s and $0.16251, were collapsed into one Jev call, 0.739s and $0.00002167. The distinction that matters is single cheap call versus collapsed workflow. If you were already using a flash-class model for one boolean, Jev is not obviously the faster object. If you were chaining thinking-model calls to assemble a decision, it is.
Every’s Mike Taylor ran 777 judgements across 37 documents in under 0.7 seconds for about a quarter of a cent, and on a 12-passage defect check measured roughly 25x faster and 580x cheaper than Fable 5.1 at high effort, while catching 6 of 7 planted defects where the frontier model caught 7 of 7. That hands-on judging experiment is useful because it names the miss. The cheap judge is not free of misses. It is cheap enough that you can afford a second pass on the uncertain band.
The launch also drew a prior-art dispute on r/LocalLLaMA, where a developer argued a March 2025 paper with open weights and a published dataset had already implemented non-autoregressive typed decisions, and that TypeSafe shipped the same idea with no paper, no open weights and no open data. That does not change the production question, which is whether this particular hosted model, with these failure modes and this price, is a better next hop than the LLM call you already have. It does change how much weight you should put on the category being new.
A short procedure. Write the decision you already make as a noul, a choice, or a score, with instructions and criteria that do not contradict. If you cannot write it without needing a count, a numeric comparison, a date order, a multi-hop, or a generated sentence, stop. Keep the LLM. If you can, send a short state and look at the probability, not the rounded answer. Pick a threshold that means “act” and a band that means “escalate.” Run it in shadow against the current call long enough to see the misses, especially negations and adversarial prompts. Check that a noul and its negation do not both fire. Check that a noul and a choice asked the same question do not disagree in the band you care about. If the value is the written explanation, keep an LLM judge on the failures, as Arize argued, and let Jev run on everything else.
The fit is a typed, English, text-only judgement that already exists in the pipeline, where the cost of being a little wrong is an escalate, not a silent skip, and where collapsing several slow calls into one pass is the actual win. The rest of the stack stays. The sentence-writing model still writes, when you need a sentence.


