Customer support decision workflow with Jev
Triage already picked a queue. This pack decides what happens next: is the customer asking for a refund, does a drafted reply violate policy, should a macro fire? Jev judges; macros, agents, or humans act. Jev does not send the reply.
This unofficial page is the decision workflow slice of the customer support actions pack. Intent: apply the Jev (TypeSafe System One) decision model to customer support actions decision workflow. Primary search language: Customer support Jev decision workflow. Confirm patterns on docs.typesafe.ai. This site does not sell, issue, or proxy TypeSafe keys. Use a credential you already have from the console or a documented gateway.
Independent angle (cover ≠ clone): Full support-action pack (contracts → thresholds → handoff → audit) beats a single support-triage-choice recipe. This pack is refunds, commitments, and policy replies — not a clone of rival recipe IA, and not a duplicate of the triage routing pack. Fan-out extra atoms on one request; open a second HTTP call only for a new artifact, not the same state.
Customer support use-case context
Customer support actions is a workflow, not a chat. Assemble a narrow state, ask the primitives below, and let the support action gate branch. TypeSafe’s docs say a good question is a snap decision a knowledgeable person could make in a few seconds — not an open-ended analysis of the ticket thread + drafted reply.
Hub: Support triage hub. Compare, when the other tool is the real job: ticket queues.
Decision Workflow inputs
Keep only fields the questions name:
{
"ticket": { "id": "T-2201", "latest": "You promised a refund last week. Charge is still there." },
"draft": { "body": "I issued a $400 goodwill credit." },
"account": { "plan": "pro", "refunds_ytd_cents": 0 },
"policy": { "refunds": "Auto-refund language only if amount extracted in code is under cap.", "promises": "Do not invent credits." }
}
Point instructions at ticket.latest, draft.body, policy.refunds, policy.promises. Drop full CRM novels and every historical ticket; payment PAN / government IDs (redact first).
Decision signals and actions
| Id | Type | Job |
|---|---|---|
refund_ask |
Noul | Is the latest turn requesting a refund or chargeback help? |
draft_ok |
Noul | Does draft.body invent a credit vs policy.promises? |
disposition |
Choice | send_macro / hold_promise / escalate_specialist / other |
All of these share state and run in parallel. Code owns the graph:
def support_act(ans, amount_cents, cap_cents):
if ans["draft_ok"].noul >= T_VIOL:
return "hold_promise"
if ans["refund_ask"].noul >= T_REFUND and amount_cents > cap_cents:
return "escalate_specialist" # cap is code
if ans["disposition"].confidence < FLOOR or ans["disposition"].choice == "other":
return "agent_review"
return ans["disposition"].choice
Do not treat a Noul of 0.5 as a “medium” customer support actions score — it means yes and no are equally likely. Conjunctions stay in your code.
Guardrails and escalation
TypeSafe’s confidence-gated examples use a lower bar for recoverable reads than for irreversible actions. Those numbers are illustrations. For customer support actions, treat send_customer_reply as the high bar (sending a customer reply or issuing a credit flag). Tune on labels — see offline evaluation.
Low confidence, or a policy miss → human or safe default; do not send the reply or issue a credit.
Evaluation and rollout notes
Shadow: Agents send as today; log Jev disposition.
Canary: Enforce holds on draft_ok only for one macro family.
Pin jev-1.13.0 (the versioned id) after you fit thresholds. jev-latest and the marketing line jev-1.13 can move. Log the response model. TypeSafe’s published list price for jev-1.13 is $0.042 per million input tokens (vendor claim — confirm on the models page); output tokens are free on that same page. Unused distractors still bill as input.
Official Python and JavaScript SDKs read TYPESAFE_API_KEY and retry documented 429/529. This site does not sell, issue, or proxy TypeSafe keys. Use a credential you already have from the console or a documented gateway.
Pack map
| Slice | Page |
|---|---|
| Graph and primitives | you are here |
What may enter state |
input contracts |
| What to gather first | evidence collection |
| Atomic rules | policy checks |
| Act / review / abstain | confidence thresholds |
| Reviewer payload | human handoff |
| What to persist | audit trail |
| How it breaks | failure modes |
| Labeled replay | evaluation |
| Shadow → canary | production rollout |
FAQ
Does Jev execute the support action gate action? No. It returns typed answers. Your support action gate code calls queues, models, or humans.
Why several questions in one request? TypeSafe’s fan-out pattern: extra questions are cheap versus another HTTP call. refund_ask + draft_ok + disposition in one call — same fan-out idea as the official ticket sketch, but these atoms are actions, not department routing. Hierarchical product taxonomies stay on the triage workflow.
Where is the rest of the Customer support pack? Start with Customer support input contracts and Customer support confidence thresholds. Cluster hub: Use cases.
Is this the same as the support-triage recipe rivals publish? No. Triage routes the ticket. This pack gates actions after routing. Cover the intent; do not clone their slug or outline.
Can Jev replace the agent? No. It classifies and scores. See the support triage hub.
What this page does not claim
- Not a helpdesk or payments product.
- No invented CSAT/AHT numbers.
- Not official TypeSafe.
- Official TypeSafe status, or that jev.pro issues API keys.
- That a schema-constrained answer is automatically factually correct.
Disclaimer
This is an independent unofficial site and is not affiliated with TypeSafe AI; official documentation is available at https://docs.typesafe.ai.
Primary documentation: https://docs.typesafe.ai. Hub: Use cases.
Sources
Public TypeSafe or adjacent documentation only. No private claims.