Class: LlmCostTracker::Dashboard::TopModels

Inherits:
Object
  • Object
show all
Defined in:
app/services/llm_cost_tracker/dashboard/top_models.rb

Constant Summary collapse

DEFAULT_LIMIT =
5
SORT_OPTIONS =
%w[cost calls avg_cost latency].freeze
DEFAULT_SORT =
"cost"

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(scope:, limit:, sort: DEFAULT_SORT) ⇒ TopModels

Returns a new instance of TopModels.



16
17
18
19
20
# File 'app/services/llm_cost_tracker/dashboard/top_models.rb', line 16

def initialize(scope:, limit:, sort: DEFAULT_SORT)
  @scope = scope
  @limit = limit
  @sort = SORT_OPTIONS.include?(sort.to_s) ? sort.to_s : DEFAULT_SORT
end

Class Method Details

.call(scope: LlmCostTracker::Ledger::Call.all, limit: DEFAULT_LIMIT, sort: DEFAULT_SORT) ⇒ Object



11
12
13
# File 'app/services/llm_cost_tracker/dashboard/top_models.rb', line 11

def call(scope: LlmCostTracker::Ledger::Call.all, limit: DEFAULT_LIMIT, sort: DEFAULT_SORT)
  new(scope: scope, limit: limit, sort: sort).rows
end

Instance Method Details

#rowsObject



22
23
24
25
26
27
28
# File 'app/services/llm_cost_tracker/dashboard/top_models.rb', line 22

def rows
  scope
    .group(:provider, :model)
    .select(selects)
    .order(Arel.sql(order_sql))
    .then { |r| limit ? r.limit(limit) : r }
end