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
|