Skip to content

ADR-0004: Native views of a tenant's observability

Status: Accepted Date: 2026-10-12 Deciders: Alex Nodeland

Records decision P4 of lattice RFC-0002, portalr, the portal.

Context

The stack's tools, Langfuse, Tempo, Loki, Prometheus and LiteLLM, are shared by every tenant, and none of their UIs is tenant-scoped. A tenant's admins still need to see what their users thought of the agent, how its evaluations trend, what it costs, and why a run failed. Rebuilding Grafana's dashboards or Langfuse's analysis tools inside portalr would be a large, moving target.

Decision

  • The admin UI shows a tenant its own feedback, evaluations, usage and spend, traces and sessions, and logs, natively, from what portalr's readers return for that tenant.
  • Operators get deep links out into Langfuse and Grafana, for any run, session or tenant. portalr doesn't rebuild those tools' dashboards or analysis.
  • The views use open-source components portalr vendors and owns: AgentPrism for traces, ported to Tailwind 4 and Base UI; Tremor's copied components on Recharts, and uPlot, for charts; and a virtualized list of its own for logs.

Options considered

Option For Against
Native views of a tenant's own data, and deep links for operators (chosen) Tenant admins see their own data without access to shared tools. Operators keep the tools' full power Each native view needs its tool's API, which changes on the tool's schedule
Everything native, dashboards included One UI for everyone Rebuilds Grafana and Langfuse, and never catches up
Links only Least to build Tenant admins can't use the links: none of the tools is tenant-scoped

Consequences

  • Easier: a tenant admin answers "why did this run fail" and "what did this cost" without an operator.
  • Harder: each reader is small and optional, but there are five, and each breaks when its tool's API changes; its card's status shows when it does.
  • Harder: AgentPrism is alpha, and vendoring it means owning its port.