Launch offer+40%Claim →

Jev Score: place text on your rubric, with a probability per level

A Score question hands Jev an ordered list of levels and gets back where the text sits, plus how the weight spreads across every level. Run one below, then see what we measured changes the answer.

Run this example

3 questions · no key needed

Independent and unofficial. Jev is a model by TypeSafe AI; Jagent is not affiliated with or endorsed by them. Field definitions are in TypeSafe's Score reference; numbers here are ours, measured 2026-11-12.

What does a Jev Score question return?

A score: the probability-weighted mean of the level indices, so it can land between two levels. A probabilities map with one entry per level, a confidence from 0 to 1, and a legend that echoes your levels under their index numbers.

Levels2 to 10 — an 11th is refused
score0 to n − 1 — not 0 to 1
One question417 tokens — $0.0000175, measured
Latency361–470 ms — client side, warm

Quick answer · verified 2026-09-19

How to read a fractional score

The levels are numbered by their place in the array, starting at 0. With our four risk levels the score runs from 0 (Safe) to 3 (Critical). On the pull request above, Jev put 0.32 on level 2 and 0.68 on level 3, so the score is 0.32 × 2 + 0.68 × 3 = 2.68. That is not “68% risky”; it is “mostly Critical, partly High”.

A fractional score has two possible meanings, and the number alone cannot tell them apart. 1.5 can be a clean split between levels 1 and 2, or half the weight on level 0 and half on level 3. Read probabilities before you act on the score: if your decision turns on one level (“block the merge if Critical”), threshold that level's probability, not the mean. To put Scores of different lengths on one scale, divide by the number of levels minus one: 2.68 / 3 = 0.89.

Measured: what moves a Jev Score

Nine calls on 2026-11-12 to TypeSafe's API with jev-latest, which answered as jev-1.14.0 every time. The state is the pull request in the box above. Where a run was repeated, both results are shown; cost is input tokens at $0.042 per million. Raw responses are in data/measured-score-2026-11-12.json.

RunLevelsrisk scoreProbabilitiesConf.TokensCostms
Descriptive levels42.68 / 2.690, 0, 0.32, 0.680.68417$0.0000175374 / 435
One-word levels (Low … Critical)41.790, 0.24, 0.73, 0.030.73374$0.0000157361
Ten descriptive levels107.88… 0.02, 0.17, 0.72, 0.090.88483$0.0000203366
Same four levels, highest first40.54 / 0.600.46, 0.54, 0, 00.54417$0.0000175385 / 470
Three Scores in one request4 + 4 + 32.71 / 2.660, 0, 0.29, 0.710.71546$0.0000229851 / 391
Three Scores, a README typo fix4 + 4 + 30.001.0, 0, 0, 01.0504$0.0000212374

Repeats differed by up to 0.06 in score, so treat the second decimal as noise. The 851 ms is the first call of the session, connection setup included; warm calls took 361 to 470 ms from our side of the network.

Level wording moved the answer a full level

With the bare labels Low, Medium, High, Critical, Jev settled on High (0.73) and scored 1.79. With levels that say what each one means, the same text scored 2.68 and the peak moved to Critical. Nothing else changed. The descriptive top level names the actual failure, “could lock users out”, and a session-cookie refactor can do exactly that. One-word levels leave the model to guess your threshold; descriptions let you check its reading against your own. They cost 43 more tokens.

Four levels or ten: same position, higher confidence

On ten levels the score was 7.88, which normalises to 0.88 — within 0.02 of the four-level 0.89. The finer rubric did not change where the pull request sits. It did change two other things. Confidence rose to 0.88 with a similar share of weight off the peak, because Score confidence divides by the spread an even distribution would have, and that divisor is larger on ten levels. And the winning level, “Very high: sensitive area with weak testing”, mixes risk with test coverage: long rubrics invite levels that measure two things at once. Ten levels read 66 more tokens.

Reversed levels do not just mirror

We sent the same four descriptions highest-first. If order were only numbering, the score would flip to about 3 − 2.68 = 0.32 with Critical still on top. Instead it came back 0.54 and 0.60, and the peak moved to High both times (0.54, 0.60). The answer itself changed, not just the labels. List levels from the low end to the high end, as TypeSafe specifies, and keep that order when you edit a rubric.

Composite scoring: several Scores, combined in your code

One Score should measure one thing. When the decision depends on several, ask a Score for each in the same request and do the arithmetic yourself, where it can be read and tuned. This is what this site's essay grader does with rubric rows; the rubric generator and single-point rubric tool write the levels. For the pull request, the three questions in the box gave risk 2.71, tests 1.42 and rollback 1.94, in one 546-token call:

python
LEVELS = {"risk": 4, "tests": 4, "rollback": 3}

def norm(answers, qid):
    return answers[qid].score / (LEVELS[qid] - 1)   # 0..n-1  ->  0..1

def review_need(answers):
    risk = norm(answers, "risk")
    gaps = 0.25 * (1 - norm(answers, "tests")) + 0.15 * (1 - norm(answers, "rollback"))
    return risk * (0.6 + gaps)   # no risk, no review, whatever the tests say

That gives 0.90 × (0.6 + 0.13 + 0.005) ≈ 0.66 for the refactor. The README typo fix scored risk 0.00, rollback 2.00 — and tests 0.03, because a docs change has no tests, and a Score always picks a level even when the question does not apply. A plain weighted sum with the same weights would have handed the typo fix 0.25 for missing tests. Multiplying by risk is the fix here; elsewhere, gate the Score with a Noul such as “this change touches code”.

Gotchas

When not to use a Score

When the options have no order — department, language, intent — use a Choice; a Score would invent a distance between them. When the question is yes or no, a Noul returns one probability and is easier to threshold. When the levels need two sentences each to separate, the rubric is usually measuring two things: split it. And when someone needs to read why, pair the Score with an LLM; Jev returns no explanation. How Score fits beside the other types is on the Jev AI page; worked pipelines are in use cases.

Calling a Score question

On this site's endpoint, with a key from API access; the full request and response are in the API reference:

bash
curl -X POST https://jev-agent.com/api/v1/systemone \
  -H "Authorization: Bearer $JEV_AGENT_KEY" \
  -H "content-type: application/json" \
  -d '{"state": "Touches auth/session.ts and 14 call sites; unit tests only.",
       "questions": {"risk": {"type": "score",
         "instructions": "How risky is merging this pull request?",
         "criteria": ["Safe: no runtime effect", "Low: easy to verify",
                      "High: shared or sensitive code", "Critical: could lock users out"]}}}'

On TypeSafe's API, the same body plus a model ID, with your TypeSafe key:

bash
curl https://api.typesafe.ai/v1/systemone \
  -H "Authorization: Bearer $TYPESAFE_API_KEY" \
  -H "content-type: application/json" \
  -d '{"model": "jev-latest", "state": "...", "questions": {"risk": {"type": "score", ...}}}'

To try wording changes without writing a request, the playground runs Score questions you write yourself.

Jev Score FAQ

What does the number in a Jev Score answer mean?

It is a position on your own levels, numbered from 0 for the first level you listed. Each level's index is multiplied by its probability and the results are added, so four levels give a score from 0 to 3, and 2.68 means most of the weight sits on level 3 with the rest on level 2. Divide by the number of levels minus one if you want 0 to 1.

How many levels can a Jev Score question have?

Two to ten. When we sent eleven, the API refused the request with a 400 and the message that a Score must have at most 10 levels. A one-level Score is accepted but always answers that level at confidence 1.0, so it tells you nothing.

Is Score confidence comparable between rubrics of different lengths?

Only roughly. Confidence is the probability-weighted distance from the most likely level, divided by what an even spread would give. In our runs, about 30% of the weight off the peak gave 0.68 on four levels and 0.88 on ten, because the ten-level divisor is larger.

Should a rubric be a Score or a Choice?

A Score when the levels are ordered and being one level off is a smaller mistake than being three off. A Choice when the options have no order, such as which team owns a ticket. Choice confidence ignores distance between options; Score confidence counts it.

What does one Jev Score call cost?

Input tokens only, at $0.042 per 1M input tokens. Our single four-level question on a short pull request read 417 tokens, about $0.0000175; three Scores on the same text read 546 tokens in one request.

Sources