Module: Legion::LLM::Metering

Extended by:
Legion::Logging::Helper
Defined in:
lib/legion/llm/metering.rb,
lib/legion/llm/metering/event.rb,
lib/legion/llm/metering/exchange.rb

Defined Under Namespace

Classes: Event

Constant Summary collapse

Exchange =
Legion::LLM::Transport::Exchanges::Metering

Class Method Summary collapse

Class Method Details

.emit(event) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/legion/llm/metering.rb', line 17

def emit(event)
  if transport_connected? && defined?(Legion::LLM::Metering::Event)
    Legion::LLM::Metering::Event.new(**event).publish
    log.info("[llm][metering] published provider=#{event[:provider]} model=#{event[:model_id]}")
    :published
  elsif spool_available?
    spool_event(event)
    log.info("[llm][metering] spooled provider=#{event[:provider]} model=#{event[:model_id]}")
    :spooled
  else
    log.warn("[llm][metering] dropped provider=#{event[:provider]} model=#{event[:model_id]}")
    :dropped
  end
rescue StandardError => e
  handle_exception(e, level: :warn, operation: 'llm.metering.emit')
  :dropped
end

.flush_spoolObject



35
36
37
38
39
40
41
42
43
44
45
# File 'lib/legion/llm/metering.rb', line 35

def flush_spool
  return 0 unless spool_available? && transport_connected?

  spool = Legion::Data::Spool.for(Legion::LLM)
  flushed = spool.flush(:metering) { |event| emit(event) }
  log.info("[llm][metering] spool_flushed count=#{flushed}")
  flushed
rescue StandardError => e
  handle_exception(e, level: :warn, operation: 'llm.metering.flush_spool')
  0
end

.spool_available?Boolean

Returns:

  • (Boolean)


52
53
54
# File 'lib/legion/llm/metering.rb', line 52

def spool_available?
  !!defined?(Legion::Data::Spool)
end

.spool_event(event) ⇒ Object



56
57
58
59
# File 'lib/legion/llm/metering.rb', line 56

def spool_event(event)
  spool = Legion::Data::Spool.for(Legion::LLM)
  spool.write(:metering, event)
end

.transport_connected?Boolean

Returns:

  • (Boolean)


47
48
49
50
# File 'lib/legion/llm/metering.rb', line 47

def transport_connected?
  !!(defined?(Legion::Settings) &&
    Legion::Settings[:transport][:connected] == true)
end