Skip to main content

About

A 30B MoE model uses only a handful of its experts for any given word, but every runtime keeps all of them in memory. bigrig keeps a bounded set in RAM and reads the rest from SSD, or shrinks the model to fit — your choice, asked before anything changes — while a quality meter watches the output and tells you if the trade went too far.

  • Three strategies, chosen for you. Run it untouched, shrink it to fit, or stream it from disk. Picked in increasing order of what each costs you: nothing, then accuracy, then speed.
  • It asks before changing your model. Shrinking is the only path that alters weights, so it is the only one that needs your agreement — and every run afterwards still prints which mode it is serving.
  • Streaming is bit-exact. Not "close". The same model resident and streamed at a 36.75% cache-miss rate scored identical perplexity to ten decimal places.
  • A quality meter, running live. No reference answer, no second forward pass. It separates a healthy model from a damaged one at 0.0% vs 36.7% of tokens flagged.
  • Nothing extra on disk. Experts are read straight out of the downloaded safetensors, so preparing a model writes nothing at all.
  • Speaks OpenAI and Anthropic. Including a one-command hook into Claude Code, and a web interface for people who would rather not use a terminal.

Getting started

Install

pip install bigrig

That is the whole install on an Apple Silicon Mac — it brings MLX with it. rig and bigrig are the same command. Other ways to install, including from source.

Three commands to a running model

bigrig doctor mlx-community/Qwen3-30B-A3B-4bit    # will it run here, and how fast? nothing downloaded
bigrig serve  mlx-community/Qwen3-30B-A3B-4bit    # download it, tune it once, run it

doctor is the one worth running first: it says whether a model fits before you spend an hour downloading one that does not, and roughly how fast it will be — FAST, GOOD, USABLE or SLOW, pinned to measured runs. When nothing would make it fit, it says IMPOSSIBLE ON THIS MAC and stops there. Misspell a name and it offers the three closest.

serve downloads the model if needed, and the first run measures itself: a minute or two finding how many experts to keep in memory for the best speed on your Mac, remembered from then on. Then it tells you exactly what it is about to serve, and where to find it:

  bigrig serving OLMoE-1B-7B-0125-Instruct-4bit on http://127.0.0.1:8080
  running EXACT at 4-bit, fully in RAM (untouched)
  quality monitor: on

  open  http://127.0.0.1:8080  in a browser to chat and watch quality
  api   127.0.0.1:8080/v1/chat/completions   (OpenAI)
        127.0.0.1:8080/v1/messages           (Anthropic -- Claude Code)
  agent bigrig launch OLMoE-1B-7B-0125-Instruct-4bit

That second line is printed on every run. Whatever mode you are in, the precision being served is never a surprise.

Then pick whichever suits you

A coding agent — the browser page has a Code tab with the one command that wires each one up, and it says up front whether the model you loaded can call tools at all. An agent pointed at a model that cannot does not fail loudly; it answers the question instead of doing the work.

bigrig launch Qwen3-30B-A3B-3bit                  # Claude Code
bigrig launch --agent codex Qwen3-30B-A3B-3bit    # Codex CLI

A browser — open http://127.0.0.1:8080. Chat with streaming replies, a creativity slider, and standing instructions the model reads before every message — a role, a language, rules — kept in your browser. Along the side: the model, the mode it is running in, memory held, live tokens/second, and an anomaly indicator that turns amber mid-generation if the model starts looping. A Console page shows where every gigabyte goes and lets you change how many experts stay in memory; a Code page wires up coding agents. One self-contained page, no CDN, nothing to install.

Claude Code — one command, which starts the server and points the agent at it:

rig launch OLMoE-1B-7B-0125-Instruct-4bit

Nothing on disk is changed: the environment variables are set on the agent's process only.

Your own code — both APIs are served on the same port, so any client library works by changing its base URL:

POST /v1/chat/completions      OpenAI
POST /v1/messages              Anthropic

A terminal — rig run <model>.


What happens when a model doesn't fit

bigrig stops and asks, because the two ways forward cost different things:

    [1] Shrink it to fit     full speed, but THE WEIGHTS CHANGE
    [2] Keep it exact        bit-for-bit identical, streamed from disk, slower

Your answer is remembered, and every run still prints which one it is serving. In a script with neither --compress nor --exact, it refuses rather than guessing — quietly serving a degraded model is worse than stopping.

It will also tell you not to use it. If a model already fits, bigrig loads it normally and says so; putting the engine in front of a model that doesn't need it only makes it slower.

And it will tell you when nothing would help. Some models need more memory than your Mac has at any setting. doctor says so before a download — IMPOSSIBLE ON THIS MAC, with the number — and nothing else in bigrig tries to talk you past it.


Measurements

On an M4 MacBook Air (24 GB). Nothing here is projected.

Shrinking vs streaming, at the same memory (OLMoE-1B-7B, wikitext-2):

memory shrink (all in RAM) stream (exact) which wins
2.82 GB 3-bit, 92 tok/s, +17% perplexity 50 tok/s, exact shrink
2.62 GB 3-bit, 111 tok/s, +18% perplexity 25 tok/s, exact shrink, 4.4×
2.01 GB 2-bit, 110 tok/s, +83% perplexity 17 tok/s, exact stream

Below 3 bits is a cliff, not a bargain — so 3 bits is the floor, and going lower takes an explicit --min-bits 2.

Full write-up, including the negative results: docs/MEASUREMENTS.md.


The quality meter on its own

bigrig_layer is independent of the engine. It watches any model's output distribution and flags degradation with no reference answer and no second forward pass — and it works against Ollama, llama.cpp and the OpenAI API too:

from bigrig_layer import AdaptiveMeter

m = AdaptiveMeter()
for step in generation:
    m.observe(probs)
    m.observe_token(tok)
    if m.is_degraded():
        print("quality problem:", m.reason())

Repository layout

bigrig_engine/     the engine — strategy, streaming, precision, serving, web UI, CLI
bigrig_layer/      the quality meter (standalone, engine-agnostic)
tests/               ./run-tests.sh runs every assertion
docs/                install, quickstart, models, cli, design, measurements
src/  notes/         research scripts and lab notebook — not shipped

See CONTRIBUTING.md for how the tests are written and why.

Requirements

Apple Silicon (M1 or later), macOS, Python 3.10+.

Licence

Apache License 2.0. Use it, modify it, ship it commercially — keep the notice and don't sue us over patents.

Metadata

Release files for bigrig 0.4.0

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

Source distribution (sdist)

Source distribution for bigrig 0.4.0
File Size Uploaded
bigrig-0.4.0.tar.gz 461.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for bigrig 0.4.0
File Interpreter ABI Platform
bigrig-0.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 786.2 kB

Release files / bigrig-0.4.0.tar.gz

Download URL bigrig-0.4.0.tar.gz
Size 461.7 kB
Tags Source
SHA-256 checksum
How to use checksums
1dad6087f5a95f83b427e00004507ed5a6623b7544c72c7a7e97225289759b73
BLAKE2b-256 checksum
How to use checksums
c41697b2ffec2a7f5c1cba04314aef52738f2e8b3bbb969e737222d9ba37ac9d
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 2, 2026.

Transparency log

Release files / bigrig-0.4.0-py3-none-any.whl

Download URL bigrig-0.4.0-py3-none-any.whl
Size 324.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6e3b388f3b3c422d1c253d7c76d4f6c9f116edfb1b7c52438cbdb4ea7d2eb571
BLAKE2b-256 checksum
How to use checksums
dde3906e512aaf3bcad4a099307d3a90626e4653950791da9da9913f26cb2f96
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 2, 2026.

Transparency log

Release history Release notifications | RSS feed

0.9.1

2 release files

0.9.0

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.0

2 release files

This release

0.4.0 This release

2 release files

0.2.0

2 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