jev·agent

← All use cases

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.

python
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