Use case · Mixed
Support ticket triage with Jev
Ask one Choice question for the queue and one Score question for severity in the same call — both come back in roughly the time one of them would take, for a fraction of a cent.
The problem
Ticket triage is high volume, latency-sensitive and boring: every inbound message needs a queue, a priority and sometimes a language tag. Doing it with a chat model means a prompt carrying every queue description, a JSON schema, a parse step and a retry path — seconds per ticket and real money at scale.
How Jev handles it
The state is the ticket text. Ask the questions you actually need as typed questions in one call. Because questions are evaluated in parallel against the same state, asking three costs about what asking one costs.
from typesafe_sdk import Choice, Noul, NoulCriteria, Score, TypeSafeClient
client = TypeSafeClient(api_key=os.environ["TYPESAFE_API_KEY"])
response = client.system_one(
model="jev-latest",
state=ticket_body,
questions={
"queue": Choice(
instructions="Which team should handle this ticket?",
criteria={
"billing": "Payments, invoicing, refunds",
"technical": "Bugs, outages, integrations",
"account": "Login, permissions, plan changes",
"sales": "Pricing, upgrades, new accounts",
"spam": "Unsolicited or irrelevant",
},
),
"severity": Score(
instructions="How urgent is this ticket?",
criteria=["Low", "Normal", "High", "Urgent"],
),
"churn_risk": Noul(
instructions="Is the customer threatening to cancel?",
criteria=NoulCriteria(
true="Explicitly mentions cancelling or leaving",
false="No cancellation intent expressed",
),
),
},
)
answers = response.answers
if answers["queue"].confidence >= 0.85:
route_to(answers["queue"].choice, priority=answers["severity"].score)
else:
route_to("manual_review")Notes from the field
- Customer service was one of the four workflows in TypeSafe's own launch evaluation.
- The churn-risk Noul is nearly free to add — use spare questions for signals you would never have paid an LLM call to get.
- Gate on confidence and send the uncertain tail to a human or an LLM. That tail is also your best source of labelled training data.