Files
2026-07-13 12:49:17 +08:00

237 lines
8.1 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Evaluation for Trae Agent
This document explains how to evaluate [Trae Agent](https://github.com/bytedance/trae-agent) using [SWE-bench](https://www.swebench.com/), [SWE-bench-Live](https://swe-bench-live.github.io/), and [Multi-SWE-bench](https://multi-swe-bench.github.io/).
## Overview
**SWE-bench** is a benchmark that evaluates language models on real-world software engineering tasks. It contains GitHub issues from popular Python repositories that have been solved by human developers. The benchmark evaluates whether an agent can generate the correct patch to fix the issue.
**SWE-bench-Live** is a live benchmark for issue resolving, designed to evaluate an AI system's ability to complete real-world software engineering tasks. Thanks to our automated dataset curation pipeline, we plan to update SWE-bench-Live on a monthly basis to provide the community with up-to-date task instances and support rigorous and contamination-free evaluation.
**Multi-SWE-bench** is a multilingual benchmark for issue resolving. It spans 7 languages (i.e., Java, TypeScript, JavaScript, Go, Rust, C, and C++) with 1,632 high-quality instances, curated from 2,456 candidates by 68 expert annotators for reliability.
The evaluation process involves:
1. **Setup**: Preparing the evaluation environment with Docker containers
2. **Execution**: Running Trae Agent on instances to generate patches
3. **Evaluation**: Testing the generated patches against the ground truth using harness
## Prerequisites
Before running the evaluation, ensure you have:
- **Docker**: Required for containerized evaluation environments
- **Python 3.12+**: For running the evaluation scripts
- **Git**: For cloning repositories
- **Sufficient disk space**: Docker images can be several GBs per instance
- **API Keys**: OpenAI/Anthropic API keys for Trae Agent
## Setup Instructions
Make sure installing extra dependencies for evaluation and running scripts in the `evaluation` directory.
```bash
uv sync --extra evaluation
cd evaluation
```
### 1. Clone and Setup Benchmark Harness
The `setup.sh` script automates the setup of benchmark harness:
```bash
chmod +x setup.sh
./setup.sh [swe_bench|swe_bench_live|multi_swe_bench]
```
- `swe_bench`: Setup for SWE-Bench
- `swe_bench_live`: Setup for SWE-Bench-Live
- `multi_swe_bench`: Setup for Multi-SWE-Bench
This script:
- Clones the benchmark repository
- Checks out a specific commit for reproducibility (it is the most recent commit hash at the time of writing this document.)
- Creates a Python virtual environment
- Installs the benchmark harness
### 2. Configure Trae Agent
Ensure your `trae_config.yaml` file is properly configured with valid API keys:
```
agents:
trae_agent:
enable_lakeview: false
model: trae_agent_model # the model configuration name for Trae Agent
max_steps: 200 # max number of agent steps
tools: # tools used with Trae Agent
- bash
- str_replace_based_edit_tool
- sequentialthinking
- task_done
model_providers: # model providers configuration
anthropic:
api_key: your_anthropic_api_key
provider: anthropic
openai:
api_key: your_openai_api_key
provider: openai
models:
trae_agent_model:
model_provider: anthropic
model: claude-sonnet-4-20250514
max_tokens: 4096
temperature: 0.5
top_p: 0.9
top_k: 40
max_retries: 1
parallel_tool_calls: 1
```
### 3. Optional: Docker Environment Configuration
Create a `docker_env_config.json` file if you need custom environment variables:
```json
{
"preparation_env": {
"HTTP_PROXY": "http://proxy.example.com:8080",
"HTTPS_PROXY": "https://proxy.example.com:8080"
},
"experiment_env": {
"CUSTOM_VAR": "value"
}
}
```
## Usage
### Basic Usage
The evaluation script `run_evaluation.py` provides several modes of operation:
```bash
# Run evaluation on all instances of SWE-bench_Verified
python run_evaluation.py --dataset SWE-bench_Verified --working-dir ./trae-workspace
# Run evaluation on specific instances
python run_evaluation.py --instance_ids django__django-12345 scikit-learn__scikit-learn-67890
# Run with custom configuration
python run_evaluation.py --config-file trae_config.yaml --run-id experiment-1
```
### Available Benchmarks and Datasets
**SWE-bench**
- **SWE-bench_Verified**
- **SWE-bench_Lite**
- **SWE-bench**
**SWE-bench-Live**:
- **SWE-bench-Live/lite**
- **SWE-bench-Live/verified**
- **SWE-bench-Live/full**
**Multi-SWE-bench**:
- **Multi-SWE-bench-flash** (Please download `multi_swe_bench_flash.jsonl` from https://huggingface.co/datasets/ByteDance-Seed/Multi-SWE-bench-flash/tree/main and place it in the `evaluation` directory.)
- **Multi-SWE-bench_mini** (Please download `multi_swe_bench_mini.jsonl` from https://huggingface.co/datasets/ByteDance-Seed/Multi-SWE-bench_mini/tree/main and place it in the `evaluation` directory.)
### Evaluation Modes
The script supports three modes:
1. **`expr`** (Expression only): Generate patches without evaluation
2. **`eval`** (Evaluation only): Evaluate existing patches
3. **`e2e`** (End-to-end): Both generate and evaluate patches (default)
```bash
# Only generate patches
python run_evaluation.py --mode expr --dataset SWE-bench_Verified
# Only evaluate existing patches
python run_evaluation.py --mode eval --benchmark-harness-path ./SWE-bench
# End-to-end evaluation (default)
python swebench.py --mode e2e --benchmark-harness-path ./SWE-bench
```
### Full Command Reference
```bash
python run_evaluation.py \
--benchmark SWE-bench \
--dataset SWE-bench_Verified \
--config-file ./trae_config.yaml \
--run-id experiment-1 \
--benchmark-harness-path ./SWE-bench \
--docker-env-config ./docker_env_config.json \
--mode e2e \
--max_workers 4 \
--instance_ids astropy__astropy-13453
```
**Parameters:**
- `--benchmark`: Benchmark to use
- `--dataset`: Dataset to use
- `--config-file`: Trae Agent configuration file
- `--run-id`: Run ID for benchmark evaluation
- `--benchmark-harness-path`: Path to SWE-bench harness (required for evaluation)
- `--docker-env-config`: Docker environment configuration file
- `--mode`: Evaluation mode (`e2e`, `expr`, `eval`)
- `--max_workers`: Maximum number of worker processes to use for parallel execution.
- `--instance_ids`: Instances to use
## How It Works
### 1. Image Preparation
The script first checks for required Docker images:
- Each instance has a specific Docker image
- Images are pulled automatically if not present locally
- Base Ubuntu image is used for preparing Trae Agent
### 2. Trae Agent Preparation
The script builds Trae Agent in a Docker container:
- Creates artifacts (`trae-agent.tar`, `uv.tar`, `uv_shared.tar`)
- These artifacts are reused across all instances for efficiency
### 3. Instance Execution
For each instance:
1. **Container Setup**: Prepares a Docker container with the instance's environment
2. **Problem Statement**: Writes the GitHub issue description to a file
3. **Trae Agent Execution**: Runs Trae Agent to generate a patch
4. **Patch Collection**: Saves the generated patch for evaluation
### 4. Evaluation
Using benchmark harness:
1. **Patch Collection**: Collects all generated patches into `predictions.json`
2. **Test Execution**: Runs the patches against test suites in Docker containers
3. **Result Generation**: Produces evaluation results with pass/fail status
## Understanding Results
### Output Files
The evaluation creates several files in the working directory:
```
results/{benchmark}_{dataset}_{run_id}/
├── predictions.json # Generated patches for evaluation
├── results.json # Final evaluation results
├── {instance_id}/ # Folder for each instance
│ ├── problem_statement.txt # GitHub issue description
│ ├── {instance_id}.patch # Generated patch
│ ├── {instance_id}.json # Trajectory file
│ └── ...
trae-workspace/
├── trae_config.yaml # Trae Agent configuration file
├── trae-agent.tar # Trae Agent build artifacts
├── uv.tar # UV binary
└── uv_shared.tar # UV shared files
```