12
13
14
15
16
17
18
19
20
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
46
|
# File 'lib/llm_cost_tracker/tracker.rb', line 12
def record(provider:, model:, input_tokens:, output_tokens:, metadata: {}, latency_ms: nil)
usage = EventMetadata.usage_data(input_tokens, output_tokens, metadata)
cost_data = Pricing.cost_for(
model: model,
input_tokens: usage[:input_tokens],
output_tokens: usage[:output_tokens],
cached_input_tokens: usage[:cached_input_tokens],
cache_read_input_tokens: usage[:cache_read_input_tokens],
cache_creation_input_tokens: usage[:cache_creation_input_tokens]
)
UnknownPricing.handle!(model) unless cost_data
event = {
provider: provider,
model: model,
input_tokens: usage[:input_tokens],
output_tokens: usage[:output_tokens],
total_tokens: usage[:total_tokens],
cost: cost_data,
tags: LlmCostTracker.configuration.default_tags.merge(EventMetadata.tags(metadata)),
latency_ms: normalized_latency_ms(latency_ms),
tracked_at: Time.now.utc
}
ActiveSupport::Notifications.instrument(EVENT_NAME, event)
stored = store(event)
Budget.check!(event) unless stored == false
event
end
|