Skip to main content
Once you have ratings flowing, two AI surfaces summarise them:
  1. Standard insights (/ai-insights) — narrative + structured action items per evaluation or comparison.
  2. Agreement insights (/agreement-insights) — narrative explaining why raters agreed or disagreed, dimension by dimension.
Both are generated by Gemini, cached on the row, and stale-detected by rating count.

Standard insights

If the row is stale (i.e. the evaluation has new ratings since generation), the response includes stale: true. Regenerate:
Per-comparison insights:

Agreement insights

A separate row keyed on insightType: "agreement". Where standard insights ask “what did raters say?”, agreement insights ask “where did raters disagree, and why?”.
The narrative is calibrated to the Krippendorff α score:

Costs

Each insight regeneration is a single Gemini completion (~0.0010.001–0.005 depending on rating count). Negligible. Doesn’t count against autouser quota; counts against the per-user platform Gemini quota only when on the platform key (User.geminiApiKey BYOK callers don’t count).

Caching

We don’t auto-regenerate. The cache is invalidated only when you POST to the /ai-insights route. This keeps the cost predictable and prevents accidental cost cascades when a flurry of ratings comes in. A typical pattern in CI:

Limitations

  • The model has access only to the rating data, not the actual designs. If you want it to reason about visual fidelity, post screenshots as files and reference them from customDimensions[].context.
  • Insights do not include dimensional scores you didn’t actually collect. If you want it to reason about Accessibility, include an Accessibility dimension on the template.
  • Output is in English regardless of Autousers-Locale (currently no i18n on this surface — on the roadmap).