Module: Legion::Extensions::Llm::Ledger::Runners::UsageReporter

Extended by:
UsageReporter
Included in:
UsageReporter
Defined in:
lib/legion/extensions/llm/ledger/runners/usage_reporter.rb

Instance Method Summary collapse

Instance Method Details

#budget_check(budget_id:, budget_usd:, threshold: 0.8, period: 'month') ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/legion/extensions/llm/ledger/runners/usage_reporter.rb', line 42

def budget_check(budget_id:, budget_usd:, threshold: 0.8, period: 'month')
  dataset = official_metrics.where(metric[:budget_key] => budget_id)
  dataset = apply_time_window(dataset, nil, nil, period)
  spent = dataset.sum(metric[:cost_usd]).to_f

  {
    budget_id:         budget_id,
    budget_usd:        budget_usd.to_f,
    spent_usd:         spent,
    remaining_usd:     [budget_usd.to_f - spent, 0.0].max,
    exceeded:          spent > budget_usd.to_f,
    threshold_reached: spent >= (budget_usd.to_f * threshold.to_f)
  }
end

#summary(since: nil, until_: nil, period: nil, group_by: nil) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/legion/extensions/llm/ledger/runners/usage_reporter.rb', line 11

def summary(since: nil, until_: nil, period: nil, group_by: nil)
  dataset = official_metrics
  dataset = apply_time_window(dataset, since, until_, period)
  if group_by
    column = group_column(group_by)
    dataset = dataset.select_group(column.as(group_by.to_sym))
  end
  dataset.select_append(
    Sequel.function(:SUM, metric[:input_tokens]).as(:total_input_tokens),
    Sequel.function(:SUM, metric[:output_tokens]).as(:total_output_tokens),
    Sequel.function(:SUM, metric[:total_tokens]).as(:grand_total_tokens),
    Sequel.function(:SUM, metric[:cost_usd]).as(:total_cost_usd),
    Sequel.function(:AVG, metric[:latency_ms]).as(:avg_latency_ms),
    Sequel.function(:COUNT, Sequel.lit('*')).as(:request_count)
  ).all
end

#top_consumers(limit: 10, group_by: 'provider_instance', since: nil, until_: nil, period: 'day') ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/legion/extensions/llm/ledger/runners/usage_reporter.rb', line 57

def top_consumers(limit: 10, group_by: 'provider_instance', since: nil, until_: nil, period: 'day')
  col = group_column(group_by)
  dataset = official_metrics
  dataset = apply_time_window(dataset, since, until_, period)
  dataset.select(
    col.as(group_by.to_sym),
    Sequel.function(:SUM, metric[:total_tokens]).as(:total_tokens),
    Sequel.function(:SUM, metric[:cost_usd]).as(:cost_usd),
    Sequel.function(:COUNT, Sequel.lit('*')).as(:request_count)
  ).group(col)
         .order(Sequel.desc(:cost_usd))
         .limit(limit)
         .all
end

#worker_usage(worker_id:, since: nil, until_: nil, period: nil) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/legion/extensions/llm/ledger/runners/usage_reporter.rb', line 28

def worker_usage(worker_id:, since: nil, until_: nil, period: nil)
  dataset = official_metrics.where(response[:provider_instance] => worker_id)
  dataset = apply_time_window(dataset, since, until_, period)
  dataset.select(
    metric[:provider],
    response[:provider_instance],
    metric[:model_key].as(:model_id),
    request[:operation],
    Sequel.function(:SUM, metric[:total_tokens]).as(:total_tokens),
    Sequel.function(:SUM, metric[:cost_usd]).as(:cost_usd),
    Sequel.function(:COUNT, Sequel.lit('*')).as(:count)
  ).group(metric[:provider], response[:provider_instance], metric[:model_key], request[:operation]).all
end