Module: LlmCostTracker::Pricing

Defined in:
lib/llm_cost_tracker/pricing.rb

Overview

Prices per 1M tokens in USD. Updated: April 2026. Override via configuration.

Constant Summary collapse

PRICES =
{
  # OpenAI
  "gpt-4o"             => { input: 2.50,  output: 10.00 },
  "gpt-4o-mini"        => { input: 0.15,  output: 0.60 },
  "gpt-4-turbo"        => { input: 10.00, output: 30.00 },
  "gpt-4"              => { input: 30.00, output: 60.00 },
  "gpt-3.5-turbo"      => { input: 0.50,  output: 1.50 },
  "o1"                 => { input: 15.00, output: 60.00 },
  "o1-mini"            => { input: 3.00,  output: 12.00 },
  "o3-mini"            => { input: 1.10,  output: 4.40 },

  # Anthropic
  "claude-sonnet-4-6"  => { input: 3.00,  output: 15.00 },
  "claude-opus-4-6"    => { input: 15.00, output: 75.00 },
  "claude-haiku-4-5"   => { input: 0.80,  output: 4.00 },
  "claude-3-5-sonnet-20241022" => { input: 3.00,  output: 15.00 },
  "claude-3-5-haiku-20241022"  => { input: 0.80,  output: 4.00 },
  "claude-3-opus-20240229"     => { input: 15.00, output: 75.00 },

  # Google Gemini
  "gemini-2.5-pro"     => { input: 1.25,  output: 10.00 },
  "gemini-2.5-flash"   => { input: 0.15,  output: 0.60 },
  "gemini-2.0-flash"   => { input: 0.10,  output: 0.40 },
  "gemini-1.5-pro"     => { input: 1.25,  output: 5.00 },
  "gemini-1.5-flash"   => { input: 0.075, output: 0.30 },
}.freeze

Class Method Summary collapse

Class Method Details

.cost_for(model:, input_tokens:, output_tokens:) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/llm_cost_tracker/pricing.rb', line 35

def cost_for(model:, input_tokens:, output_tokens:)
  prices = lookup(model)
  return nil unless prices

  input_cost  = (input_tokens.to_f / 1_000_000) * prices[:input]
  output_cost = (output_tokens.to_f / 1_000_000) * prices[:output]

  {
    input_cost: input_cost.round(8),
    output_cost: output_cost.round(8),
    total_cost: (input_cost + output_cost).round(8),
    currency: "USD"
  }
end

.lookup(model) ⇒ Object



50
51
52
53
# File 'lib/llm_cost_tracker/pricing.rb', line 50

def lookup(model)
  overrides = LlmCostTracker.configuration.pricing_overrides
  overrides[model] || PRICES[model] || fuzzy_match(model)
end

.modelsObject



55
56
57
# File 'lib/llm_cost_tracker/pricing.rb', line 55

def models
  PRICES.keys | LlmCostTracker.configuration.pricing_overrides.keys
end