CLI + TUI tool for benchmarking Ollama models side-by-side
Project description
ollama-profiler
Benchmark and compare Ollama model performance side-by-side.
Single binary. No dependencies. Works on macOS, Linux, and Windows.
Features
- Side-by-side comparison of multiple models on identical prompts
- Interactive TUI with live progress, color-coded results, and Unicode bar charts
- Rich CLI mode with styled terminal output (no TUI required)
- Multiple scheduling modes — sequential, round-robin, randomized rounds, or Latin-square balanced
- Statistical summary — mean, stddev, min/max, relative performance, winner highlighting
- Export — JSON, self-contained HTML report, and retina-quality PNG charts
- Warmup & cooldown — control for cold-start and thermal throttling effects
- Dry-run mode — test the UI without a running Ollama instance
Install
curl -fsSL https://raw.githubusercontent.com/piercecohen1/ollama-profiler/main/install.sh | sh
Or build from source:
go install github.com/piercecohen1/ollama-profiler@latest
Quick Start
# Compare two models (3 runs each, CLI output)
ollama-profiler gemma4:e4b llama3.2:3b
# Interactive TUI
ollama-profiler --tui
# Rigorous comparison with balanced scheduling
ollama-profiler gemma4:e4b gemma4:26b gemma4:31b \
-n 4 --rounds 4 --balanced --warmup --cooldown 30
Usage
ollama-profiler [models...] [flags]
| Flag | Description | Default |
|---|---|---|
--tui |
Interactive TUI mode | — |
-n, --runs |
Runs per model per round | 3 |
--rounds N |
Number of rounds (randomized order per round) | 1 |
--balanced |
Latin-square positional balancing (with --rounds) |
— |
--round-robin |
Interleave models each run | — |
--warmup |
Uncounted warmup run per model | — |
--cooldown SEC |
Sleep between rounds | 0 |
-p, --prompt |
Prompt text | "Write a 200 word explanation..." |
--prompt-file |
Read prompt from file | — |
--num-predict N |
Max tokens to generate per run (0 = unlimited) | 256 |
--seed N |
Random seed for deterministic output (0 = random) | 42 |
--think |
Allow model thinking tokens | — |
--json FILE |
Export results to JSON (includes metadata) | — |
--no-per-run |
Skip per-run detail tables | — |
--dry-run |
Fake data, no Ollama needed | — |
--url |
Ollama API base URL | $OLLAMA_HOST or http://localhost:11434 |
Scheduling Modes
| Mode | Flag | Behavior |
|---|---|---|
| Sequential | (default) | All runs of A, then B, then C. Model stays loaded in VRAM. |
| Round Robin | --round-robin |
Cycle A, B, C, A, B, C... Forces model reloading. |
| Random Rounds | --rounds N |
N rounds, model order randomized each round. |
| Balanced | --rounds N --balanced |
Latin-square rotation for positional fairness. Requires N >= len(models). |
Metrics
| Metric | Unit | Description |
|---|---|---|
| TTFT | ms | Time to first token |
| Generation TPS | tok/s | Token generation throughput |
| Prompt Eval TPS | tok/s | Prompt processing throughput |
| Total Duration | ms | End-to-end inference time |
| Load Duration | ms | Model load time |
| Eval Time | ms | Generation duration |
| Prompt Tokens | tok | Input token count |
| Generated Tokens | tok | Output token count |
Export
Press e in the TUI results screen to export:
ollama-profiler-2024-01-15-1430/
├── results.json # Raw metrics data
├── report.html # Self-contained dark-themed HTML report
└── charts.png # Retina-quality bar charts (generated natively)
Requirements
- Ollama running locally (or specify
--urlfor remote) - At least one model pulled (
ollama pull gemma4:e4b)
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ollama_profiler-0.1.0-py3-none-win_arm64.whl.
File metadata
- Download URL: ollama_profiler-0.1.0-py3-none-win_arm64.whl
- Upload date:
- Size: 8.7 MB
- Tags: Python 3, Windows ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
69d3be5a09cfe16e45f4a7bb9ac65d61e4c4ee565a8a558ea948f31aeaf050bd
|
|
| MD5 |
9852497a5266ae59383b185601af7c95
|
|
| BLAKE2b-256 |
80ab007d07c35a33b51e5f6714b32dae027855fcdb34677ae67b769eac325d49
|
Provenance
The following attestation bundles were made for ollama_profiler-0.1.0-py3-none-win_arm64.whl:
Publisher:
publish.yml on piercecohen1/ollama-profiler
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ollama_profiler-0.1.0-py3-none-win_arm64.whl -
Subject digest:
69d3be5a09cfe16e45f4a7bb9ac65d61e4c4ee565a8a558ea948f31aeaf050bd - Sigstore transparency entry: 1247223469
- Sigstore integration time:
-
Permalink:
piercecohen1/ollama-profiler@01c1149d932b809af11282af7da55751b7729120 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/piercecohen1
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@01c1149d932b809af11282af7da55751b7729120 -
Trigger Event:
release
-
Statement type:
File details
Details for the file ollama_profiler-0.1.0-py3-none-win_amd64.whl.
File metadata
- Download URL: ollama_profiler-0.1.0-py3-none-win_amd64.whl
- Upload date:
- Size: 9.5 MB
- Tags: Python 3, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aadeab346357edd4b770cad7f7c59c373d4ebcd1e50a0b63df6aac5ea46ad885
|
|
| MD5 |
5ba32c7f78c4adf3a778da800fd50a73
|
|
| BLAKE2b-256 |
fe55c933a0fbc67818e1db087e42105a668b422831ac0916c2aa1a3626f5f78d
|
Provenance
The following attestation bundles were made for ollama_profiler-0.1.0-py3-none-win_amd64.whl:
Publisher:
publish.yml on piercecohen1/ollama-profiler
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ollama_profiler-0.1.0-py3-none-win_amd64.whl -
Subject digest:
aadeab346357edd4b770cad7f7c59c373d4ebcd1e50a0b63df6aac5ea46ad885 - Sigstore transparency entry: 1247223475
- Sigstore integration time:
-
Permalink:
piercecohen1/ollama-profiler@01c1149d932b809af11282af7da55751b7729120 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/piercecohen1
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@01c1149d932b809af11282af7da55751b7729120 -
Trigger Event:
release
-
Statement type:
File details
Details for the file ollama_profiler-0.1.0-py3-none-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: ollama_profiler-0.1.0-py3-none-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 9.2 MB
- Tags: Python 3, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fce14517adf5c51b0749dc08ce0ff9a50d7b9530cda2779361126fcb771aaa9c
|
|
| MD5 |
4a5fb7e8eb87c7212775066d4e2647cf
|
|
| BLAKE2b-256 |
d0b32ae0d2493932f97ddfb1dc31d032a7101306678a2b492bba2386da3b30f7
|
Provenance
The following attestation bundles were made for ollama_profiler-0.1.0-py3-none-musllinux_1_2_x86_64.whl:
Publisher:
publish.yml on piercecohen1/ollama-profiler
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ollama_profiler-0.1.0-py3-none-musllinux_1_2_x86_64.whl -
Subject digest:
fce14517adf5c51b0749dc08ce0ff9a50d7b9530cda2779361126fcb771aaa9c - Sigstore transparency entry: 1247223485
- Sigstore integration time:
-
Permalink:
piercecohen1/ollama-profiler@01c1149d932b809af11282af7da55751b7729120 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/piercecohen1
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@01c1149d932b809af11282af7da55751b7729120 -
Trigger Event:
release
-
Statement type:
File details
Details for the file ollama_profiler-0.1.0-py3-none-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: ollama_profiler-0.1.0-py3-none-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 8.6 MB
- Tags: Python 3, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
283bec00b691b77a851c04779e2cac441f311d1c9cdce29a3108c93a7a28f388
|
|
| MD5 |
61aa496eb65306c93b56f2c6e6071259
|
|
| BLAKE2b-256 |
13f1da1013d44b54a7080fa69cb9ae36b5a360663845edf37dffafc8c46132e0
|
Provenance
The following attestation bundles were made for ollama_profiler-0.1.0-py3-none-musllinux_1_2_aarch64.whl:
Publisher:
publish.yml on piercecohen1/ollama-profiler
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ollama_profiler-0.1.0-py3-none-musllinux_1_2_aarch64.whl -
Subject digest:
283bec00b691b77a851c04779e2cac441f311d1c9cdce29a3108c93a7a28f388 - Sigstore transparency entry: 1247223451
- Sigstore integration time:
-
Permalink:
piercecohen1/ollama-profiler@01c1149d932b809af11282af7da55751b7729120 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/piercecohen1
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@01c1149d932b809af11282af7da55751b7729120 -
Trigger Event:
release
-
Statement type:
File details
Details for the file ollama_profiler-0.1.0-py3-none-manylinux_2_17_x86_64.whl.
File metadata
- Download URL: ollama_profiler-0.1.0-py3-none-manylinux_2_17_x86_64.whl
- Upload date:
- Size: 9.2 MB
- Tags: Python 3, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3a2182c3654f85e87309a779afe7d78f33d8b12a82f45008e0eca2c93ae3f233
|
|
| MD5 |
b4fc4afa45729855b2cd2b92fba25b33
|
|
| BLAKE2b-256 |
6f2809d4f1bede48784d61b1086a2f68220272ff253dac519654a6c502cca5a2
|
Provenance
The following attestation bundles were made for ollama_profiler-0.1.0-py3-none-manylinux_2_17_x86_64.whl:
Publisher:
publish.yml on piercecohen1/ollama-profiler
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ollama_profiler-0.1.0-py3-none-manylinux_2_17_x86_64.whl -
Subject digest:
3a2182c3654f85e87309a779afe7d78f33d8b12a82f45008e0eca2c93ae3f233 - Sigstore transparency entry: 1247223459
- Sigstore integration time:
-
Permalink:
piercecohen1/ollama-profiler@01c1149d932b809af11282af7da55751b7729120 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/piercecohen1
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@01c1149d932b809af11282af7da55751b7729120 -
Trigger Event:
release
-
Statement type:
File details
Details for the file ollama_profiler-0.1.0-py3-none-manylinux_2_17_aarch64.whl.
File metadata
- Download URL: ollama_profiler-0.1.0-py3-none-manylinux_2_17_aarch64.whl
- Upload date:
- Size: 8.6 MB
- Tags: Python 3, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4184f220b2ca530679b55d49d714071e937489c7f3121de54a770d6d9bdcb9fc
|
|
| MD5 |
0cdd87038d8abdf37caf829185b7cbbe
|
|
| BLAKE2b-256 |
8e0481715383953083e7e22c6ca3f830ece14b42fd2d44f2eda6226305761ec5
|
Provenance
The following attestation bundles were made for ollama_profiler-0.1.0-py3-none-manylinux_2_17_aarch64.whl:
Publisher:
publish.yml on piercecohen1/ollama-profiler
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ollama_profiler-0.1.0-py3-none-manylinux_2_17_aarch64.whl -
Subject digest:
4184f220b2ca530679b55d49d714071e937489c7f3121de54a770d6d9bdcb9fc - Sigstore transparency entry: 1247223497
- Sigstore integration time:
-
Permalink:
piercecohen1/ollama-profiler@01c1149d932b809af11282af7da55751b7729120 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/piercecohen1
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@01c1149d932b809af11282af7da55751b7729120 -
Trigger Event:
release
-
Statement type:
File details
Details for the file ollama_profiler-0.1.0-py3-none-macosx_11_0_arm64.whl.
File metadata
- Download URL: ollama_profiler-0.1.0-py3-none-macosx_11_0_arm64.whl
- Upload date:
- Size: 8.7 MB
- Tags: Python 3, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d8e6edf018caa47114f3440892a24f136d527f3b2711cb962323c420877f602b
|
|
| MD5 |
c2f2b2086ef77ec7d1d2134cc6a02be0
|
|
| BLAKE2b-256 |
92be87d956178f34c40928e9229590f6696f320396cc5d83dc953ada57f88a79
|
Provenance
The following attestation bundles were made for ollama_profiler-0.1.0-py3-none-macosx_11_0_arm64.whl:
Publisher:
publish.yml on piercecohen1/ollama-profiler
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ollama_profiler-0.1.0-py3-none-macosx_11_0_arm64.whl -
Subject digest:
d8e6edf018caa47114f3440892a24f136d527f3b2711cb962323c420877f602b - Sigstore transparency entry: 1247223447
- Sigstore integration time:
-
Permalink:
piercecohen1/ollama-profiler@01c1149d932b809af11282af7da55751b7729120 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/piercecohen1
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@01c1149d932b809af11282af7da55751b7729120 -
Trigger Event:
release
-
Statement type:
File details
Details for the file ollama_profiler-0.1.0-py3-none-macosx_10_9_x86_64.whl.
File metadata
- Download URL: ollama_profiler-0.1.0-py3-none-macosx_10_9_x86_64.whl
- Upload date:
- Size: 9.4 MB
- Tags: Python 3, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f2678447a13f1848a82a08656941fbf6d7a4f857d6f7d972235d3ed6b0e4e14f
|
|
| MD5 |
fd3266170330bbd7e52a7d10f967cf92
|
|
| BLAKE2b-256 |
5229c8bffe3eca9aabf0ad57ab5179de2e97fb4e9b57128b02e0b2c040d7897d
|
Provenance
The following attestation bundles were made for ollama_profiler-0.1.0-py3-none-macosx_10_9_x86_64.whl:
Publisher:
publish.yml on piercecohen1/ollama-profiler
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ollama_profiler-0.1.0-py3-none-macosx_10_9_x86_64.whl -
Subject digest:
f2678447a13f1848a82a08656941fbf6d7a4f857d6f7d972235d3ed6b0e4e14f - Sigstore transparency entry: 1247223437
- Sigstore integration time:
-
Permalink:
piercecohen1/ollama-profiler@01c1149d932b809af11282af7da55751b7729120 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/piercecohen1
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@01c1149d932b809af11282af7da55751b7729120 -
Trigger Event:
release
-
Statement type: