Module: Legion::Extensions::Llm::Ledger::Runners::ProviderStats

Extended by:
ProviderStats
Included in:
ProviderStats
Defined in:
lib/legion/extensions/llm/ledger/runners/provider_stats.rb

Instance Method Summary collapse

Instance Method Details

#circuit_summary(period: 'hour') ⇒ Object



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

def circuit_summary(period: 'hour')
  since = Helpers::Queries.period_start(period)
  ::Legion::Data::DB[:metering_records]
    .where { inserted_at >= since }
    .select(
      :provider, :tier,
      Sequel.function(:COUNT, Sequel.lit('*')).as(:request_count),
      Sequel.function(:AVG, :latency_ms).as(:avg_latency_ms),
      Sequel.function(:SUM, :cost_usd).as(:cost_usd)
    )
    .group(:provider, :tier)
    .order(Sequel.desc(:request_count))
    .all
end

#health_reportObject



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

def health_report
  ds = ::Legion::Data::DB[:metering_records]
       .where { inserted_at >= Time.now.utc - 86_400 }
       .select(
         :provider,
         Sequel.function(:COUNT, Sequel.lit('*')).as(:request_count),
         Sequel.function(:SUM, :total_tokens).as(:total_tokens),
         Sequel.function(:AVG, :latency_ms).as(:avg_latency_ms),
         Sequel.function(:MAX, :latency_ms).as(:max_latency_ms)
       )
       .group(:provider)
       .all

  ds.map { |row| row.merge(status: Helpers::Queries.latency_status(row[:avg_latency_ms])) }
end

#provider_detail(provider:, period: 'day') ⇒ Object



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

def provider_detail(provider:, period: 'day')
  since = Helpers::Queries.period_start(period)
  ::Legion::Data::DB[:metering_records]
    .where(provider: provider)
    .where { inserted_at >= since }
    .select(
      :model_id, :request_type,
      Sequel.function(:COUNT, Sequel.lit('*')).as(:count),
      Sequel.function(:SUM, :total_tokens).as(:total_tokens),
      Sequel.function(:AVG, :latency_ms).as(:avg_latency_ms),
      Sequel.function(:SUM, :cost_usd).as(:cost_usd)
    )
    .group(:model_id, :request_type)
    .order(Sequel.desc(:count))
    .all
end