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
- #budget_check(budget_id:, budget_usd:, threshold: 0.8, period: 'month') ⇒ Object
- #summary(since: nil, until_: nil, period: nil, group_by: nil) ⇒ Object
- #top_consumers(limit: 10, group_by: 'provider_instance', since: nil, until_: nil, period: 'day') ⇒ Object
- #worker_usage(worker_id:, since: nil, until_: nil, period: nil) ⇒ Object
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 |