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

Uploaded Python 3Windows x86-64

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

Uploaded Python 3manylinux: glibc 2.34+ x86-64

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

Uploaded Python 3manylinux: glibc 2.34+ ARM64

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

Uploaded Python 3macOS 11.0+ ARM64

llmtrim-0.1.12-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.12-py3-none-win_amd64.whl.

File metadata

  • Download URL: llmtrim-0.1.12-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.12-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 72fdf4aea9f0b24d9b058d5c9cb0de4db0e4100ad6ea87841aae86f72a241a58
MD5 c2780ed279790a3b9dc3450c666d1adb
BLAKE2b-256 e5b29a4e28d252ad4360f918e1b0267e370eac3d7d86b5776aa69cf5533c8cff

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for llmtrim-0.1.12-py3-none-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 c911688fc20d3e9cd89bbd6b34dd391cd91141f56421cae56d35ced1c7c70165
MD5 5c082d4a940bb42242587549fa9d44fe
BLAKE2b-256 90ab4813a29a814e40bf490ede972ab1b624fd237712112c1a2bce3a3f1b8a27

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for llmtrim-0.1.12-py3-none-manylinux_2_34_aarch64.whl
Algorithm Hash digest
SHA256 9126f1721844fd4084f8802b3a7c361e6333a9a29c05b5c053214dc2c17d73a1
MD5 fa2db586c56e4a3dd3dbb9591d87f393
BLAKE2b-256 b1b1692ed44a7c1a72a385cfccd115bfd25033eac4eb4ec6426d1fb1da334389

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for llmtrim-0.1.12-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e8de80b7fcae7a88ea6f102902709c95c668b6b1a3fbde5bcbe0d5c42d63eb82
MD5 2ea3430d4f7c0467e4488e80c8ac42c0
BLAKE2b-256 fb6669c302f535a28d908a97cf9939774f2bbdd8f11499d8bf1d4fdb0091c01a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for llmtrim-0.1.12-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 a0fa2eec79231bc1ca1799690565badc92f220575bf405fe8f0a9bac4e36574c
MD5 967077ca1a493b7bb4668e9db12f160d
BLAKE2b-256 28a1d795c42e81238af92b76a084fcfe78d12df3d70bb7302c16ca1aeeccceaf

See more details on using hashes here.

Provenance

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