Faster evals with Jev: how we grade AI-written code
An eval suite for AI-written code has two kinds of check. Some have an exact answer, and code decides them. The rest used to need a language model to read the change and give an opinion, which was the slowest and least repeatable step in the suite. Reveneau moved that step to Jev, a decision model that answers fixed questions with probabilities instead of writing text, and on our own suite the run now finishes ten times faster than it did with a language-model grader. This guide explains how the grader works, how to design its questions, and where it stops being useful.
Published September 22, 2026. Editorial.
Key takeaways
- A decision model scores predefined answers in one pass and returns probabilities, so it grades in under half a second per call where a language-model judge writes a paragraph first and takes seconds.
- Checks with an exact answer stay in code. Jev grades only the checks that used to need a language model: does the change meet the criterion, did the diff stay in scope, did the agent follow the plan.
- A grade is a probability with no written reason attached, so the threshold, the uncertain band, and the route to a person have to be designed in code before the grader is trusted.
- The published third-party tests are small: five cases in LangChain's run and one Ragas comparison in Openlayer's. Calibrate against your own labelled cases before you let a grade block a merge.
- Reveneau grades its eval suite with Jev, and on our own suite the run is ten times faster than with our previous language-model grader. Every eval is still written from the specification before the code.
Every eval suite for AI-written code has a slow step, and until this month ours was the grader. A test either passes or fails, and that takes milliseconds. Whether a diff meets the acceptance criterion it claims to meet has no exact answer, so for those checks we asked a language model to read the change, write a paragraph of reasoning, and end with a verdict. Each of those calls took seconds, the paragraph changed between runs, and the verdict sometimes changed with it. We now send those checks to Jev, a decision model from TypeSafe that answers fixed questions with probabilities instead of writing text, and on our own suite the full run finishes ten times faster than it did with the language-model grader. This guide is the method behind that change, what it cost us to make, and what it cannot do.
Two things did not change and should be said first. Every eval at Reveneau is still written from the specification before the code exists, and a change that fails the suite is still not released. What changed is the mechanism inside one kind of check.
Two kinds of check in every suite
The first kind has an exact answer. A unit test passes or it does not. A schema validates or it does not. A migration applied to a copy of production data keeps every rule that must always hold, or it does not. These checks are deterministic: run them twice on the same input and you get the same result. They stay in code and never go to any model, because a model can only lower their reliability. The list of what belongs in this category is in what to check in an eval suite, and the pipeline shape is in evals in CI for coding agents.
The second kind has a better answer and a worse answer with no single string to compare against. Does this diff implement the requirement in the linked spec line? Did the change stay inside the files and behaviours the task named? Did the agent's trace follow the plan it was given, or did it call a tool the plan never mentioned? Does the generated error message tell the user what to do next? For these, the older method is a language model as judge: give it the artefact and a rubric, ask for a verdict. We wrote up that method, its independence rule, and how to validate it in using a model as a judge, without fooling yourself. It works. It is also the reason that page warns about cost and latency, because a judge that adds minutes to every pull request gets avoided.
This hub is about the second kind of check only.
What a decision model is, in one paragraph
TypeSafe announced Jev on 15 September 2026 as the first public System One model, which it describes as a new class of model built to make fast, structured decisions that software can use directly [1]. It does not generate text. The input is a state (a string, a JSON object, or an array of text values, text only) plus a map of named questions, and the output is a typed answer per question with a probability attached [2]. There are three question types. A Choice picks one of up to 255 named options. A Score places the state on an ordered scale of 2 to 10 levels that you describe in words. A Noul is a yes-or-no statement that returns a single probability from 0 to 1 [3][4]. Every question in a request is evaluated in parallel, so adding questions barely changes the response time [5]. Definitions, the training method, and the full list of what the model is and is not are in the companion guide Jev and System One models; this page uses them without repeating them.
The consequence for an eval suite is simple to state. A language model judge produces a paragraph and then a verdict, and both are new text each time. A decision model produces a probability for a question you wrote in advance, and nothing else. The grade is the number. The reasoning, if you want it, has to come from somewhere other than the grader.
What a language-model judge costs, measured by other people
Two third parties have published side-by-side measurements, and both are worth reading with their sample sizes stated.
Openlayer released jevals on 20 September 2026, an MIT-licensed library that runs agent evals and guardrails as one Jev request per trace. On Openlayer's own benchmark, Ragas on GPT-4.1-mini used 6 language-model calls plus embeddings per sample, cost $2.60 per 1,000 samples, and took 22 to 35 seconds for 20 samples; jevals on Jev used 1 request per sample, cost $0.03 per 1,000, and took 0.8 seconds for the same 20 samples. Openlayer measured Jev at p50 244 ms and p95 371 ms per request, meaning half of requests returned within 244 ms and 95 percent within 371 ms [6]. That is one comparison, run by the people who wrote the library.
LangChain's team ran a different test, published 20 September 2026 under the title "Can Jev be a better agent evaluator?". They took five weather-agent cases with human-labelled correct answers and ran each judge 100 times per case, 500 decisions per judge. On the yes-or-no question of whether the trace passed, Jev agreed with the human label 100 percent of the time, GPT-5.6 Terra 99.8 percent, GPT-5.6 Luna 96.4 percent, and Claude Sonnet 4.6 80.0 percent. Jev's mean per-case variance on the quality score was 0.0000149, with the language models between 92 and 913 times higher. Jev took 0.44 seconds per call at $0.00035; the language models took 2.16 to 2.83 seconds per call. The whole run cost $0.34 with Jev and $28.17 with Claude Sonnet 4.6 [7]. The authors call the result "promising, but early" and "observational, not evidence", say the experiment cannot tell them why Jev's scores varied less, and warn that low cost can amplify mistakes. Five cases is a small set, and we repeat that every time we quote the number.
The vendor's own headline is larger. TypeSafe reports a workflow decision finishing in 0.114 seconds for $0.000081 against GPT-5.6 Terra at 8.566 seconds for $0.013880, which it presents as 193.6 times faster and 444.6 times cheaper; TypeSafe's own capabilities team wrote the workflows, and TypeSafe says it cannot prove the price is unsubsidised [8]. Treat that as the vendor's claim about the vendor's tasks.
Our own figure is narrower than any of these and we keep it that way on purpose: on our own suite, measured against our previous grader, the run is ten times faster. We are not publishing a dollar figure, a defect rate, or a count of evals, because we have not measured them in a way we could show the working for. The full account of the switch is in why we moved our eval grader to Jev, and the mechanics of the two kinds of judge are compared in LLM as judge vs a decision model.
Designing the questions
A decision model answers the question you wrote, and TypeSafe's own list of known weaknesses opens with exactly that: it "answers the question you wrote, not the one you meant", and scoping words, negations, and implied conditions are read exactly as written [9]. So the design work moves from writing a judge prompt to writing questions, and three shapes cover most of an eval suite.
A rubric becomes a Score. You write 2 to 10 ordered levels in words, one observable behaviour per level, and the model returns a position on that scale as each level number multiplied by its probability and added up, which is why a score can land between levels: the docs' own example is a score of 1.43 with probabilities of 0.57 on level 1 and 0.43 on level 2 [3]. Numeric rubrics do not work here, because TypeSafe says Score levels are weak in numerical calibration [9]. The method, with a worked rubric for a code change, is in turning a rubric into Score questions.
An acceptance criterion becomes a Noul. One criterion, one yes-or-no statement, read literally, with the evidence placed in the state: the diff, the spec line, the trace. The worked example of one spec line becoming three statements is in writing Noul checks for acceptance criteria.
A broad judgment becomes several small ones combined in code. TypeSafe's design guidance names broad questions ("Is this spam?") as an anti-pattern and tells you to break a judgment into atomic questions asked in parallel, then combine them in code with weighted arithmetic [10]. "Is this change good?" is the broad question every eval suite is tempted to ask. Composite scoring for code quality shows the split, example weights, and why the arithmetic belongs in a file a reviewer can diff.
The same guidance has a sentence we treat as the rule for the whole suite: keep control flow, deterministic rules, and side effects in code [10]. The model answers questions. Code decides what happens next.
Thresholds, and what happens in the middle
A probability is not a verdict until code compares it to a number. TypeSafe's confidence page gives the bands it recommends: 0.9 and above, act automatically; below 0.5, route to a human, request clarification, or fall back to a different system; the middle, proceed with caution. The same page says different actions within the same system should be gated at different levels depending on the consequences [11]. In an eval suite that means a check on a flow that moves money fails at a higher grade than a check on a log message, and the uncertain band goes to a person.
That person's label is the most valuable output of the whole process, and we keep every one. It tells you, months later, whether the grader was right in the cases it was unsure about, and it becomes the set you re-check the grader against. Thresholds, confidence and escalation covers the bands, the per-check thresholds, and the storage. Noul answers carry no separate confidence number, only the probability, so the band for a Noul is set on the probability itself [4].
Running it on every pull request
The pipeline shape is the one described in evals in CI for coding agents, with one request per change added after the deterministic checks pass. All the questions for one change go in one request, because the docs say the response time barely changes with the number of questions and TypeSafe's own batching cookbook, on jev-1.12, measured 13 questions in one call at $0.000497 and 0.27 seconds against thirteen separate calls at $0.006090 and 2.71 seconds [12]. The published limits are 1,200 requests per minute and 250,000 tokens per second, with 64k tokens of context per request and 32k for the state plus the longest question [13], so a large diff has to be split or trimmed before it is sent. The price is $0.042 per million input tokens with output tokens free [13], which makes the cost of a grade small enough that the arithmetic fits in a sentence. All of that, plus what to log and what a failing grade blocks, is in running Jev-graded evals on every pull request.
Grading an agent trace
When the thing under test is an agent, the artefact is a trace: the sequence of model calls, tool calls, and results. The questions change shape. Did the agent choose the right tool? Did it stay in scope? Did it loop? Did it complete the goal? Openlayer's jevals ships 37 evals across agent, security and quality groups with adapters for the OpenAI Agents SDK, LangGraph and the Claude Agent SDK, and its README says it is alpha [6]. LangChain's test is the other public reference point. Both, and the shape of a trace check, are in grading agent traces with Jev. The broader question of whether an agent is ready for production at all is the subject of AI agents in production, and the runtime side of the same model, guardrails and routing, is in Jev in production.
What a grade cannot tell you
A Jev grade is a probability with no written rationale. When a check fails you learn that the model put a low probability on the statement, and nothing about why. TypeSafe's jaggedness page lists the weaknesses that matter most to a grader: it does not count reliably, it cannot judge whether two numeric values are near each other, it reads dates as text rather than as ordered quantities, double negatives and indirection are answered less reliably, accuracy falls as the state grows with unrelated content, and adversarial content in the state can move the answer [9]. A diff can contain all six at once. TypeSafe's phrase "can't hallucinate" means the answer always matches the schema; the answer can still be wrong.
There are also checks that should stay with a language model or with a person: a new failure mode nobody has written a question for, and design judgment, which is what human review is for and what evals vs tests vs code review explains. The full list is in what a Jev grade cannot tell you.
Calibrating against your own labels
The published tests are other people's tasks. Before a grade is allowed to block a merge on yours, you need agreement measured on your own cases: 50 to 200 labelled examples from your own suite, each run 10 times, agreement and variance measured the way LangChain measured them, and thresholds set from the result. Repeat it on every model version change, because jev-latest is an alias that can move to a new version without your pipeline changing [13]. Keep the labelled set as the grader's own eval. The method is in calibrating Jev against your own human labels.
Migrating an existing suite
If you already run a language-model judge, the switch is a sequence, and the migration checklist is printable: inventory every check, classify deterministic against judged, rewrite each judged check as questions, label a calibration set, run both graders on the same changes with only the old one deciding, compare, set thresholds, switch, and keep the human band. A team that has no suite at all should start with how to write your first eval suite and adding evals to a codebase that has none before any of this applies.
Where a decision model sits next to the coding agent
One boundary is worth stating because it is easy to get wrong. Jev does not write code and does not run the coding agent. TypeSafe's own page on coding agents says it is not a drop-in replacement for the language model that runs the agent; it is used inside the application for routing, rubric scoring, and statement verification [14]. In an eval suite it is the grader. The agent that writes the code is a different system, and the rule that the writer must never be the only grader, argued in never let the model grade its own work, is one of the reasons a separate decision model is attractive: it cannot have written the code it is grading. Product teams weighing the same model for decisions outside engineering will find that treatment in decision models for product teams.
Where Reveneau fits
Reveneau writes all of its code with AI, and a large eval suite, written from the specification, has to pass before any change is released. We grade that suite's judged checks with Jev. Each such check is a Noul or a Score question with the rubric written into the criteria; a grade below the threshold fails the change; a grade in the uncertain band goes to a person, and that person's label is kept so we can re-check the grader later. On our own suite the run is ten times faster than it was with a language-model grader, and that is the only number we attach to the switch.
The saving goes where our other savings go. We use AI instead of hiring more engineers, so the same build takes a small team, and a faster suite means the team waits less between a change and its verdict. If you are choosing a development partner, the questions to ask about any vendor's grader are in how to evaluate a vendor's eval suite, and they apply to us. Our AI development work is where this practice lives, and if you want to see how a judged check is written and graded on a real change, talk to us.
Explore the guide
Start here
Why we moved our eval grader to Jev
Reveneau writes all of its code with AI and releases nothing that has not passed an eval suite written from the specification. Inside that suite, the checks with no exact answer used to go to a language model that read the change and wrote a verdict. This month those checks go to Jev, a decision model that returns a probability for each question we wrote in advance. On our own suite, measured against our previous grader, the run is ten times faster. This page describes the practice: which checks moved, which did not, what a grade looks like, and what happens when the grade is unsure.
LLM as judge vs a decision model
A language-model judge grades by generating: it writes a paragraph of reasoning and then a verdict, and both are new text every time. A decision model grades by scoring: it takes the answers you defined in advance and returns a probability for each, in one pass, with no text. That difference explains every measured gap between them. On Openlayer's own benchmark a Ragas eval on GPT-4.1-mini took 6 calls and $2.60 per 1,000 samples against 1 call and $0.03 for Jev; in LangChain's five-case test the language models took 2.16 to 2.83 seconds per call against 0.44. Both are small samples, and this page says where each holds.
Design the grader
Turning a rubric into Score questions
A Score question places a change on an ordered scale of 2 to 10 levels that you describe in words, and returns a probability for each level plus a combined score. The whole design task is writing the levels. Each level has to name one behaviour a reader could see in the diff, the levels have to be ordered so that a higher one is unambiguously better, and no level may lean on a number, because TypeSafe says Score levels are weak in numerical calibration. This page walks through the docs' example, a rubric for a code change, and where to set the pass line.
Writing Noul checks for acceptance criteria
A Noul is a yes-or-no statement, and Jev returns one probability that the statement is true of the state. That makes it the natural shape for an acceptance criterion: one criterion, one statement, one probability. The craft is in the wording, because the model reads the statement exactly as written. The statement has to be positive, literal, and about one thing; the evidence it needs (the diff, the spec line, the trace) has to be in the state; and the criterion often turns out to be three statements rather than one. This page shows the rules and works one spec line through to its Noul checks.
Composite scoring for code quality
The question every eval suite wants to ask is whether a change is good, and it is the one question a decision model answers badly. TypeSafe names broad questions as an anti-pattern in its own design guidance and gives the alternative: split the judgment into atomic questions, ask them in parallel in one request, and combine the answers in code with weighted arithmetic. This page shows the split for a code change, gives example weights, and explains why the arithmetic has to live in a file that shows up in a diff, so that a change to how the suite grades is reviewed like any other change.
Run it on every change
Thresholds, confidence and escalation in an eval suite
A probability becomes a verdict only when code compares it to a threshold, and the design of those thresholds decides what the grader is worth. TypeSafe's guidance gives the starting bands: act automatically at 0.9 and above, route to a person below 0.5, proceed with caution in between. In an eval suite that means a check on a flow that moves money fails at a higher grade than a check on a log message, the uncertain band always goes to a person, and that person's label is stored, because it is the data you re-check the grader against every month.
Running Jev-graded evals on every pull request
A Jev-graded check belongs in the same pipeline as the tests, after them, with the power to block. The shape is one request per change carrying every question, sent after the deterministic checks pass, with the probabilities compared to thresholds in code. The published limits are 1,200 requests per minute and 250,000 tokens per second, with 32k tokens for the state plus the longest question, so a large diff is split by behaviour rather than sent whole. The price is $0.042 per million input tokens with output tokens free, which puts a typical grade under a tenth of a cent. This page gives the pipeline, the logging, and the arithmetic.
Grading agent traces with Jev
When the thing under test is an agent, the artefact is a trace: the ordered record of model calls, tool calls, and tool results. The questions change shape from whether a diff meets a criterion to whether the agent chose the right tool, stayed inside its scope, avoided looping, and completed the goal. Two third parties have published tooling for this. Openlayer's jevals runs 37 built-in evals under an MIT licence and calls itself alpha. LangChain tested Jev as a LangSmith evaluator on five cases and called the result promising but early. This page covers what a trace check asks and how far the public work goes.
Checklist: migrating an existing eval suite to Jev
This is the sequence for moving the judged checks in an existing eval suite from a language-model judge to Jev, as a numbered checklist with a definition of done for each step. It is printable. The order matters: the inventory comes before any rewriting, the calibration set comes before any threshold, and both graders run side by side before either is switched off. A team that follows it ends with a suite where the deterministic checks are untouched, every judged check is a question in a reviewed file, every threshold names the run that set it, and the uncertain band still goes to a person.
Trust and limits
What a Jev grade cannot tell you
A Jev grade is a probability and nothing else. It says how likely the model finds a statement, and it says nothing about why or which line it looked at. TypeSafe publishes a list of the model's weaknesses, and several of them describe things a diff or a trace contains on an ordinary day: counts, dates, numeric comparisons, and text that reads as an instruction. TypeSafe's phrase that the model cannot hallucinate means the answer always matches the schema; the answer can still be wrong. This page is the list of what a grade cannot do and what to keep a person or a language model for.
Calibrating Jev against your own human labels
The published tests of Jev as a grader are other people's tasks: five weather-agent cases at LangChain, one library comparison at Openlayer. Neither tells you how the grader does on your changes. The method here does. Take 50 to 200 changes your reviewers have already labelled, run every question 10 times on each, measure agreement with the label and variance between runs the way LangChain did, and set your thresholds from the result. Repeat on every model version change, because jev-latest is an alias that can move. Keep the labelled set: it is the grader's own eval suite, and it grows with every escalated change.
Common questions
What does it mean to grade an eval suite with Jev?
It means the checks that have no exact answer, such as whether a diff meets a written acceptance criterion, are sent to a decision model as fixed questions and come back as probabilities. Code compares each probability to a threshold: below it the change fails, in the uncertain band a person decides, above it the check passes. Checks with an exact answer never go to the model at all.
How much faster is a decision model than a language-model judge?
On Reveneau's own suite the full run is ten times faster than with our previous language-model grader, and that is the only figure we attach to it. Third parties report larger per-call gaps: LangChain measured 0.44 seconds per Jev call against 2.16 to 2.83 seconds for language models on five cases, and Openlayer measured p95 latency of 371 ms on its own benchmark.
Which checks should never be sent to Jev?
Anything with a deterministic answer: a test passing, a schema validating, a migration keeping the rules that must always hold, a type check, a lint rule. Those stay in code because a model can only make them less reliable. TypeSafe's own design guidance says to keep control flow, deterministic rules, and side effects in code, and an eval suite is the clearest case of that rule.
Why does a Jev grade come back without an explanation?
Because the model does not generate text. It scores the answers you defined in advance and returns a probability for each, so a failing grade tells you the statement was judged unlikely and nothing about why. If you need a reason, ask more specific questions so the pattern of answers shows where the change failed, or route the case to a person or a language model for a written rationale.
What threshold should fail a change?
Set it per check by consequence, starting from TypeSafe's published bands: act automatically at 0.9 and above, route to a person below 0.5, proceed with caution in between. A check on a flow that moves money or deletes data should fail at a higher grade than a check on a log message. Then adjust each threshold from your own labelled calibration set rather than from the defaults.
Can Jev replace human code review?
No. It replaces the language-model judge inside an eval suite, which was the slow step in automated grading. Human review still answers whether the change was the right thing to build and whether the design will hold, and it catches the failure modes nobody has written a question for yet. Reveneau keeps a person on every grade in the uncertain band and on every design decision.
How do I know the grader agrees with my reviewers?
Measure it. Take 50 to 200 changes your reviewers have already labelled, run every question 10 times on each, and record agreement with the label and the variance between runs, which is what LangChain did on its five cases. Set your thresholds from that result and keep the labelled set as the grader's own eval, re-run on every model version change.
How much does grading a pull request with Jev cost?
TypeSafe's public price is $0.042 per million input tokens with output tokens free. A change whose state is 8,000 tokens plus twelve questions of 40 tokens each is 8,480 tokens, which is $0.000356 at that price, so 1,000 such grades cost $0.36. Openlayer's benchmark put its own agent evals at $0.03 per 1,000 samples. Both are arithmetic from the public price, and neither includes your engineering time.
Does the ten-times-faster figure apply to every suite?
No. It is Reveneau's measurement of Reveneau's suite against our previous language-model grader, and how much of a suite is judged checks decides how much the run time changes. A suite that is 95 percent deterministic tests will see a smaller change than ours. Measure your own suite before and after, on the same changes, and quote that number instead of ours.
What happens when jev-latest moves to a new model version?
Your grades can move with it, because jev-latest is an alias and TypeSafe can point it at a new release. Log the model version field on every request so you can see the day it changed, and re-run your labelled calibration set against the new version before you trust its grades. Pinning the exact version, jev-1.13.0 at the time of writing, is the safer default for a suite that blocks merges.
Is Jev safe to use on a diff that contains untrusted text?
Treat it with care. TypeSafe's own jaggedness page says adversarial content in the state can move the answer, and a diff written by an agent can contain comments or strings that read as instructions. Run the deterministic checks first, put only the parts of the diff a question needs in the state, and route any change that touches security-sensitive files to a person regardless of its grade.
Is Jev open source?
No. Jev is a hosted API from TypeSafe, reached at a single endpoint with a bearer key, and TypeSafe has not disclosed the architecture. What is open source is some of the tooling around it, such as Openlayer's jevals library under the MIT licence. If your policy requires a grader you can run on your own hardware, a decision model from a hosted vendor does not meet it today.
References
- [1] TypeSafe AI, Introducing System One models and Jev (15 September 2026): Jev is a new class of frontier models built to make fast, structured decisions that software can use directly; latency 70 to 500 ms end to end against 3 to 329 seconds for frontier LLMs in TypeSafe's comparison.
- [2] TypeSafe docs, System One concepts: the model does not generate text; input is a state (string, JSON object, or array of text values) plus a map of named questions; output is a typed answer per question with probabilities.
- [3] TypeSafe docs, Score primitive: 2 to 10 levels described in words; the score is each level number multiplied by its probability, added up; example score 1.43, confidence 0.35, probabilities {0: 0.0, 1: 0.57, 2: 0.43}.
- [4] TypeSafe docs, Noul primitive: a yes/no statement that returns one probability from 0 to 1, with no separate confidence number.
- [5] TypeSafe docs, Introduction: every question in a request is evaluated in parallel; adding questions barely changes the response time.
- [6] Openlayer, jevals README (MIT, alpha, 20 September 2026): Ragas on GPT-4.1-mini at 6 LLM calls plus embeddings per sample, $2.60 per 1,000 samples, 22 to 35 s for 20 samples; jevals on Jev at 1 request per sample, $0.03 per 1,000, 0.8 s for 20 samples; Jev p50 244 ms, p95 371 ms; 37 evals; adapters for the OpenAI Agents SDK, LangGraph and the Claude Agent SDK.
- [7] LangChain, Can Jev be a better agent evaluator? (20 September 2026): five cases, 100 repetitions per judge per case; agreement on does_pass Jev 100%, GPT-5.6 Terra 99.8%, GPT-5.6 Luna 96.4%, Claude Sonnet 4.6 80.0%; Jev 0.44 s per call at $0.00035, LLMs 2.16 to 2.83 s; full run $0.34 against $28.17; the authors call it promising but early and observational, not evidence.
- [8] MarkTechPost, TypeSafe AI releases Jev (19 September 2026): 0.114 s for $0.000081 against GPT-5.6 Terra at 8.566 s for $0.013880, reported by TypeSafe as 193.6x faster and 444.6x cheaper; TypeSafe's own capabilities team wrote the workflows and TypeSafe says it cannot prove the price is unsubsidised.
- [9] TypeSafe docs, Model jaggedness for jev-1.13: answers the question you wrote, not the one you meant; does not count reliably; cannot reliably judge whether two numeric values are near each other; Score levels are weak in numerical calibration; reads dates as text; accuracy falls as the state grows with unrelated content; adversarial content in the state can move the answer.
- [10] TypeSafe docs, How to build with System One: keep control flow, deterministic rules, and side effects in code; break a broad judgment into atomic questions asked in parallel and combine them in code with weighted arithmetic; anti-patterns include broad questions such as Is this spam?
- [11] TypeSafe docs, Confidence: 0.9 and above act automatically; below 0.5 route to a human, request clarification, or fall back to a different system; the middle band proceed with caution; different actions within the same system should be gated at different levels depending on the consequences.
- [12] TypeSafe docs, Parallel questions cookbook (jev-1.12): 13 questions against the 53,777-character Wikipedia GDPR article; one batched call $0.000497 and 0.27 s; thirteen single calls $0.006090 and 2.71 s; reported as 12.2x cheaper and 10.0x faster; standard deviation 0.0 across repeats for 11 of 13 questions.
- [13] TypeSafe docs, Models: jev-1.13.0 released 15 September 2026; jev-latest and jev-preview both point to it; $0.042 per million input tokens, output tokens free; 64k tokens of context per request, 32k for the state plus the longest question; 250,000 tokens per second and 1,200 requests per minute.
- [14] TypeSafe docs, Coding agents: Jev is not a drop-in replacement for the LLM running a coding agent; it is used inside the application for routing, rubric scoring, and statement verification.
Related reading
Adding eval tests was the best decision we made
We generate every line of code we release. The single change that made that safe was writing the check before the code, and it turned out to change how we review, how we spec, and how fast we can work.
How to evaluate a vendor's eval suite
"We test everything" means nothing until you know who wrote the tests, what they check, and who is allowed to grade them.
How many tests does AI-generated code need?
The honest answer is not a number, and coverage percentages are the wrong unit. Here is the unit we use instead, and why a suite of fifteen checks can be worth more than two thousand.
AI evaluation and guardrails for production: how to know your AI actually works
"It seems to work" is not a production standard. Here is how we turn that feeling into a number, and how we stop the system from doing damage on the days the number is bad.
Our eval suite now runs ten times faster. Here is what we changed.
This month we replaced the language model that graded the judged checks in our eval suite with Jev. The deterministic checks did not move, every rubric is now written inside the check, and the suite runs ten times faster.
What to do with a grader that gives no reason
A Jev grade is a probability with no paragraph. That is enough for a check you wrote and calibrated yourself, and wrong for a new kind of failure, a design judgment, or anything a regulator wants explained in words.
The real price of an LLM judge is per decision, and it multiplies
A grader's price per call looks small. Multiply it by every check on every change, or every message through a guardrail, and the public figures from LangChain, Openlayer and TypeSafe show where a cheaper decision model pays for its own migration and where it does not.