Module: Legion::Extensions::Llm::Gateway::Runners::MeteringWriter

Defined in:
lib/legion/extensions/llm/gateway/runners/metering_writer.rb

Class Method Summary collapse

Class Method Details

.cost_field(payload) ⇒ Object



65
66
67
68
69
70
71
72
# File 'lib/legion/extensions/llm/gateway/runners/metering_writer.rb', line 65

def cost_field(payload)
  cost = payload[:cost_usd] || Helpers::CostEstimator.estimate(
    model_id:      payload[:model_id],
    input_tokens:  payload[:input_tokens].to_i,
    output_tokens: payload[:output_tokens].to_i
  )
  { cost_usd: cost.to_f }
end

.data_connected?Boolean

Returns:

  • (Boolean)


21
22
23
24
25
# File 'lib/legion/extensions/llm/gateway/runners/metering_writer.rb', line 21

def data_connected?
  !!(defined?(Legion::Data) &&
     Legion::Data.respond_to?(:connection) &&
     !Legion::Data.connection.nil?)
end

.identity_fields(payload) ⇒ Object



34
35
36
37
38
39
40
41
42
43
# File 'lib/legion/extensions/llm/gateway/runners/metering_writer.rb', line 34

def identity_fields(payload)
  {
    worker_id:      payload[:worker_id],
    task_id:        payload[:task_id],
    provider:       payload[:provider],
    model_id:       payload[:model_id],
    routing_reason: payload[:routing_reason],
    recorded_at:    payload[:recorded_at] || Time.now.utc
  }
end

.metric_fields(payload) ⇒ Object



54
55
56
57
58
59
60
61
62
63
# File 'lib/legion/extensions/llm/gateway/runners/metering_writer.rb', line 54

def metric_fields(payload)
  {
    input_tokens:    payload[:input_tokens].to_i,
    output_tokens:   payload[:output_tokens].to_i,
    thinking_tokens: payload[:thinking_tokens].to_i,
    total_tokens:    payload[:total_tokens].to_i,
    latency_ms:      payload[:latency_ms].to_i,
    wall_clock_ms:   payload[:wall_clock_ms].to_i
  }
end

.normalize_record(payload) ⇒ Object



27
28
29
30
31
32
# File 'lib/legion/extensions/llm/gateway/runners/metering_writer.rb', line 27

def normalize_record(payload)
  identity_fields(payload)
    .merge(trace_fields(payload))
    .merge(metric_fields(payload))
    .merge(cost_field(payload))
end

.trace_fields(payload) ⇒ Object



45
46
47
48
49
50
51
52
# File 'lib/legion/extensions/llm/gateway/runners/metering_writer.rb', line 45

def trace_fields(payload)
  {
    status:          payload[:status],
    event_type:      payload[:event_type],
    extension:       payload[:extension],
    runner_function: payload[:runner_function]
  }
end

.write_metering_record(payload) ⇒ Object



13
14
15
16
17
18
19
# File 'lib/legion/extensions/llm/gateway/runners/metering_writer.rb', line 13

def write_metering_record(payload)
  return { success: false, error: 'data_not_connected' } unless data_connected?

  record = normalize_record(payload)
  Legion::Data.connection[:metering_records].insert(record)
  { success: true, recorded: record }
end