Evaluation and Quality Engineering

Evaluation and Quality Engineering

Offline Evaluation — Stack

Offline evaluation › Stack

5 of 73 in this book · 3 min read

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