This release has been yanked by its maintainers, and will be ignored by installers, except when explicitly specified.
evalstand
Status: in development. Phase 0 of 7. This release is a name reservation placeholder and contains no working code. The example below shows the intended API, which is not implemented yet.
Evaluating an LLM application should feel like running a test suite.
evalstand is a local-first LLM evaluation tool for Python. You write an eval
file, run a watch command, and results stream into a live terminal UI — scores,
nested call traces, token counts, latency, and cost. Everything runs on your
machine and persists to a local SQLite database, so you can compare a run
against the one before it.
from evalstand import Case, evaluate
from evalstand.scorers import exact, levenshtein
def load_cases() -> list[Case]:
return [
Case(id="q1", input="What is the capital of France?", expected="Paris"),
Case(id="q2", input="What is 2 + 2?", expected="4"),
]
async def answer(question: str) -> str:
resp = await llm.acall("gpt-4o-mini", [{"role": "user", "content": question}])
return resp.text
evaluate(
name="basic-qa",
cases=load_cases,
task=answer,
scorers=[exact, levenshtein],
)
Save that as qa_eval.py and run it either way:
evalstand run qa_eval.py # live TUI, watch mode, traces
pytest qa_eval.py # plain test runner, CI-friendly
Why
Existing Python options are either heavyweight platforms that push you toward a
hosted service, or bare metric libraries with no runner, no persistence, and no
live feedback loop. evalstand is the middle: a real runner with a real UI that
stays on your machine.
Planned capabilities
See PLAN.md for the full build plan and the capability checklist that defines v1.
Limitations
Stated up front, and kept accurate as the project grows:
- Score differences between runs are reported as plain deltas. There is no statistical significance testing in v1, so a delta is not evidence of a real regression or improvement.
- LLM-as-judge scorers are unvalidated — they have not been calibrated against human labels.
Licence
MIT. See LICENSE.
Inspired by evalite (MIT), which
showed that local LLM evals could feel like running tests. evalstand is an
independent Python implementation.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
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 evalstand-0.0.0.dev0.tar.gz.
File metadata
- Download URL: evalstand-0.0.0.dev0.tar.gz
- Upload date:
- Size: 18.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e96a11af5fba24d10bfaef3631def1995b80fd286a152b01ddc30dd2b4133608
|
|
| MD5 |
ae1ffb403326ed6566432ab6c74d477e
|
|
| BLAKE2b-256 |
e39bbaa43416661bebab6171425b325483f9b5848ef4b18597690f9c6c698b27
|
File details
Details for the file evalstand-0.0.0.dev0-py3-none-any.whl.
File metadata
- Download URL: evalstand-0.0.0.dev0-py3-none-any.whl
- Upload date:
- Size: 9.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
002d96b2f70425eb2b904f6c8b705a3c5f869a8a66669eb69189521624bc6898
|
|
| MD5 |
c27e961b5d129823b4711beb3b763e18
|
|
| BLAKE2b-256 |
e46f1c6774872e9380e8d611f99d1216382f10bcddaf0bf8d4b3d5889d5d8db5
|