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