Documentation Index
Fetch the complete documentation index at: https://docs.kaireonai.com/llms.txt
Use this file to discover all available pages before exploring further.
What this solves
Most A/B tests confuse “which variant won” with “did the engine actually help vs doing nothing?” A holdout group answers the second question: a known percentage of traffic gets zero personalization (or a fixed-rule fallback). Comparing engaged-rate across variant × (in-experiment vs holdout) gives you causal uplift, not just relative ranking.Why this works
The platform has two complementary mechanisms:- Champion / Challenger on the Score node —
championChallenger.{champion, challengers[]}routes per-customer via deterministic hash so the same customer always lands in the same variant. - Tenant-level holdout percentage —
tenant.settings.holdoutPercentage(0-100) reserves that share of traffic for a “no NBA” fallback that returns offers sorted by priority weight only (the same path NBA-disabled tenants take).
Step 1 — Set the holdout percentage
GET /api/v1/tenant-settings afterward.
Step 2 — Configure champion/challenger on the Score node
customerId × experimentId hash falls into one bucket; the routing is persistent across sessions for that customer until you change the configuration.
Step 3 — Capture the variant on each decision
The recommend response includes:controlGroup: true means this customer was in the holdout — the engine ran the priority-only fallback path. The decision_traces.experimentAssignment JSONB persists the variant for later analysis.
Step 4 — Measure uplift
The platform’s/api/v1/experiments/uplift endpoint computes z-tested uplift between in-experiment and holdout:
platform/src/lib/experimentation/uplift.ts.
Gotchas
- Holdout is tenant-wide. Setting
holdoutPercentageaffects every flow for that tenant; if you need per-flow holdouts use theexperiment.holdoutPercentfield on the Experiment resource instead. - Variant assignment is persistent. The same customer always sees the same variant — even after the experiment ends, until you flip
championChallenger.enabledto false. autoPromoteon the Experiment resource (when enabled) automatically promotes the winning challenger to champion after the experiment meets its success criteria. Combine withfour-eyesapproval for governance.