Skip to main content

TOKENFOLD

Send less noise. Fit more context. Pay for fewer input tokens.

Up to 92% fewer input tokens · lossless by default · exact receipts

CLI · Python · TypeScript · Rust · proxy · MCP · local-first · provider-neutral

CI Coverage GitHub Release PyPI npm Rust License

Measured results · Platform · Quick start · Lossy pruning · Select model · Reproduce


Measured results

Compression

Search / RAG results Repetitive JSON API responses Tool schemas
91.7% fewer tokens 67.6% fewer tokens 61.3% fewer tokens 45.6% fewer tokens
84,032 → 6,951 50-record payload 30-record payload 1.8 MB OpenAI fixture
opt-in, recoverable lossless lossless lossless

All four use exact o200k_base counts in balanced mode. The 91.7% showcase keeps the planted 503 result inline and makes the other 98 long rows retrievable by hash. Run it with python examples/lossy_pruning.py.

Fine-tuned relevance ranking

Tokenfold Select is the optional query-aware model for choosing what fills a tight context window after structural compression ends.

Token budget kept Tokenfold Select task success BM25 reference Lift
50% 86.3% 79.4% +8.7%
25% 70.3% 60.7% +15.8%
10% 39.9% 37.7% +5.8%

At a 25% budget, the fine-tuned ranker keeps the answer 70% of the time and beats the strongest free heuristic by 15.8%. Critical-content survival is 100% at every measured budget through allocator force-keep. Results are three-seed repeated subsampling over roughly 73,000 training and 24,000 held-out fixtures per run; the model card publishes the training recipe and full baseline set. Here, task success means the literal gold answer survived selection under the stated budget.

One platform, two engines

Capability What you get
Tokenfold Core Fast deterministic compression for JSON, schemas, provider requests, logs, diffs, and command output
Recoverable pruning Drop low-signal JSON rows only after storing them locally; fetch any omission with tokenfold retrieve
Tokenfold Select LoRA-fine-tuned, query-aware span ranking with up to 15.8% lift over BM25 at the same budget
Budget control Conservative, balanced, and aggressive modes; nine task scopes; --target-tokens with honest best-effort reporting
Exact receipts Before/after token counts, applied transforms, warnings, provenance, and final status on every call
Realized savings gain, stats, and session report measured savings; learn proposes policy improvements without silently applying them
Every integration CLI, Python, TypeScript, Rust, HTTP proxy, and MCP share the same Core engine and report shape
Local-first safety Secret redaction, protected-content gates, reversible structural transforms, and no hosted data processor

Lossless or recoverable lossy

Lossless — default Recoverable lossy — opt-in
What it does Minifies, folds repeated keys into columns, and stores repeated values once Adds deterministic ranking and retrieval markers for selected array rows
Best on Uniform records, schemas, logs, diffs Search results, mixed event feeds, agent traces, long arrays
Measured here 45.6–67.6% fewer tokens 39.3–91.7% fewer tokens
Recovery All data remains in the payload Every emitted marker resolves through the local retrieval store

Quick start

Install the surface that fits your stack:

pip install tokenfold       # Python 3.9+
npm install tokenfold       # Node.js 22+
cargo add tokenfold-core    # Rust library
cargo install tokenfold-cli # Rust CLI

Or download a signed CLI build for Linux, macOS, or Windows from GitHub Releases and verify it with the adjacent .sha256 file.

Preview first, then compress:

tokenfold inspect payload.json --format json
tokenfold compress payload.json --format json --output payload.compact.json

Python uses the same Core engine and typed receipt:

import json
from pathlib import Path

from tokenfold import CompressionMode, compress_openai_payload

result = compress_openai_payload(
    Path("request.json").read_text(),
    mode=CompressionMode.BALANCED,
)
compressed_request = json.loads(result.payload)
print(f"saved {result.report.saved_tokens} tokens ({result.saved_pct():.1f}%)")
Surface Best for Start here
CLI Files, stdin, diffs, and command output tokenfold compress, inspect, diff, wrap
Python Applications and evaluation pipelines pip install tokenfold
TypeScript Node.js applications and automation npm install tokenfold
Rust Native embedding cargo add tokenfold-core
HTTP proxy Transparent provider-shaped traffic Build tokenfold-proxy
MCP Agents and editors tokenfold mcp serve

tokenfold init --agent <agent> installs a durable host integration; tokenfold doctor verifies it. Trusted filters for Git, build, and test output are available through tokenfold filters list.

Runnable examples:

python examples/quickstart.py
python examples/lossy_pruning.py

Recoverable lossy pruning

Lossless folding has a ceiling on heterogeneous arrays. --lossy ranks rows, keeps the strongest signals, and replaces selected rows with compact {"$tf_ref": {...}} handles. A row leaves the payload only after the local store accepts it.

tokenfold compress examples/incident_feed.json --format json \
  --lossy heuristic --lossy-ratio 0.35 --output feed.compact.json

On the bundled 40-event feed:

Mode Exact tokens Reduction Events kept Incident kept
Lossless 2,840 28.1% 40
--lossy-ratio 0.35 2,399 39.3% 13
--lossy-ratio 0.05 2,192 44.5% 2

The planted 503 with success: false and retries: 7 survives every shown setting because typed failure signals outrank position and length. Long rows amortize marker overhead further: the 100-result showcase reaches 91.7%.

Fetch a dropped row:

tokenfold retrieve 978339a8898fedde3c5b0662a213f12ae4ad1b7fe6771f62b3c3d74d87389a4c
# {"seq":1,"ts":"2026-08-15T00:01:11Z","subsystem":"index-writer",...}

What the flags mean:

  • --lossy-ratio is an aggression hint over eligible array items. Lower keeps fewer rows; it is not a whole-document guarantee.
  • --target-tokens is the whole-document goal. Tokenfold stops when it reaches the target losslessly and reports best_effort when the safe transform set cannot reach it (unreachable_target when protected content alone exceeds the target).
  • --lossy-preserve <path> protects a named array; nested paths conservatively protect their nearest eligible ancestor.
  • Generic JSON only: lossy pruning does not run on OpenAI or Anthropic message payloads.
  • Storage is fail-closed: refused rows stay inline, and detected secret-shaped bytes are never persisted.

Preview the projected savings with no store writes:

tokenfold compress examples/incident_feed.json --format json \
  --lossy heuristic --lossy-ratio 0.35 --dry-run
Current Phase 1 constraints

Treat $tf_ref as reserved and do not enable lossy pruning on documents that already contain retrieval markers. A filesystem failure after partial writes may also leave unreferenced entries until their configured TTL expires. Both require location-based transactional materialization before promotion.

Lossy pruning is CLI-only today; Python and TypeScript remain lossless. Preview is a projection rather than a filesystem transaction, so a real run may keep more rows if storage becomes unavailable.

Tokenfold Select

When structure ends, rank what matters.

Tokenfold Select is an Apache-2.0 LoRA adapter on ibm-granite/granite-embedding-reranker-english-r2. It scores candidate spans against a query; your allocator applies the token budget and force-keeps required content. Core remains model-free and deterministic, while Select adds relevance when lexical heuristics stop being enough.

Tokenfold Core Tokenfold Select
Best at Structural compression Query-conditioned span ranking
Runtime Static Rust binary Granite reranker + LoRA adapter
Output Compressed payload + exact receipt Ranking logits
Python: load the model and score spans
from pathlib import Path

import torch
from huggingface_hub import snapshot_download
from peft import PeftModel
from transformers import AutoModelForSequenceClassification, AutoTokenizer

base_id = "ibm-granite/granite-embedding-reranker-english-r2"
repo_dir = Path(snapshot_download("snchimata/tokenfold-select"))
adapter_dir = repo_dir / "adapter"
tokenizer = AutoTokenizer.from_pretrained(adapter_dir)
base = AutoModelForSequenceClassification.from_pretrained(
    base_id,
    dtype=torch.float32,
)
model = PeftModel.from_pretrained(base, adapter_dir).eval()

def score(query: str, spans: list[str]) -> list[float]:
    if not spans:
        return []
    encoded = tokenizer(
        [query] * len(spans),
        spans,
        padding=True,
        truncation=True,
        max_length=8192,
        return_tensors="pt",
    )
    with torch.no_grad():
        output = model(
            input_ids=encoded["input_ids"],
            attention_mask=encoded["attention_mask"],
        )
    return output.logits.view(-1).float().tolist()

See the Tokenfold Select model card for setup, evaluation, training data, and limitations.

Safety and auditability

  • Never larger: Core keeps a transform only when exact recounting shows a reduction; a lossy branch must also beat the lossless result.
  • Reversible structure: JSON folds must pass an exact round trip.
  • Protected content: provider system messages and latest-user content are held behind format-aware safety gates.
  • Clear provenance: exact tokenizer counts, heuristics, and extrapolations are labeled separately.
  • Actionable receipts: every result lists savings, transforms, warnings, retrieval state, and final status.
  • Local control: detected secrets are redacted before reports or storage; policy learning changes configuration only with --apply.

Reproduce the results

# 91.7% maximum-compression showcase, mixed-feed curve, retrieval, and preserve
python examples/lossy_pruning.py

# Lossless transform benchmarks
cargo bench -p tokenfold-core

# Small exact-token CLI example
cargo run --release --locked -p tokenfold-cli -- \
  inspect examples/api_response.json --format json

The small bundled API response reports 382 → 206 tokens, a 46.1% lossless reduction. Benchmark sources and thresholds live in CHANGELOG.md and crates/tokenfold-core/benches/THRESHOLDS.toml.

Contributing

Issues and pull requests are welcome. Run the relevant checks before opening a PR:

cargo fmt --all --check
cargo clippy --workspace --all-targets -- -D warnings
cargo test --workspace --locked
python eval/run_fidelity.py --gate --profile smoke-first-consumer
cd packages/tokenfold && npm ci && npm test

License

Apache-2.0


Start with one representative payload, inspect the receipt, and see how many tokens your application can stop sending today.

pip install tokenfold

If Tokenfold earns a place in your stack, a ⭐ on GitHub helps the next team find it.

Download files

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

Source Distribution

tokenfold-0.4.0.tar.gz (146.1 kB view details)

Uploaded Source

Built Distributions

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

tokenfold-0.4.0-cp39-abi3-win_amd64.whl (2.9 MB view details)

Uploaded CPython 3.9+Windows x86-64

tokenfold-0.4.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.2 MB view details)

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

tokenfold-0.4.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.2 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ ARM64

tokenfold-0.4.0-cp39-abi3-macosx_11_0_arm64.whl (3.1 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

tokenfold-0.4.0-cp39-abi3-macosx_10_12_x86_64.whl (3.1 MB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

Details for the file tokenfold-0.4.0.tar.gz.

File metadata

  • Download URL: tokenfold-0.4.0.tar.gz
  • Upload date:
  • Size: 146.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for tokenfold-0.4.0.tar.gz
Algorithm Hash digest
SHA256 9dca26ee107c12abef356eb9dff6e082cd200c21bab0066f49167e4d3c6a794e
MD5 3b9a898a736eee42e9a37bce85725238
BLAKE2b-256 306be6b1b035ea4844961e4beac8f3c0d74242fc7e4157adf4a4bd468355f917

See more details on using hashes here.

File details

Details for the file tokenfold-0.4.0-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: tokenfold-0.4.0-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 2.9 MB
  • Tags: CPython 3.9+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for tokenfold-0.4.0-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 1fff5b4855a7a22085573f286e29be5799ebcded7113d76e9679eabcc53bcbdf
MD5 b5005dd4bb42b8e0312f512ce9c15188
BLAKE2b-256 828ce1c4a3d20eb89fd218a22cb99a45a8412376fba9336121851de524dfff5c

See more details on using hashes here.

File details

Details for the file tokenfold-0.4.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for tokenfold-0.4.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0f8f930cfdd268cbf177f0434c4fbff1b3ecf1b3c5515c5f0c922bafc5aedfe9
MD5 2d99faea6a9353b760605ef175adf3b2
BLAKE2b-256 dc0b80d4355e6a3498d57faf5241e79f15a3e0d11df43bc62aa053058afaf530

See more details on using hashes here.

File details

Details for the file tokenfold-0.4.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for tokenfold-0.4.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4c1b78aaf7211309ee5bfe9af05414d8cb3dba20e5a3ff4bb4a756085d234511
MD5 de979e86160e8a46326fa0faf583337e
BLAKE2b-256 5a1af25822e73ea76327f66c44abaac38f6ccacf5a2dc81793cf489ab50be0db

See more details on using hashes here.

File details

Details for the file tokenfold-0.4.0-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for tokenfold-0.4.0-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3ce16635a03c243088bf1e7ab2b777526f4cd530dc46d55ef2f10eeafcc5a1d8
MD5 af803ab7f84bc300f30e472015bb3b8f
BLAKE2b-256 be920ce7a9fbd9b76c7a59140aac588bf45ba0b3a3b0bdd5462469d45a99c59c

See more details on using hashes here.

File details

Details for the file tokenfold-0.4.0-cp39-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for tokenfold-0.4.0-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 78be8705d2e7b56aca6d5ba15f4bf7c6032504e317b3666778d68179dc6ad0a2
MD5 c0ab36e4929c4d069456c89903338177
BLAKE2b-256 e1775990572494f15c6283c1ddaa84f624f2a6098313019a29e5485c5bb68d0e

See more details on using hashes here.

Supported by

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