Module: LlmCostTracker::Providers::Anthropic::UsageExtractor
- Defined in:
- lib/llm_cost_tracker/providers/anthropic/usage_extractor.rb
Class Method Summary collapse
- .cache_writes(usage) ⇒ Object
- .pricing_mode(request:, usage:) ⇒ Object
- .service_line_items(usage) ⇒ Object
- .token_usage(usage) ⇒ Object
- .warn_unexpected_cache_creation(cache_creation, usage) ⇒ Object
Class Method Details
.cache_writes(usage) ⇒ Object
57 58 59 60 61 62 63 64 65 |
# File 'lib/llm_cost_tracker/providers/anthropic/usage_extractor.rb', line 57 def self.cache_writes(usage) cache_creation = usage[:cache_creation] if cache_creation.is_a?(Hash) [cache_creation[:ephemeral_5m_input_tokens].to_i, cache_creation[:ephemeral_1h_input_tokens].to_i] else warn_unexpected_cache_creation(cache_creation, usage) [usage[:cache_creation_input_tokens].to_i, 0] end end |
.pricing_mode(request:, usage:) ⇒ Object
29 30 31 32 33 34 35 36 37 |
# File 'lib/llm_cost_tracker/providers/anthropic/usage_extractor.rb', line 29 def self.pricing_mode(request:, usage:) speed = request&.dig(:speed) service_tier = usage&.dig(:service_tier) || request&.dig(:service_tier) geo = (usage&.dig(:inference_geo) || request&.dig(:inference_geo)).to_s.downcase modes = [Pricing::Mode.normalize(speed), Pricing::Mode.normalize(service_tier)] modes << "data_residency" if DATA_RESIDENCY_GEOS.include?(geo) Pricing::Mode.compose(modes) end |
.service_line_items(usage) ⇒ Object
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/llm_cost_tracker/providers/anthropic/usage_extractor.rb', line 39 def self.service_line_items(usage) server_tool_use = usage[:server_tool_use] return [] unless server_tool_use.is_a?(Hash) SERVER_TOOL_LINE_ITEMS.filter_map do |dimension_key, count_key| quantity = server_tool_use[count_key].to_i next if quantity.zero? Charges::LineItem.build( dimension_key: dimension_key, quantity: quantity, cost_status: Charges::CostStatus::UNKNOWN, pricing_basis: "provider_usage", provider_field: "usage.server_tool_use.#{count_key}" ) end end |
.token_usage(usage) ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/llm_cost_tracker/providers/anthropic/usage_extractor.rb', line 14 def self.token_usage(usage) input = usage[:input_tokens].to_i output = usage[:output_tokens].to_i cache_read = usage[:cache_read_input_tokens].to_i cache_write, cache_write_extended = cache_writes(usage) Usage::TokenUsage.build( input_tokens: input, output_tokens: output, cache_read_input_tokens: cache_read, cache_write_input_tokens: cache_write, cache_write_extended_input_tokens: cache_write_extended ) end |
.warn_unexpected_cache_creation(cache_creation, usage) ⇒ Object
67 68 69 70 71 72 |
# File 'lib/llm_cost_tracker/providers/anthropic/usage_extractor.rb', line 67 def self.warn_unexpected_cache_creation(cache_creation, usage) return if cache_creation.nil? return if usage.key?(:cache_creation_input_tokens) Logging.warn("Anthropic usage.cache_creation has unexpected shape: #{cache_creation.class}") end |