genai_pricing
Core package badges:
Quality and tooling:
Project/community:
Docs:
Estimate GenAI prompt costs from a unified, auto-updated pricing table. This repo provides a small usage-based cost estimator plus parsers for LiteLLM JSON and markdown pricing tables.
- Parses a local LiteLLM pricing snapshot when present, otherwise falls back to
genai_pricing.PRICING_URL - Computes costs from prompt, completion, cache-creation, and cache-read token usage
- Includes internal helpers for OpenAI/Gemini-style usage extraction and fallback token counting
Installation
- Python 3.8+
- Packages:
- tiktoken
pip install tiktoken
Quick start
The included example shows how to estimate cost from an args-like object and token usage dictionary using genai_pricing.estimate_costs. See example.py.
# Minimal example
import os
from openai import OpenAI
from types import SimpleNamespace
from genai_pricing import estimate_costs
"""Estimate the cost of an OpenAI prompt using genai_pricing."""
api_key = os.environ.get("OPENAI_API_KEY")
client = OpenAI(api_key=api_key)
model = "gpt-5.6-sol"
prompt = "Why is the sky blue?"
resp = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": prompt}],
max_completion_tokens=50,
)
answer = resp.choices[0].message.content
usage = {
"prompt_tokens": resp.usage.prompt_tokens,
"completion_tokens": resp.usage.completion_tokens,
"cache_read_input_tokens": resp.usage.prompt_tokens_details.cached_tokens,
}
args = SimpleNamespace(model=model)
estimate = estimate_costs(args, usage) # <- use this line in your project
print("Cost (USD):", estimate["total_cost"])
Run the example:
python example.py
How cost is computed
Prices are looked up by model name in the pricing table, then applied to token counts. prompt_tokens is the provider-reported total input count; cache creation and cache read counts are subsets charged in place of regular input:
$$ C = \frac{(t_\text{in} - t_\text{create} - t_\text{read})p_\text{in} + t_\text{create}p_\text{create} + t_\text{read}p_\text{read} + t_\text{out}p_\text{out}}{10^6} $$
- $t_\text{in}$: prompt tokens
- $t_\text{create}$:
cache_creation_input_tokens, when reported - $t_\text{read}$:
cache_read_input_tokens, when reported - $t_\text{out}$: completion tokens
- $p$: the corresponding USD price per 1M tokens
The result includes prompt_cost, cache_creation_cost, cache_read_cost, and completion_cost when applicable, plus total_cost. If a model has no cache-specific rate, cached tokens fall back to its regular input rate.
Provide token counts from your model provider when available. Internal helpers can extract OpenAI- and Gemini-style usage metadata and fall back to tiktoken or a lightweight heuristic when needed.
Pricing table
By default, prices are resolved in this order:
model_prices_and_context_window_backup.jsonin the current working directorymodel_prices_and_context_window_backup.jsonnear the package/repository locationgenai_pricing.PRICING_URL, the remote LiteLLM JSON source
The parsed pricing table is cached. Call clear_pricing_cache() after changing the local snapshot or when you want the remote source fetched again.
Testing
The project uses Python’s built-in unittest.
- Run all tests (discovery):
python -m unittest discover -s test -p "*_test.py" -v
API surface
genai_pricing.estimate_costs- Computes a dict with prompt/completion costs and
total_costfrom an object with a.modelattribute and a usage dictionary
- Computes a dict with prompt/completion costs and
genai_pricing.clear_pricing_cache- Clears cached pricing data so the configured source is fetched or read again
Key constant:
genai_pricing.PRICING_URL— remote table to fetch by default
License
MIT © 2025 Roberto Rossi
Metadata
Release files for genai-pricing 1.0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| genai_pricing-1.0.2.tar.gz | 9.3 kB | Without provenance | Details for genai_pricing-1.0.2.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| genai_pricing-1.0.2-py3-none-any.whl | Python 3 | none | any | Details for genai_pricing-1.0.2-py3-none-any.whl |
Total release size: 18.3 kB
Release files / genai_pricing-1.0.2.tar.gz
| Download URL | genai_pricing-1.0.2.tar.gz |
|---|---|
| Size | 9.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2c4ffb8298b85379bb27786448a6f532a12bab057926000a56c915299934f110
|
|
BLAKE2b-256 checksum How to use checksums |
077afb9400b25eb93ff03c524b1b9ee5b2a198d31aea70d148470c19a056c976
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.12
|
Release files / genai_pricing-1.0.2-py3-none-any.whl
| Download URL | genai_pricing-1.0.2-py3-none-any.whl |
|---|---|
| Size | 9.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f96b50bd6366b3f7d7ca159b6fa18e8a3c6fa0a7cd7b9704fdcf47e813c65fa0
|
|
BLAKE2b-256 checksum How to use checksums |
f82af136cf8716c5592836ca72a505776abcfbd8047e1043458d32415ec6daeb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.12
|
Security for genai-pricing 1.0.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.