Customer frustration

Rate how frustrated a customer sounds, so tone and seniority of the reply can match.

F@f

Limits 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

ScoreQuestion key frustration

How 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

Illustrative
Standard reply

Most 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

v1Current Versionabout 8 hours ago@f

Initial version

Comments (0)