Class: LlmCostTracker::Ingestion::Inbox

Inherits:
Object
  • Object
show all
Defined in:
lib/llm_cost_tracker/ingestion/inbox.rb

Constant Summary collapse

PAYLOAD_SCHEMA_VERSION =
1

Class Method Summary collapse

Class Method Details

.event_from_row(row) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/llm_cost_tracker/ingestion/inbox.rb', line 21

def event_from_row(row)
  payload = JSON.parse(row.payload)
  schema_version = payload.fetch("schema_version", 0)
  unless [0, PAYLOAD_SCHEMA_VERSION].include?(schema_version)
    raise LlmCostTracker::Error, "unsupported ledger inbox payload schema version #{schema_version.inspect}"
  end

  cost = payload["cost"] && Pricing.stored_cost_attributes(payload["cost"])
  token_usage = payload["token_usage"] || payload

  LlmCostTracker::Event.new(
    event_id: payload.fetch("event_id"),
    provider: payload.fetch("provider"),
    model: payload.fetch("model"),
    token_usage: TokenUsage.from_hash(token_usage),
    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

.save(event) ⇒ Object



15
16
17
18
19
# File 'lib/llm_cost_tracker/ingestion/inbox.rb', line 15

def save(event)
  insert_row(row_for(event))
  Ingestion::Worker.ensure_started
  event
end