Skip to main content

Token-compression toolkit for LLM payloads (Python binding over the tokenfold-core Rust crate)

Project description

TOKENFOLD

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

Local, provider-neutral compression for prompts, tool schemas, JSON, logs, and diffs.

CI Coverage GitHub Release PyPI npm Rust License

Quick start · Why tokenfold · Integrations · Benchmarks


Proven compression, not projections

Repetitive JSON API responses Tool schemas
67.6% fewer tokens 61.3% fewer tokens 45.63% fewer tokens
50-record payload 30-record payload 1.8 MB OpenAI-style fixture

All three results use exact o200k_base counts in balanced mode. The JSON-data results are lossless. The schema benchmark preserves required fields and descriptions while trimming redundant examples. Repetitive, structured data benefits most.

Quick start

Install the interface 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 the v0.3.1 CLI for Linux, macOS, or Windows from GitHub Releases, then verify it with the adjacent .sha256 file.

Or install the Python package:

pip install tokenfold

Compress an OpenAI-style request before sending it to your provider:

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}%)")
# Pass compressed_request to your existing OpenAI client.

The TypeScript package calls the same local Rust engine and returns bytes plus the canonical compression receipt:

import { compress } from "tokenfold";

const input = new TextEncoder().encode(JSON.stringify({
  results: [
    { id: 101, region: "us-east-1", plan: "pro" },
    { id: 102, region: "us-east-1", plan: "pro" },
    { id: 103, region: "us-east-1", plan: "pro" },
  ],
}, null, 2));

const { payload, report } = await compress(input, {
  format: "json",
  mode: "balanced",
});

console.log(`saved ${report.saved_tokens} tokens`);
console.log(new TextDecoder().decode(payload));

Want to try the CLI from source? Inspect the bundled request without changing it:

git clone https://github.com/snchimata/tokenfold.git
cd tokenfold
cargo run --release --locked -p tokenfold-cli -- \
  inspect examples/openai_payload.json --format openai

Across 100 requests with the same payload shape, those savings add up to:

json_minify          34,600 → 22,900   saved 11,700
schema_compaction    22,900 → 21,300   saved  1,600
TOTAL                34,600 → 21,300   saved 13,300 (38.4% reduction, estimated)

Why tokenfold

Models do not need the same object key hundreds of times. Providers still count every token. Tokenfold removes that structural waste before the model call, so you get:

  • Lower input cost — send fewer billable tokens without changing providers.
  • More useful context — reclaim room for instructions, evidence, and conversation history.
  • Less data movement — shrink payloads crossing queues, proxies, logs, and evaluation runs.
  • Fewer blind spots — inspect counts, transforms, and warnings.
  • No new data processor — run locally, in-process, or behind your own loopback proxy.
messages · schemas · JSON · logs · diffs
                    │
                    ▼
                tokenfold ──────▶ any LLM provider
                    │
                    └───────────▶ compressed payload + receipt

What it improves

Workload User benefit
APIs and record sets Store repeated keys and values once
Provider requests Shrink messages and schemas without changing API shape
Agent logs and diffs Keep evidence; collapse repetitive output
Token budgets Meet the target or return an honest best effort
Sensitive workflows Redact detected secrets before reports or storage

Pick your integration

One Rust engine powers every surface, so policies and receipts stay consistent as your stack changes.

Surface Best for Install or run
Python Applications and evaluation pipelines pip install tokenfold
TypeScript Node.js applications and automation npm install tokenfold
Rust Native embedding cargo add tokenfold-core
CLI Files and command output Download a release binary
HTTP proxy Provider-shaped traffic Build tokenfold-proxy from source
MCP server MCP-compatible agents and editors tokenfold mcp serve

Compress generic JSON

Use format="JSON" for API responses, record dumps, and other data that is not an LLM request:

import json
import tokenfold

result = tokenfold.compress(
    json.dumps({
        "results": [
            {"id": 101, "region": "us-east-1", "plan": "pro"},
            {"id": 102, "region": "us-east-1", "plan": "pro"},
            {"id": 103, "region": "us-east-1", "plan": "pro"},
        ]
    }),
    format="JSON",
    mode="BALANCED",
)

print(f"saved {result.report.saved_tokens} tokens")

Run the proxy

cargo build --release --locked -p tokenfold-proxy
target/release/tokenfold-proxy \
  --upstream https://api.openai.com \
  --target-tokens 12000

The proxy listens on 127.0.0.1:8787 by default, streams SSE responses, and returns the compression receipt in X-TokenFold-* headers.

Safety you can inspect

Tokenfold recounts after every stage and stops when the target is met or the allowed transform set is exhausted.

  • Never larger: a transform stays only when it reduces the token count.
  • Reversible JSON: every structural rewrite must pass an exact round trip.
  • Clear provenance: exact tokenizer results and estimates are labeled separately.
  • Actionable receipts: every result lists savings, transforms, warnings, and final status.
  • Honest limits: unreachable targets return an explicit status instead of silently deleting more content.

Lossy log and diff transforms remain policy-gated. Optional originals can be stored by SHA-256 hash; detected secret-shaped content is excluded.

Reproduce the numbers

Fixture Exact token reduction Source
Repetitive 50-record JSON 67.6% Changelog
30-record API response 61.3% Changelog
1.8 MB OpenAI tool schema 45.63% Thresholds

Run the regression benchmark:

cargo bench -p tokenfold-core

Or inspect the small bundled JSON sample:

cargo run --release --locked -p tokenfold-cli -- \
  inspect examples/api_response.json --format json

The sample reports 382 → 206 estimated tokens, a 46.1% reduction. Ragged or compact inputs may save little; Tokenfold reports that result honestly.

Status

Version 0.3.1 is live on every supported distribution channel:

Ecosystem Published packages Artifacts
Python tokenfold==0.3.1 Source distribution and ABI3 wheels for Linux x64/ARM64, macOS x64/ARM64, and Windows x64
TypeScript tokenfold@0.3.1 Typed Node.js API plus the matching @tokenfold/cli-* native package, with no post-install download or local Rust build
Rust tokenfold-core, tokenfold-output, tokenfold-learn, and tokenfold-cli Source packages published in dependency order

GitHub release v0.3.1 provides SHA-256-checksummed (not signed) CLI binaries for Linux, macOS, and Windows, plus CycloneDX SBOMs.

Contributing

Issues and pull requests are welcome. Run the core 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

Reclaim your context window

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

pip install tokenfold

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

tokenfold-0.3.2.tar.gz (104.2 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.3.2-cp39-abi3-win_amd64.whl (2.8 MB view details)

Uploaded CPython 3.9+Windows x86-64

tokenfold-0.3.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.1 MB view details)

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

tokenfold-0.3.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.1 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ ARM64

tokenfold-0.3.2-cp39-abi3-macosx_11_0_arm64.whl (3.0 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

tokenfold-0.3.2-cp39-abi3-macosx_10_12_x86_64.whl (3.0 MB view details)

Uploaded CPython 3.9+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: tokenfold-0.3.2.tar.gz
  • Upload date:
  • Size: 104.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for tokenfold-0.3.2.tar.gz
Algorithm Hash digest
SHA256 a9f04f4630111c6601a7127178b7e2838ae1d059621f93bff907d7df47454ae7
MD5 359b6d9f78cd745fc84d682e2a43e616
BLAKE2b-256 ec4da45df364627d93403796c0ebf20042d1ffb61c25659d983bf6237a9acec2

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for tokenfold-0.3.2-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 17e784921ff45c5b0a22f2456a4706c19b41c14af67c8d25f7857e41bc43ba23
MD5 ef0de6544275e7668cb58e2cca37aa78
BLAKE2b-256 f8abf486efa9c9ccb0d65bc4fedd45f7137d64ba5cdcdd448037c95d77d15d09

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tokenfold-0.3.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 48023f3058ab847169c569c8c742c3df6f8eff798fa994504eb6f4e6cc5e7c16
MD5 6d566c12849d8c3a943f973923785c20
BLAKE2b-256 4931182c44f0f9d7941e11962186ad7fcfd8dc8772e33c1b3a8d5455d2935b95

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tokenfold-0.3.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 1be2d1d643bcf7d895aa6449e8ee65713c633c3f9ac3a93e5cbd645d054e76fc
MD5 03a9cf020df91228ea86467e648fea22
BLAKE2b-256 bfb09f226030f92e4a3ae8c00f593974c8fad236bccd6720ed12ce772e869517

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tokenfold-0.3.2-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ed5eb747a1d91bbd3ddcb189232f2583bddaccde9a77eaddcfd4fa0437e3b73a
MD5 22798a1764f9bb99b84f3d9037ea83ef
BLAKE2b-256 0b6790088ab5c03cf47e433bd177278b4707bd6cc503fe9417a2a4282549ce85

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tokenfold-0.3.2-cp39-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 dcb25f86db6c25e892cffd1cfc51c2c67f0e4d5fce7e0718582282652de373fc
MD5 a85bee50fc9f794be8cb5106a78bb6d5
BLAKE2b-256 3a5aea66b5e824d41e0362bd203112a27aa0cdb9fd3e4be976fcfa8be4395e2e

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 Pingdom Monitoring Sentry Error logging StatusPage Status page