RepoST-Train and RepoST-Eval
收藏RepoST: Scalable Repository-Level Coding Environment Construction with Sandbox Testing
数据集结构
RepoST-Train和RepoST-Eval数据集具有相同的结构。它们都包括:
- 一组GitHub仓库(具有特定的提交ID)
- 每个仓库中的一组目标函数
- 每个目标函数的一个评估脚本,可以在我们的docker环境中执行
数据文件以列表的形式存储在data/ExecTrain/checked_test_set_final.json(和data/ExecEval/checked_test_set_final.json)中。每个列表项是一个字典,代表一个示例,格式如下:
json { "func_name": "VNetwork.forward", "idx": "708", "repo_name": "seakers___sacTransformerEOS", "commit_id": "669fb18ee47ae5947b578e392be25c1517f6d73b", "func_path": "scripts/sac.py", "orig_context": "python
scripts/sac.py
import torch ...", "eval_script": "## scripts/sac.py import torch
import torch.nn as nn ...", "coverage_rate": 1.0, "sandbox_ast_check": true, "sandbox_functionality_check": ..., "test_correctness_check": ... }
评估流程
环境搭建与安装
创建新环境: bash conda env create -n repost python=3.11 -y conda activate repost
安装依赖: bash pip install -r requirements.txt
指定代码和数据路径: bash source setup_eval.sh
加载RepoST-Eval Docker镜像
使用镜像: bash docker load -i repost_eval_image.tar
创建docker容器: bash docker run --name=execeval -v ${final_dataset_DIR}:${docker_final_dataset_DIR} -it repost_eval:v0
运行代码生成
代码生成脚本位于generation/目录下。
运行示例: bash cd generation bash scripts/ExecEval_gpt4o_generation.sh bash scripts/ExecEval_qwen_generation.sh
结果保存路径: bash data/ExecEval/results/
执行基于Docker的评估
在docker容器中执行: bash
在docker容器内
cd RepoST source setup_eval.sh python RepoST/execution.py --input_file ../ExecEval/results/ExecEval_gpt4o_context_top1.json --script_key generation_script
结果保存路径: bash data/ExecEval/results/ExecEval_gpt4o_context_top1_exec.json
训练流程
模型训练环境搭建与安装
创建新环境: bash conda env create -n llama python=3.11 -y conda activate llama
安装依赖: bash cd LLaMA-Factory pip install -e .
指定代码和数据路径: bash source setup_train.sh
数据处理
处理数据脚本位于get_training_data/目录下。
运行示例: bash cd get_training_data bash scripts/get_full_sft_data.sh
处理后的数据文件保存路径: bash LLaMA-Factory/data/
模型训练
在LLaMA-Factory/data/dataset_info.json中添加数据信息,然后编写配置文件,最后运行训练。
训练示例: bash cd LLaMA-Factory bash scripts/sft_ExecTrain_exec_qwencoder.sh
公共数据集评估
提供在公共基准上进行评估的代码,位于CodeRAGBench_evaluation/目录下。
请参考CodeRAGBench_evaluation/README.md中的说明。
构建自己的可执行代码生成环境
提供从GitHub抓取仓库、函数和上下文的代码,位于get_github_input/目录下,以及构建评估脚本的代码,位于RepoST/目录下。
环境搭建与安装
创建新环境: bash conda env create -n repost python=3.11 -y conda activate repost
安装依赖: bash pip install -r requirements.txt
指定代码和数据路径: bash source setup_eval.sh
Docker搭建
创建Dockerfile,并运行docker build命令。
运行docker容器: bash docker run --name=exec_eval_test -v ${dataset_generation_DIR}:${docker_dataset_generation_DIR} -it exec_eval
在docker容器中创建受限用户: bash adduser --disabled-password --gecos "" restricted_user chown restricted_user:restricted_user /home/user/ExecEval chown restricted_user:restricted_user /home/user/tmp
采样GitHub仓库、函数和上下文
编写配置文件,运行脚本进行采样和上下文提取。
示例脚本: bash cd get_github_input bash scripts/ExecEval_scrape_repos.sh bash scripts/ExecEval_obtain_functions.sh
沙盒化
调用LLM聚合目标函数及其上下文(包括跨文件)到单独的脚本中。
示例脚本: bash cd RepoST python sandboxing.py --input_file cleaned_python_test.json --model_name "claude-3-5-sonnet-20240620"
测试生成
调用LLM为目标函数在沙盒化脚本中创建测试。
示例脚本: bash cd RepoST python test_generation.py --input_file cleaned_python_test_sandboxed.json --model_name "claude-3-5-sonnet-20240620"
迭代执行与调试
执行沙盒化脚本,使用LLM调试(如果需要)。
示例脚本: bash
在docker容器内
python RepoST/execution.py --input_file /home/user/ExecEval/cleaned_python_test_tests.json --script_key full_script --test_gt python RepoST/execution.py --input_file /home/user/ExecEval/cleaned_python_test_tests_exec.json --script_key full_script --test_gt --check_coverage_mode
调试脚本: bash cd RepoST python debug.py --input_file cleaned_python_test_tests_exec_coverage.json --model_name "claude-3-5-sonnet-20240620"
后期检查
运行后期处理脚本,然后使用LLM检查功能等价性和测试正确性。
示例脚本: bash cd RepoST python post_processing.py --input_file cleaned_python_test_debug_round0_exec_coverage.json --script_key full_script_debug_round0 --output_file test_set_final.json python llm_check.py --input_file test_set_final.json --model_name gpt-4o --mode sandbox python llm_check.py --input_file test_set_final.json --model_name gpt-4o --mode test python llm_check.py --input_file test_set_final.json --model_name gpt-4o --mode combine
结果文件格式请参考数据集结构部分。




