Module: Legion::Extensions::Llm::Gateway::Runners::MeteringWriter
- Defined in:
- lib/legion/extensions/llm/gateway/runners/metering_writer.rb
Class Method Summary collapse
- .cost_field(payload) ⇒ Object
- .data_connected? ⇒ Boolean
- .identity_fields(payload) ⇒ Object
- .metric_fields(payload) ⇒ Object
- .normalize_record(payload) ⇒ Object
- .trace_fields(payload) ⇒ Object
- .write_metering_record(payload) ⇒ Object
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
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 |