Writing

Jev Is Not a Chatbot. It Is a Judgment You Can Call.

A new kind of AI model launched this month. It cannot write a sentence. You send it a situation and a question, and it sends back an answer with a probability in a few hundred milliseconds. Here is what it is, what people built with it in its first week, where it breaks, and the open source models already claiming to beat it.

Published
September 23, 2026
Reading time
15 min read
Author
Ethan Rogers

On September 15 a company called TypeSafe came out of stealth with $40 million and a model named Jev. Within three days Vercel said it was the fastest adopted model in the history of its AI Gateway, used by nearly 13% of paying teams inside 24 hours. Within ten days there were more than 470 public projects built on it and over thirty open source clones.

If you have not heard of it, that is because it does not do the thing every other AI model does. It does not write.

Jev is what TypeSafe calls a System One model, after the fast, automatic kind of thinking in Daniel Kahneman's split. Every model you have used, from ChatGPT to the one writing code in your terminal, generates text one token at a time. Jev takes in a situation and a set of typed questions and returns the answers as numbers. Which of these categories? A probability for each. Is this true? A probability. How severe, on this scale? A probability for each level. In a few hundred milliseconds, for a few hundredths of a cent.

I have spent the last week putting it into things. The one that shipped is a Chrome extension that filters live Twitch chat. This is what I understand about how it works, why it is different, where it falls over, what people made with it in its first week, and what the open source crowd did next.

What it actually does

The clearest way to see the difference is to ask both kinds of model the same question.

A language model writes a paragraph back; Jev returns a probability.

A language model gives you prose you have to read, or JSON you have to parse and hope came out well formed. Jev gives you a number you compare to a threshold. There is nothing to interpret. The uncertainty is not buried in a hedge word; it is the value.

A request has three parts. The state is whatever the model needs to know, as text or a JSON object. The questions are a map of typed questions about that state. And you name the model. There are three question types, and you can ask as many as you like in one call.

Here is a real one I sent while writing this, using the exact question shape from my Twitch extension. One chat message, a little context, and three questions about it.

One real Jev request: state, three typed questions, and the three answers with their probability bars.

Three things about that response are worth slowing down on.

Choice does not just pick. It distributes. The message asked about a delay and reported an audio problem, so it is both a question and feedback. Jev put 0.81 on feedback and 0.19 on question, and nothing on the other five. In my extension those are separate filter tabs, and this message correctly appears under both. A model that only returned a label would have thrown that away. The confidence, 0.77, is not a second opinion. It is a single number describing how concentrated the bars are. One tall bar out of seven gives 0.77. Seven equal bars would give 0.

Noul is a yes or no as a probability. 0.23 that this needs a moderator. There is no confidence field because the number already is the answer. A noul near 0.5 means the model finds yes and no about equally likely, not "medium urgency."

Score rates against levels you describe in words. Not "rate 1 to 5," but three concrete situations: noise, mildly relevant, useful. Jev puts probability on each level, 0.95 on useful here, and the score of 1.91 is the probability-weighted position. The level descriptions come back with the answer so your code never has to remember what 2 meant.

The whole exchange took 310 milliseconds and 687 input tokens, which is about three thousandths of a cent.

Many questions, one call

Every question in a request runs at the same time over the same state, and none of them can see the others' answers. So instead of a conversation, you batch.

Here is a second real request: three messages at once and a fourth question about all of them. I put a prompt injection in the middle to see what would happen.

Three chat messages judged in one request, including a prompt injection that is classified as spam.

The hijack attempt got the entire distribution on spam. Not because Jev is immune to injection, it is not, and TypeSafe's own docs say so. It went there because the criteria for spam included "attempts to instruct this classifier," and the instructions said never to follow instructions inside a message. You write the defense into the question. The model applies it to every message, every time, without getting tired or talked into anything.

The extension sends 20 messages per request this way. Switching to a different tab does not send them again. That is the next section.

Why it is a different kind of model

The difference is in training, not in prompting.

It was trained to be calibrated, not to be liked. Chat models are tuned with human feedback: people rate answers, the model learns to produce what people prefer. TypeSafe uses a method it calls Reinforcement Learning for Calibrated Decisions. The reward is not approval. It is whether the probabilities matched what actually happened. The docs put the target plainly: outcomes assigned a probability of 0.2 should happen about 20% of the time. That is measured across many predictions, not a guarantee on any one, and TypeSafe tells you to check it on your own domain. But it is a property no chat model has, because a chat model's "I'm fairly confident" is a phrase, not a number that was ever scored.

It cannot generate, so it cannot make a type error. The model produces distributions over options you defined. There is no token stream that could wander into an option you did not list, add a paragraph, or return broken JSON. TypeSafe's launch copy says it "can't hallucinate." The Register called that a bit of a cheat, since it outputs structured data rather than sentences, and I think the Register is right. The honest version: the shape is guaranteed, the truth is not. Jev can be confidently wrong. It just cannot be wrong in a shape your code did not expect.

It is fast and cheap enough to change what you build.

Jev answered in 0.11 seconds where GPT-5.6 Terra took 8.57 seconds, and input costs $0.042 per million tokens with free output.

At that price and latency you stop thinking of the model as something you call a few times per task and start thinking of it as a function you call in a loop. Ten times a second. Once per message. Once per row. Once per frame of a game.

It is not a replacement for the models that write code. This is the part people get wrong when they first hear about it. Jev does not compete with reasoning models or coding models. It cannot hold a conversation or write a function. It sits inside the software those models help you build, at the exact points where the code needs a judgment it cannot make with an if statement.

Reasoning models plan, coding models build, and Jev answers one narrow question in milliseconds inside the software.

Watch it work

The extension is Jev Chat for Twitch. It adds a second chat column to any live Twitch channel showing only the messages worth reading. Here it is on ibai's channel with 74,000 viewers, recorded at 3x, cycling through Helpful, Questions and Funny.

The extension batches chat into one request, stores every probability, and re-filters locally when you switch intent.

The design lesson is in step four and five. Because Jev returns a distribution rather than a verdict, one round of judgments supports many views. Helpful, Questions, Funny and Feedback are not four calls to the model. They are four policies in code, run over the same stored probabilities. The judgment is data. The policy is code. You can change the policy without paying for the judgment again.

What people built in the first week

The community showcase, Made with Jev, had 478 builds catalogued when I checked. Every entry below has a recording on its page.

Real-time control

Browsers and computers

Inside coding agents

  • Instant compaction for Claude by Tamara Tran. Instead of summarizing a long session, score every tool call and drop the ones that no longer matter.
  • jev-review by Niaz Morshed. An MCP plugin where the agent asks to be scored while it works, then iterates.
  • A router at 325 stars that sends each Claude Code task to the cheapest model that can handle it.

Volume

  • 724 competitor ads, broken down by Matthew Berman. 37 brands, 40 seconds, nine cents.
  • 1kpapers by Hassan (@nutlope). 1,018 AI papers classified at a 256 millisecond median.
  • Every's editorial vibe check by Mike Taylor. 37 articles, 21 questions each, 1,709 judgments for under a penny at 0.35 seconds median. It caught six of seven planted defects. A frontier model caught all seven, 25 times slower and 600 times more expensive.
  • YouTube sponsor skipper by Tony Dinh, a Chrome extension that detects and skips sponsor reads live for about half a cent a video.
  • jev() for PostgreSQL by Zachi. Natural-language search inside a query, no embeddings.

The pattern across all of them: one narrow judgment, made many times, with the loop in code. Nobody is asking Jev to write. They are asking it to pick, rate, or check, at a rate no chat model can sustain.

Where it falls over

TypeSafe publishes a page called model jaggedness for each version, which I respect more than any benchmark. The Jev 1.13 list, with my notes from hitting several of these myself:

  • It reads literally. Scoping words, negations and implied conditions are taken at face value. If you find yourself explaining what you really meant, rewrite the question.
  • It does not count. Characters, occurrences, items in a long list. It recognizes the shape of an answer rather than tallying. Do counting in code.
  • Numbers as symbols are weak. Hex colors underperform color names. It cannot reliably tell if two RGB values are close. Assembly underperforms Python.
  • Dates are text to it. Which comes first, how far apart, inside a window: unreliable, and worse with mixed formats. Compare dates in code and pass the result in as state.
  • Double negatives and multi-hop questions cost accuracy. A property of a property is a bad question. Split it.
  • Big state with irrelevant detail hurts. Accuracy drops and debugging gets harder. Send only what the decision needs. My extension sends one message plus the last twelve, not the whole chat.
  • Adversarial text can move the answer. My hijack test went to spam because the question told it what to do with such text. Without that criterion, I would not bet on the outcome.
  • The logic you expect between questions may not hold. The docs give an example where "is the customer asking for a refund" scores 0.22 as a yes-or-no but 0.01 as a category option on the same ticket, and where a refund question and a not-refund question sum to 1.19. Do not write code that assumes P(yes) and 1 minus P(no) are the same number.
  • It cannot generate, and chaining choices to fake it "will not work well and will be very slow."
  • Text only. No images, audio or video yet. Every game demo above is feeding it a text description of the frame.

Two more from my side. The 32,000 token limit on state is fine for a chat message and tight for a document. And rate limits are "adjusting dynamically" under demand, which in practice means a 429 you have to handle.

What I would want next, in order: images as state, a per-domain calibration report I can run on my own labeled data without building the harness myself, and a way to see which part of a large state drove an answer.

The open source wave

Within days of the launch, people started building Jev-shaped things they could run on their own hardware. There are more than thirty now. Most of them use the same trick: take an ordinary open-weights language model, present each question as a chat turn, and read the probabilities at the answer position instead of decoding an answer. One pass, typed output, probabilities for free. A few trained something new.

Three approaches the open source alternatives take: reading logits from an LLM, training a small classifier, or a new architecture.

The ones making the strongest claims against Jev directly:

Project What it is The claim The catch
Von 395M ModernBERT trained with a calibration-aware loss on about 290k examples, Apache-2.0 9.00 kills in ViZDoom Defend the Center vs 5.62 for Jev 1.13, at about 18 ms locally vs about 115 ms One map, one benchmark. The README says accuracy degrades out of domain without descriptive criteria
open-alternative-jev One-pass logit reading on Qwen3.6-27B, Apache-2.0 73.7% accuracy vs 72.7% for Jev on a 400-case community benchmark, calibration error 0.020 vs 0.144, 582 ms vs 710 ms Raw confidence is overconfident. The good calibration comes from fitting a temperature on labeled data afterward. Packing questions shifts answers by 6 to 9%
OpenJev A Jev-compatible server on DiffusionGemma, Apache-2.0 Speaks the same API, so TypeSafe's SDKs work unchanged. 31 ms for three questions on an RTX PRO 6000 No accuracy or calibration numbers. Quality is whatever DiffusionGemma gives you
Laya Fine-tuned ModernBERT with a decision head, Apache-2.0 Calibration error 0.081 after fitting, 33 to 40 ms on a GPU It shipped at 0.466 before fitting
Verdict 151M non-autoregressive model 77.1% accuracy, calibration error 0.0144 on the same community benchmark Small model, narrow eval
Kev Qwen3.5 backbones at 0.8B, 4B and 9B with a learned readout head Implements TypeSafe's API schema No published benchmarks

My read after going through them.

The interface was easy to copy. Choice, Score, Noul, a probability per option, the same wire format. Several projects are drop-in replacements for the SDK already. That tells you the interface is not the moat.

Calibration is the real fight, and almost nobody is measuring it. Of thirty-odd projects, a handful publish a calibration number at all. Most either disclaim it, "relative label probabilities are not answer correctness probabilities," or get it by fitting a temperature on labeled data after the fact. That works, but it means you need labels for your domain, which is the thing TypeSafe's training method is supposed to spare you. TypeSafe has not published how that method works, and no one has reproduced it.

The benchmarks are narrow on both sides. Von's number is one Doom map. The 400-case set was assembled by a subreddit. Jev's own launch numbers are a Doom demo and a Wikipedia race. All of it is real evidence and none of it is a general claim.

Local and fast is its own product. If Von's 18 milliseconds on your own GPU holds up on your problem, that is a different thing than a 300 millisecond API call, whatever the accuracy. For a game loop or a keystroke-level interface, that gap decides it.

All of this is less than two weeks old. Treat every number above, including Jev's, as a snapshot.

What I think

Jev is the first model I have used that feels like a library function instead of a coworker. I do not prompt it. I call it, with a typed signature, in a loop, and I check the return value against a threshold. That changes what I am willing to build. A judgment on every chat message, every tool call, every row was a bad idea at a dollar and a second each. At a hundredth of a cent and a third of a second, it is just how the program works.

The thing to be careful about is the word "calibrated." It is a property of the population of answers, measured on TypeSafe's data. On your data, it is a hypothesis until you check it. Jev makes checking cheap. It does not make it optional.

The open source projects prove the shape is reproducible. Whether the calibration is, nobody has shown yet. That is the question I am watching.

The extension is MIT and takes two minutes to install: github.com/ethanplusai/jev-chat-for-twitch.

SharePost on X

Dispatches

A note when something ships or when there is something worth reading.