Pricing + release metadata and cost estimation for LLMs
Project description
llm-price
Pricing + release metadata and cost estimation for LLMs (OpenAI + Google Gemini).
Features
- Model metadata with release dates
- Static pricing in USD per 1M tokens
- Cost estimation from token counts or raw text
- Any currency output (real-time FX from exchangerate.host, cached)
- CLI for listing models and summing JSONL usage
Install
pip install llm-price
Quickstart (Python)
from decimal import Decimal
from llm_price import cost_from_text, cost_from_tokens, get_fx_rate, list_models
models = list_models("openai")
print(models[0])
cost = cost_from_text(
"openai",
"gpt-4o-mini",
prompt="Summarize this text.",
completion="Here is a summary...",
)
print(cost.total_cost)
cost_in_inr = cost_from_tokens(
"google",
"gemini-1.5-flash",
prompt_tokens=120,
completion_tokens=40,
currency="INR",
fx_rate=Decimal("83.12"),
)
print(cost_in_inr.total_cost)
live_fx = get_fx_rate("USD", "INR")
print("Live USD→INR:", live_fx)
CLI
llm-price models --provider openai
llm-price cost \
--provider openai \
--model gpt-4o-mini \
--prompt "Hello" \
--completion "Hi" \
--currency USD
llm-price cost \
--provider google \
--model gemini-1.5-flash \
--prompt-tokens 100 \
--completion-tokens 20 \
--currency INR \
--fx-rate "83.12"
JSONL Summation
llm-price sum usage.jsonl supports lines with:
Token counts
{"provider":"openai","model":"gpt-4o-mini","prompt_tokens":1200,"completion_tokens":400}
Raw text (tokenized internally)
{"provider":"openai","model":"gpt-4o-mini","prompt":"Hello","completion":"Hi"}
Pre-computed totals
{"total_cost":{"amount":"0.0123","currency":"USD"}}
Example Scripts
Run these from the repo root after installing dependencies:
python examples/basic_cost.py
python examples/inr_conversion.py
python examples/sum_jsonl.py
Notes
- Pricing data is stored in
src/llm_price/data/models.jsonin USD per 1M tokens. - OpenAI pricing is refreshed daily from https://bes-dev.github.io/openai-pricing-api/pricing.json via a GitHub Actions workflow.
- OpenAI entries also store
cached_input_per_1mwhen available. - For non-USD output, FX defaults to a real-time rate from exchangerate.host.
- You can override it with
fx_rateto use a fixed rate. - Rates are cached in-process for 1 hour by default.
- Gemini token counting uses the official CountTokens API when
GOOGLE_API_KEYis set; otherwise it falls back to an approximation.
Development
pip install -e ".[dev]"
pytest
Release (PyPI)
This project uses GitHub Actions trusted publishing. Create a tag like v0.1.0
and push it to GitHub to trigger the publish workflow:
git tag v0.1.0
git push origin v0.1.0
Configure the PyPI Trusted Publisher with:
- PyPI Project Name:
llm-price - Owner:
VA24d - Repository name:
API-price - Workflow name:
publish.yml - Environment name:
pypi
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file llm_price-0.1.3.tar.gz.
File metadata
- Download URL: llm_price-0.1.3.tar.gz
- Upload date:
- Size: 9.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b5e9a04447f160d7d90e27c08e0b2923da23aff7600741cf76750cba6a1bd5b2
|
|
| MD5 |
974c04602ccbc81eef3d8c9bf91b2102
|
|
| BLAKE2b-256 |
582f9f2e8b9f944624ea33a2ef3320567a25ab55e1f4ab03d839241160c5daed
|
Provenance
The following attestation bundles were made for llm_price-0.1.3.tar.gz:
Publisher:
publish.yml on VA24d/API-price
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
llm_price-0.1.3.tar.gz -
Subject digest:
b5e9a04447f160d7d90e27c08e0b2923da23aff7600741cf76750cba6a1bd5b2 - Sigstore transparency entry: 929770223
- Sigstore integration time:
-
Permalink:
VA24d/API-price@f69a528260401c0fd6921c5585bef4ef245d35f9 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/VA24d
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f69a528260401c0fd6921c5585bef4ef245d35f9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file llm_price-0.1.3-py3-none-any.whl.
File metadata
- Download URL: llm_price-0.1.3-py3-none-any.whl
- Upload date:
- Size: 9.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a154dee16f164791eb9bf3a30d9c4dfdd4eee8ebeb0f2c93d4eefc95901fb5af
|
|
| MD5 |
aeb8fbb0e752bb62c54b12d5697194d3
|
|
| BLAKE2b-256 |
7aead074e1c5d406c0e54e3000bf5872946b9b7493ba4dd621af062aab58b2cf
|
Provenance
The following attestation bundles were made for llm_price-0.1.3-py3-none-any.whl:
Publisher:
publish.yml on VA24d/API-price
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
llm_price-0.1.3-py3-none-any.whl -
Subject digest:
a154dee16f164791eb9bf3a30d9c4dfdd4eee8ebeb0f2c93d4eefc95901fb5af - Sigstore transparency entry: 929770227
- Sigstore integration time:
-
Permalink:
VA24d/API-price@f69a528260401c0fd6921c5585bef4ef245d35f9 -
Branch / Tag:
refs/tags/v0.1.3 - Owner: https://github.com/VA24d
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@f69a528260401c0fd6921c5585bef4ef245d35f9 -
Trigger Event:
push
-
Statement type: