Evaluation and Quality Engineering
Offline Evaluation — Stack
Offline evaluation › Stack
Technology landscape as of 2026-10-10. Knowledge cutoff May 2026.
Selection criteria
What is being bought is a runner: something that takes a set of inputs, drives the application over them, collects outputs and scores, and makes two runs comparable. Metric libraries are the easy part; the runner is where the cost is.
- Where the system under test lives. Whether the harness can invoke your actual application entry point, or only a model endpoint, decides whether retrieval and tool use are in scope at all.
- Dependency recording. Whether the tool can capture and replay external calls, and whether those recordings carry an expiry, because a replay fixture with no staleness signal is a trap.
- Concurrency and rate-limit handling. A thousand-item suite is a throughput problem, and a runner without backoff turns provider throttling into scattered failures that look like quality loss.
- Run artefact completeness. Whether a finished run stores per-item inputs, raw outputs, scores, errors and the full configuration, or only an aggregate.
- Incremental and partial runs. Whether a failed run resumes, whether a subset can be re-executed against a stored baseline, and whether cached results are reused when nothing relevant changed.
- Scoring extensibility. How hard it is to add a scorer specific to your domain, versus being restricted to the metrics that shipped.
- Determinism controls. Whether the harness pins and records decoding parameters and build identifiers itself, rather than trusting the caller to remember.
- Local-first operation. Whether a run can be executed and inspected on a developer machine without uploading anything, which decides how early in authoring the suite gets used.
Options
| Option | Best for | Watch out for |
|---|---|---|
| A test-framework harness built on the language's own runner (pytest, JUnit and similar) | Teams who want evaluation to live beside unit tests with no new infrastructure | Test runners assume fast deterministic assertions; scores, retries and partial credit all have to be bolted on |
| Open-source evaluation frameworks with declarative test definitions (promptfoo, DeepEval, Evidently and comparable projects) | Getting a comparable, repeatable suite running in days with scorers already written | Opinionated data shapes, and default metrics that get adopted as thresholds without anyone choosing them |
| Research-grade harnesses built for benchmark reproduction (EleutherAI's lm-evaluation-harness and similar) | Standard academic task formats and apples-to-apples model comparison | Built around models rather than applications; your retrieval and tool layers are not in the loop |
| Hosted evaluation products from observability and LLMOps vendors | Shared run history, diffing, and a UI non-engineers will actually open | Run data leaves your environment, and the comparison semantics are the vendor's, not yours |
| Notebook plus a results table in a warehouse | Exploratory work and one-off comparisons where the question is not yet stable | Nothing is reproducible by anyone else, and the analysis dies with the notebook kernel |
| Record-and-replay proxies in front of model and tool endpoints (HTTP cassette libraries, local mock gateways) | Making a full-path run fast, free and deterministic | Recordings drift from the live services silently; without expiry, confidence in the suite outlives its validity |
| Workflow orchestrators driving the suite as a job graph (general-purpose schedulers and pipeline engines) | Large suites that need parallelism, retries and scheduled baselines | Substantial operational weight for something many teams can run as a single parallel script |