Customer frustration
Rate how frustrated a customer sounds, so tone and seniority of the reply can match.
F@fLimits to keep in mind
Don't use this score to deprioritize calm customers or to judge the person.
Problem
A calm question and a furious third follow-up land in the same queue with the same template reply, which escalates the furious one further.
Goal
Bring very upset customers to an experienced person sooner, without letting tone override what the issue actually needs.
Input / state
The latest message and, if there is one, how many times they've written about it.
- message
- The customer's latest message.
- prior_contacts
- How many times they've contacted you about this issue, counted in code.
Decision question
frustrationHow frustrated does the customer sound in this message?
Rubric levels
0Calm or positive.1Mildly annoyed or impatient.2Clearly frustrated: repeated complaints, sharp wording, or mentions of wasted time.3Very upset: angry, threatening to leave or escalate, or saying the problem is harming them.
Allowed outcomes
Decided in your code from the answer and its confidence. Thresholds are yours to set and test.
- Standard replyMost likely level is 0 or 1 and confidence meets your threshold.
- Prioritize and acknowledgeMost likely level is 2 and confidence meets your threshold.
- Experienced agentMost likely level is 3 and confidence meets your threshold.
- Needs a personConfidence is below your threshold: probability is spread across options.
Example scenarios
Predefined demonstrations. No model is called; the outcome shown is an illustrative judgment.
Example state
{
"message": "Hi! Quick question about how seats are billed. Thanks!",
"prior_contacts": 0
}Outcome
IllustrativeMost likely level is 0 or 1 and confidence meets your threshold.
Why
Calm and friendly.
Using it well
- Use frustration to choose who replies and how, not whether the issue gets resolved.
- Sarcasm and short messages are hard to read; spread probability is an honest answer for them.
- Count prior contacts in code and include the number; repeat contact is a strong signal the model can't see otherwise.
Request definition
POST https://api.typesafe.ai/v1/systemone{
"model": "jev-latest",
"state": {
"message": "<message>",
"prior_contacts": "<prior_contacts>"
},
"questions": {
"frustration": {
"type": "score",
"instructions": "How frustrated does the customer sound in this message?",
"criteria": [
"Calm or positive.",
"Mildly annoyed or impatient.",
"Clearly frustrated: repeated complaints, sharp wording, or mentions of wasted time.",
"Very upset: angry, threatening to leave or escalate, or saying the problem is harming them."
]
}
}
}Request shape from the System One API reference; a Kev server accepts the same body. Replace the placeholder state with your data. Requests need your own API key or server.
Version History
Initial version