feat(cost-model): add GPT, Gemini, Grok prices
This commit is contained in:
@@ -244,3 +244,39 @@ def test_model_is_within_an_order_of_magnitude_of_the_measurement():
|
||||
predicted = cm.tier_usage(modelled, FACTORY, caching=False).total_input
|
||||
measured = run["input"]
|
||||
assert 0.4 < predicted / measured < 2.5, (predicted, measured)
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# PRICES — the multi-provider table (GPT / Gemini / Grok)
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
NEW_KEYS = ("gpt-5", "gpt-5-mini", "gemini-2.5-pro",
|
||||
"gemini-2.5-flash", "grok-4.5", "grok-4.3")
|
||||
|
||||
|
||||
def test_prices_contains_new_providers():
|
||||
for k in NEW_KEYS:
|
||||
assert k in cm.PRICES, k
|
||||
|
||||
|
||||
def test_cost_matches_published_gpt5():
|
||||
# $1.25 in / $10.00 out / cached $0.125; cache_write = input
|
||||
u = cm.Usage(uncached_input=1_000_000, cached_input=1_000_000,
|
||||
cache_writes=1_000_000, output=1_000_000)
|
||||
assert abs(cm.cost(u, cm.PRICES["gpt-5"]) - (1.25 + 0.125 + 1.25 + 10.00)) < 1e-9
|
||||
|
||||
|
||||
def test_cost_matches_published_gemini_flash():
|
||||
# $0.30 in / $2.50 out / cached $0.03; cache_write = input
|
||||
u = cm.Usage(uncached_input=2_000_000, cached_input=0,
|
||||
cache_writes=0, output=500_000)
|
||||
expected = 2.00 * 0.30 + 0.50 * 2.50 # $0.60 + $1.25
|
||||
assert abs(cm.cost(u, cm.PRICES["gemini-2.5-flash"]) - expected) < 1e-9
|
||||
|
||||
|
||||
def test_cost_matches_published_grok45():
|
||||
# $2.00 in / $6.00 out / cached $0.30; cache_write = input
|
||||
u = cm.Usage(uncached_input=1_000_000, cached_input=1_000_000,
|
||||
cache_writes=1_000_000, output=1_000_000)
|
||||
assert abs(cm.cost(u, cm.PRICES["grok-4.5"]) - (2.00 + 0.30 + 2.00 + 6.00)) < 1e-9
|
||||
|
||||
Reference in New Issue
Block a user