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 it does
Given a per-offer pacing plan (expected delivery curve across some period — e.g. 24 hourly buckets summing to 1.0) and the delivered history so far, pacing computes a score multiplier per offer:- Behind schedule (delivered < ideal) → multiplier > 1, boosting the offer’s rank so it catches up.
- Ahead of schedule (delivered > ideal) → multiplier < 1, damping the offer so it falls back to plan.
- On pace → multiplier ≈ 1, no-op.
[minMultiplier, maxMultiplier] (defaults
[0.5, 2]) so a wildly behind offer cannot dominate the ranking and a
wildly ahead one cannot disappear entirely.
Configuration
Two layers:- Tenant flag under
aiAnalyzerSettings.arbitration: - Per-offer pacing config on the Offer record under
pacing:
flatHourlyPlan(total)) or daytime-weighted
(daytimeHourlyPlan(total)). The delivered array is updated by your
delivery pipeline — the wire only reads it.
When pacing applies vs no-ops
- Flag off → wire never runs.
- Flag on AND offer has well-formed
pacing.plan.planShape→ multiplier applied,pacingAgg.applied++. - Flag on AND offer is missing
pacingor has malformed shape →pacingAgg.awaitingConfig++. Score is preserved.
What gets logged
Per batch run with the flag on:How the multiplier is computed
sensitivity controls how aggressively pacing reacts. Default 0.5
applies a square-root curve — a 2× under-pace doubles the score, a 4×
under-pace triples it.
Honest limits
- Bucket = current hour of day. V1 hard-codes
currentBuckettonow.getHours(). Operators that need other granularities (e.g., campaign-day or week-of-quarter) cannot configure that yet. - No automatic delivery tracking. The
deliveredarray is read directly fromOffer.pacing.delivered. Operators must update that array themselves; there is no built-in “on impression, increment delivered[currentHour]” hook in the batch pipeline yet. - Per-offer only. Cross-offer / portfolio pacing is not modeled in V1.
Operational checklist
- Pick
flatHourlyPlanfor fixed-rate distribution; pickdaytimeHourlyPlanfor traffic-weighted distribution. - Watch
pacing.appliedper batch run.awaitingConfigshould match exactly the offer count that lacks pacing config — anomalies suggest shape drift. - Tune
sensitivityper channel: high-traffic channels (e.g. push) can tolerate aggressive sensitivity (0.7+); low-traffic (file-delivery) channels prefer conservative (0.3).
Cross-references
arbitration-exp3ix.mdxarbitration-goal-seek.mdxarbitration-lagrangian.mdx