A tool for small model evals
Project description
smevals
A tool for small model evals.
smevals is a Python CLI utility for running evals against LLMs and agent harnesses.
Vocabulary
The top-level concept is an Eval: a collection of Tasks used to determine how good a particular model or model-and-harness configuration is at a specific high-level capability, such as text-to-SQL, drawing a pelican riding a bicycle, or evaluating whether an implementation satisfies a provided specification.
Evals can optionally be grouped into Suites of related Evals, primarily as a mechanism for organizing them on disk.
An Eval is a collection of Tasks. These are the individual exercises that a model must complete for its abilities to be evaluated.
A Config describes the setup used to attempt Tasks. It specifies a model and may include model parameters, system prompts, tools and other settings.
To gather evidence, we create a Run. A Run is the immutable record of executing one Task against one Config using a Runner. A Runner is a reusable CLI program that may send prompts directly to a model or build on an agent harness such as Codex or Pi.
The same Task and Config can be executed multiple times, producing multiple Runs to help account for non-deterministic results. Each Run includes a timestamp to help track these.
Once we have gathered Runs, we apply a Grader to each Run to produce a Grade. A Grader is a configured sequence of Checks, plus rules for combining their results into that Grade.
Checks are individual assertions or measurements. Some may be simple, such as “does the output contain this text?” Others may be more complex, such as “render this SVG to an image and have an LLM judge assess it”. Each Check names the Checker that performs it, along with configuration for that Checker such as patterns, rubrics or expected values. A Check can be marked as required, in which case its failure halts the Grader and skips the remaining Checks.
A Checker is a named operation or a reusable CLI program that implements one kind of Check. contains and xml-valid are named operations, ../checkers/render-svg might be a custom program. The same Checker can be used by many Checks across many Graders. The Checks in a Grader execute in order and share a working directory, so a Checker may create files - such as a rendered image - which are kept with the Grade as artifacts and available to later Checks in the sequence.
A Grade is the result of applying a Grader to a Run. It records the result of each Check and may contain an overall pass/fail outcome and/or a numeric score. Grades can also include additional notes which are not used for scoring but may help interpret the results in the future.
We may later change the Grader we use to evaluate Runs without executing the Runs again. A single Run can therefore be evaluated multiple times, producing multiple Grades using different Graders.
Check results
A Checker signals pass or fail with its exit code. It can also emit a JSON object on standard output with up to five keys, which are recorded in the Grade:
- score - a float from 0.0 to 1.0. The last score produced by any Check becomes the Grade's overall score, compared against the Grader's
pass_threshold. - metrics - an object mapping names to numbers or booleans, e.g.
{"precision": 0.9, "status_correct": true}. These are measurements for reports to aggregate: numbers as mean ± stderr, booleans as rates. - tags - a list of short descriptive labels, e.g.
["wearing_a_hat", "correct_bicycle_frame_shape"]. Tags are open vocabulary and presence-only - an absent tag means “not observed”, not “false”. They are normalized to lowercase snake_case, and the Grade records the union of all its Checks' tags. Reports aggregate them as counts and shares, and they support filtering and faceting when exploring results. - notes - a human-readable string explaining the result. Never aggregated.
- details - an object of structured diagnostics, such as predicted-versus-expected lists. Kept with the Grade but ignored by aggregation.
Any other keys are folded into details.
Project details
Release history Release notifications | RSS feed
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 smevals-0.1.0.tar.gz.
File metadata
- Download URL: smevals-0.1.0.tar.gz
- Upload date:
- Size: 18.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2f4f4d3afc9ef8081b5b7ae31cc53490af0fb9526a88d809a1c3d3edcdd3b280
|
|
| MD5 |
cdd7a470bda6b8708c94451ed5856873
|
|
| BLAKE2b-256 |
056d241564404fda7721be6da6b75bb2962bc7304a333bebdb50782165044c47
|
File details
Details for the file smevals-0.1.0-py3-none-any.whl.
File metadata
- Download URL: smevals-0.1.0-py3-none-any.whl
- Upload date:
- Size: 20.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c94a80e2d0397bd58f11b65e1be88907246516303496fc5f4bf3fb933c5a019d
|
|
| MD5 |
f0c7e5c5a5b50e2780d6e5fd927ccdb2
|
|
| BLAKE2b-256 |
fd65bd82c0be0f12ba871a487c0fcb73633f7ee538b5ca416d7cc11b90f57ac7
|