27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
# File 'lib/llm_cost_tracker/report/data.rb', line 27
def self.build(days: DEFAULT_DAYS, now: Time.now.utc, tag_breakdowns: nil, breakdown_limit: nil)
days = days.to_i
days = DEFAULT_DAYS unless days.positive?
unless breakdown_limit.nil?
breakdown_limit = breakdown_limit.to_i
breakdown_limit = nil unless breakdown_limit.positive?
end
from = now - days.days
scope = Ledger::Call.where(tracked_at: from..now)
tag_breakdowns ||= LlmCostTracker.configuration.report_tag_breakdowns || []
new(
days: days,
from_time: from,
to_time: now,
total_cost: scope.sum(:total_cost).to_f,
requests_count: scope.count,
average_latency_ms: average_latency_ms(scope),
unknown_pricing_count: scope.where(total_cost: nil).count,
cost_by_provider: scope.cost_by_provider(limit: breakdown_limit).to_a,
cost_by_model: scope.cost_by_model(limit: breakdown_limit).to_a,
cost_by_tags: cost_by_tags(scope, tag_breakdowns, limit: breakdown_limit),
top_calls: top_calls(scope)
)
end
|