Module: Legion::Extensions::Llm::Gateway::Helpers::UsageQueries
- Defined in:
- lib/legion/extensions/llm/gateway/helpers/usage_queries.rb
Class Method Summary collapse
- .aggregate_by_column(dataset, column, limit) ⇒ Object
- .aggregate_totals(dataset) ⇒ Object
- .append_aggregates(query) ⇒ Object
- .day_start(time) ⇒ Object
- .format_grouped_row(row, column, name_key: false) ⇒ Object
- .grouped_query(dataset, column) ⇒ Object
- .grouped_rows(dataset, column) ⇒ Object
- .metering_records ⇒ Object
- .metering_since(since) ⇒ Object
- .period_start(period) ⇒ Object
Class Method Details
.aggregate_by_column(dataset, column, limit) ⇒ Object
34 35 36 37 38 |
# File 'lib/legion/extensions/llm/gateway/helpers/usage_queries.rb', line 34 def aggregate_by_column(dataset, column, limit) grouped_query(dataset, column).limit(limit).all.map do |row| format_grouped_row(row, column) end end |
.aggregate_totals(dataset) ⇒ Object
19 20 21 22 23 24 25 26 |
# File 'lib/legion/extensions/llm/gateway/helpers/usage_queries.rb', line 19 def aggregate_totals(dataset) { total_requests: dataset.count, total_cost_usd: dataset.sum(:cost_usd).to_f.round(4), total_input: dataset.sum(:input_tokens).to_i, total_output: dataset.sum(:output_tokens).to_i } end |
.append_aggregates(query) ⇒ Object
45 46 47 48 49 |
# File 'lib/legion/extensions/llm/gateway/helpers/usage_queries.rb', line 45 def append_aggregates(query) query.select_append { sum(cost_usd).as(total_cost) } .select_append { sum(input_tokens).as(total_input) } .select_append { sum(output_tokens).as(total_output) } end |
.day_start(time) ⇒ Object
72 73 74 |
# File 'lib/legion/extensions/llm/gateway/helpers/usage_queries.rb', line 72 def day_start(time) Time.utc(time.year, time.month, time.day) end |
.format_grouped_row(row, column, name_key: false) ⇒ Object
51 52 53 54 55 56 57 58 59 60 |
# File 'lib/legion/extensions/llm/gateway/helpers/usage_queries.rb', line 51 def format_grouped_row(row, column, name_key: false) key = name_key ? :name : column { key => row[column], total_cost: row[:total_cost].to_f.round(4), total_input: row[:total_input].to_i, total_output: row[:total_output].to_i, requests: row[:count].to_i } end |
.grouped_query(dataset, column) ⇒ Object
40 41 42 43 |
# File 'lib/legion/extensions/llm/gateway/helpers/usage_queries.rb', line 40 def grouped_query(dataset, column) base = dataset.exclude(column => nil).group_and_count(column) append_aggregates(base).order(::Sequel.desc(:total_cost)) end |
.grouped_rows(dataset, column) ⇒ Object
28 29 30 31 32 |
# File 'lib/legion/extensions/llm/gateway/helpers/usage_queries.rb', line 28 def grouped_rows(dataset, column) grouped_query(dataset, column).limit(20).all.map do |row| format_grouped_row(row, column, name_key: true) end end |
.metering_records ⇒ Object
11 12 13 |
# File 'lib/legion/extensions/llm/gateway/helpers/usage_queries.rb', line 11 def metering_records Legion::Data.connection[:metering_records] end |
.metering_since(since) ⇒ Object
15 16 17 |
# File 'lib/legion/extensions/llm/gateway/helpers/usage_queries.rb', line 15 def metering_since(since) metering_records.where { recorded_at >= since } end |
.period_start(period) ⇒ Object
62 63 64 65 66 67 68 69 70 |
# File 'lib/legion/extensions/llm/gateway/helpers/usage_queries.rb', line 62 def period_start(period) now = Time.now.utc case period.to_sym when :hour then now - 3600 when :week then day_start(now) - ((now.wday % 7) * 86_400) when :month then Time.utc(now.year, now.month, 1) else day_start(now) end end |