Support Ticket Triage
Build a support-priority route and evaluate it against an under-100ms compiled-path target.
The Challenge
Manual triage can consume substantial support time: a person reads the subject line, scans the body, checks the customer tier, and decides whether the ticket is urgent, normal, or low priority. Measure that workload before assuming automation will create material value.
The cost can include both triage effort and delay. For example, a genuinely urgent ticket sitting in a general queue may miss an internal response objective.
Rules don't work well here. You can catch keywords like "down" or "broken," but a message saying "our entire team is down to the last feature before launch" isn't urgent. Context matters.
Live model calls consume runtime budget. Their latency and token usage vary by model, prompt, provider, and traffic. Measure the current path before deciding whether a compiled classifier is useful.
The goal is faster, measurable triage that can distinguish phrases such as "the server is down" from "I'm feeling down about the new UI."
How Sparkient Solves It
A compiled triage model targets an under-100ms compiled stage by combining text understanding with structured signals. The public synthetic support benchmark reported 42ms average time per item in a batched run; the current runner does not measure per-request p95. A new ticket distribution needs its own evaluation. The model can consider:
- Ticket content — Subject line and body text, interpreted semantically (not just keywords)
- Customer context — Tier, account value, contract terms
- Historical signals — Number of open tickets, previous escalation patterns
- Urgency indicators — Mentions of deadlines, revenue impact, system outages
Priority Definitions
urgent— System outages, data loss, security incidents, enterprise customer escalations, revenue-impacting issues. Route to senior support or on-call immediately.normal— Feature questions, configuration help, bug reports with workarounds, billing questions. Route to the standard support queue.low— Feature requests, general feedback, documentation questions, "how do I" queries. Route to the backlog or self-service.
Rules + Classifier
CEL rules handle the deterministic routing:
// Enterprise customers always get urgent routing
ctx.customer_tier == "enterprise" ? "urgent" : null
// Tickets mentioning security terms get urgent routing
ctx.body.contains("security breach") || ctx.body.contains("data leak") ? "urgent" : null
// Feature requests are always low priority
ctx.subject.contains("[Feature Request]") ? "low" : nullThe compiled classifier handles everything else — the nuanced cases where priority depends on understanding what the customer is actually saying.
Code Example
import httpx
response = httpx.post(
"https://api.sparkient.ai/api/v1/decide",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={
"decision_type": "support-triage",
"input": {
"subject": "Can't process any orders",
"body": "Since this morning, none of our customers can complete checkout. We're getting timeout errors on every transaction. This is costing us thousands per hour.",
"customer_tier": "pro",
"open_tickets": 0
}
}
)
result = response.json()
# {
# "decision": "urgent",
# "confidence": 0.95,
# "latency_ms": 35,
# "stage": "classifier"
# }Integrating with Your Helpdesk
async def on_ticket_created(ticket):
triage = await sparkient_decide("support-triage", {
"subject": ticket.subject,
"body": ticket.body,
"customer_tier": ticket.customer.tier,
"open_tickets": ticket.customer.open_ticket_count
})
ticket.priority = triage["decision"]
ticket.auto_triaged = True
ticket.triage_confidence = triage["confidence"]
if triage["decision"] == "urgent":
await notify_oncall_team(ticket)
await ticket.save()If the model passes your held-out evaluation and routing safeguards, triage can happen before the ticket enters the queue.
Published Benchmark
| Metric | Sparkient compiled model | Best tested traditional ML baseline | |--------|--------------------------|-------------------------------------| | Macro F1 | 0.951 | 0.635 | | Accuracy | 96.2% | See methodology report | | Average time per item in the batched run | 42ms | Not reported |
On Sparkient's synthetic noisy-data support-triage benchmark, the compiled model beat the strongest tested traditional baseline by 31.6 F1 points. This is technical proof, not a customer-production result or a guarantee for a new ticket taxonomy. Evaluate per-class errors—especially false non-urgent decisions—on representative held-out tickets before automating routing.
Get Started
Define your priority categories and routing rules, then train a compiled triage model. Start with the free tier — 5,000 one-time credits, no credit card required.
Import this template
Start with a small evaluation. Import a decision type, customise it, and test it on representative cases.
Import Template