Jev eval

TypeSafe's Jev gets almost everything right, until you ask it two related questions in the same call without telling it the rule to apply. Here's the evaluation, the one flaw that matters, and the one-line fix.

An abstract interlocking geometric mark on a pale background of translucent cubes.
Image made with ChatGPT's image generator.
Made
Model tested
jev-1.13.0
Scope
16 runs, 98 cases, 221 questions
Accuracy
97.7% (173 of 177)

What Jev is

TypeSafe pitches Jev as "System One": fast, structured answers to narrow questions about a block of content, instead of the free-form text you get from a chat model. You give it a state (the text to judge) and one or more questions, each of one of three types:

You can ask several questions about the same state in one call. TypeSafe's docs say up front that answers within a call aren't guaranteed to agree with each other. That caveat turns out to matter.

How I tested it

I used a small Python harness on TypeSafe's SDK, running against the live production API. Each case is a state plus questions with hand-written expected answers. Every numeric, date, hex and version-string answer was checked by hand before submission.

The cases were built as traps for the weaknesses TypeSafe names in its own docs: numeric comparison, distractor text, references spread across a document, literal reading, and consistency between answers. A few were deliberately ambiguous to probe judgment calls; those are kept out of the accuracy number. No call failed for a technical reason in any run.

Accuracy by run Thirteen scored runs in order. Ten scored 100%. Run 2 scored 93%, run 10 scored 92% and run 12 scored 82%. 0% 50% 100% 1 2 93% 3 4 5 6 7 8 9 10 92% 11 12 82% 13
Accuracy for each of the 13 scored runs, numbered in the order they ran. Ten were perfect. Run 2's miss was the first sign of the contradiction below, run 10 missed a date calculation, and run 12's two misses were scores anticipating the next severity bucket.
Show the numbers
#RunQuestionsAccuracy
1examples (canned demo)9100%
2enterprise-messy-v11593.3%
3product-domain-v115100%
4harness-governance-v115100%
5literal-rules-v130100%
6explicit-vs-implicit-v116100%
7consistency-check-v120100%
8severity-calibration-v112100%
9injection-robustness-v17100%
10named-weakness-precision-v11291.7%
11injection-subtlety-v15100%
12tighter-monotonicity-v11181.8%
13explicit-vs-implicit-v210100%

The realistic material held up well: an invoice with a duplicated freight line, a complaint buried under forwarded marketing copy, an expense report whose reimbursable total differs from the more visible one, and a plant-restart request with an expired safety certificate hidden behind an unrelated work order. It caught both of the sneakiest traps. One was a $305 expense that doesn't exceed a $300 cap once alcohol is excluded. The other was eight asset identifiers, each one character off a valid pattern.

Two questions, one call, two answers

This is the finding that matters. It started with a single miss. In one call, I asked a three-way routing question (do it, reason further, or escalate to a human) and a separate yes or no: is it fine to complete this without a human? The routing answer said go ahead. The yes or no said no. Same request, same call, a direct contradiction, and no rule had been given.

So I tested it twice. First, eight fresh requests across eight unrelated domains, each with the same pair of questions and no rule. Six of the eight came back contradictory. On the five with a clear right answer, the routing choice was right every time and the yes or no was wrong every time, at 0.19 to 0.45: confidently wrong, not a coin flip.

Then I resubmitted the exact same eight requests, word for word, with one sentence added to the state:

If the requester's message asks, directly or indirectly, to wait for review before the work counts as finished, stop and wait, even if the action itself is simple.
2 of 8self-consistent pairs without the rule
8 of 8with the rule, same requests
50%accuracy on the clear-cut cases, before
100%after, with answers at 0.66 to 0.90

Nothing else changed between the two runs, so this is about as clean a cause and effect as you get outside a lab.

One disagreement remained, and on reflection my label was probably the weaker reading of an ambiguous sentence. Jev's revised answer may be the better call. It's the clearest case in the whole evaluation where the answer key, not the model, was wrong.

The takeaway: don't ask Jev whether something is "appropriate", "safe" or needs human review without giving it the rule that defines that. Left to guess, it defaults to a cautious no, even in the same call where it correctly saw the request as simple.

Confidence drops when the rule is implied

Across thirteen matched pairs, the rule and the right answer stayed the same; only the phrasing changed, spelled out or implied. Every pair was more confident when the rule was spelled out: 0.947 on average, against 0.748 when implied.

The answer itself never flipped, so this is a confidence effect only, but it isn't small. One implied request, an employee termination, came back at 0.51, one point above the usual decision threshold. If you gate autonomous action on confidence, naturally phrased requests will trip that gate far more often than ones that spell out the rule, with no change in correctness.

Everything else

If you're integrating it

Caveats

Most questions were asked once. Only the explicit-versus-implicit pairs (13), the fake-authorization trials (12) and the Score series (4) were sampled repeatedly. A few answer keys are my own judgment rather than verifiable fact, and they're flagged where they appear. Everything here is one model version, jev-1.13.0, and shouldn't be assumed to carry over to later releases. I didn't benchmark against a general chat model, so none of this is a measured saving over an alternative.

First published .