Skip to main content

onpar

Prove which open model can replace your closed one — on your traffic, your hardware, your budget.

No config file. It reads your machine, sizes the KV cache per model, applies the licence gate, picks the engine, and sets the flags. Then it tells you whether the open model is actually good enough for your traffic, and hands you a receipt that says so.

uvx --from onpar onpar fit --context 32k --concurrency 8
  M4 Max · 16 cores · 128 GB · 546 GB/s
  usable for inference: 96 GB

  FEASIBLE at 32,768 context, concurrency 8

  model                     quant   weights      kv   total    free  ~tok/s  license
  ----------------------------------------------------------------------------------
  Qwen3 30B-A3B (MoE)       q8        28.4G   24.0G   56.2G   39.8G      60  Apache-2.0 OK
  Phi-4 14B                 q8        13.7G   50.0G   66.3G   29.7G      18  MIT OK

Every number answers --explain, which prints the arithmetic that produced it. Throughput is a memory-bandwidth roofline estimate, not a measurement, and says so wherever it appears.

Or just say what you're building

onpar with no arguments opens a conversation — one question at a time, asked only when the answer would change the plan. Stop whenever you like and you still leave with the best answer so far. In a script or a CI step it stays a usage error rather than waiting on input.

Then prove it, on your own traffic

Sizing tells you what fits. It cannot tell you whether the model is good enough, and no public benchmark can either, because it has never seen your traffic.

onpar observe --upstream https://api.openai.com/v1   # record, redacted before storage
onpar distill                                        # cluster it into an eval set
onpar prove evalset.json --incumbent-cost 2847 --candidate-cost 317 \
    --traffic-window '14 days' --resume run
onpar brief receipt.json --out brief.html            # one page for whoever signs off

The verdict is per task shape, never an average — a candidate can pass tool-calling and fail long-context, and one number hides that. Every claim carries a Wilson interval, and a cluster is proven only when its whole interval clears the bar.

The saving is a range, never a point: the share of traffic that moves is measured, so the dollars inherit its uncertainty. With no rate, no capture count, or under a week of traffic, it says the saving is unknown and names what would fix it.

For agents

onpar-mcp speaks MCP over stdio with zero dependencies: nine read-only tools, receipts and eval sets as resources confined to one root, and three pre-built workflows. An agent can size, prove and guard a migration. It cannot cut over — not by policy, but because no such tool exists to call.

Install

uv tool install onpar
pipx install onpar

The PyPI name is onpar; the command is onpar. pip install onpar installs an unrelated package.

Sizing, and the three ways it goes wrong

  • MoE needs total parameters resident. Sparsity cuts compute, not memory.
  • GQA must use kv_heads, not attention heads — up to 8× out otherwise.
  • MLA stores a compressed latent — roughly 50× out if you use the GQA formula.

Status

Pre-alpha, and honest about it: every number that is a projection says so, and a cell shows ? rather than a fabricated score.

Download files

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

Source Distribution

onpar-1.3.2.tar.gz (1.5 MB view details)

Uploaded Source

Built Distribution

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

onpar-1.3.2-py3-none-any.whl (435.0 kB view details)

Uploaded Python 3

File details

Details for the file onpar-1.3.2.tar.gz.

File metadata

  • Download URL: onpar-1.3.2.tar.gz
  • Upload date:
  • Size: 1.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for onpar-1.3.2.tar.gz
Algorithm Hash digest
SHA256 f5006ea66d53a61a1b300aa5ca1b6975bcbecf39f5afa4e3a58051fa1843cad1
MD5 d3ae2a5b068b912912972bc04ce7c69c
BLAKE2b-256 07d75e5418c690e1ce5f4edee4c5f67d0aa5f7b97fc341f4b21402f932eb39dd

See more details on using hashes here.

Provenance

The following attestation bundles were made for onpar-1.3.2.tar.gz:

Publisher: release.yml on dshakes/onpar

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file onpar-1.3.2-py3-none-any.whl.

File metadata

  • Download URL: onpar-1.3.2-py3-none-any.whl
  • Upload date:
  • Size: 435.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for onpar-1.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 be85b8873ee82e2e80f76cba5abdc1cb025560fae8471e21530dc6e7d9015137
MD5 93b1101aa9d243e2a572d025d403e02b
BLAKE2b-256 4126787624090d526b10f4b976a6ded472aba3f0a4f0c5bd10247b2dbabb9262

See more details on using hashes here.

Provenance

The following attestation bundles were made for onpar-1.3.2-py3-none-any.whl:

Publisher: release.yml on dshakes/onpar

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

1.3.4

2 files

1.3.3

2 files

This release

1.3.2 This release

2 files

1.3.1

2 files

1.3.0

2 files

Supported by

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