EvalPlus(📖) => 📚
🔥Quick Start • 📜Papers • 🔨Useful tools • 👷Development • 🙏Acknowledgement
Warning
🚨 Evaluating LLM-generated code over datasets with "3 test-cases" is **NOT** enough! 🚨
To address this, we started the EvalPlus project -- a rigourous evaluation framework for LLM4Code that:
- ✨ improves code benchmarks by adding up to thousands of new tests! (81x new tests for HumanEval!)
- ✨ crafts a set utility tools to sanitize, visualize and inspect LLM-generated code and evaluation results!
- ✨ accelerates LLM4Code research by open-sourcing LLM-generated samples for 14+ models -- no need to re-run the expensive benchmarks!
🔥 Quick Start
To get started, please first setup the environment:
pip install evalplus --upgrade
...Or you can try out the latest developing version:
pip install "git+https://github.com/evalplus/evalplus.git" --upgrade
🤔 Want to use local GitHub repo? :: click to expand ::
git clone https://github.com/evalplus/evalplus.git
cd evalplus
export PYTHONPATH=$PYTHONPATH:$(pwd)
pip install -r requirements.txt
HumanEval+
The usage is just like the original HumanEval where you just need to implement the generate_one_completion function!
from evalplus.data import get_human_eval_plus, write_jsonl
problems = get_human_eval_plus()
num_samples_per_task = 200
samples = [
dict(task_id=task_id, completion=generate_one_completion(problems[task_id]["prompt"]))
for task_id in problems
for _ in range(num_samples_per_task)
]
write_jsonl("samples.jsonl", samples)
🤔 What is in a `problem`? :: click to expand ::
- "task_id" is the identifier string for the task
- "entry_point": name of the function
- "prompt" is the function signature with docstring
- "canonical_solution" is the ground-truth implementation (re-implemented to fix bugs in HumanEval)
- "base_input" is the test inputs in original HumanEval
- "plus_input" is the test inputs brought by EvalPlus
To evaluate the samples:
evalplus.evaluate --dataset humaneval --samples samples.jsonl
🤔 Want to use local GitHub repo? :: click to expand ::
python evalplus/evaluate.py --dataset humaneval --samples samples.jsonl
⌨️ More command-line flags :: click to expand ::
--parallel: by default half of the cores--base-only(store_ture): only run base HumanEval tests--i-just-wanna-run: force a re-run
MBPP+ (TBD)
📜 Papers
Read our paper for more detailed findings!
@article{evalplus,
title={Is Your Code Generated by ChatGPT Really Correct? Rigorous Evaluation of Large Language Models for Code Generation},
author={Jiawei Liu and Chunqiu Steven Xia and Yuyao Wang and Lingming Zhang},
journal={arXiv preprint arXiv:2305.01210},
year={2023},
}
🔨 Useful tools
To use these tools, please first install the repository from GitHub:
git clone https://github.com/evalplus/evalplus.git
cd evalplus
pip install -r requirements-tools.txt
Syntax checker for LLM-generated code
Check LLM-produced code and answer the following questions:
- Is the generation entirely done for all samples / all problems in the dataset?
- Are LLM-generated code compilable? (if no, something could be wrong and you'd better check)
python tools/checker.py --folder /path/to/[model]-[??]b_temp_[??] --dataset humaneval
Post code sanitizer
LLM-generated code may contain some syntax errors. But some of them can be easily fixable by doing simple post-processing. This tool will make the LLM-generated code more clean/compilable by doing certain post-processing such as trimming with more magical EOFs and some garbage non-code tokens.
python tools/sanitize.py --eof --folder /path/to/vicuna-[??]b_temp_[??]
# Sanitized code will be produced to `/path/to/vicuna-[??]b_temp_[??]-sanitized`
Render pass@k results to rich and LaTeX tables
python tools/render.py --type /path/to/[model]-[??]b # NOTE: no `_temp_[??]`
Perform test input generation from scratch (TBD)
👷 Development
Before you start:
pip install pre-commit
pre-commit install
export PYTHONPATH=$PYTHONPATH:$(pwd)
Name convention
evalplusis the package name.${DATASET}_plusis the name of dataset applied withevalplus.
🙏 Acknowledgement
Metadata
Release files for evalplus 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| evalplus-0.1.1.tar.gz | 534.2 kB | Without provenance | Details for evalplus-0.1.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| evalplus-0.1.1-py3-none-any.whl | Python 3 | none | any | Details for evalplus-0.1.1-py3-none-any.whl |
Total release size: 558.6 kB
Release files / evalplus-0.1.1.tar.gz
| Download URL | evalplus-0.1.1.tar.gz |
|---|---|
| Size | 534.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
01a5bd9b287bce63aa163af8f86064acd784fe36485c22f2fb11cb9c2430093b
|
|
BLAKE2b-256 checksum How to use checksums |
b0ccbaf5a7b48c87d895f4f4c4da553ad8f115e8111500362d73eec2e50456d8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.8.16
|
Release files / evalplus-0.1.1-py3-none-any.whl
| Download URL | evalplus-0.1.1-py3-none-any.whl |
|---|---|
| Size | 24.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
af62363d74c07123ade59888173aebccad1195f17d37a026576941bb91913bd9
|
|
BLAKE2b-256 checksum How to use checksums |
886be498e7b97efac82ee9874b60ad16e1be9e50fd46b2d5b3570b4b1f787696
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.8.16
|
Security for evalplus 0.1.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.