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 ruby_llm manual unknown].freeze
- TRACKING_METADATA_KEYS =
(TokenUsage.members.map(&:to_s) + %w[pricing_mode provider_response_id]).freeze
Class Method Summary collapse
- .enforce_budget! ⇒ Object
- .record(capture:, latency_ms: nil, pricing_mode: nil, metadata: {}) ⇒ Object
Class Method Details
.enforce_budget! ⇒ Object
18 19 20 21 22 |
# File 'lib/llm_cost_tracker/tracker.rb', line 18 def enforce_budget! return unless LlmCostTracker.configuration.enabled Budget.enforce! end |
.record(capture:, latency_ms: nil, pricing_mode: nil, metadata: {}) ⇒ Object
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 |
# File 'lib/llm_cost_tracker/tracker.rb', line 24 def record(capture:, latency_ms: nil, pricing_mode: nil, metadata: {}) return unless LlmCostTracker.configuration.enabled pricing_mode = Pricing.normalize_mode(pricing_mode) || capture.pricing_mode cost_data = Pricing.cost_for( provider: capture.provider, model: capture.model, token_usage: capture.token_usage, pricing_mode: pricing_mode ) Pricing::Unknown.handle!(capture.model) unless cost_data event = build_event( capture: capture, pricing_mode: pricing_mode, cost_data: cost_data, metadata: , latency_ms: latency_ms ) ActiveSupport::Notifications.instrument(EVENT_NAME, event.to_h) Ingestion::Inbox.save(event) Budget.check!(event) event end |