Skip to main content

Static, deterministic LLM prompt/payload compression that cuts input tokens 30-90% with zero extra model calls.

Project description

llmtrim-uniffi

UniFFI bindings over llmtrim-core: one Rust definition, idiomatic in-process bindings for Python, Ruby, Swift and Kotlin. The compression runs natively in the caller's process (no server, no async).

API

A deliberately flat surface over the engine:

fn compress(
    input: String,                 // a provider-shaped request body (JSON)
    provider: Option<Provider>,    // OpenAi | Anthropic | Google, or None to auto-detect
    preset: Option<String>,        // "aggressive" | "agent" | "code" | "rag" | "safe" | …
                                   // None = config from the environment / config file
) -> Result<CompressOutput, LlmtrimError>

CompressOutput carries the compressed request_json, the resolved provider/model, the tokenizer label/exactness, and the before/after/frozen input-token counts. Embedders that need the full rehydration plan or per-stage reports should depend on llmtrim-core directly in Rust.

Python

# Build a self-contained wheel (cdylib + generated glue):
crates/llmtrim-uniffi/scripts/build-wheel.sh --release
pip install target/wheels/llmtrim-*.whl
import llmtrim, json

req = json.dumps({"model": "gpt-4o",
                  "messages": [{"role": "user", "content": "…"}]})
out = llmtrim.compress(req, llmtrim.Provider.OPEN_AI, "aggressive")
print(out.input_tokens_before, "->", out.input_tokens_after)
# send out.request_json to the provider

Why build-wheel.sh and not plain maturin build: maturin's bindings = "uniffi" auto-packaging is sensitive to the maturin↔uniffi version pair. With maturin 1.14 + uniffi 0.31 it builds the native library into the wheel but omits the generated Python glue (empty package __init__.py). The script runs maturin, then injects the freshly generated bindings and repacks the wheel with valid RECORD hashes. Remove it once the auto path packages cleanly.

Ruby / Swift / Kotlin

All targets generate from the same built library, no extra Rust. The generated glue is a build artifact (its checksums are pinned to the library ABI), so it is regenerated per release rather than committed:

crates/llmtrim-uniffi/scripts/generate-bindings.sh out/   # python, ruby, swift, kotlin

Generation needs an unstripped library. Library-mode uniffi-bindgen reads metadata symbols from the cdylib, but the workspace release profile sets strip = true. The script therefore generates from the (unstripped) debug build; the native library you ship can be a stripped cargo build --release -p llmtrim-uniffi cdylib; the glue loads it by name.

Ruby (verified). This is the raw generated binding (module LlmtrimFfi), for a source build with libllmtrim_ffi.so on the load path. The published gem aliases it to Llmtrim (require "llmtrim" then Llmtrim.compress(...)); see packaging/ruby.

require_relative "llmtrim_ffi"
require "json"
out = LlmtrimFfi.compress(
  JSON.generate({model: "gpt-4o", messages: [{role: "user", content: "…"}]}),
  LlmtrimFfi::Provider::OPEN_AI, "aggressive")
puts "#{out.input_tokens_before} -> #{out.input_tokens_after}"

Swift emits llmtrim_ffi.swift + an FFI header and modulemap; Kotlin emits uniffi/.../llmtrim_ffi.kt (which loads the cdylib via JNA). CI compiles and runs a smoke for both: Swift on macOS (swiftc against the modulemap), Kotlin on a JVM (kotlinc + JNA), so a binding break is caught in all four languages (see tests/swift, tests/kotlin and the bindings* jobs in .github/workflows/ci.yml).

Publishable packages

Each ships the compiled engine bundled, so consumers need no Rust toolchain:

Target Build Package Verified
Python (PyPI) scripts/build-wheel.sh wheel locally
Ruby (gem) scripts/build-gem.sh packaging/ruby/ locally
Kotlin/JVM (Maven) scripts/build-maven.sh packaging/kotlin/ locally
Swift (SwiftPM) scripts/build-xcframework.sh packaging/swift/ macOS CI only

Each packaging/<lang>/README.md has the usage + publish details.

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

llmtrim-0.1.10-py3-none-win_amd64.whl (8.0 MB view details)

Uploaded Python 3Windows x86-64

llmtrim-0.1.10-py3-none-manylinux_2_34_x86_64.whl (7.9 MB view details)

Uploaded Python 3manylinux: glibc 2.34+ x86-64

llmtrim-0.1.10-py3-none-manylinux_2_34_aarch64.whl (7.8 MB view details)

Uploaded Python 3manylinux: glibc 2.34+ ARM64

llmtrim-0.1.10-py3-none-macosx_11_0_arm64.whl (8.0 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

llmtrim-0.1.10-py3-none-macosx_10_12_x86_64.whl (7.9 MB view details)

Uploaded Python 3macOS 10.12+ x86-64

File details

Details for the file llmtrim-0.1.10-py3-none-win_amd64.whl.

File metadata

  • Download URL: llmtrim-0.1.10-py3-none-win_amd64.whl
  • Upload date:
  • Size: 8.0 MB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for llmtrim-0.1.10-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 a3a727a5c580f4cdc54156501231dc80be94b3ca86e627843cf2e1591ef4baa9
MD5 bc1d426b9b7b1d08370691bb0787216b
BLAKE2b-256 48fdab64e24786693102dbf775cbde25ab886d5282b04d1ab61f527d04d654a9

See more details on using hashes here.

Provenance

The following attestation bundles were made for llmtrim-0.1.10-py3-none-win_amd64.whl:

Publisher: release-bindings.yml on fkiene/llmtrim

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

File details

Details for the file llmtrim-0.1.10-py3-none-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for llmtrim-0.1.10-py3-none-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 1806c3009e444ecd139eb5d6699c4767b519279c1feba51bbd58263ca9b25912
MD5 4b5052c6616decb8d4ea7d5ca021a9a0
BLAKE2b-256 1903a56c7cac9abf1f80efff7492c6be2c9c444124b0873d6c53471c4c7a71d0

See more details on using hashes here.

Provenance

The following attestation bundles were made for llmtrim-0.1.10-py3-none-manylinux_2_34_x86_64.whl:

Publisher: release-bindings.yml on fkiene/llmtrim

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

File details

Details for the file llmtrim-0.1.10-py3-none-manylinux_2_34_aarch64.whl.

File metadata

File hashes

Hashes for llmtrim-0.1.10-py3-none-manylinux_2_34_aarch64.whl
Algorithm Hash digest
SHA256 640e2c924831eccf75cfdce066a19cef1c2028dfb81d716af04b75cc3fabe172
MD5 681f40752dba3b97a940afa0cec46c06
BLAKE2b-256 390c66bf6f434a40e02095fb727ea7b6dbc08edc5b44487e6452f2f2fbfdb9d9

See more details on using hashes here.

Provenance

The following attestation bundles were made for llmtrim-0.1.10-py3-none-manylinux_2_34_aarch64.whl:

Publisher: release-bindings.yml on fkiene/llmtrim

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

File details

Details for the file llmtrim-0.1.10-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for llmtrim-0.1.10-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1df73af3c6cbea01221a28dce8101c259f9c094481b921911edbfab99874e2ab
MD5 69bc6a6a06cf7036101f0dbfb90dad94
BLAKE2b-256 94a568a3c0563f793d0ef60c7ecdb6b263d8c97f9fdfc56eb38636b36bbbf589

See more details on using hashes here.

Provenance

The following attestation bundles were made for llmtrim-0.1.10-py3-none-macosx_11_0_arm64.whl:

Publisher: release-bindings.yml on fkiene/llmtrim

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

File details

Details for the file llmtrim-0.1.10-py3-none-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for llmtrim-0.1.10-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 3253f5f1c7ba8f22639f42bf401532ec6fec462893e5ee9a16d373b214b15145
MD5 42e772c769c3e9789d8bbff7b5320f69
BLAKE2b-256 cc2cb4f18a7fce6ee183ec134b7499d26dbc8ed4369badb10a9a4998f29a92ad

See more details on using hashes here.

Provenance

The following attestation bundles were made for llmtrim-0.1.10-py3-none-macosx_10_12_x86_64.whl:

Publisher: release-bindings.yml on fkiene/llmtrim

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