Class: LlmCostTracker::Storage::ActiveRecordInbox
- Inherits:
-
Object
- Object
- LlmCostTracker::Storage::ActiveRecordInbox
- Defined in:
- lib/llm_cost_tracker/storage/active_record_inbox.rb
Constant Summary collapse
- TABLE_NAME =
"llm_cost_tracker_inbox_events"- LEASE_TABLE_NAME =
"llm_cost_tracker_ingestor_leases"- MAX_ATTEMPTS =
5
Class Method Summary collapse
- .enabled? ⇒ Boolean
- .event_from_row(row) ⇒ Object
- .pending_period_totals(periods, time:) ⇒ Object
- .reset! ⇒ Object
- .save(event) ⇒ Object
Class Method Details
.enabled? ⇒ Boolean
23 24 25 26 27 28 29 30 31 32 |
# File 'lib/llm_cost_tracker/storage/active_record_inbox.rb', line 23 def enabled? return @enabled unless @enabled.nil? model = LlmCostTracker::LlmApiCall @enabled = model.columns_hash.key?("event_id") && model.connection.data_source_exists?(TABLE_NAME) && model.connection.data_source_exists?(LEASE_TABLE_NAME) rescue StandardError @enabled = false end |
.event_from_row(row) ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/llm_cost_tracker/storage/active_record_inbox.rb', line 48 def event_from_row(row) payload = JSON.parse(row.payload) cost = payload["cost"] && LlmCostTracker::Cost.new(**symbolize_keys(payload["cost"])) LlmCostTracker::Event.new( event_id: payload.fetch("event_id"), provider: payload.fetch("provider"), model: payload.fetch("model"), input_tokens: payload.fetch("input_tokens"), output_tokens: payload.fetch("output_tokens"), total_tokens: payload.fetch("total_tokens"), cache_read_input_tokens: payload.fetch("cache_read_input_tokens"), cache_write_input_tokens: payload.fetch("cache_write_input_tokens"), hidden_output_tokens: payload.fetch("hidden_output_tokens"), pricing_mode: payload["pricing_mode"], cost: cost, tags: payload.fetch("tags"), latency_ms: payload["latency_ms"], stream: payload.fetch("stream"), usage_source: payload["usage_source"], provider_response_id: payload["provider_response_id"], tracked_at: Time.iso8601(payload.fetch("tracked_at")) ) end |
.pending_period_totals(periods, time:) ⇒ Object
40 41 42 43 44 45 46 |
# File 'lib/llm_cost_tracker/storage/active_record_inbox.rb', line 40 def pending_period_totals(periods, time:) return periods.to_h { |period| [period, 0.0] } unless enabled? periods.to_h do |period| [period, pending_period_total(period, time)] end end |
.reset! ⇒ Object
19 20 21 |
# File 'lib/llm_cost_tracker/storage/active_record_inbox.rb', line 19 def reset! remove_instance_variable(:@enabled) if instance_variable_defined?(:@enabled) end |
.save(event) ⇒ Object
34 35 36 37 38 |
# File 'lib/llm_cost_tracker/storage/active_record_inbox.rb', line 34 def save(event) insert_row(row_for(event)) ActiveRecordIngestor.ensure_started event end |