inference-vitals

See why your local model slowed down

A free dashboard for running and fine-tuning AI models on an Apple Silicon Mac. It sits beside whatever you run and puts the model and the machine on one timeline: tokens per second and loss beside memory, swap, GPU heat and power.

brew install uv prometheus macmon
uv tool install inference-vitals
inference-vitals start
open http://127.0.0.1:3000

v0.2.1 · MIT · PyPI · Linux with NVIDIA: experimental

80400 105°68°30° 0 min3064 36 min: GPU at 96 °C speed falls from 60 to 31 tok/s tokens per second GPU temperature
An illustrative run. Activity Monitor would show the heat, a benchmark the slowdown; here they share one clock, so the cause is plain.
The inference-vitals dashboard during a run: progress, writing and reading speed, time to first token, context used, GPU memory, swap, GPU temperature, thermal state and power, with charts of speed against temperature and memory against the GPU limit.
The page fits one screen: the live numbers stay in view while tabs swap the charts below them.

What it records

Both sides of a run, the model and the machine, read every few seconds and kept so you can look back over any range.

Model runs

  • Speed live while the answer is written
  • Time to first token, median and 95th percentile
  • Context used against the window
  • Answers cut off or invalid

Fine-tunes

  • Training and validation loss
  • Steps and time left, tokens trained per second
  • Still learning, or memorising its examples
  • Peak memory against the GPU limit

The machine

  • GPU memory left, memory pressure, swap
  • GPU use, temperatures, thermal state
  • Power and energy, and the AI's share of it
  • Battery: will it outlast the run?
Memory tab: the model's GPU memory against the GPU limit, memory pressure and swap over time.
Memory: the model against the GPU limit, and when swap starts.
Hardware tab: GPU and CPU power, temperatures and the energy used by the run.
Power and heat: what the run used, and at what temperature.
Training mode: training and validation loss, steps left and tokens trained per second during a fine-tune.
Fine-tunes: loss, time left, and whether it is still learning.

Connect what you run

The machine's numbers appear as soon as it starts. For the model's, put one line in front of what you already use.

You runThenMore
An engine with an HTTP API: Ollama, LM Studio, llama.cpp, the MLX servers, Jan, LocalAIinference-vitals proxy --to http://127.0.0.1:11434 and point your app at http://127.0.0.1:8401The proxy
Your own Python codeThree calls from inference_vitals.metricsThe library
A fine-tune: mlx-vlm, mlx-lm, or any training loopinference-vitals train -- <your training command>Training

It stays on your machine

Every service listens on 127.0.0.1, the page loads nothing from the internet, and only numbers are collected. Prompts, answers and file names never reach it.

It is Prometheus with a dashboard page of its own (or Grafana, with its reporting and sharing turned off), macmon for the chip on a Mac, small exporters for memory and the battery, the proxy, and a tiny Python library with no dependencies beyond Python itself.

The services take a few hundred MB of memory between them and very little CPU. More in privacy, overhead and limits.

Questions

Does it work with Ollama, LM Studio and llama.cpp?

Yes. Run inference-vitals proxy in front of any engine with an HTTP API (Ollama, LM Studio, llama.cpp, the MLX servers, Jan, LocalAI) and point your app at the proxy. It measures each request on its way through: speed while the answer is written, time to first token, context used, answers cut off or invalid. Your own Python code can report the same numbers with three calls.

Can it follow an MLX fine-tune?

Yes. Wrap the training command (inference-vitals train -- your command), follow its log file, or report from your own loop. It shows training and validation loss, steps and time left, tokens trained per second, peak memory against the GPU limit, and whether the model is still learning or has started memorising its examples.

Does anything leave my machine?

No. Every service listens on 127.0.0.1, the page loads nothing from the internet, and only numbers are collected: prompts, answers and file names never reach it. Configuration, history and logs stay in ~/.local/state/inference-vitals.

Does it slow the model down?

Very little. The services take a few hundred MB of memory between them and very little CPU, and an open page does nothing while its tab is hidden. For a run where speed matters, close the tab: Prometheus keeps recording, and you can look at the whole run afterwards.

Which machines does it run on?

Apple Silicon Macs (it reads the chip through macmon, which needs Apple Silicon, so not Intel Macs), and Linux with NVIDIA GPUs as an experimental option. AMD and Intel GPUs and Windows are not supported.

How is it different from Activity Monitor or nvtop?

Activity Monitor and nvtop show the machine and know nothing about models; benchmark apps time only the requests they send themselves. inference-vitals records both sides of whatever you run, the model and the machine, on the same timeline, so you can see why a run slowed down: the GPU got hot, the system started swapping, or a page was simply longer.