Jev versus classification models
Jev (TypeSafe’s System One decision model) is a label-in-request classifier: you send state plus a Choice (or Score / Noul) whose options live in that request. A trained BERT, GLiNER, or logistic head is a train-your-own classifier: labels live in weights until you retrain.
This unofficial comparison is for engineers choosing a first decision layer — not a bake-off. jev.pro is not affiliated with TypeSafe AI. Confirm prices and APIs on docs.typesafe.ai. We do not sell keys.
Label-in-request vs train-your-own
| Axis | Jev Choice (label-in-request) | Fine-tuned / zero-shot classifier |
|---|---|---|
| Where labels live | criteria map on this call (max 255 options) |
Model weights or a prompt template |
| Change a label | Edit the request; pin jev-1.13.0 if thresholds are tuned |
Collect data, retrain or swap a checkpoint |
| Output | choice, full probabilities, confidence |
Usually argmax + optional logits; calibration is extra work |
| Training | TypeSafe states Jev is not LoRA-adapted per customer | You own the training loop |
| Latency / $ | Vendor claims on the models page and launch post — not jev.pro measurements | GPU/CPU you already run; often cheaper at huge stable volume |
Jev is not “just a classifier” in the BERT sense. Official docs frame it as a System One decision primitive: no generated rationale, no open NER spans unless you turn candidates into a closed Choice. Schema-safe still does not mean factually correct.
Fair cost table (vendor figures only)
Figures below are vendor-published. Re-read the source before you bid a contract.
| Item | Published figure | Source |
|---|---|---|
| Jev 1.13 list price | $0.042 / million input tokens; output tokens free | TypeSafe models page |
| Jev context | 64k request budget; 32k for state + longest question |
Same models page |
| Fine-tuned BERT on your GPU | Your infra + labeling — we will not invent a $/query | Your ops sheet |
| Hosted zero-shot (GLiNER-class) | Provider card, not this site | That provider |
Batch many atomic questions on one state: TypeSafe says the state is ingested once and questions run in parallel. A separately hosted classifier usually pays per sequence, not per extra rubric on the same text.
When a fine-tuned BERT still wins
Use a trained classifier (or rules) when:
- The label set is frozen and you already have tens of thousands of gold rows — a small encoder can be cheaper and fully on-prem.
- You need span / token labels (NER, PII offsets). Jev returns typed decisions, not character offsets.
- Numeric or date identity must be exact. TypeSafe’s
jev-1.13jaggedness note: keep arithmetic and date math in code. - Adversarial robustness is a product requirement. Official jaggedness: state is not treated as hostile by default.
- You cannot send text off-box. That is a procurement constraint, not a quality ranking.
Use Jev when the taxonomy changes weekly, you need calibrated-looking probabilities without a training team, or several judgments must share one state (department + urgency + policy Noul).
Cascade pattern with confidence abort
TypeSafe’s hierarchical classification cookbook walks a taxonomy with Choice at each node. Two production habits beat a single 200-way Choice:
- Greedy walk — pick the top child; abort if
confidenceis below your floor and send the ticket to a human or a broader parent label (see their “classification using confidence” cookbook). - Beam walk — keep K paths; score with length-normalized geometric mean of edge probabilities. Abort the whole beam when the top/second path ratio is near 1.
Taxonomy tips (ours, not a rival recipe clone):
- Every node needs an
other/noneoption so the model can refuse a bad branch. - Put sibling contrast in
criteria, not only ininstructions. - Do not carry a Noul threshold onto a Choice. Official confidence docs: Noul has no
confidencefield. - Depth > ~10: prefer
exp(mean(log(p)))to a raw product, as the cookbook notes for numeric stability.
Worked sketch (thresholds are yours):
# Pin a versioned ID once you fit abort floors.
# client = TypeSafeClient(model="jev-1.13.0")
ABORT = 0.55 # tune on labeled tickets; not a TypeSafe default
def walk(node, state, client):
children = taxonomy[node]
ans = client.system_one(
state=state,
questions={
"branch": {
"type": "choice",
"instructions": f"Which child of `{node}` fits this document?",
"criteria": {c: taxonomy.rubric[c] for c in children},
}
},
)
choice = ans.answers["branch"]
if choice.confidence < ABORT or choice.choice == "other":
return {"leaf": node, "aborted": True, "confidence": choice.confidence}
if is_leaf(choice.choice):
return {"leaf": choice.choice, "aborted": False, "confidence": choice.confidence}
return walk(choice.choice, state, client)
FAQ
Is Jev a drop-in for Hugging Face pipeline("zero-shot-classification")?
Same job class (closed labels on text), different contract. You rewrite labels as Choice criteria and branch in code on probabilities / confidence.
Can I combine Jev probabilities with a classical model? TypeSafe’s “how to build” and AutoResearch cookbook describe using Jev outputs as features for a downstream model. That is a composition pattern, not a claim we measured.
Do we have independent BERT-vs-Jev numbers? No. Do not treat launch-post workflow evals as a classifier leaderboard.
What this page does not claim
- No invented F1, ECE, or latency vs BERT/GLiNER.
- “Can’t hallucinate” in TypeSafe’s launch sense means out-of-schema, not factual truth.
- This is not official TypeSafe documentation.
Hub: Comparisons. Siblings: decision boundaries, triage workflow. Canonical API: docs.typesafe.ai.
Sources
Public TypeSafe or adjacent documentation only. No private claims.