This release is a pre-release and may not be stable for production use.
PLLM
A high-performance private LLM multi-party inference runtime and autonomous research harness.
Get started · Learn · Research · Architecture · Security
PLLM is a Rust-first, Python-friendly system for private large language model inference. It separates client data from remote computation across explicit client, preparation, and inference roles. The same package provides a bounded research workflow for independently implementing, testing, benchmarking, and reviewing private-inference methods.
The project is built for high performance, but no universal speed or cost claim follows from that goal. Results depend on the model, protocol, hardware, network, and workload. See the evidence records for measured results and their limits.
Why PLLM
Ordinary hosted inference gives one provider the prompt, context, model state, and generated output. PLLM explores a different boundary: keep plaintext and private state in the client-controlled environment, and distribute protected computation across parties that are not assumed to share their views.
If this boundary can be made efficient and deployable, it could broaden the supply of useful AI compute. Buyers could compare independent, regional, and sovereign providers by price, location, latency, availability, and energy source without granting each provider access to plaintext language. These are intended economic and safety outcomes, not established production results.
Two connected systems
Multi-party inference runtime
Rust executes quantized integer matrix kernels, codecs, masking, and reconstruction. Python owns model orchestration, client and provider roles, checkpoint import, and the Responses API.
The current public-weight path prepares one-time matrix corrections before a request. Prompt text, token IDs, private activation scales, attention state, sampling, and decoded output stay inside the client boundary. Preparation and inference hold the public transformer body, but receive different protocol values at different times.
OFFLINE, before READY
Client Preparation Inference
authorize inventory ───▶ verify commitments ───▶ register inventory
stage seed + row count ───▶ derive one-time masks
compute W*r-s ───▶ store corrections
Client ◀────────────────────── acceptance acknowledgements ─ Inference
Client ─────────────────────── seal inventory ─────────────▶ READY
ONLINE, after reservation
Client Preparation Inference
ticket + x-r ───────────────────────────────────────────────▶ consume once
◀──────────────────────────────────────────────────── W*x-s
add s and decode idle public-body GEMM
Preparation is not part of the online request path. Starting a response reserves one-time rows. Completion, cancellation, or failure burns every unused row in that reservation.
Autonomous research harness
PLLM also supports a reproducible research loop:
- Lock the paper, source revision, artifact hash, and license.
- Reimplement the method independently in PLLM's Rust and Python stack.
- Test semantic fidelity, numeric behavior, and privacy assumptions separately.
- Benchmark matched plans and preserve negative results.
- Produce reviewable evidence and citation records without publishing claims automatically.
Upstream research implementations are specification and oracle inputs. They are not vendored, linked, or used as PLLM runtime dependencies. Automated assessment can organize evidence, but a person must review publication claims.
Trust boundary
The prepared public-weight path assumes honest-but-curious, non-colluding roles:
- Preparation must follow the protocol, erase expanded masks, and not collude with inference. Self-hosting preparation keeps that trust inside the client boundary.
- Inference does not receive plaintext activations, but it is assumed to perform the documented computation. Authentication alone does not prove correct model execution.
- Timing, public model identity, tensor shapes, traffic shape, and approximate sequence length can remain visible.
- Two services controlled by one operator do not provide meaningful non-collusion.
This is not a malicious-security claim or a security certification. Read SECURITY.md before moving a workload across machines.
Get started
PLLM supports Python 3.11 through 3.13. Install the command from PyPI with uv:
uv tool install pllm.run
pllm --version
pllm --help
pllm components list
For the Python SDK, add the same package to a project:
uv add pllm.run
uv run python -c "import pllm; print(pllm.__version__)"
The CLI inspects configurations and research records, runs benchmarks, and starts the gateway, inference, and preparation roles. To exercise all roles on one machine, run the development dashboard:
pllm dev dashboard --tiny --no-open
--tiny uses generated weights to test transport behavior. Its output is not
meaningful language and its measurements are not a production benchmark. Omit
--tiny to use the default public checkpoint.
For the next steps, use the authored guides:
Python API
The public package exposes planning, compilation, benchmark, assurance, and runtime APIs. This example only lowers and inspects a semantic model plan; it does not download weights or perform inference:
import pllm
from pllm.profiles import MaskedLinearCpu
config = {
"model_type": "qwen2",
"hidden_size": 896,
"intermediate_size": 4864,
"num_hidden_layers": 24,
"num_attention_heads": 14,
"num_key_value_heads": 2,
"vocab_size": 151936,
"max_position_embeddings": 32768,
"hidden_act": "silu",
"rms_norm_eps": 1e-6,
"rope_theta": 1000000,
"tie_word_embeddings": True,
}
plan = pllm.lower_model(
config,
batch=1,
max_input_tokens=128,
max_new_tokens=32,
)
coverage = plan.coverage(MaskedLinearCpu(pllm.Model("Qwen/Qwen2.5-0.5B-Instruct")))
print(plan.digest)
print(coverage.to_dict())
Checkpoint resolution uses the separate typed loader and can perform network and disk work:
model = pllm.Model.hf(
"Qwen/Qwen2.5-0.5B-Instruct",
revision="7ae557604adf67be50417f59c2c2f167def9a775",
)
manifest = pllm.load_model(model)
print(manifest.checkpoint_digest)
Semantic lowering, complete compiler coverage, runtime execution, model quality, privacy evidence, and deployment support are separate claims.
Development
uv sync --extra he --extra sdk
cargo test
cargo clippy --workspace --all-targets -- -D warnings
uv run pytest
uv run ruff check python/pllm scripts tests
uv build
After changing Rust code:
uv run maturin develop --release
PLLM_REQUIRE_RUST=1 uv run pytest -m rust
Documentation regeneration and checks:
npm --prefix docs ci
uv run python scripts/docs_regen.py
uv run python scripts/docs_regen.py --check
npm --prefix docs run typecheck
npm --prefix docs run build
See RELEASING.md for release instructions.
Repository boundaries
python/pllm is the only installed Python namespace. crates/pllm-core has no
Python dependency; crates/pllm-python exposes pllm._native. The Fumadocs site
under docs/, papers under paper/, historical measurements under
docs/evidence/, and research records under docs/data/research/ are not included
in the wheel.
Code is licensed under Apache 2.0. Model checkpoints have separate licenses.
Metadata
Release files for pllm.run 0.1.0a2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| pllm_run-0.1.0a2.tar.gz | 875.9 kB | Without provenance | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| pllm_run-0.1.0a2-cp311-abi3-win_amd64.whl | CPython 3.11 | abi3 | Windows x86-64 | Details |
| pllm_run-0.1.0a2-cp311-abi3-manylinux_2_28_x86_64.whl | CPython 3.11 | abi3 | Linux glibc 2.28+ x86-64 | Details |
| pllm_run-0.1.0a2-cp311-abi3-manylinux_2_28_aarch64.whl | CPython 3.11 | abi3 | Linux glibc 2.28+ ARM64 | Details |
| pllm_run-0.1.0a2-cp311-abi3-macosx_11_0_arm64.whl | CPython 3.11 | abi3 | macOS 11.0+ ARM64 | Details |
| pllm_run-0.1.0a2-cp311-abi3-macosx_10_12_x86_64.whl | CPython 3.11 | abi3 | macOS 10.12+ x86-64 | Details |
Total release size: 10.8 MB
Release files / pllm_run-0.1.0a2.tar.gz
| Download URL | pllm_run-0.1.0a2.tar.gz |
|---|---|
| Size | 875.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
283a0da93722d90daecce2d54c1c9d85e74e99d453fb1972bcb5f737cbc89b8f
|
|
BLAKE2b-256 checksum How to use checksums |
f77349e16b1cf33d17e27adf5f41b10300c78e129daa3f7cfc31be0e82dc07e5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / pllm_run-0.1.0a2-cp311-abi3-win_amd64.whl
| Download URL | pllm_run-0.1.0a2-cp311-abi3-win_amd64.whl |
|---|---|
| Size | 2.1 MB |
| Tags | CPython 3.11 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
3f5d6c7f99f760fe99e45cd8956b681c22ca5068a12d014c62ead22ff0cfd9ce
|
|
BLAKE2b-256 checksum How to use checksums |
4dcec5b8602ea7f50e70bf5f0968ea90baced682b9369d507eb9afd0263da22d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / pllm_run-0.1.0a2-cp311-abi3-manylinux_2_28_x86_64.whl
| Download URL | pllm_run-0.1.0a2-cp311-abi3-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 2.1 MB |
| Tags | CPython 3.11 Linux glibc 2.28+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
6dc06afe3d12c416a4a707ccf9ddfe4251948b7896e3f08f1aa85cc8193d5271
|
|
BLAKE2b-256 checksum How to use checksums |
5b458caa4695f944b490eedb7ae0468d81739175682bafc065c9286d93b89844
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / pllm_run-0.1.0a2-cp311-abi3-manylinux_2_28_aarch64.whl
| Download URL | pllm_run-0.1.0a2-cp311-abi3-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 1.9 MB |
| Tags | CPython 3.11 Linux glibc 2.28+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
8ab3aae1520b6c45bdf1d6e2a60bbb4be73b51d1a23d2745110901f54a04962f
|
|
BLAKE2b-256 checksum How to use checksums |
54d08c7954b00f3e00b502e4676edba9f97ea5e9d9ef64bba081395196396cc3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / pllm_run-0.1.0a2-cp311-abi3-macosx_11_0_arm64.whl
| Download URL | pllm_run-0.1.0a2-cp311-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 1.9 MB |
| Tags | CPython 3.11 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
0b3c9c34f64d5cc83fb078b91fd9541cd87a757b93a90ad0b2a54f0e2f2f9366
|
|
BLAKE2b-256 checksum How to use checksums |
2c691462bd40487e78569c8ba7303959fd57593a0a9a230de726683a91ad08d2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / pllm_run-0.1.0a2-cp311-abi3-macosx_10_12_x86_64.whl
| Download URL | pllm_run-0.1.0a2-cp311-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 2.0 MB |
| Tags | CPython 3.11 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
b5595ff58e5c06f7935f0fe00b79d5124c468d10d164ea0b8454d9c4db703a93
|
|
BLAKE2b-256 checksum How to use checksums |
68d64442b3901be91d06f37d926724de5228a444db7b1fc57389cd37c4d758e5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for pllm.run 0.1.0a2
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.