Skip to main content

win-llmtop

A live terminal panel for llama.cpp's llama-server on Windows. It shows where the memory goes while a model runs: dedicated and shared GPU memory per process against the OS budget, system RAM, commit charge and the page file, the running request's progress and speed, the history of finished requests, and the model's memory map. It is read-only: it reads the server's API and logs and Windows' performance counters, and never changes the server.

Requirements

  • Windows 10 version 1709 or later (the per-process GPU counters appear in that release);
  • 64-bit Python 3.11 or later;
  • no other packages (the standard library only);
  • a llama.cpp llama-server — in router mode or serving a single model — on the same machine.

Install

pipx install win-llmtop

(recommended: an isolated install with win-llmtop on PATH), or uv tool install win-llmtop, or py -m pip install win-llmtop.

Getting 64-bit Python on Windows: python.org's Windows installer, or winget install Python.Python.3.13.

From source: py -m pip install git+https://github.com/insane-kane/win-llmtop, or clone the repository and run py llmtop.py.

A signed standalone win-llmtop.exe and a winget package are planned for 0.1.1.

First run

Run win-llmtop --check. It reports on the prerequisites and the sources it can reach, one line each, and exits 0 when the server is reachable and the GPU telemetry is present, 1 otherwise:

Line What it checks
windows the Windows build and the Python version and bitness; ok on 64-bit Windows
gpu the DXGI adapters (name, VRAM, the OS budget), which adapter it is watching, and whether the PDH GPU counters are present
processes the llama-server processes it found (pid and executable)
server the URL it uses and how it found it, the mode (router or single), how many models the server reports, and whether /slots is reachable
logs for each model, the log path and whether it exists and has timestamps; and the router log
llama-fit-params where it found the llama-fit-params helper (next to the server, on PATH, or not found)
state the state folder and whether it is writable
notice any notices, such as single-model mode, a server found by discovery, a missing log, or a log without timestamps

Getting the most from it

llmtop shows whatever it can reach. A few flags on the llama-server, and options on llmtop, unlock more:

  • --log-file (one per model; in router mode, the preset's log-file) and --log-timestamps: these give llmtop the per-model log it reads for the request history — per-request timings, draft acceptance, prefix reuse. Without a log file llmtop can find (give --log-file, or --log-dir so it can build <log-dir>\<preset>.log), the request history is empty and llmtop prints a notice. Without --log-timestamps the log lines carry no timestamps, so the history keeps its relative timings but has no wall-clock times, and llmtop prints a notice suggesting the flag.
  • --slots enabled: the running request's live progress — its phase, how far prefill or decode has got, the current t/s and the context fill — is read from the server's /slots endpoint. Without it the endpoint is off, so llmtop shows the memory and system figures but not the in-flight request, and raises a warning telling you to start the server with --slots.
  • For the router's own events — model loads, queueing, evictions — point --router-log at the router's log file, or --log-dir at the folder it writes its llama-server-<date>-<time>.log files into. Without either, llmtop cannot find the router log and those events are not shown.

Usage

Run win-llmtop for the live view. win-llmtop --once prints one snapshot and exits; --once --page all prints every page. win-llmtop --plan [PRESET] projects each preset's VRAM against the OS budget without loading anything.

Keys: 1–6, Tab, or ← → switch pages; [ ] change the history window; g sets the graph height; s switches the graph style; ↑ ↓ PgUp PgDn Home End scroll every page except Live; p or Space pauses the display (collection continues); q quits. On the Memory and Tensors pages m cycles models; on Requests m filters by preset; on Events f filters by level; on Tensors t switches between layers and every tensor and d filters by device.

Page Content
Live alerts; GPU and RAM with trend charts; the running request's phase, progress and t/s; recent requests and events
Memory VRAM by component against the OS budget, llama-server's own RAM, the layer overview
System system RAM by consumer, the page file, RAM and paging trends
Requests per-preset volume and speed, prefill by prompt size, decode by context depth, every request
Events alerts, model loads, queueing, evictions, slot picks, errors
Tensors every layer or tensor with its type, shape, size and device

Options, with their environment variables and defaults:

Option Environment variable Default
-h, --help — show the help and exit
--check — off
--once — off
--page — live
--plan [PRESET] — off
--window — 5m
--router URL LLMTOP_ROUTER find it
--log-dir DIR LLMTOP_LOG_DIR (none)
--router-log PATH — (none)
--state-dir DIR LLMTOP_STATE_DIR %LOCALAPPDATA%\win-llmtop
--api-key KEY LLMTOP_API_KEY or LLAMA_API_KEY (none)
--gpu INDEX|NAME — the adapter the model runs on
--hz HZ — 4.0
--history-hours H — 24
--spill-mib N — 256
--threshold NAME=VALUE — (none)
--no-persist — off
--graph-style — braille in Windows Terminal, blocks otherwise
--no-color — off
--width N — the terminal width

Where it keeps its files

By default, %LOCALAPPDATA%\win-llmtop\ (override with --state-dir or LLMTOP_STATE_DIR). It holds:

  • samples-<date>.jsonl — one sample per 5 s plus alert events, 14 days kept, so the sparklines and the event list span restarts;
  • requests.jsonl — finished requests, kept because llama-server rewrites a model's log each time that model loads;
  • calibration.json — the VRAM overhead learned per configuration.

--no-persist turns the writing off; a read-only run still replays whatever is already there.

Limits

  • Which allocation or tensor is in shared GPU memory cannot be told from the counters; only how much.
  • The OS budget comes from DXGI for llmtop's own process; the model's budget may differ.
  • GPU temperature and power are not exposed by Windows' counters and are not shown.
  • The address-space walk shows what kind of memory the process holds, not which allocation is the prompt cache or a checkpoint; the log carries no cache sizes at its default verbosity, so only the configured limits are shown.
  • Prefill progress advances once per batch (--batch-size), so the live prefill rate is the rate over the last completed batch.
  • KV and state figures are derived; they were checked against llama-fit-params on a hybrid model and a sliding-window mixture-of-experts model, and on any architecture the Memory page reports whether they agree.
  • Fixed assumptions: llama.cpp's tensor naming, its offload rules, the GGUF type sizes, and the log line formats of build b11669. The alert thresholds, the colour thresholds for t/s and the size buckets of the Requests page are display or policy choices, not measurements.

Licence

GNU General Public License, version 3 or (at your option) any later version (GPL-3.0-or-later); see LICENSE.

Metadata

Release files for win-llmtop 0.1.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 win-llmtop 0.1.0
File Size Uploaded Provenance
win_llmtop-0.1.0.tar.gz 99.9 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for win-llmtop 0.1.0
File Interpreter ABI Platform
win_llmtop-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 181.2 kB

Release files / win_llmtop-0.1.0.tar.gz

Download URL win_llmtop-0.1.0.tar.gz
Size 99.9 kB
Tags Source
SHA-256 checksum
How to use checksums
45834a3e062d7c6e61a97a5f1f5f68df0555a2b1960c7da1d2980161f23091f5
BLAKE2b-256 checksum
How to use checksums
06e8ece1c3dc8e233e95ae70b64bec300279b1d47404003f671f1c70aaf33440
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 20, 2026.

Transparency log

Release files / win_llmtop-0.1.0-py3-none-any.whl

Download URL win_llmtop-0.1.0-py3-none-any.whl
Size 81.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ce8c0bb4e6a9473715389a265c4ecac1a4b7ce42273bdd03e876d605743ba47d
BLAKE2b-256 checksum
How to use checksums
cfea926355fe92820f264cda2864a774a3ec5ebfc8b9fab1562285bc1b0440ec
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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 Oct 20, 2026.

Transparency log

Security for win-llmtop 0.1.0

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.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for win_llmtop-0.1.0.tar.gz

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 Oct 20, 2026.

Transparency log

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.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files Full provenance

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