Skip to main content
KaireonAI ships with a suite of monitoring dashboards, each designed for a different audience and set of questions. Together they give you real-time visibility into every layer of the platform — from infrastructure health to business outcomes to model drift. All dashboards auto-refresh every 30 seconds. This page covers the five operational dashboards below; the Executive dashboard is documented on its own page. Navigate to Dashboards in the sidebar to access them.

Operations Dashboard

Path: /dashboards/operations The Operations Dashboard is the primary system-health view for platform engineers. It answers: Is the decisioning engine running fast and correctly?

Performance KPI Cards

Four cards across the top row:

Latency Visualizations

Acceptance Rate by Offer

Bar chart plus detail table showing per-offer acceptance rates from the interaction_summaries table:

Budget Utilization

Progress bars for offers with budget allocations. Color-coded:

Decision Pipeline Panel

Reads persisted DecisionTrace aggregates via GET /api/v1/dashboards/decision-pipeline. The window is driven by the page’s period selector and capped at 168 hours (7 days); the panel header shows the effective window (“last 7d”, “last 24h”, etc.) derived from the API response’s windowHours field — so it is always truthful. Query param: windowHours (1–168, default 24). The period selector now correctly refetches the panel on change. When traceCount === 0 the panel shows an empty state. The empty state note mentions decisionTraceSampleRate (configurable under Settings → Tenant) in case tracing is turned down or off. The panel loads via a direct fetch that respects the page’s period selector (periodDays → windowHours = min(periodDays × 24, 168)); auto-refreshes every 30 seconds alongside the rest of the dashboard.

Dead Letter Queue (DLQ) Panel

Shows topic breakdown (e.g., decision.outcome, pipeline.error) with Retry All and Purge action buttons.

Circuit Breaker Panel

Displays state change history for each breaker (e.g., enrichment-redis, connector-snowflake). Color-coded badges: red for open, amber for half_open, green for closed.

Investigating a Drop in Acceptance Rate

Suppose you notice offer_summer_promo dropped from 12% to 3% acceptance overnight. Here is how to investigate:
  1. Check the Decision Pipeline panel. If “After Qualification” is normal but “After Contact Policy” drops sharply, a new frequency cap is filtering aggressively.
  2. Open a Decision Trace. The trace shows candidates at each stage. If the offer is present at Qualification but absent after Contact Policy, expand the contact policy section to see which rule suppressed it.
  3. Check the Filter Rate bars. Contact Policy filter rate above 80% (red) means most candidates are being suppressed — likely a misconfigured policy.
If DLQ depth rises while acceptance rates drop, check whether the outcome recording pipeline is failing. Missing outcomes make acceptance rate calculations unreliable.

Business Dashboard

Path: /dashboards/business The Business Dashboard answers: How are my offers performing? Designed for analysts and marketers who need to track conversion rates, channel effectiveness, and revenue.

Summary Cards

Offer Funnel

Four-stage funnel showing conversion from configuration to delivery readiness:
  1. Total Offers — all offers in the tenant
  2. Active — offers with status = "active"
  3. With Creatives — active offers that have at least one active creative
  4. Active Creatives — total count of active creatives
If you have 20 active offers but only 5 have creatives, 15 offers cannot be delivered. The funnel makes this gap immediately visible.

Charts

Offer Performance Detail Table

High impressions but zero conversions? Check if the creative is compelling and the channel matches the audience. Conversions but zero revenue? Verify that Respond API calls include a value field.

Data Health Dashboard

Path: /dashboards/data-health Monitors the ingestion layer — connectors, pipelines, and schemas.

Summary Cards

Connectors Table

A connector showing error usually means the last connection test failed. Navigate to Data > Connectors, select it, and run Test Connection for the specific error. Common causes: expired credentials, changed IP allowlists, network policy changes.

Model Health Dashboard

Path: /dashboards/model-health Tracks scoring model status, accuracy trends, and experiment activity. Designed for data scientists monitoring model performance.

Summary Cards

Charts

Models Table

A sudden AUC drop (more than 5 points in a week) suggests feature drift. Check the Feature Importance chart for ranking changes, then consider retraining with recent data.

Analysis panels

Four additional analysis panels sit below the main cards:

Uplift

Source: GET /api/v1/treatments/uplift?windowDays=N Per-creative observational uplift cards. Window selector: 7 / 30 / 90 days; auto-refetches on change. Renders a bar chart of uplift value per creative and a table with sample counts, p-value, and 95% confidence interval (unpooled Wald standard error). A samplesBelowMinimum badge flags creatives without enough data for reliable inference.

CATE Explorer

Source: GET /api/v1/algorithm-models/[id]/uplift?customerId=...&method=... Submit-driven panel for per-customer Conditional Average Treatment Effect (τ). Pick a model, enter a customerId, select a method (t_learner or x_learner), and submit. Renders an offers table with τ values, color-coded segment badges (persuadable / sure_thing / lost_cause / sleeping_dog / uncertain), and an overall ATE summary line.

Fairness

Source: POST /api/v1/fairness/evaluate with { mode: "inline", samples: [...] } Inline-mode fairness evaluation. Paste a JSON array of { group: string, prediction: boolean, label?: boolean } decision samples and submit. Renders per-group stats (count, positive rate, TPR/FPR when labels are present), key metric cards (demographic parity gap, disparate impact ratio, four-fifths badge), and a warnings list.
There is no persisted fairness history table. The fairness-recheck cron writes outcomes to AuditLog entries but does not store structured FairnessEvaluation rows. The panel is therefore form-driven and stateless — it evaluates samples you provide inline. To see historical gate outcomes, query GET /api/v1/audit-logs?action=fairness_evaluate.

Drift Check

Source: POST /api/v1/models/[id]/drift Interactive drift analysis. Select a model, paste JSON for reference and current feature distributions ({ featureName: number[] }), and submit. Renders a per-feature PSI and KS table with severity badges (none / monitor / alert) and an overall verdict.

Attribution Dashboard

Path: /dashboards/attribution Multi-touch attribution analysis comparing how different models distribute credit across channels. Helps answer: Which channels actually drive conversions, and how should I allocate budget?

Attribution Models

Five models are selectable. Two additional models appear as disabled Coming Soon entries in the picker — they are rendered but not selectable and the API enum is unchanged.

Summary KPIs

Channel Contribution Chart

Horizontal bar chart showing each channel’s percentage contribution to total credit, with raw credit values.

Conversions Per Channel Table

Compare the same data across attribution models. If a channel ranks number 1 under Last Touch but number 4 under First Touch, it is strong at closing but weak at introducing — useful for budget allocation decisions.

Prometheus Metrics

KaireonAI exposes a Prometheus-compatible scrape endpoint at /api/metrics (requires admin role).

Scrape Configuration

Key Metrics

Decision Engine HTTP & API Pipelines & Connectors Infrastructure Experiments & Models AI Intelligence Compliance The /api/v1/metrics/summary endpoint returns a curated subset of these metrics as JSON. This is what the Operations Dashboard uses internally — it does NOT include every metric on this page; the full scrape feed lives at /api/metrics. For the full operator-grade reference of the seven post-W10 metrics — including registered file-line, alert guidance, and PromQL expressions — see Metrics Reference.

Segment Dimension

Six of the Business and Operations dashboard queries accept an optional segmentId query parameter to scope their aggregation to customers in a specific segment. When provided, the underlying SQL joins the segment’s materialized view (seg_<id_prefix>) onto the interaction tables by customerId.

Behavior when a segment is not ready

Segments are materialized to PostgreSQL views asynchronously. If a segment exists but its view has not been built (for example a draft segment), the endpoint returns {"data": [], "warning": "segment view not materialized"} — dashboards can render an informational banner instead of an error. An unknown segmentId returns {"data": [], "warning": "unknown segmentId"} under the same pattern.

Example

See the Dashboard Data API reference for complete parameter and response definitions.

Export and Save as Report

Every dashboard in the platform ships with two header-bar buttons that turn the current view into a report artefact:
Export works unconditionally — no cron wiring required. Clicking Export renders the artifact server-side and streams the file back to the browser immediately.Save as Report also creates the template + schedule immediately, but the resulting saved schedule only fires on cadence once /api/cron/tick is being invoked by an external scheduler. During pilot / initial deployment this is usually not wired. Use the Run Now button on the saved template in /settings/reports for on-demand delivery until you follow EventBridge Setup (optional).

Export

Dropdown with PDF / CSV / Markdown / HTML options. Clicking a format:
  1. Builds a transient report template from the dashboard’s current filters (date range, segment, etc.) via the view-to-template.ts bridge.
  2. POSTs the transient template to /api/v1/reports/preview — no database row is created.
  3. Receives a base64-encoded artifact and triggers a browser download via Blob + URL.createObjectURL.
CSV exports skip LLM narration to keep latency low; PDF / Markdown / HTML include a narrated executive summary when an AI provider is configured.

Save as Scheduled Report

Opens a modal pre-filled from the current view. Pick:
  • Name (required; defaults to {Dashboard label} · {days}d).
  • Formats (multi-select; default PDF).
  • Narrative toggle.
  • Schedule (preset: Daily 8am / Weekly Mon 8am / Monthly 1st 8am / Custom cron).
  • Destinations (multi-select of configured notification providers — Slack, Teams, webhook, Ops-email).
Submitting creates a report template and a report schedule. When the cron is wired (AWS EventBridge → /api/cron/tick), the schedule runs on cadence and delivers artefacts to every destination. Until then, trigger delivery from /settings/reports using Run Now, or invoke the run-now endpoint at /api/v1/reports/templates/[id]/run-now directly. View the persisted template at /settings/reports.

Which data sources are sent?

Each dashboard declares its source list in the dashboards-to-report-template bridge: Every source is tenant-scoped — the API enforces tenant context and filters every database query by tenant.

Executive Dashboard

C-suite summary with narrated weekly highlights and KPI deltas.

Reports

Templates, schedules, formats, and delivery — the engine behind Save-as-Report.

Decision Traces

Forensic tracing for debugging qualification and ranking.

Metrics Reference

Operator-grade reference for the post-W10 metrics with PromQL alert expressions.

Algorithms & Models

Understand the scoring models tracked by Model Health.