WITH parseDateTimeBestEffort('{{filter.timeLimit.start}}') AS start_time, parseDateTimeBestEffort('{{filter.timeLimit.end}}') AS end_time, dateDiff('day', start_time, end_time) AS days_diff, dateDiff('year', start_time, end_time) AS years_diff, multiIf( years_diff >= 1, 'month', days_diff <= 1, 'hour', 'day' ) AS date_granularity SELECT CAST(SUM(toInt64OrZero(SpanAttributes['gen_ai.usage.input_tokens'])) AS INTEGER) AS prompt_tokens, CAST(SUM(toInt64OrZero(SpanAttributes['gen_ai.usage.output_tokens'])) AS INTEGER) AS completion_tokens, formatDateTime(DATE_TRUNC(date_granularity, Timestamp), '%Y/%m/%d %R') AS request_time FROM otel_traces WHERE SpanAttributes['gen_ai.operation.name'] != 'vectordb' AND StatusCode IN ('STATUS_CODE_OK', 'STATUS_CODE_UNSET', 'Ok', 'Unset') AND Timestamp >= start_time AND Timestamp <= end_time GROUP BY request_time ORDER BY request_time;