Early accessvEA 2026-09-15

Sourced from public early-access reportsVerified

The Three Primitives: Noul, Choice & Score

Updated 2026-09-20

On this page

Every question you send to Jev is one of three primitives. Choosing the right one is the single highest-leverage decision in question design — it determines the answer shape, the limits you operate under, and which confidence signals you get back.

The comparison table

NoulChoiceScore
Question shapeYes / noPick exactly one of NRate on a scale
type value"noul""choice""score"
You provideinstructions (required), criteria (optional)instructions + the option list, criteria (optional)instructions + scale size, criteria (optional)
Returnsprobability (0–1)selected option + probabilities per option + confidencescore value + legend (scale meanings) + probabilities per level + confidence
Limits≤ 255 options2–10 levels
Typical usespam?, phishing?, worth a human reply?ticket routing, intent buckets, category taggingquality grading, lead scoring, idea ranking

Example questions in one request — and yes, you can mix primitives in a single call (the questions map doesn't care):

{
  "model": "jev-1.13.0",
  "state": { "ticket_subject": "...", "ticket_body": "..." },
  "questions": {
    "needs_human": {
      "type": "noul",
      "instructions": "Answer yes if this ticket requires a human agent rather than a help-center link."
    },
    "department": {
      "type": "choice",
      "instructions": "Pick the department that should own this ticket.",
      "options": ["billing", "technical", "account", "sales"]
    },
    "urgency": {
      "type": "score",
      "instructions": "Rate how urgent this ticket is for the customer.",
      "scale": 5
    }
  }
}

Three questions, three primitives, one HTTP request, one bill. That packing trick is its own pattern — see Speculative Fan-Out.

How to choose

Ask what the downstream code does with the answer:

  • Binary action? (keep/discard, send/skip, auto-approve/review) → Noul. You get one probability to threshold. Note Noul returns no confidence field — if you need a second-opinion signal, derive it from how far the probability sits from 0.5, or see Confidence & Calibration.
  • Routing or tagging?Choice. The per-option probabilities plus the separate confidence field give you both the winner and a "how decisive was this" signal for fallbacks. Mind the 255-option ceiling — beyond that, bucket first (coarse Choice → finer Choice, see Cascade Routing).
  • Ranking or grading?Score. You get a value on your 2–10 level scale, the legend describing what each level means, and the full distribution. Pick the smallest scale that carries your distinction — a 10-level scale where levels 6–9 are indistinguishable in your instructions is noise, not resolution.

Don't force it: if you keep writing instructions like "score 1 if no, 10 if yes," what you actually want is a Noul.

The trap: the primitives can disagree with each other

Ask "is this email spam?" as a Noul and "classify: spam / not-spam" as a Choice on the same state, and you can get answers that don't line up — the Noul says 0.7 yes while the Choice lands on not-spam. This isn't a bug; the primitives frame the judgment differently, and Jev's accuracy is jagged: strong on some framings, weaker on others, not always self-consistent across them.

Practical consequences:

  1. Pick one primitive per decision and make it the single source of truth. Don't cross-check Noul against Choice and average the results — you're averaging two different questions.
  2. If answers flip when you reframe, treat that as a signal the decision is genuinely borderline for the model — route it to the fallback (human or LLM) instead of trusting either framing. That's Confidence Gating.
  3. Log the primitive type with every stored verdict. A probability from a Noul and a winning probability from a Choice are not the same statistic; mixing them in one dataset poisons later calibration analysis.

Where to go next

Sources

Unofficial fan-made handbook. Not affiliated with TypeSafe AI or jev.com.