Module: Clacky::Server::ModelPrices

Defined in:
lib/clacky/server/model_prices.rb

Overview

GET /api/model_prices?models=a,b,c Resolves each model's input/output price (USD per 1M tokens) from Clacky::ModelPricing plus a cost ratio vs the baseline model, so the web UI never hardcodes prices - updating PRICING_TABLE is enough.

Constant Summary collapse

BASELINE_MODEL =
"claude-sonnet-5"

Class Method Summary collapse

Class Method Details

.build(models_query, now: Time.now) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/clacky/server/model_prices.rb', line 12

def self.build(models_query, now: Time.now)
  names = (models_query || "").split(",").map(&:strip).reject(&:empty?)

  baseline = Clacky::ModelPricing.get_pricing(BASELINE_MODEL)
  base_total = baseline[:input][:default] + baseline[:output][:default]

  prices = {}
  names.each do |name|
    pricing = Clacky::ModelPricing.get_pricing(name)
    pricing = Clacky::ModelPricing.resolve_deepseek_tier(pricing, now) if pricing && pricing[:deepseek]
    next unless pricing
    pin  = pricing[:input][:default]
    pout = pricing[:output][:default]
    prices[name] = { in: pin, out: pout, ratio: (pin + pout) / base_total }
  end

  {
    baseline: {
      model: BASELINE_MODEL,
      in: baseline[:input][:default],
      out: baseline[:output][:default]
    },
    prices: prices
  }
end