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_PROXYor 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.shand not plainmaturin build: maturin'sbindings = "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-bindgenreads metadata symbols from the cdylib, but the workspace release profile setsstrip = true. The script therefore generates from the (unstripped) debug build; the native library you ship can be a strippedcargo build --release -p llmtrim-unifficdylib; 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.
Metadata
Release files for llmtrim 0.13.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| llmtrim-0.13.7-py3-none-win_amd64.whl | Python 3 | none | Windows x86-64 | Details |
| llmtrim-0.13.7-py3-none-manylinux_2_34_x86_64.whl | Python 3 | none | Linux glibc 2.34+ x86-64 | Details |
| llmtrim-0.13.7-py3-none-manylinux_2_34_aarch64.whl | Python 3 | none | Linux glibc 2.34+ ARM64 | Details |
| llmtrim-0.13.7-py3-none-macosx_11_0_arm64.whl | Python 3 | none | macOS 11.0+ ARM64 | Details |
| llmtrim-0.13.7-py3-none-macosx_10_12_x86_64.whl | Python 3 | none | macOS 10.12+ x86-64 | Details |
Total release size: 41.0 MB
Release files / llmtrim-0.13.7-py3-none-win_amd64.whl
| Download URL | llmtrim-0.13.7-py3-none-win_amd64.whl |
|---|---|
| Size | 8.0 MB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
d4696c0f6d52a4579a649a7548deaba59e90f8a13e64bfcb7aad4e062034b333
|
|
BLAKE2b-256 checksum How to use checksums |
6ba03006777523b1c3d130ed65c9f81c75590608f926f39805d9f444772c73c7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 16, 2026.
Transparency logRelease files / llmtrim-0.13.7-py3-none-manylinux_2_34_x86_64.whl
| Download URL | llmtrim-0.13.7-py3-none-manylinux_2_34_x86_64.whl |
|---|---|
| Size | 8.5 MB |
| Tags | Linux glibc 2.34+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
f6703896e7392af54de0f20fa145319fc4fe618fa5f5b0be994a7982486cc159
|
|
BLAKE2b-256 checksum How to use checksums |
83103813efe04e2c24b94b172ec0ea8fdde8ad7dbadd6d9988389dbc310ecc09
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 16, 2026.
Transparency logRelease files / llmtrim-0.13.7-py3-none-manylinux_2_34_aarch64.whl
| Download URL | llmtrim-0.13.7-py3-none-manylinux_2_34_aarch64.whl |
|---|---|
| Size | 8.4 MB |
| Tags | Linux glibc 2.34+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
6bb8b3b10c420f675616f93ff91a88574941ee51746741a4196506a98f92d80a
|
|
BLAKE2b-256 checksum How to use checksums |
b6b1fc57db6eb0eb4e44fc6cffc359b8749f646ea54fe720795156153ddd9428
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 16, 2026.
Transparency logRelease files / llmtrim-0.13.7-py3-none-macosx_11_0_arm64.whl
| Download URL | llmtrim-0.13.7-py3-none-macosx_11_0_arm64.whl |
|---|---|
| Size | 8.1 MB |
| Tags | Python 3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
17f11e381413131341ce6226a43be0798b31bd41bc631a3b15bfc0bbc41ac93d
|
|
BLAKE2b-256 checksum How to use checksums |
93686e7302cace0b5bb4aa4a143ff7c8fcc5297a82f85c9d18b30aae8250b8f4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 16, 2026.
Transparency logRelease files / llmtrim-0.13.7-py3-none-macosx_10_12_x86_64.whl
| Download URL | llmtrim-0.13.7-py3-none-macosx_10_12_x86_64.whl |
|---|---|
| Size | 7.9 MB |
| Tags | Python 3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
dab69c37ca9dd244e41f72be3e2aa9b04524988f056da264836888f32cb0104f
|
|
BLAKE2b-256 checksum How to use checksums |
b5663651f1a2122a5b4b5285c469342062dbff4a00c3c10ed8eaa09c91fa3575
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 16, 2026.
Transparency log