Routing decision workflow 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 decision workflow slice of the intent and model routing pack. Intent: apply the Jev (TypeSafe System One) decision model to intent and model routing decision workflow. Primary search language: Routing Jev decision workflow. 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
Intent and model routing is a workflow, not a chat. Assemble a narrow state, ask the primitives below, and let the front-door router branch. TypeSafe’s docs say a good question is a snap decision a knowledgeable person could make in a few seconds — not an open-ended analysis of the latest user request.
Hub: Intent routing. Compare, when the other tool is the real job: rules and queues.
Decision Workflow inputs
Keep only fields the questions name:
{
"user": { "message": "Where is order 8831?", "locale": "en" },
"session": { "authenticated": true, "plan": "free" },
"catalog": { "handlers": ["order_status", "product_question", "return_exchange", "complaint", "other"] }
}
Point instructions at user.message, session.authenticated. Drop full order-line JSON when the intent might be a product question; every historical session turn.
Decision signals and actions
| 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) |
All of these share state and run in parallel. Code owns the graph:
def route(ans):
intent = ans["intent"]
if intent.confidence < FLOOR:
return "human"
if intent.choice == "order_status":
return "sql_lookup"
if intent.choice == "complaint":
c = ans["complexity"]
if c.score > 1 or c.confidence < FLOOR:
return "human"
return "complaint_llm"
if intent.choice == "other":
return "human"
return f"llm:{intent.choice}"
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
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.
Low confidence, intent == other, or a policy miss → human or safe default; do not open a refund path or jump to a costly model.
Evaluation and rollout notes
Shadow: Record selected handler next to the current rules engine; serve the old route.
Canary: Auto-act order_status only; keep complaint on the old path.
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 | you are here |
What may enter state |
input contracts |
| What to gather first | evidence collection |
| 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
Does Jev execute the front-door router action? No. It returns typed answers. Your front-door router code calls queues, models, or humans.
Why several questions in one request? TypeSafe’s fan-out pattern: extra questions are cheap versus another HTTP call. 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 confidence thresholds. 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.