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
47
48
49
50
51
52
|
# File 'lib/llm_cost_tracker/tracker.rb', line 16
def record(provider:, model:, input_tokens:, output_tokens:, latency_ms: nil, stream: false,
usage_source: nil, provider_response_id: nil, metadata: {})
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 = Event.new(
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)).freeze,
latency_ms: normalized_latency_ms(latency_ms),
stream: stream ? true : false,
usage_source: normalized_usage_source(usage_source),
provider_response_id: normalized_provider_response_id(provider_response_id),
tracked_at: Time.now.utc
)
ActiveSupport::Notifications.instrument(EVENT_NAME, event.to_h)
stored = store(event)
Budget.check!(event) unless stored == false
event
end
|