Readout — judgement layered on top, without touching what works.
An add-on package: one LLM pass over every inbound lead from both lead-response systems — email and SMS — classifying intent, refining the rule-based HOT / WARM / COLD band, extracting entities, and drafting a suggested human reply. Dispatched fire-and-forget into the seams both bricks already declare; neither is modified.
Two lead systems answer instantly. Rules did the judging.
Judgement at volume — the part rules can't reach.
- Tell a hot enquiry from a polite vendor pitch when both use the same words.
- Read intent — enquiry, support request, spam — from how a message is written, not just what it contains.
- Fill the fields a lead implies but never states: business, platform, budget signal.
- Draft the reply. A human still starts every response from a blank page.
- And the usual fix — rebuilding both systems around a model — risks the reliability that made them work.
One enrichment workflow, strapped across both bricks.
- Signed intake: requests are verified and acknowledged before any model work — enrichment is asynchronous behind the acknowledgement, never blocking a lead response.
- Idempotency guard: each lead-and-message pair is enriched once. Redelivery is a no-op — no second model spend, no overwrite.
- Spend guard: a daily cost cap. Over the cap, the model is skipped and the skip is recorded — attempts are telemetry too.
- One LLM pass, deterministic settings, JSON-only: intent class, HOT / WARM / COLD refinement with confidence and a one-line rationale, extracted entities, and a suggested reply in the studio voice.
- Clamp and validate: model output is parsed and bounds-checked — bands to the enum, confidence to range, drafts length-capped, unknown fields dropped. A bad response falls back; it never throws.
- Write-back: enrichment merges onto the lead row alongside the original rule band, model cost, and latency — the rule-band versus model-band disagreement is the headline metric.
- Failure honesty: an error or timeout still writes a trace. Silent skips are forbidden — every ingested lead leaves a record.
Callers get an acknowledgement before any model work starts. Enrichment runs asynchronously behind it — the plugin can never delay a lead response.
Both bricks call it through seams they already declare. Seam unbound or plugin down, they run exactly as before — a graceful no-op, not a failure.
The suggested reply is decision support. The plugin never sends anything to a lead — no email, no SMS, no exceptions.
Measured, not promised.
The numbers land here when the observation window closes: leads enriched by channel, rule-band versus model-band disagreement rate, spam caught, median enrichment latency, and median cost per lead — pulled straight from the write-back. Until then this section stays deliberately empty. No invented figures, ever.