Triage human handoff
Handoff is a first-class outcome of triage, not a failure of Jev. TypeSafe’s routing examples send low-confidence intents and high-complexity complaints to a person. This unofficial page is the handoff slice of the pack. Confirm patterns on docs.typesafe.ai. No keys sold.
When code should refuse to auto-route
| Signal | Typical handoff reason (you name the enum) |
|---|---|
Choice confidence < floor |
uncertain_intent |
Choice == other |
unmapped_label |
| Noul near 0.5 on safety / legal | ambiguous_yes_no |
| Cascade abort | taxonomy_uncertain |
| Policy Noul high + destructive action | policy_review |
| Empty or multilingual state you have not eval’d | insufficient_state |
Do not invent an HTTP status for these. They are application outcomes next to a 200.
Payload to the human (audit)
Send what a reviewer can check in seconds:
- Ticket id + the filtered
stateyou actually POSTed - Question ids,
choice/score/noul, fullprobabilities,confidence - Resolved
model(jev-1.13.0vs alias) - Which threshold fired
- Safe default already applied (queue held, no refund issued)
Do not ask Jev to draft the agent reply. Official jaggedness: generation is the wrong job. A template or an LLM writes words after the decision.
After the human acts
Write the gold label back into your offline set (eval harness). That is how floors move. Log the trace as a decision trace, not a chat log.
FAQ
Should low frustration + low confidence still page? Page on your conjunction rules, not on a single Score. See workflow.
Is handoff the same as abstention? Abstention is the model/policy saying “no auto action.” Handoff is the queue you send that case to.
Hub: Use cases. Sibling: thresholds.
Sources
Public TypeSafe or adjacent documentation only. No private claims.