mirror of
https://github.com/discourse/discourse-rewind.git
synced 2025-12-11 02:05:32 +00:00
PERF: Migrate AI usage report to use AiApiRequestStat for better perf (#31)
Changes the AiUsage report to query AiApiRequestStat instead of AiApiAuditLog for significantly improved query performance.
This commit is contained in:
parent
bdbac80063
commit
f4560c2292
@ -2,21 +2,22 @@
|
||||
|
||||
# AI usage statistics from discourse-ai plugin
|
||||
# Shows total usage, favorite features, token consumption, etc.
|
||||
# Uses AiApiRequestStat for efficient aggregation queries
|
||||
module DiscourseRewind
|
||||
module Action
|
||||
class AiUsage < BaseReport
|
||||
def call
|
||||
return if !enabled?
|
||||
|
||||
base_query = AiApiAuditLog.where(user_id: user.id).where(created_at: date)
|
||||
base_query = AiApiRequestStat.where(user_id: user.id).where(bucket_date: date)
|
||||
|
||||
# Get aggregated stats in a single query
|
||||
stats =
|
||||
base_query.select(
|
||||
"COUNT(*) as total_requests",
|
||||
"COALESCE(SUM(usage_count), 0) as total_requests",
|
||||
"COALESCE(SUM(request_tokens), 0) as total_request_tokens",
|
||||
"COALESCE(SUM(response_tokens), 0) as total_response_tokens",
|
||||
"COUNT(CASE WHEN response_tokens > 0 THEN 1 END) as successful_requests",
|
||||
"COALESCE(SUM(CASE WHEN response_tokens > 0 THEN usage_count ELSE 0 END), 0) as successful_requests",
|
||||
).take
|
||||
|
||||
return if stats.total_requests == 0
|
||||
@ -35,9 +36,9 @@ module DiscourseRewind
|
||||
feature_usage =
|
||||
base_query
|
||||
.group(:feature_name)
|
||||
.order("COUNT(*) DESC")
|
||||
.order("SUM(usage_count) DESC")
|
||||
.limit(5)
|
||||
.pluck(:feature_name, Arel.sql("COUNT(*)"))
|
||||
.pluck(:feature_name, Arel.sql("SUM(usage_count)"))
|
||||
.to_h
|
||||
|
||||
# Most used AI model (top 5)
|
||||
@ -45,9 +46,9 @@ module DiscourseRewind
|
||||
base_query
|
||||
.where.not(language_model: nil)
|
||||
.group(:language_model)
|
||||
.order("COUNT(*) DESC")
|
||||
.order("SUM(usage_count) DESC")
|
||||
.limit(5)
|
||||
.pluck(:language_model, Arel.sql("COUNT(*)"))
|
||||
.pluck(:language_model, Arel.sql("SUM(usage_count)"))
|
||||
.to_h
|
||||
|
||||
{
|
||||
@ -65,7 +66,7 @@ module DiscourseRewind
|
||||
end
|
||||
|
||||
def enabled?
|
||||
defined?(AiApiAuditLog) && SiteSetting.discourse_ai_enabled
|
||||
defined?(AiApiRequestStat) && SiteSetting.discourse_ai_enabled
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user