Class: LlmCostTracker::Tracker
- Inherits:
-
Object
- Object
- LlmCostTracker::Tracker
- Defined in:
- lib/llm_cost_tracker/tracker.rb
Constant Summary collapse
- EVENT_NAME =
"llm_request.llm_cost_tracker"- USAGE_SOURCES =
%i[response stream_final sdk_response manual unknown].freeze
Class Method Summary collapse
- .enforce_budget! ⇒ Object
- .record(provider:, model:, input_tokens:, output_tokens:, latency_ms: nil, stream: false, usage_source: nil, provider_response_id: nil, pricing_mode: nil, metadata: {}) ⇒ Object
Class Method Details
.enforce_budget! ⇒ Object
12 13 14 15 16 |
# File 'lib/llm_cost_tracker/tracker.rb', line 12 def enforce_budget! return unless LlmCostTracker.configuration.enabled Budget.enforce! end |
.record(provider:, model:, input_tokens:, output_tokens:, latency_ms: nil, stream: false, usage_source: nil, provider_response_id: nil, pricing_mode: nil, metadata: {}) ⇒ Object
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 18 def record(provider:, model:, input_tokens:, output_tokens:, latency_ms: nil, stream: false, usage_source: nil, provider_response_id: nil, pricing_mode: nil, metadata: {}) return unless LlmCostTracker.configuration.enabled model = normalize_model(model) usage = usage_data(input_tokens, output_tokens, , pricing_mode) cost_data = cost_for_usage(provider, model, usage) UnknownPricing.handle!(model) unless cost_data event = build_event( provider: provider, model: model, usage: usage, cost_data: cost_data, metadata: , latency_ms: latency_ms, stream: stream, usage_source: usage_source, provider_response_id: provider_response_id ) ActiveSupport::Notifications.instrument(EVENT_NAME, event.to_h) stored = store(event) Budget.check!(event) unless stored == false event end |