AI Innovation: Embedded, Not Bolted On¶
Five AI capabilities wired into Asurion's claims workflow — not a ChatGPT wrapper
What separates this from "just call an LLM"¶
| Generic AI approach | What we built | |
|---|---|---|
| Data access | Free-text NL-to-SQL against unknown schema | Catalog-anchored SQL gen with data dictionary + safety layer |
| Decisions | AI makes the call | Rules decide — AI narrates the reasoning in plain language |
| Model strategy | "Call Claude and hope" | Two-tier model policy tuned per workload |
| User experience | Generic chatbot: "what do you want?" | LangGraph Clarifier resolves against Asurion's metric catalog |
| Data | Prototype with synthetic data | 3 live Databricks metrics querying real Asurion claim data |
Five capabilities¶
Catalog-anchored SQL generation¶
Not free-text NL-to-SQL
SQL generation starts from a metrics_catalog row — not arbitrary user text. The data dictionary (52 tables, 1,663 columns, 138 joins) provides schema context. sqlglot enforces structural safety: SELECT-only, table allowlist, automatic LIMIT injection.
%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#1e293b', 'primaryTextColor': '#f8fafc', 'lineColor': '#64748b', 'fontSize': '13px'}} }%%
graph LR
M["<b>Metric Catalog</b><br/>cost_avoided_mtd"]
D["<b>Data Dictionary</b><br/>52 tables / 1,663 cols"]
B["<b>Bedrock</b><br/>Sonnet 4.6"]
S["<b>sqlglot Safety</b><br/>parse + validate"]
DB["<b>Databricks</b><br/>execute query"]
M --> B
D --> B
B --> S
S -->|"safe SQL only"| DB
classDef catalogNode fill:#3b82f6,stroke:#1d4ed8,color:#fff,stroke-width:2px,rx:8
classDef dictNode fill:#8b5cf6,stroke:#6d28d9,color:#fff,stroke-width:2px,rx:8
classDef bedrockNode fill:#6366f1,stroke:#4f46e5,color:#fff,stroke-width:2px,rx:8
classDef safetyNode fill:#f59e0b,stroke:#d97706,color:#1e293b,stroke-width:2px,rx:8
classDef dbNode fill:#22c55e,stroke:#15803d,color:#fff,stroke-width:2px,rx:8
class M catalogNode
class D dictNode
class B bedrockNode
class S safetyNode
class DB dbNode
LangGraph Clarifier with metric matching¶
Not a blank text box
An 8-node state machine. The metricMatcher node auto-resolves "cost avoided" against the catalog before asking any questions. Operators see their actual metrics with definitions — not a generic prompt.
%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#1e293b', 'primaryTextColor': '#f8fafc', 'lineColor': '#64748b', 'fontSize': '13px'}} }%%
graph LR
CL["<b>Context<br/>Loader</b>"]
IE["<b>Intent<br/>Extractor</b>"]
MM["<b>Metric<br/>Matcher</b>"]
GD["<b>Gap<br/>Detector</b>"]
HITL["<b>HITL<br/>Pause</b>"]
QP["<b>Question<br/>Prioritizer</b>"]
SS["<b>Spec<br/>Synthesizer</b>"]
CR["<b>Critic</b>"]
CL --> IE --> MM --> GD
GD -->|"gaps found"| HITL
GD -->|"no gaps"| QP
HITL --> QP --> SS --> CR
classDef startNode fill:#3b82f6,stroke:#1d4ed8,color:#fff,stroke-width:2px,rx:8
classDef aiNode fill:#6366f1,stroke:#4f46e5,color:#fff,stroke-width:2px,rx:8
classDef matchNode fill:#8b5cf6,stroke:#6d28d9,color:#fff,stroke-width:2px,rx:8
classDef hitlNode fill:#f59e0b,stroke:#d97706,color:#1e293b,stroke-width:3px,rx:8
classDef synthNode fill:#22c55e,stroke:#15803d,color:#fff,stroke-width:2px,rx:8
class CL startNode
class IE,GD,QP aiNode
class MM matchNode
class HITL hitlNode
class SS,CR synthNode
Two-tier Bedrock model policy¶
Right model for the right job
Not one model for everything. Two tiers, tuned per workload (ADR-011).
Latency budget: <3s
- Intent extraction
- SQL generation
- Safety layer catches errors — speed matters more than depth
Quality over speed
- Spec synthesis (KPI / chart / table / custom)
- Custom widget codegen
- Complex reasoning where accuracy matters more than latency
AI narrates, never decides¶
Deterministic decisions, AI-powered explanations
Rules and weighted scoring pick the action (repair vs replace). Bedrock explains why — using Asurion's own reason codes.
Example reason codes
These are Asurion's claims vocabulary — not generic labels. Template fallback guarantees the demo never breaks (ADR-003).Custom widget codegen¶
Safe browser-side compilation
The LLM generates TSX for ops-specific views. @babel/standalone compiles it in a sealed scope — React + Icons only. No imports, no network access, no escape. Mock data derived from operator examples, not type signatures.
Eval harness — we test our AI¶
Automated LLM output evaluation
- Reuses production LangGraph nodes (no separate eval copy)
- 7 static checks +
tsc --noEmittype validation - Captures full Bedrock request/response for audit
- Artifacts archived at
artifacts/clarifier-eval/
Judges look for evals. We have them.
Speaker notes (60-90s)
- Start with the comparison table — it preempts the #1 judge objection: "isn't this just a ChatGPT wrapper?"
- Speed through all 5 capabilities — hit the headlines, not the implementation details.
- Land on: "Every capability is wired into Asurion's domain. The metric catalog has Asurion's KPIs. The dictionary has Asurion's EDW schema. The reason codes are Asurion's claims vocabulary."
- Mention the eval harness briefly — judges specifically look for "evals" in technical implementation.
- If asked about the two-tier policy: "Sonnet for speed, Opus for depth. Each call site picks the right tier."