Skip to content

Dashboard by User

Path: /admin/reports/ai-metering (menu title "AI Usage by User"; permission view ai metering dashboard).

  • Optional system-wide limits panel at the top when ai_usage_limits is installed: a read-only banner of provider-level ceilings shared across all users.
  • A month/year filter scopes everything below it to a single calendar month.
  • KPI header: total AI calls (split cloud/local), total tokens, cloud cost for the month, and (when every user shares the same budget) the default tokens/month figure.
  • A top-active chart (top users by usage this month), hidden automatically when there are no rows for the selected month so it never duplicates the table's own empty-state message.
  • The table itself (one row per user; the column header currently reads "Editor" — see the note below): providers used, calls, tokens in/out, cost, a quota-used progress bar with an inline "EXCEEDED"/"HIGH" badge, an inline HTMX-powered budget editor, an inline HTMX-powered alert-threshold override, and a details dropbutton ("View calls" into the filtered usage log, "Personal view" into that user's own usage tab).
  • Sorting is SQL-backed and paginated: click "Sort by" links for Editor, Calls, Cost, or Quota % (default sort is total tokens), each with a stable secondary sort by user ID so ties do not reshuffle between page loads. This replaced an earlier client-side-only sort that reordered whichever page happened to be visible.
  • A single export dropbutton (CSV / JSON) in the table header, matching the pattern used on Dashboard by Role and the usage log.
  • A "View usage by role" shortcut link to Dashboard by Role.
  • A team-total row in the table footer.

Known copy inconsistency (1.0.0): the page title, hub link, and menu entry all say "User", but the table's own column header and its "Sort by" link still read "Editor". Both refer to the same thing; a follow-up release will align the wording.