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.

Metadata

Release files for llmtrim 0.13.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for llmtrim 0.13.5
File
llmtrim-0.13.5-py3-none-win_amd64.whl Python 3 none Windows x86-64 Details
llmtrim-0.13.5-py3-none-manylinux_2_34_x86_64.whl Python 3 none Linux glibc 2.34+ x86-64 Details
llmtrim-0.13.5-py3-none-manylinux_2_34_aarch64.whl Python 3 none Linux glibc 2.34+ ARM64 Details
llmtrim-0.13.5-py3-none-macosx_11_0_arm64.whl Python 3 none macOS 11.0+ ARM64 Details
llmtrim-0.13.5-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.5-py3-none-win_amd64.whl

Download URL llmtrim-0.13.5-py3-none-win_amd64.whl
Size 8.0 MB
Tags Python 3 Windows x86-64
SHA-256 checksum
How to use checksums
5614be8a495ddf45f576204e68f88680a036473130c8f6f6cf754a69b07747fc
BLAKE2b-256 checksum
How to use checksums
35d570cf85963c78953ba5ead16e0baa992bf9a82feae48de7fa3e13d1ccfe52
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 15, 2026.

Transparency log

Release files / llmtrim-0.13.5-py3-none-manylinux_2_34_x86_64.whl

Download URL llmtrim-0.13.5-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
f1c530ee96329c5a449e94c3064e7a85e9dc88be57caf2be1b694f764d20f354
BLAKE2b-256 checksum
How to use checksums
67f6dd03d06ed41c4674769642e36c26c52fff6e258c1cbe740c831c200ce91e
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 15, 2026.

Transparency log

Release files / llmtrim-0.13.5-py3-none-manylinux_2_34_aarch64.whl

Download URL llmtrim-0.13.5-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
63f807cf7b8bb1764e97357bbecb2a79071cc4534930f84de22250520923ff6b
BLAKE2b-256 checksum
How to use checksums
80dd8d9cf5527738cf47424c3b26fc6f8f94a6563be1e7b7da58e3c8182ca6b5
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 15, 2026.

Transparency log

Release files / llmtrim-0.13.5-py3-none-macosx_11_0_arm64.whl

Download URL llmtrim-0.13.5-py3-none-macosx_11_0_arm64.whl
Size 8.0 MB
Tags Python 3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
3cafaf01998910ad8c137c35f776eb11f336f6f10d70c07b20ca916d4d4a2a35
BLAKE2b-256 checksum
How to use checksums
a519104dab9d9c2c9a2ba92168ab41e0df427e29c10c9910b7292de0b8d82be4
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 15, 2026.

Transparency log

Release files / llmtrim-0.13.5-py3-none-macosx_10_12_x86_64.whl

Download URL llmtrim-0.13.5-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
8e41d881f43a9f563cd34df8f2ed0869003d57171487348d0f8ed4b0f7330a87
BLAKE2b-256 checksum
How to use checksums
f03870832766ff9e256aba5031b1fbff03bb9dbf03866d70f9f084b3e883ec11
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 15, 2026.

Transparency log

Release history Release notifications | RSS feed

0.13.7

5 release files

0.13.6

5 release files

This release

0.13.5 This release

5 release files

0.13.2

5 release files

0.13.1

5 release files

0.13.0

5 release files

0.12.6

5 release files

0.12.2

5 release files

0.12.1

5 release files

0.12.0

5 release files

0.11.9

5 release files

0.11.8

5 release files

0.11.7

5 release files

0.11.6

5 release files

0.11.5

5 release files

0.11.4

5 release files

0.11.3

5 release files

0.11.2

5 release files

0.11.1

5 release files

0.11.0

5 release files

0.10.2

5 release files

0.10.1

5 release files

0.10.0

5 release files

0.9.4

5 release files

0.9.3

5 release files

0.9.2

5 release files

0.9.1

5 release files

0.9.0

5 release files

0.5.0

5 release files

0.4.0

5 release files

0.3.2

5 release files

0.3.1

5 release files

0.3.0

5 release files

0.2.1

5 release files

0.2.0

5 release files

0.1.13

5 release files

0.1.12

5 release files

0.1.11

5 release files

0.1.10

5 release files

0.1.9

5 release files

0.1.8

5 release 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