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.11-py3-none-win_amd64.whl (8.0 MB view details)

Uploaded Python 3Windows x86-64

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

Uploaded Python 3manylinux: glibc 2.34+ x86-64

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

Uploaded Python 3manylinux: glibc 2.34+ ARM64

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

Uploaded Python 3macOS 11.0+ ARM64

llmtrim-0.1.11-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.11-py3-none-win_amd64.whl.

File metadata

  • Download URL: llmtrim-0.1.11-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.11-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 62b6ee871004ff74b1b475b016608075bcc57ea9fa1bcd5b16dbe8cf7caa3ec5
MD5 0b469342c2d9f957510185b62b6455ae
BLAKE2b-256 e4dd567da165ae6b0c33ce9bc5424299fedd7f72abc98adfd3fd885fd31f72c7

See more details on using hashes here.

Provenance

The following attestation bundles were made for llmtrim-0.1.11-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.11-py3-none-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for llmtrim-0.1.11-py3-none-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 ecec3f58fb8e42445813f2164a1263be29cde0c1dd232ff1279355b7290fdd63
MD5 3152de03589ebe6105bbfecb74a83718
BLAKE2b-256 068c9d8d2a02aae4f74241aab30e06413b6e608e4113eaa6da105b455ac86978

See more details on using hashes here.

Provenance

The following attestation bundles were made for llmtrim-0.1.11-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.11-py3-none-manylinux_2_34_aarch64.whl.

File metadata

File hashes

Hashes for llmtrim-0.1.11-py3-none-manylinux_2_34_aarch64.whl
Algorithm Hash digest
SHA256 44cb07eaca2fe28254c8b79e6a553455b6865c60297b8d61e9841ee685e5174d
MD5 66a686914ae4ba1252aa72dae7b32f34
BLAKE2b-256 9af35dadf7dbaa0147d2009f019cab4be88c9334e64551ca767deafd98093c3a

See more details on using hashes here.

Provenance

The following attestation bundles were made for llmtrim-0.1.11-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.11-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for llmtrim-0.1.11-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b897537dd1ef86b623d1a74c4ba51c3f93d6c193ecda801a5e29f0778de79b28
MD5 8c9c9c2b07aed0bc0f347bc1841a6c11
BLAKE2b-256 c521efc2c14dae1fac7065b8c6200d75e2878356428dee344a282a70fb8d50ff

See more details on using hashes here.

Provenance

The following attestation bundles were made for llmtrim-0.1.11-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.11-py3-none-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for llmtrim-0.1.11-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 3e6fc7ea1f52c985c6cab2f76d3cdd7d1c3fbd55cc838d6e932565635011f71d
MD5 d91133a809ce14219d6734cf2fbccdc1
BLAKE2b-256 e549506b0a60f626fd6da6b5ccd4b24f7b145fb5f8a769c340790cb159b3b759

See more details on using hashes here.

Provenance

The following attestation bundles were made for llmtrim-0.1.11-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