Installation
llmprof is a small Python package. It needs Python 3.9+ and runs entirely on your machine.
pipx (recommended)
Section titled “pipx (recommended)”pipx installs the llmprof CLI into its own isolated environment so it never
clashes with your project’s dependencies.
pipx install llmprofllmprof upnpx (no Python needed)
Section titled “npx (no Python needed)”Not a Python shop? Run llmprof straight from npm - no Python, pip, or virtualenv required:
npx llmprof upThe launcher bootstraps uv (a single static
binary that provisions its own Python) and runs the real llmprof package. The
first run downloads uv once and caches it under ~/.cache/llmprof; every
argument is forwarded, so npx llmprof traces and npx llmprof up --port 4100
work as expected.
Useful environment overrides:
LLMPROF_SPEC- the package spec to run (defaultllmprof==<launcher version>); point it at a path orgit+https://...URL for a dev build.LLMPROF_CACHE_DIR- where theuvbinary is cached.LLMPROF_UV- path to an existinguvbinary to use directly.
If you would rather install into the current environment (for example to use the Python SDK alongside your app):
pip install llmprofFrom source
Section titled “From source”While the project is pre-launch, or if you want to hack on it:
git clone https://github.com/luthraG/llmprofcd llmprofpip install -e .llmprof upDocker
Section titled “Docker”docker compose upThis serves the proxy and dashboard on port 4000 and keeps the trace database in a mounted volume so your history survives restarts.
Verify
Section titled “Verify”With the proxy running, check it is healthy and open the dashboard:
curl http://localhost:4000/llmprof/health# {"ok": true, "upstream": "https://api.openai.com"}Open http://localhost:4000 in a browser. It will be empty until you send a call - head to the Quickstart.
What gets stored, and where
Section titled “What gets stored, and where”llmprof writes captured traces to a single local SQLite file at
~/.llmprof/llmprof.db (override the directory with LLMPROF_HOME). Nothing is
sent anywhere except the upstream provider you are already calling. See
Storage backends to point it at a shared database
instead.