How these figures are produced
Every exchange handled by the assistant route increments counters: the language, the outcome among five — answered, handed to a human, invited to create an account, degraded mode, technical failure — and the latency bucket. Nothing else leaves for the database. No event is stored, only one row per day and per language, made of integers.
Latency is not kept measurement by measurement: it is filed into one of twelve buckets, and the median is reconstructed from that histogram. It is therefore accurate to the bucket, and when it falls into the last one, which is open-ended, it is announced as a floor rather than a value.
An exchange counts as handed over to a human when the reply ends with a link to the contact page. That is a mechanical criterion, readable in the code, not a judgement made after the fact.
Cost relies on the token counts the provider declares in its own stream, multiplied by the rate we pay. If the provider declares nothing, or if the rate is not configured, the tile stays empty rather than receive an estimate.
What this page does not measure
No personal data enters these counters, and not merely in the sense that we would not publish it: in the sense that there never is any. No IP address, no session identifier, no measurement cookie, not one sentence of what was written or answered. The table feeding this page holds no events at all — one row per day and per language, made of integers. There is therefore nothing to re-identify, and nothing to delete on request, since nothing in it points to anyone.