Routing evidence collection with Jev
Not every request deserves the same handler. Jev classifies cheaply; code sends work to a lookup, a specialist LLM, a costlier model, or a human.
This unofficial page is the evidence collection slice of the intent and model routing pack. Intent: apply the Jev (TypeSafe System One) decision model to intent and model routing evidence collection. Primary search language: Routing Jev evidence collection. Confirm patterns on docs.typesafe.ai. This site does not sell, issue, or proxy TypeSafe keys. Use a credential you already have from the console or a documented gateway.
Independent angle (cover ≠ clone): Routing glossary + compare vs rules/queues; ranked-route floors. Not a clone of a rival intent-routing glossary page.
Routing use-case context
Evidence collection for intent and model routing happens before POST /v1/systemone. Jev does not browse your warehouse, retriever, or ESP. You gather the latest user request facts, filter them, then ask snap questions. This slice is where fan-out cost math belongs: batch questions, do not re-send state.
Hub: Intent routing. Compare, when the other tool is the real job: rules and queues.
Evidence Collection inputs
Collect:
- The latest user message (or the span the question names)
- Auth / plan flags if routing depends on them
- A closed handler list in Choice options — include
other
Never send:
- The destination LLM’s entire system prompt (unless you ask a policy question about it)
- Live inventory counts you should query in SQL after
order_status - A 400-option handler taxonomy in one Choice — cascade instead
Shape the payload like this once the gather step finishes:
{
"user": { "message": "Where is order 8831?", "locale": "en" },
"session": { "authenticated": true, "plan": "free" },
"catalog": { "handlers": ["order_status", "product_question", "return_exchange", "complaint", "other"] }
}
Decision signals and actions
Each evidence field should change a named answer:
| Id | Type | Job |
|---|---|---|
intent |
Choice | order_status / product_question / return_exchange / complaint / other |
complexity |
Score | used when the intent is a complaint |
model_class |
Choice | optional: cheap / standard / careful (model routing) |
Intent + complexity (+ optional model_class) belong in one request. Do not pay a second System One call just to pick the specialist prompt.
Do not treat a Noul of 0.5 as a “medium” intent and model routing score — it means yes and no are equally likely. Conjunctions stay in your code.
Guardrails and escalation
If the gather step fails (empty latest user request, redaction stripped everything, retriever empty), fail closed on opening a refund/complaint LLM path or jumping to a costly model. Do not invent evidence so Jev has something to say. TypeSafe’s confidence-gated examples use a lower bar for recoverable reads than for irreversible actions. Those numbers are illustrations. For intent and model routing, treat complaint_auto_llm as the high bar (opening a refund/complaint LLM path or jumping to a costly model). Tune on labels — see offline evaluation.
Evaluation and rollout notes
Your eval set should include thin-evidence cases, not only happy latest user requests. Label handler gold and whether a human would have taken the complaint. Pin jev-1.13.0 (the versioned id) after you fit thresholds. jev-latest and the marketing line jev-1.13 can move. Log the response model. TypeSafe’s published list price for jev-1.13 is $0.042 per million input tokens (vendor claim — confirm on the models page); output tokens are free on that same page. Unused distractors still bill as input.
Official Python and JavaScript SDKs read TYPESAFE_API_KEY and retry documented 429/529. This site does not sell, issue, or proxy TypeSafe keys. Use a credential you already have from the console or a documented gateway.
Pack map
| Slice | Page |
|---|---|
| Graph and primitives | decision workflow |
What may enter state |
input contracts |
| What to gather first | you are here |
| Atomic rules | policy checks |
| Act / review / abstain | confidence thresholds |
| Reviewer payload | human handoff |
| What to persist | audit trail |
| How it breaks | failure modes |
| Labeled replay | evaluation |
| Shadow → canary | production rollout |
FAQ
Should evidence live in the question text?
Put facts in state and point instructions at user.message, session.authenticated. Criteria stay stable so you can replay.
When do I split calls? Intent + complexity (+ optional model_class) belong in one request. Do not pay a second System One call just to pick the specialist prompt.
Where is the rest of the Routing pack? Start with Routing input contracts and Routing decision workflow. Cluster hub: Use cases.
Is intent a reserved API field?
No. You name the key. See glossary: intent.
When do rules beat Jev? When the route is already in structured data. Compare traditional routing.
What this page does not claim
- No claimed win-rate versus regex routers.
- LangChain
ModelRouterMiddlewareAPIs are LangChain’s — believe their docs if they move. - Not official TypeSafe.
- Official TypeSafe status, or that jev.pro issues API keys.
- That a schema-constrained answer is automatically factually correct.
Disclaimer
This is an independent unofficial site and is not affiliated with TypeSafe AI; official documentation is available at https://docs.typesafe.ai.
Primary documentation: https://docs.typesafe.ai. Hub: Use cases.
Sources
Public TypeSafe or adjacent documentation only. No private claims.