Skip to main content

nanotok

PyPI version Python License: MIT

A high-performance BPE tokenizer written in C++ with Python bindings. 20-60x faster than tiktoken.

Installation

pip install nanotok

With optional dependencies:

pip install "nanotok[all]"  # includes huggingface-hub and jinja2

Quick Start

from nanotok import Tokenizer

# Load from Hugging Face Hub (requires huggingface-hub)
tokenizer = Tokenizer.from_pretrained("meta-llama/Meta-Llama-3-8B")

# Load from tiktoken encoding
tokenizer = Tokenizer.from_tiktoken("cl100k_base")

# Load from local file
tokenizer = Tokenizer.from_file("path/to/tokenizer.json")

# Encode/decode
ids = tokenizer.encode("Hello, world!")
text = tokenizer.decode(ids)

# Batch processing
batch_ids = tokenizer.encode_batch(["Hello", "World"])
batch_texts = tokenizer.decode_batch(batch_ids)

# HuggingFace-style API
result = tokenizer("Hello, world!", padding=True, return_tensors="pt")
print(result["input_ids"], result["attention_mask"])

# Chat templates (requires jinja2)
messages = [{"role": "user", "content": "Hello!"}]
rendered = tokenizer.apply_chat_template(messages, tokenize=False)

Features

  • Fast: 20-60x faster than tiktoken, written in C++ with SIMD optimizations
  • Compatible: Drop-in replacement for tiktoken and HuggingFace tokenizers
  • Batch processing: Efficient batch encode/decode
  • Chat templates: Support for Jinja2 chat templates
  • Special tokens: Full support for special token handling
  • Cache: Built-in encoding cache for repeated text

API Reference

Tokenizer

Class Methods

  • from_file(path) - Load from tokenizer.json file
  • from_pretrained(repo_id) - Load from Hugging Face Hub
  • from_tiktoken(encoding_name) - Load from tiktoken encoding (gpt2, r50k_base, p50k_base, cl100k_base, o200k_base)

Methods

  • encode(text, allowed_special=None, add_special_tokens=False) - Encode text to token IDs
  • decode(ids, skip_special_tokens=False) - Decode token IDs to text
  • encode_batch(texts, ...) - Batch encode
  • decode_batch(batch_ids, ...) - Batch decode
  • token_to_id(token) - Get ID for token
  • id_to_token(id) - Get token for ID
  • apply_chat_template(messages, tokenize=True, add_generation_prompt=False) - Apply chat template
  • clear_cache() - Clear encoding cache
  • set_cache_enabled(enabled) - Enable/disable cache

Properties

  • vocab_size - Vocabulary size
  • special_tokens - Dict of special tokens
  • eos_token, bos_token, pad_token, unk_token - Special token strings
  • eos_token_id, bos_token_id, pad_token_id, unk_token_id - Special token IDs

Development

# Clone and install with uv
git clone https://github.com/ishaan/nanotok
cd nanotok
uv sync

# Run tests
uv run pytest

# Build wheel
uv build

License

MIT

Metadata

Release files for nanotok 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for nanotok 0.1.0
File Size Uploaded
nanotok-0.1.0.tar.gz 1.2 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for nanotok 0.1.0
File Interpreter ABI Platform
nanotok-0.1.0-cp312-cp312-macosx_15_0_arm64.whl CPython 3.12 CPython 3.12 macOS 15.0+ ARM64 Details

Total release size: 1.4 MB

Release files / nanotok-0.1.0.tar.gz

Download URL nanotok-0.1.0.tar.gz
Size 1.2 MB
Tags Source
SHA-256 checksum
How to use checksums
012588233d1f376811d7b4904c20b235a73aa0e4b9adc71ed2abeebec987be64
BLAKE2b-256 checksum
How to use checksums
58b6f816e4c6d12dd4a306b54a88abdc427a55ef42ef4a213e07c25e42c6b10e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.11

Release files / nanotok-0.1.0-cp312-cp312-macosx_15_0_arm64.whl

Download URL nanotok-0.1.0-cp312-cp312-macosx_15_0_arm64.whl
Size 188.8 kB
Tags CPython 3.12 macOS 15.0+ ARM64
SHA-256 checksum
How to use checksums
c3ee15da1ad81ddd4f7eca7223a736d9559e2dbb2758a822598b328bf5d67378
BLAKE2b-256 checksum
How to use checksums
b07a9279a97441d489c710f5736d1d2aea45662be25f31a30b6676ccb83d9265
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.11

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page