The Intent Router Node classifies the user's input with the Jev decision model (TypeSafe System One, via OpenRouter) and routes execution to one of its class handles — no LLM prompt, no text parsing. One typed decision call, typically 70-500ms.
How it works
- The node sends the input text plus your class definitions to Jev as a single Choice question.
- Jev returns the chosen class with calibrated confidence and a probability for every class.
- The flow routes to the
route:<class_id>edge whose class was chosen. If confidence is below your threshold, it routes to theroute:low_confidencehandle instead.
Parameters
- question (string): The routing question Jev answers (e.g. "Which category does this user request belong to?").
- classes (array): One entry per route. Each class has:
- id (string): The handle identifier — wire the edge from
route:<id>. - description (string): What belongs in this class. Descriptions, not names, drive zero-shot quality.
- id (string): The handle identifier — wire the edge from
- confidence_threshold (number, 0-1, default 0.7): Below this, the low-confidence handle is used.
- input_key (string, default "user_message"): Which state field to classify.
Output Handles
route:<class_id>— one per class.route:low_confidence— fallback when the decision is not confident enough. Wire this to an LLM-based router or a human review path.
State
Writes intent = { id, confidence, probabilities } — readable by a Condition Node via dotted paths like intent.confidence.
Use Cases
- Intent routing:
UserChatInput → IntentRouter → {billing_flow, support_flow, sales_flow}with a low-confidence fallback to a general agent. - Language/team triage: pick the department that should own a ticket.
- Topic gating: separate FAQ-style questions from deep research requests.
Tips
- Always add an "other"/catch-all class so Jev can say none of the classes fit.
- Write descriptions that separate the classes from each other ("Invoices, payments, refunds" vs "Delivery status, delays").
- If the decision service is unavailable, the node routes to low_confidence — the flow never dead-ends.