Working Set
Tools for scaling local LLM deployments: how many concurrent users or
agents a given GPU configuration can keep warm, where KV cache, decode
bandwidth, and prefill compute each become the binding constraint, and which
knob (topology, dtypes, max_num_seqs, prompt caching) buys the most headroom
for agentic coding workloads.
Start with the interactive explorer —
live sliders for the workload, model (Qwen3.8-27B / 35B-A3B /
Mistral-Medium-3.5 / GLM-5.3 / DeepSeek-V4-Flash / DeepSeek-V4.1-Flash /
Qwen3.8-Flash-Next /
GLM-5.3-Flash), GPU (H200 / B300), weight & KV dtypes, and DP × TP
topology. It answers as a decision tool: a binding-constraint verdict, a
deploy recipe (vLLM flags), the bill (€/GPU-hour and €/kWh sliders:
hardware plus a duty-cycle power model), a sensitivity panel showing which assumption
would flip the decision, the steady-state decode point (how many
sessions are actually decoding at your load, and how fast each one runs —
Little's law, not the all-warm stress test), shareable links that
encode the whole configuration, and a download button in the Test step
that hands out the configuration on screen as a workingset.toml — feed it to
ws test below and measure the real limits on a live vLLM endpoint.
The workingset package
The model behind the explorer is a Python package (src/workingset/, the
source of truth; the explorer's JS mirrors it), published on PyPI as
workingset. It ships one console
script, ws, so the package name travels in --from:
uvx --from workingset ws init --model Q38FN --gpu B300 --tp 8 --weight-dtype nvfp4 # writes workingset.toml
uvx --from workingset ws predict workingset.toml # the four ceilings, which one binds, the operating point
uvx --from workingset ws test workingset.toml --dry-run # the plan, the sampler self-check, no requests
uvx --from workingset ws test workingset.toml --all --exclusive --out run.json # measure it
or, as a dependency, pip install workingset / uv add workingset. From a
checkout the same commands run under uv run:
uv run ws init --model Q38FN --gpu B300 --tp 8 --weight-dtype nvfp4 # writes workingset.toml
uv run ws predict workingset.toml # the four ceilings, which one binds, the operating point
uv run ws predict workingset.toml --json # the same as a run record
uv run ws link workingset.toml # the explorer URL showing this config
uv run ws hypotheses # the H-* and what each one needs
uv run ws test workingset.toml --dry-run # the plan, the sampler self-check, no requests
uv run ws test workingset.toml --exclusive --out run.json # measure it
uv run ws report run.json # re-print the verdicts
uv run ws models # model / GPU keys
uv run pytest # self-checks + config round-trips
The explorer's workingset.toml needs no checkout at all: the three uvx
lines above are exactly what its Test step prints. To run
the model at a commit PyPI does not have yet, point --from at git:
uvx --from git+https://github.com/T0mSIlver/working-set ws ….
Predictions live in no file: ws predict recomputes them from the config every
time, so a config can never carry a number the code did not produce. A harness
.py downloaded from the explorer before the package existed still loads (its
CONFIG block is extracted).
ws link goes the other way: it prints the explorer share URL that opens the
page on a config (--base http://127.0.0.1:PORT/ for a local copy of
interactive/). The page has no control for subagent_prefix_tokens or
[endpoint], and
it clamps each slider to its range and resets combinations it does not price,
so when a config sets one of those, or a value the page would move, ws link
names the field on stderr with what the page shows instead.
ws test puts the predictions to a live endpoint, one falsifiable hypothesis
at a time. Without --exclusive it runs only the hypotheses that need a
handful of requests (miss TTFT, the inter-token gap distribution, the steady
decode point) and lists the rest as skipped — a hypothesis that has to
generate its own population is never measured against someone else's load.
With --exclusive it drives the geometric load ladder once, and every ceiling
reads from it. --burst N adds the correlated-flush probe (B*).
--tokenizer Qwen/Qwen3.8-27B sizes the synthetic prompts with the model's
real tokenizer (via toklen; add
--with toklen to the uvx line) instead of the chars-per-token guess.
For a vision model, set image_share in [workload] (with
images_per_request, image_width and image_height) and pass --api chat:
that share of warm turns then attaches generated PNGs, which stay in the
session history, and the report splits warm-turn TTFT by whether the turn
sent a new image. The model does not price images yet.
Contents
-
docs/writeup.md — baseline study: KV-cache capacity and the prompt-caching / offload /
max_num_seqstrade-offs. -
docs/scenarios.md — extended scenario model: multi-GPU topologies, MoE vs dense, subagent workloads, the cost of a cache miss, and cold-spike tolerance.
-
scripts/ — everything is reproducible:
uv run ws selfcheck # the shared model's self-checks (src/workingset/model.py) uv run scripts/scenarios.py # renders the scenario figures uv run scripts/tables.py # regenerates every number in docs/scenarios.md
-
research/ — sourced constants for each model and GPU.
-
interactive/ — the explorer, a dependency-free page mirroring the Python model:
index.htmlholds the markup and styles,src/*.jsthe model and the charts as ES modules (src/main.jsis the entry and lists the layering). Browsers refuse module scripts fromfile://, so serve the folder to open it locally:python3 -m http.server 8000 --directory interactive # then http://localhost:8000
Method, calibration, and caveats are laid out in the docs above.
MIT licensed; see LICENSE.
Metadata
Release files for workingset 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| workingset-0.2.0.tar.gz | 293.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| workingset-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 602.8 kB
Release files / workingset-0.2.0.tar.gz
| Download URL | workingset-0.2.0.tar.gz |
|---|---|
| Size | 293.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
115da1d60c2580639043815429e755c2d02ba3cd3701b3600f15fe56531e6635
|
|
BLAKE2b-256 checksum How to use checksums |
b19bbaa17fb6bdf36238fedb26366e5ffd71e1af8118605b2083cf5651a856e2
|
| 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 30, 2026.
Transparency logRelease files / workingset-0.2.0-py3-none-any.whl
| Download URL | workingset-0.2.0-py3-none-any.whl |
|---|---|
| Size | 309.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f1b6d705a663f85e89e27f978be472d95f850cf3ae36b41d9e3ec5795c47ce1b
|
|
BLAKE2b-256 checksum How to use checksums |
a147c2766eec40736769404069b2eb86b5bd71826baafa5f71aeb75006a04af2
|
| 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 30, 2026.
Transparency log