A lot of the GenAI workflows I’ve worked on follow the same pattern: give a model some context, ask it to return JSON, parse the response, and use a field to decide what happens next. Take invoice processing. The model reads the invoice and returns something like {"requires_review": true}. The application parses that response and routes the invoice for review. We go through this whole process of generating and parsing text just to get a decision that an if statement can use.

Every one of those output tokens costs latency and money, and the JSON is a liability of its own: it arrives malformed, or it carries an enum value your switch statement has never heard of. We built a cottage industry of constrained decoding, retry loops, and schema validators around one mistake, which is that we asked a text generator for something that was never text.
Jev returns the decision instead. TypeSafe AI’s first System One model takes context and questions, then hands back typed judgments with probabilities. Your code gets the decision with no answer string to parse. I spent some time on the question underneath the launch: how much of this needs a new neural architecture, and how much of it could I build today with weights already on Hugging Face? System One documentation
The Company and the Claim
The company is TypeSafe AI. Jev entered early access on September 15, 2026. The launch describes a new model architecture, a parallel sampler, and a training method called Reinforcement Learning for Calibrated Decisions (RLCD). Treat those as company claims. TypeSafe shipped a product announcement, and an architecture paper would look different. TypeSafe’s announcement
TypeSafe’s founders include CEO Diogo Almeida, COO Sasha Sheng, and CTO Erik Gafni. Almeida worked on instruction-following research behind ChatGPT, and Sheng previously worked at Meta/FAIR. They are building a specialized decision system and shipping it as a product, which sets expectations for how much of the method you will get to see.
“System One” borrows the fast-judgment framing from Daniel Kahneman. It names the behavior TypeSafe wants and tells you nothing about the attention mechanism. Jev exposes no conversational text-generation interface: you specify what can be answered, and your software receives the result. System One documentation
The closest everyday description I can give is a natural-language-programmable classifier. A conventional fixed-label classifier bakes its labels into the weights at training time. Here the questions and the answer descriptions arrive with the request.
The Public Record Stops at the Interface
Separating three layers helped me stay honest about which one I can reason about.
| Layer | What we can establish | What remains unestablished |
|---|---|---|
| Application interface | State plus typed questions, returning decisions and probabilities | Whether those judgments satisfy a particular production task |
| Inference behavior | TypeSafe describes parallel evaluation instead of an autoregressive answer stream | Exact internal graph, attention layout, and sharing strategy |
| Training | TypeSafe names RLCD and describes a calibration objective | Reproducible loss, reward construction, training recipe, data, and ablations |
The public documentation explains the input/output contract and the training motivation. It stops well short of letting anyone identify Jev as a diffusion model, an encoder-only transformer, or a modified decoder. Those guesses are circulating, but parallel output alone cannot distinguish between them, so I am not going to pretend otherwise. TypeSafe’s AI primer
The same goes for the “How Jev works” diagram doing the rounds, the one with Qwen, a KV cache, and vocabulary logits. That is a useful design for a Jev-like implementation. Whoever drew it has no more access to TypeSafe’s internals than you do.
Three ways to ask a question
| Primitive | You supply | You receive |
|---|---|---|
| Choice | Named alternatives and descriptions | A selected alternative, its full option distribution, and confidence |
| Score | Ordered descriptions of levels | A probability-weighted level score, the distribution, and confidence |
| Noul | A yes/no question or proposition | The probability of “yes”; no separate confidence field |
Choice currently supports up to 255 options, and Score supports 2 to 10 levels, indexed from zero. The contracts differ, and conflating them is the first mistake I expect to see in production code:
Noul: a value of
0.5expresses uncertainty about whether a proposition holds.Score: a value halfway along the scale expresses a position on that scale, with no uncertainty implied.
Suppose a severity rubric has levels 0, 1, and 2, with probabilities 0.1, 0.3, and 0.6. Its score is:
That number is an expected rubric level. It carries no claim that the decision has a 75% chance of being correct, so wiring it into a threshold as though it did will mislead you. Score semantics
Where the Speed Can Come From
In ordinary autoregressive generation, the model processes the input and then repeatedly predicts the next output token. Even a tidy structured answer costs an output sequence: field names, values, punctuation, and possibly reasoning tokens before any of it.
A decision interface drops that output sequence. Compute scores for the permitted alternatives, select or aggregate them, and let ordinary code serialize the response. The useful latency model is:
Generated answer = input processing + sequential output steps + serving overhead
Direct decisions = input processing + decision readout + serving overhead
Removing the decoding loop helps most when output generation is a substantial fraction of the total. A long input can still dominate. More options and more questions still consume compute and memory. Parallel execution reduces serial waiting, and the workload is still not free.
This is where I would push back on the “no tokens” framing in the demo threads. The accurate claim is narrower: no autoregressive answer-token generation. Input text still has processing cost, and the API still serializes values as JSON on the way out.
A second constraint matters before you design around this. Jev evaluates the questions in a single request independently against the same state, so one question cannot reach for another question’s answer. If you need to select a customer record before retrieving evidence for a second judgment, that dependency costs you another round trip. The docs describe a shared request budget of roughly 32,000 tokens. Question composition
And independent evaluation does not imply statistically independent errors. Two judgments can fail together because they lean on the same missing or misleading evidence.
An Invoice Becomes a Few Decisions
The demo everyone is sharing asks a single question: is this invoice fraudulent? In a real workflow I would not ask that. I would separate the observations from the action, because the observations are what the model is good at and the action is what I want to own.
Here is an illustrative request using the documented HTTP request shape:
{
"model": "jev-latest",
"state": {
"invoice": {"vendor": "Northwind Parts", "amount": 1200},
"purchase_order": {"vendor": "Northwind Parts", "amount": 1200},
"email": "Please pay today. Our bank details have changed.",
"bank_change_verified": false
},
"questions": {
"bank_change_mentioned": {
"type": "noul",
"instructions": "Does the email describe a change to payment bank details?"
},
"email_intent": {
"type": "choice",
"instructions": "What is the main purpose of the email?",
"criteria": {
"payment_request": "Request payment for an invoice.",
"delivery_update": "Report shipping or delivery progress.",
"other": "Neither of the above."
}
}
}
}
State holds the evidence, and questions define the judgments. State documentation, Choice request format
An illustrative, shortened answer could look like this:
{
"bank_change_mentioned": {"type": "noul", "noul": 0.98},
"email_intent": {
"type": "choice",
"choice": "payment_request",
"probabilities": {
"payment_request": 0.95,
"delivery_update": 0.01,
"other": 0.04
}
}
}
I have omitted the Choice confidence field rather than invent a value for a computation the docs leave underspecified.
The application then applies its own policy, in code I can read, test, and audit:
# Illustrative policy; the threshold requires validation on real cases.
if bank_change_probability >= 0.8 and not bank_change_verified:
action = "hold_for_verification"
else:
action = "continue_standard_invoice_checks"
Notice what the model did not need to do: compare two numeric amounts, move money, or invent a fraud narrative. Code compares amounts, and it compares them the same way on every invoice. The model handles the fuzzy language judgment, the one part that needed a model. A bank-change request is evidence for verification rather than proof of fraud, and that distinction belongs in the policy layer where I can test it.
The same pattern fits the coding-agent routing demo: classify a request into simple_edit, complex_change, or needs_clarification, then let the application select the appropriate workflow.
A game loop uses the same contract
Each tick has a state and an allowed action set. A controller can supply nearby threats, ammunition, and a goal, then ask which permitted action to take.
Authored toy example. The states, the actions, and the animation speed are illustrative.
TypeSafe’s Doom demo used structured text state, not pixels, and that distinction matters more than the demo’s framing suggests. Perceiving the world and choosing an action are separate problems, and the demo shows you the second one. The launch itself acknowledges that a conventional Doom bot would play better. Doom demo notes
A low-latency selector can be useful inside a controller without being a strong planner. The chess clip making the rounds points the other way: winning on the clock and playing well are different measurements, and one social-media match establishes neither.
Can Existing Models Already Do This?
Yes, several existing approaches reproduce parts of the behavior. Reproducing the behavior tells you nothing about accuracy, calibration, latency, or serving economics, which is the distinction I keep having to restate in these conversations.
| Approach | How to build a similar interface | Main limitation |
|---|---|---|
| Entailment classifier | Turn each candidate into a hypothesis and score whether the state supports it | Candidate-wise work and sensitivity to hypothesis phrasing |
| GLiClass | Supply text and runtime labels; obtain label scores without writing an answer | Must validate complex policy judgments and score calibration |
| Qwen3-Reranker | Turn each candidate into a relevance proposition; read yes/no logits | Relevance ranking does not generalize to arbitrary decisions |
| OpenJev / direct LLM logits | Map options to answer tokens, read their logits, and assemble typed results | Prompt and token biases, plus uncalibrated option probabilities |
| LLM with structured output | Generate schema-constrained values through an ordinary LLM API | Retains autoregressive output and may generate probability text |
Entailment-based zero-shot classification predates this launch by years. The 2019 work by Yin, Hay, and Roth formulates classification through textual entailment, including unseen labels. For an email router, a candidate hypothesis would be something like “This message requests a refund.” Original paper
GLiClass is the closer precedent: dynamic labels scored without answer generation, with a published uni-encoder that processes text and labels together. Runtime labels plus a single forward pass are therefore ordinary engineering, available to you today. Whether GLiClass holds up against Jev on arbitrary workflows is a separate question, and I have not seen anyone answer it. GLiClass implementation, GLiClass paper
Qwen’s own reranker example reads the final-position logits for yes and no, normalizes those two scores, and returns a relevance value. It writes no relevance explanation. To adapt it, pair the state with a proposition describing each possible action. Normalizing those candidate scores into a Choice distribution is a design decision you make yourself, and the reranker hands you no calibration guarantee along with it. Qwen3-Reranker model card and code
TypeSafe also publishes an LLM-backed System One adapter with probability and discrete answer modes. Interface compatibility is therefore available through ordinary LLM providers, which is worth separating from reproducing the inference path. TypeSafe’s adapter
Reproducing the Decision Readout with an Open LLM
OpenJev is the most useful reference point here because it states its scope plainly: it reproduces the interface pattern, not Jev’s undisclosed model or training. Its direct baseline uses frozen Qwen3.5-4B weights. OpenJev
The mechanism is simpler than the launch framing suggests. Assign each option a verified single-token label:
A = payment_request
B = delivery_update
C = other
The prompt contains the state, the question, and the label descriptions. At the answer position the model produces vocabulary logits. Read only the logits for A, B, and C. For candidate token set $C$, the restricted distribution is:
\[p(i \mid \text{state}, \text{question}, C) = \frac{\exp(z_i / T)}{\sum_{j \in C} \exp(z_j / T)}\]At $T = 1$ this is an ordinary restricted softmax. The program takes the highest-scoring option and maps it back to its typed value. Nothing samples an answer token.
# Conceptual readout, not a complete model-loading example.
# Verify candidate token IDs at the exact answer boundary.
with torch.inference_mode():
logits = model(**inputs).logits[0, -1, :]
option_logits = logits[candidate_token_ids].float()
probabilities = torch.softmax(option_logits / temperature, dim=-1)
choice = option_names[int(probabilities.argmax())]
The tokenizer detail is where this breaks for people. A descriptive label such as REQUIRES_MANUAL_REVIEW may span several tokens, and you cannot recover its complete sequence probability by reading one next-token logit. Single-token aliases avoid the problem and introduce biases of their own, since the model carries priors about the letter A that have nothing to do with your rubric.
Reuse the state, then branch
When many questions share exactly the same context, process the shared prefix once and retain the reusable inference state. Each question then gets its own suffix and answer position, and you can batch compatible branches.
An open-model implementation pattern, not a diagram of Jev’s internals.
This refines the viral Qwen diagram in one place: you prefill once and then evaluate question suffixes, rather than running one forward pass for the whole request. You have to isolate branches, positions, masks, and cache state yourself, and hybrid or recurrent models may carry state that copying ordinary attention KV tensors will miss.
OpenJev’s method uses fixed uppercase answer tokens and restricted softmax without decoding, and its shared-state mode explores this prefix reuse and parallel suffix evaluation. Method, Implementation overview
The project reports a same-model, 21-question experiment with median times of 1.023 seconds for parallel direct readout and 5.332 seconds for generated yes/no JSON. But the two paths agreed on only 18 of 21 decisions. The output path changes the answers, which is a different finding from the two paths being interchangeable. These are the project’s measurements, not tests I performed. OpenJev results
The Hard Part Is Trustworthy Probabilities
This is the part of the discourse that worries me most, because “the model returns a probability” is doing an enormous amount of unearned work in most of the takes I have read. People use confidence for three different quantities:
- Generated confidence: the model writes a number in its answer.
- A native probability estimate: the program reads and normalizes model logits.
- Empirically calibrated probability: held-out outcomes occur at rates consistent with the estimates.
The second improves on the first, because it stops asking a text generator to verbalize its own certainty. It does not get you the third for free.
Suppose a classifier assigns roughly 0.9 probability to its chosen answer across 1,000 comparable cases. About 900 correct answers would be consistent with calibration. If you observe 650, the system is overconfident, and nothing about the softmax told you so. Normalization produces a valid mathematical distribution and says nothing about real-world frequencies.
Constrained output spaces also create a conditioning problem. If the only candidates are approve and reject, their probabilities must sum to one even when the evidence supports neither. An explicit insufficient_information option gives the model somewhere to put that outcome, though it still has to learn to use the option, and training that never rewarded it will not produce it now.
TypeSafe says RLCD optimizes decisions and calibration rather than generated text. If that generalizes across workloads, it is a meaningful difference from reading an existing model’s logits, and it is the part of the pitch I find most plausible as a moat. The public primer discloses no reproducible RLCD objective, so I would not go relabeling temperature scaling or a softmax wrapper as RLCD either.
TypeSafe’s confidence field is a statistic derived from the option distribution rather than a separate correctness oracle, and Noul has no such field. A concentrated distribution can still be wrong. Confidence documentation
None of this is new territory. Guo and colleagues studied neural-network miscalibration and found temperature scaling effective across many evaluated settings, and for a local replica, fitting a temperature on held-out labeled data is the sensible baseline. It promises nothing about a new domain or a different candidate set. Guo et al., 2017
If I were evaluating this for production, I would measure decision quality and probability quality separately: accuracy, log loss, Brier score, reliability plots, and error rate among the cases the system accepts without a human. Then I would change the option order, paraphrase the questions, and remove evidence to see what happens. Valid JSON hides those failure modes, and these tests surface them.
Reading the Headline Numbers
The launch advertises 193.6x faster, 444.6x cheaper, 70 to 500 ms responses, and $0.042 per million input tokens, with no output charge. TypeSafe says the largest gains come from its own workflow evaluations and sit toward the high end of expected real-world gains. Those are vendor-reported comparisons against particular baselines, and they are not universal speedups over a well-chosen classifier or a tuned LLM configuration. Launch results and caveats
The evaluation site compares four workflows against reference judgments derived from two strong models. That measures agreement with a model-based reference, which is a weaker thing than truth for a business decision. Harness assumptions and baseline reasoning settings shape the comparison too. Evaluation methodology
OpenJev reports 0.845 reference agreement versus published Jev’s 0.883 on an aligned 102-row subset, without calling a live Jev endpoint and excluding parts of the full evaluation. Its own documentation warns that this falls short of establishing near-Jev capability, and that probability quality differs as well. OpenJev comparison limitations
Finally, the “can’t hallucinate” slogan needs a narrower reading than the demo threads give it. A finite answer set prevents an invented option, and it does nothing to prevent choosing the wrong allowed option.
{"decision": "approve"}
That is well typed and it can still cost you the money. Type safety is real and valuable. It says nothing about whether the decision is factually right, whether it complies with your policy, or whether misleading input produced it.
Sooooo….
My reading is that the public evidence supports a useful product direction while leaving the extent of the architectural novelty unresolved.
The familiar pieces are familiar: classification, runtime label descriptions, direct logit readout, constrained output spaces, batched inference, prefix reuse, and calibration. Open implementations cover several of them today, built over a weekend on frozen weights.
The potential differentiation is whether TypeSafe has trained and served a model that combines broad language understanding, stable decisions, useful uncertainty, and low latency substantially better than those alternatives. That takes comparative evidence. Neither a launch slogan nor an overnight interface replica settles it.
The idea that stays with me is smaller and more durable than the launch. When software needs a decision, generating a paragraph is unnecessary work. Most of us have paid that tax for two years without noticing, wrapping parsers and retries around an output format we never wanted. Jev makes the alternative explicit. Whether its moat turns out to be architecture, training, systems engineering, or the combination is still waiting on a fuller technical disclosure, and I would rather wait for it than guess.
