Instant, accurate USD cost estimates for OpenAI & Azure OpenAI API calls. Works with Chat Completions and the Responses API, streaming or not. Offers a typed Decimal-based API for finance-safe math and a legacy string API for drop-ins.
Docs: https://orkunkinay.github.io/openai_cost_calculator/
pip install openai-cost-calculatorImport name uses underscores:
import openai_cost_calculator
Typed (recommended)
from openai import OpenAI
from openai_cost_calculator import estimate_cost_typed
client = OpenAI()
resp = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "Hi there!"}],
)
cost = estimate_cost_typed(resp) # -> CostBreakdown (Decimal fields)
print(cost.total_cost) # Decimal('0.00000750')
print(cost.as_dict(stringify=True)) # 8-dp strings if you preferLegacy (string output)
from openai_cost_calculator import estimate_cost
print(estimate_cost(resp)) # dict of 8-dp stringsResponses API
resp = client.responses.create(model="gpt-4.1-mini", input=[{"role":"user","content":"Hi"}])
from openai_cost_calculator import estimate_cost_typed
print(estimate_cost_typed(resp))Streaming
stream = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role":"user","content":"Hi"}],
stream=True,
stream_options={"include_usage": True},
)
from openai_cost_calculator import estimate_cost_typed
print(estimate_cost_typed(stream))- Typed API:
CostBreakdowndataclass withDecimalprecision - Drop-in legacy API: 8-decimal strings (backward compatible)
- Handles edge cases: cached tokens, undated model strings, streaming generators, Azure deployment names
- Pricing sources: Remote CSV (24h cache) + local overrides and offline mode
from openai_cost_calculator import (
refresh_pricing, set_offline_mode,
add_pricing_entry, add_pricing_entries, clear_local_pricing
)
# Force refresh (bypasses 24h cache)
refresh_pricing()
# Run fully offline (no network calls)
set_offline_mode(True)
# Teach custom prices (per 1M tokens)
add_pricing_entry(
"ollama/qwen3:30b", "2025-08-01",
input_price=0.20, output_price=0.60, cached_input_price=0.04
)Remote CSV (auto-fetched, cached 24h):
https://raw.githubusercontent.com/orkunkinay/openai_cost_calculator/refs/heads/main/data/gpt_pricing_data.csv
Recoverable issues raise CostEstimateError with a clear message (missing pricing row, unexpected input shape, etc.).
- “Pricing not found” → confirm row exists in the CSV; call
refresh_pricing(). cached_tokens = 0→ ensureinclude_usage_details=True(classic) orstream_options={"include_usage": True}(streaming).- Model string has no date → the latest row with
date ≤ todayis used.
- Docs & examples: https://orkunkinay.github.io/openai_cost_calculator/
- Source: https://github.com/orkunkinay/openai_cost_calculator
- Issues: https://github.com/orkunkinay/openai_cost_calculator/issues
MIT © 2025 Orkun Kınay & Murat Barkın Kınay