Skip to main content

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.

In-process vs. the proxy

llmtrim has two integration routes:

  • The proxy (HTTPS_PROXY=127.0.0.1:8788 llmtrim) intercepts your existing traffic and compresses it in flight. Nothing in your code changes, but the client has to route through the proxy and trust its CA.
  • These bindings compress in your process. You call compress() on the request body, then send the result with your own HTTP client. No proxy, no CA, no env-var setup.

Use the in-process path when the proxy can't run:

  • Sandboxed / serverless functions where you can't set a process-wide HTTPS_PROXY or run a side process.
  • Certificate-pinned clients that reject a MITM CA, so the proxy's interception fails.
  • Anywhere you'd rather not add a network hop or an extra moving part.

It replaces a per-framework adapter: instead of wiring a hook into each SDK, you compress the body once and POST it yourself. Runnable end-to-end examples (compress, then send with your own client) are in examples/.

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.

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

Uploaded Python 3Windows x86-64

llmtrim-0.13.0-py3-none-manylinux_2_34_x86_64.whl (8.5 MB view details)

Uploaded Python 3manylinux: glibc 2.34+ x86-64

llmtrim-0.13.0-py3-none-manylinux_2_34_aarch64.whl (8.4 MB view details)

Uploaded Python 3manylinux: glibc 2.34+ ARM64

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

Uploaded Python 3macOS 11.0+ ARM64

llmtrim-0.13.0-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.13.0-py3-none-win_amd64.whl.

File metadata

  • Download URL: llmtrim-0.13.0-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/7.0.0 CPython/3.13.14

File hashes

Hashes for llmtrim-0.13.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 b6491fa5ea0610ab551c39ab2a18e51dc0f65924043b7e5b6cd0bb40116d1333
MD5 b4b739498123628d57f8cdcf33b7a5b3
BLAKE2b-256 a11610b091fb6eb9f134df645cc328cf615297c909dcc6b75fb5390487170870

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for llmtrim-0.13.0-py3-none-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 9a32a4a9afa1e1b31ac17f7e5300ae135b019f0b8dc3e280c4ea1c3ac79219a0
MD5 a007d9f80828c46fb05b8e25ad4c0ea8
BLAKE2b-256 0252fe8e63924c07a4715464073269bfbe6c2202ee7c563f3ef71b0833591d12

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for llmtrim-0.13.0-py3-none-manylinux_2_34_aarch64.whl
Algorithm Hash digest
SHA256 5cf1351d2cecaeac8c2585a8d8b39560114984f93e2d6522f240ed4ffe1ee220
MD5 d4cec6477967e2c2b931c2aa1945d8e9
BLAKE2b-256 c17fb82156539ef99797e8414d7ba5287cbf8c499ee3478003a4c84786a0c1e2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for llmtrim-0.13.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b89f3d183c2f6363814995f5c1a9a68e2d2596262a5f68beb8c0271aa3bb60f1
MD5 a88ac693db6d9ac4f47e0e75aca4d471
BLAKE2b-256 5135b85fcade2c61a463da807e52adc9754ef7fa5edb03cc0d6d9ff09bc5c492

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for llmtrim-0.13.0-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 aecf6100ef800e9a5ba8a853ea49e1c51f4b33cd00c797296f805e71b0940c65
MD5 4956602dd42cbfe60ec000868b07cb6c
BLAKE2b-256 e0ceafa2f1d4a20391495ed488e9a6766af45e9ae27c1b94e57075cad927a23f

See more details on using hashes here.

Provenance

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

Release history Release notifications | RSS feed

0.13.3

5 files

0.13.2

5 files

0.13.1

5 files

This release

0.13.0 This release

5 files

0.12.6

5 files

0.12.5

5 files

0.12.4

5 files

0.12.3

5 files

0.12.2

5 files

0.12.1

5 files

0.12.0

5 files

0.11.12

5 files

0.11.11

5 files

0.11.10

5 files

0.11.9

5 files

0.11.8

5 files

0.11.7

5 files

0.11.6

5 files

0.11.5

5 files

0.11.4

5 files

0.11.3

5 files

0.11.2

5 files

0.11.1

5 files

0.11.0

5 files

0.10.2

5 files

0.10.1

5 files

0.10.0

5 files

0.9.4

5 files

0.9.3

5 files

0.9.2

5 files

0.9.1

5 files

0.9.0

5 files

0.5.0

5 files

0.4.0

5 files

0.3.2

5 files

0.3.1

5 files

0.3.0

5 files

0.2.1

5 files

0.2.0

5 files

0.1.13

5 files

0.1.12

5 files

0.1.11

5 files

0.1.10

5 files

0.1.9

5 files

0.1.8

5 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page