Skip to main content

ballast

Pull a quantized knowledge corpus — or build one from your own documents — and ground any local model. Works with Ollama and every OpenAI-compatible or MCP-capable client. Includes model profiling and a three-arm grounding benchmark, all CPU-only.

uvx openballast pull --level 3
uvx openballast serve

(Live on PyPI: pip install openballast also works.)

  • Ollama users: point your client's base URL at http://localhost:11435/v1 instead of http://localhost:11434/v1 — done. Every chat request is grounded with corpus facts before your model sees it. No tool calling needed, works with any model size.

  • MCP users (Claude Desktop, LM Studio, Cline, Goose): add to your MCP config:

    { "ballast": { "command": "uvx", "args": ["openballast", "mcp"] } }
    
  • Smoke test:

    uvx openballast lookup "Where was Douglas Adams born?"
    

What you're downloading

Ballast T0: 25.4M entities and 197M facts from Wikidata (CC0), quantized into nested levels — pick your knowledge size like you pick a GGUF quant:

level download on disk contains
L0 52 MB 0.2 GB top 0.5% most notable entities
L1 92 MB 0.35 GB top 1%
L2 159 MB 0.6 GB top 2%
L3 265 MB 1.0 GB top 4%
L4 427 MB 1.6 GB top 8%
L5 691 MB 2.6 GB top 16%
L6 1.1 GB 4.2 GB top 32%
L7 2.2 GB 9.2 GB everything

Levels are nested: pull --level 5 after pull --level 3 downloads only the new buckets. Everything runs offline after the pull — no network at answer time.

Measured effect (details: thesis): a 2B model + ~180 MB of ballast exceeds a 12B model's factual accuracy; hallucination on factual probes drops ~3×.

Commands

ballast pull  --level 3      # download / upgrade the corpus
ballast build ./docs -n team # build a corpus from YOUR documents (see below)
ballast serve                # OpenAI grounding proxy :11435 + MCP http :11436
ballast mcp                  # MCP on stdio (for client configs)
ballast lookup "question"    # print the evidence blocks for a question
ballast profile -m qwen3:8b  # where does this model's knowledge run out?
ballast eval    -m qwen3:8b  # three-arm benchmark: what does grounding buy?
ballast status               # installed corpora, levels, and sizes

BALLAST_HOME overrides the storage location (default ~/.ballast).

Bring your own corpus

ballast build turns a directory of .md / .txt files (and/or parquet with a text column, optional title and rank) into a servable corpus with the same layout as the published one:

ballast build ./handbook --name handbook
ballast lookup --corpus handbook "What is our deploy freeze policy?"
ballast serve  --corpus handbook

Documents are addressed by title; each becomes passage chunks the linker can attach to a question. A rank column (0..1, 1 = most important) spreads documents across nested levels so --level keeps the top slice; without ranks everything lands in one level.

Profile a model, then size the corpus for it

ballast profile -m qwen3:8b --limit 2000 --budget 2GB

Probes the model ungrounded against the public evalset, reports its accuracy per corpus region (head → tail), fits a grounding competence profile (.gcp.json), and — given a byte budget — recommends the corpus level where grounding still buys accuracy for THIS model. The profile carries a reliability AUC against a 0.58 gate; below the gate the recommendation falls back to the generic ordering.

Measure what grounding actually delivers

ballast eval -m qwen3:8b --limit 500

Every probe is asked three ways: ungrounded (U), with realized retrieval (R), and with oracle-entity evidence (S). The report is the delivery ratio (R − U) / (S − U) — the fraction of the reachable knowledge gap today's retrieval closes — plus coverage-conditional splits. Arms checkpoint to parquet and resume after interruption.

How it works

serve intercepts POST /v1/chat/completions, mines entity mentions from your last message, resolves them against the local corpus (normalized label/alias match), and prepends the matching facts as a system message. Everything else — including streaming — passes through untouched. The MCP server exposes the same three tools (resolve, evidence, lookup) as the hosted demo endpoint (mcp.openballast.org).

Apache-2.0. Corpus data: CC0 (Wikidata contributors).

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

openballast-0.2.2.tar.gz (35.0 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

openballast-0.2.2-py3-none-any.whl (34.9 kB view details)

Uploaded Python 3

File details

Details for the file openballast-0.2.2.tar.gz.

File metadata

  • Download URL: openballast-0.2.2.tar.gz
  • Upload date:
  • Size: 35.0 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for openballast-0.2.2.tar.gz
Algorithm Hash digest
SHA256 6fbd4fb6cbabbc4bf4699e70fb74361705e7554cb54c969b7ccecc98f6dc4657
MD5 65e6655126d5dd3c14356dc57ed5cc67
BLAKE2b-256 aacc0d6e3c6369d9d6a443bfff025158b77682e51987f5b98bf289871789a185

See more details on using hashes here.

File details

Details for the file openballast-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: openballast-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 34.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.0 {"installer":{"name":"uv","version":"0.12.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for openballast-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 25f3c07bcf80c91b9fd5f0ee1feed83937048f763ce131f4d84de45e2659733e
MD5 b97c317573264801576a62f8efc1028b
BLAKE2b-256 293ebd7568858801e906884d38305e60bf001c9663c5785ba78833ea1245df02

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page