A unified Python library for counting tokens across multiple LLM providers.
Project description
Tokemon
A unified Python library for counting tokens across multiple LLM providers. Tokemon provides a simple, consistent interface to count tokens for OpenAI, Anthropic, Google AI, and xAI models.
Features
- Unified API for token counting across multiple providers
- Support for both synchronous and asynchronous operations
- Dynamic model discovery via provider APIs
- Type-safe responses with dataclass
Installation
pip install tokemon
Quick Start
from tokemon import tokemon, ProviderName, Mode
# Create a tokenizer for your preferred provider
tokenizer = tokemon(
model="gpt-4o",
provider=ProviderName.OPENAI.value,
mode=Mode.SYNC,
)
# Count tokens
response = tokenizer.count_tokens("Hello, world!")
print(response.input_tokens) # Number of tokens
print(response.model) # Model name
print(response.provider) # Provider name
Usage by Provider
OpenAI
OpenAI tokenization uses tiktoken and works offline without an API key.
from tokemon import tokemon, ProviderName, Mode
tokenizer = tokemon(
model="gpt-4o",
provider=ProviderName.OPENAI.value,
mode=Mode.SYNC,
)
response = tokenizer.count_tokens("Hello, world!")
print(f"Token count: {response.input_tokens}")
Anthropic
Note: Set the
ANTHROPIC_API_KEYenvironment variable before using the Anthropic provider.
export ANTHROPIC_API_KEY="your-api-key"
from tokemon import tokemon, ProviderName, Mode
tokenizer = tokemon(
model="claude-sonnet-4-5",
provider=ProviderName.ANTHROPIC.value,
mode=Mode.SYNC,
)
response = tokenizer.count_tokens("Hello, world!")
print(f"Token count: {response.input_tokens}")
Async example:
import asyncio
from tokemon import tokemon, ProviderName, Mode
async def main():
tokenizer = tokemon(
model="claude-sonnet-4-5",
provider=ProviderName.ANTHROPIC.value,
mode=Mode.ASYNC,
)
response = await tokenizer.count_tokens("Hello, world!")
print(f"Token count: {response.input_tokens}")
asyncio.run(main())
Google AI (Gemini)
Note: Set the
GEMINI_API_KEYenvironment variable before using the Google AI provider.
export GEMINI_API_KEY="your-api-key"
from tokemon import tokemon, ProviderName, Mode
tokenizer = tokemon(
model="gemini-2.5-flash",
provider=ProviderName.GOOGLE.value,
mode=Mode.SYNC,
)
response = tokenizer.count_tokens("Hello, world!")
print(f"Token count: {response.input_tokens}")
Async example:
import asyncio
from tokemon import tokemon, ProviderName, Mode
async def main():
tokenizer = tokemon(
model="gemini-2.5-flash",
provider=ProviderName.GOOGLE.value,
mode=Mode.ASYNC,
)
response = await tokenizer.count_tokens("Hello, world!")
print(f"Token count: {response.input_tokens}")
asyncio.run(main())
xAI (Grok)
Note: Set the
XAI_API_KEYenvironment variable before using the xAI provider.
export XAI_API_KEY="your-api-key"
from tokemon import tokemon, ProviderName, Mode
tokenizer = tokemon(
model="grok-3",
provider=ProviderName.XAI.value,
mode=Mode.SYNC,
)
response = tokenizer.count_tokens("Hello, world!")
print(f"Token count: {response.input_tokens}")
Async example:
import asyncio
from tokemon import tokemon, ProviderName, Mode
async def main():
tokenizer = tokemon(
model="grok-3",
provider=ProviderName.XAI.value,
mode=Mode.ASYNC,
)
response = await tokenizer.count_tokens("Hello, world!")
print(f"Token count: {response.input_tokens}")
asyncio.run(main())
Listing Available Models
Use tokemon_models() to discover models supported by each provider at runtime:
from tokemon import tokemon_models, ProviderName, Mode
# Get a provider instance
provider = tokemon_models(
provider=ProviderName.OPENAI.value,
mode=Mode.SYNC,
)
# List available models
models = provider.models()
print(models)
Async example:
import asyncio
from tokemon import tokemon_models, ProviderName, Mode
async def main():
provider = tokemon_models(
provider=ProviderName.ANTHROPIC.value,
mode=Mode.ASYNC,
)
models = await provider.models()
print(models)
asyncio.run(main())
Response Object
The count_tokens method returns a TokenizerResponse dataclass:
@dataclass
class TokenizerResponse:
input_tokens: int | None # Number of tokens in the input
model: str # Model name used for tokenization
provider: str # Provider name (openai, anthropic, google, xai)
Requirements
- Python >= 3.10
License
MIT License
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 tokemon-0.1.1.tar.gz.
File metadata
- Download URL: tokemon-0.1.1.tar.gz
- Upload date:
- Size: 10.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9fb9a602f1c3291b46770a1799a2f3985972b822e4a62dbc0a1b85483c51aea0
|
|
| MD5 |
ddd3dd6b6561fd0696089a8942a77f79
|
|
| BLAKE2b-256 |
655962fbb234dfee8ea9224fa2122f600f074510fec56ad31f7fc0f5ea07403d
|
File details
Details for the file tokemon-0.1.1-py3-none-any.whl.
File metadata
- Download URL: tokemon-0.1.1-py3-none-any.whl
- Upload date:
- Size: 9.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aa246f3ff7cdd4b7e9750a0cdba5de9fdd2f939602b236398657d19d9f89771b
|
|
| MD5 |
1a0b7f9d6cee9313855cbd76a436471c
|
|
| BLAKE2b-256 |
a22b428d2a471d293278840de7fd6bf3a2152d1cde21ee2f952d8f4c8f8e722e
|