Skip to content
tomo-labs

evalplus

The EvalPlus tier: HumanEval+ and MBPP+ function-completion problems graded against the expanded hidden test sets, run in a suite-local Python venv on the host.

The evalplus tier rebuilds EvalPlus, which takes the well-known HumanEval and MBPP function-completion benchmarks and adds far more tests per problem. The original benchmarks each ship a handful of example tests, enough that a plausible-looking answer often passes; EvalPlus adds a much larger hidden test set, so a completion has to actually be correct to score. That expansion is the whole point of using EvalPlus over the originals: it is much harder to pass by luck.

The two datasets

The tier covers both EvalPlus datasets, pulled from the Hugging Face dataset viewer.

Dataset Source Size Shape
HumanEval+ evalplus/humanevalplus 164 problems a function signature and docstring to complete
MBPP+ evalplus/mbppplus 378 problems a prose task plus one worked example, turned into a stub

HumanEval+ hands the agent a signature and docstring directly, so the stub is the signature with the body left blank. MBPP+ describes the task in prose, so the generator builds a stub from the prose prompt plus one example, giving the agent a concrete function to fill in rather than a bare description.

What a task looks like

Each problem becomes one harness task under evals/evalplus/tasks/.

Piece What it holds
prompt.txt the problem, and the name of the function the hidden tests will call
solution.py the stub the agent starts from and completes in place
check.sh assembles the finished solution.py with the hidden test and runs it

The hidden test body is the answer key, so it never reaches the agent. It is written under evals/evalplus/oracle/<problem>/test.py, a sibling directory the harness never mounts, and check.sh reads it from there at grading time. So the agent sees the function to write and the name the tests will call, but never the tests themselves.

How grading runs

EvalPlus tests import numpy, which the base image does not carry. Rather than push numpy into every agent's image, the tier builds a suite-local Python venv with numpy once, on the host, and check.sh runs the hidden tests inside it. This keeps the grading toolchain on the host and entirely separate from whatever the agent had in its container, the same trust boundary every tier holds: the thing that grades a task is never the thing the agent could reach.

The generator proves each task the same way the other tiers do. It fills solution.py with the problem's known-good solution, runs check.sh, and keeps the task only if the hidden tests pass, so a problem that cannot be validated never lands as a task.

Running and regenerating

go run ./cmd/lab scenarios --suite evalplus              # list the evalplus tasks
go run ./cmd/lab run tomo --suite evalplus               # run one tool over the tier
go run ./cmd/lab report --suite evalplus                 # the tier's comparison table

go run ./cmd/lab gen --suite evalplus                    # a small validated sample
go run ./cmd/lab gen --suite evalplus --all              # the full HumanEval+ and MBPP+ set
go run ./cmd/lab gen --suite evalplus --langs mbppplus   # one dataset only

For this tier --langs doubles as the dataset selector, so --langs humanevalplus or --langs mbppplus narrows to one set. --all pulls both datasets in full, and --limit N caps the problems taken per dataset. See evals for how a suite is selected and how the trust boundary works across every tier.