Skip to main content

Python bindings wrapping the bpe-openai Rust tokenizer crate with a tiktoken-compatible API.

Project description

bpe-openai

CI Release Wheels

bpe-openai is a tiktoken-compatible tokenizer API backed by the Rust bpe-openai crate. Pathlit maintains the Python wrapper, while the core tokenizer implementation is developed by GitHub and published in the rust-gems project. Published wheels bundle the tokenizer data, so the package works out of the box on Python 3.9 and newer.

Installation

pip install bpe-openai

Installing from a source distribution requires a Rust toolchain:

pip install --no-binary bpe-openai bpe-openai==<version>

Quick start

import bpe_openai as bpe

enc = bpe.get_encoding("cl100k_base")
tokens = enc.encode("Smoke tests keep releases honest.")
print(tokens)
print(enc.decode(tokens))

# Model-aware helper
chat_enc = bpe.encoding_for_model("gpt-4o")

Compatibility snapshot

API / Feature Status Notes
get_encoding, encoding_for_model Supports cl100k_base, o200k_base, voyage3_base, and related models
Encoding.encode, Encoding.decode Rust backend ensures parity with tiktoken
Encoding.encode_batch Matches tiktoken's batching behaviour
Custom special tokens ⚠️ Not yet configurable at runtime
Legacy GPT-2 / r50k / p50k encodings ⚠️ Planned; current focus is on modern OpenAI models
Metrics hook (set_metrics_hook) Emits model, token count, latency, backend version

Legend: ✅ fully supported · ⚠️ partial / planned

Why we built it

Long, repetitive prompts can hit pathological slow paths in tiktoken. To stress-test both libraries we encoded inputs of the form "A" * n and measured latency. bpe-openai stays effectively flat while tiktoken grows sharply with input length, unlocking workloads like prompt templating and log chunking that stalled with the reference implementation.

Encoding time vs. input length

Smoke test

After installing from PyPI, run a quick confidence check:

python - <<'PY'
import bpe_openai as bpe
enc = bpe.get_encoding("cl100k_base")
text = "Smoke tests keep releases honest."
tokens = enc.encode(text)
assert enc.decode(tokens) == text
print("✅ bpe-openai smoke test passed.")
PY

Repository layout

  • python/ – Python package wrapping the Rust tokenizer as a CPython extension.
  • rust/ – Rust crate that loads tokenizer specs and exposes the fast BPE APIs.
  • scripts/ – Helper utilities for benchmarking, parity checks, and data sync.
  • vendor/ – Vendored tokenizer definitions sourced from GitHub's upstream release.

Development

python -m venv .venv
source .venv/bin/activate
python scripts/sync_tokenizer_data.py  # ensures tokenizer assets are copied
pip install maturin
cd python
maturin develop --release
pytest

The repository includes scripts/sync_tokenizer_data.py to copy the vendored .tiktoken.gz files into python/bpe_openai/data/ before building wheels or an sdist.

Release process (maintainers)

  1. Update the version string in python/pyproject.toml. The runtime fallback reads the same file, so one change keeps packaging metadata and bpe_openai.__version__ in sync.
  2. Run python scripts/sync_tokenizer_data.py to refresh bundled assets.
  3. Commit the changes and tag the release (git tag vX.Y.Z).
  4. Push the tag. The Release Wheels GitHub Actions workflow builds wheels, publishes a GitHub release, and uploads to PyPI via Trusted Publishing.

Contributing

Contributions are warmly welcomed—whether you are filing a bug, improving parity with new OpenAI models, or squeezing out more performance. Open an issue or pull request and the Pathlit team will review quickly.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bpe_openai-0.1.1.tar.gz (7.5 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

bpe_openai-0.1.1-cp39-abi3-win_amd64.whl (41.4 MB view details)

Uploaded CPython 3.9+Windows x86-64

bpe_openai-0.1.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (41.6 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ x86-64

bpe_openai-0.1.1-cp39-abi3-macosx_11_0_arm64.whl (42.0 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

File details

Details for the file bpe_openai-0.1.1.tar.gz.

File metadata

  • Download URL: bpe_openai-0.1.1.tar.gz
  • Upload date:
  • Size: 7.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for bpe_openai-0.1.1.tar.gz
Algorithm Hash digest
SHA256 c497ceb33978e34815a4d039c9af7821be118b510b6a3703ef4f4c772ad9676f
MD5 c02922137968b2f5c34a177a72c5b499
BLAKE2b-256 b37d1398d9c3cc72a8985240aac398adc81bec0e45e306b079825e141d596809

See more details on using hashes here.

Provenance

The following attestation bundles were made for bpe_openai-0.1.1.tar.gz:

Publisher: release-wheels.yml on Pathlit-Inc/bpe-openai

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file bpe_openai-0.1.1-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: bpe_openai-0.1.1-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 41.4 MB
  • Tags: CPython 3.9+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for bpe_openai-0.1.1-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 f169cf4eece2c37d9fba4f36973439136e9da0f43f609f908287a1511188c0c6
MD5 ff7acc90ecc89b576500eeb6737a7a95
BLAKE2b-256 af26a5329aed3688b1e65a19c531a5c6461fec215baf89f9f995391984b0b72c

See more details on using hashes here.

Provenance

The following attestation bundles were made for bpe_openai-0.1.1-cp39-abi3-win_amd64.whl:

Publisher: release-wheels.yml on Pathlit-Inc/bpe-openai

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file bpe_openai-0.1.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for bpe_openai-0.1.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5d4ce4473a237f158fa11f7a880d537e40ce8eeb8154c623fcac33f7673a5e11
MD5 b9367abcbb17d7342ce4acf179ad6744
BLAKE2b-256 8a30fbefa7494397e05f2c723c93db83839ad642ad693640febe3b425a0741e3

See more details on using hashes here.

Provenance

The following attestation bundles were made for bpe_openai-0.1.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release-wheels.yml on Pathlit-Inc/bpe-openai

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file bpe_openai-0.1.1-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for bpe_openai-0.1.1-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e22ed39b03fb673c3a43ed2de5f0dcc8fa6353b295b179fe1a9b6e36b0aeb7a5
MD5 f3ea2a10e0be90c8bc9d1dcb3adfd476
BLAKE2b-256 1eac5a4fc2262db054f744183cb1339ef409cc582149baca78d88345c2a591bc

See more details on using hashes here.

Provenance

The following attestation bundles were made for bpe_openai-0.1.1-cp39-abi3-macosx_11_0_arm64.whl:

Publisher: release-wheels.yml on Pathlit-Inc/bpe-openai

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page