HumanEval: Python Function Generation from Instructions
Assesses how accurately language models can write correct Python functions based solely on natural-language instructions provided as docstrings.
Overview
HumanEval is a benchmark to evaluate a model’s performance on synthesizing programs from docstrings. This implementation is based on the official implementation.
Usage
Installation
Install with pip install inspect-evals, or uv sync from a checkout of this repository.
Running evaluations
uv run inspect eval inspect_evals/humaneval --model openai/gpt-5-nanoYou can also import tasks as normal Python objects and run them from python:
from inspect_ai import eval
from inspect_evals.humaneval import humaneval
eval(humaneval)Drop uv run if you manage dependencies yourself. Log viewing (inspect view) and default-model setup are documented in the Inspect Evals README.
Options
You can control a variety of options from the command line. For example:
uv run inspect eval inspect_evals/humaneval --limit 10 --sample-shuffle
uv run inspect eval inspect_evals/humaneval --max-connections 10
uv run inspect eval inspect_evals/humaneval --temperature 0.5See uv run inspect eval --help for all available options.
Parameters
humaneval
solver(Solver | None): The solver to use for this evaluation. Defaults to the default solver. (default:None)instruction_prompt(str): The prompt to prepend to the code problem. (default:'\nRead the following function signature and docstring, and fully implement\nthe function described. Your response should only contain the code for\nthis function.\n\n')scorer(Scorer | list[Scorer] | None): The scorer to use for this evaluation. Defaults to the default scorer. (default:None)sandbox(str): The sandbox to use for this evaluation. (default:'docker')
Dataset
Here is an example prompt from the dataset:
from typing import List
def has_close_elements(numbers: List[float], threshold: float) -> bool:
"""Check if in given list of numbers, are any two numbers closer to
each other than given threshold.
>>> has_close_elements([1.0, 2.0, 3.0], 0.5)
False
>>> has_close_elements([1.0, 2.8, 3.0, 4.0, 5.0, 2.0], 0.3)
True
"""
The model is then tasked to fill in the missing code pieces in order to make this a working function.
Scoring
Once a generation is completed, the entire function, accompanied with unit tests, is run in a subprocess and is considered a success if all unit tests pass.
The benchmark uses the pass@k metric to measure functional correctness. In brief terms, this is the per problem probability of at least 1 correct sample generation given k generations. It is defined using the following expectation:
\[ \text{pass@}k := \underset{\text{Problems}}{\mathbb{E}}\left[1-\frac{{n-c}\choose{k}}{{n}\choose{k}}\right] \]
where we sample \(n \geq k\) generations to reduce variance. Note that the default in this benchmark implementation is \(n = 5\), and we evaluate \(\text{pass}@k\) for \(k \in \\{1, 2, 5\\}\).
Changelog
[2-A] - 2026-02-16
- Migrate version to new scheme. See #907.
[1.0.1] - 2025-12-18
- Adds backoff policy for functions that connect to huggingface servers.