A LangGraph support-ticket agent that resolves routine SaaS tickets automatically and pauses for a human supervisor when policy, sentiment, or unresolved work demands escalation.
Human-in-the-Loop + Conditional Routing for high-volume SaaS support operations
Divyam Jindal · Bhanu Uday · Ishaan Bansal · Harman Manik
The risk is not just slow support. It is sending routine work to humans while risky refunds, angry customers, and unresolved bugs do not get structured human review.
Committed at assets/support_escalator_graph.svg
interrupt() creates a real human checkpoint.SqliteSaver persists paused runs.| State field | Why it matters |
|---|---|
ticket | Original customer issue. |
category | Controls the conditional route. |
resolution_attempts | Audit trail of solver outputs. |
sentiment_score | Risk signal for escalation. |
supervisor_input | Human decision used on resume. |
final_response | Customer-facing output. |
General ticket resolves automatically.
| Route | general_solver |
| Escalation | None |
| Outcome | Final response ready |
Refund exceeds the supervisor threshold.
| Route | billing_solver |
| Trigger | $499 refund above $200 |
| Outcome | Interrupt and resume |
Tone and unresolved bug create risk.
| Route | bug_solver |
| Trigger | Sentiment at least 0.67 |
| Outcome | Supervisor guidance included |
| Representative case | Expected behaviour | Evidence |
|---|---|---|
| Password reset | General route, no interrupt. | Graph test |
| Duplicate billing | Billing route, refund interrupt, resume. | Graph test |
| Angry upload bug | Bug route, sentiment interrupt. | Graph test |
| Unknown account | Unresolved billing escalates. | Evaluation suite |
SqliteSaver for durable resume.Our prototype shows how Mosaic Cloud can move routine support work toward the 75% auto-resolution target while preserving human control for refunds, angry customers, and unresolved technical issues.