Skip to content

Commit 2406b90

Browse files
xingyaowwlibowen2121huyberybartshappeerbren
authored
feat(SWE-Bench environment) integrate SWE-Bench sandbox (All-Hands-AI#1468)
* add draft dockerfile for build all * add rsync for build * add all-in-one docker * update prepare scripts * Update swe_env_box.py * Add swe_entry.sh (buggy now) * Parse the test command in swe_entry.sh * Update README for instance eval in sandbox * revert specialized config * replace run_as_devin as an init arg * set container & run_as_root via args * update swe entry script * update env * remove mounting * allow error after swe_entry * update swe_env_box * move file * update gitignore * get swe_env_box a working demo * support faking user response & provide sandox ahead of time; also return state for controller * tweak main to support adding controller kwargs * add module * initialize plugin for provided sandbox * add pip cache to plugin & fix jupyter kernel waiting * better print Observation output * add run infer scripts * update readme * add utility for getting diff patch * use get_diff_patch in infer * update readme * support cost tracking for codeact * add swe agent edit hack * disable color in git diff * fix git diff cmd * fix state return * support limit eval * increase t imeout and export pip cache * add eval limit config * return state when hit turn limit * save log to file; allow agent to give up * run eval with max 50 turns * add outputs to gitignore * save swe_instance & instruction * add uuid to swebench * add streamlit dep * fix save series * fix the issue where session id might be duplicated * allow setting temperature for llm (use 0 for eval) * Get report from agent running log * support evaluating task success right after inference. * remove extra log * comment out prompt for baseline * add visualizer for eval * use plaintext for instruction * reduce timeout for all; only increase timeout for init * reduce timeout for all; only increase timeout for init * ignore sid for swe env * close sandbox in each eval loop * update visualizer instruction * increase max chars * add finish action to history too * show test result in metrics * add sidebars for visualizer * also visualize swe_instance * cleanup browser when agent controller finish runinng * do not mount workspace for swe-eval to avoid accidentally overwrite files * Revert "do not mount workspace for swe-eval to avoid accidentally overwrite files" This reverts commit 8ef7739. * Revert "Revert "do not mount workspace for swe-eval to avoid accidentally overwrite files"" This reverts commit 016cfbb. * run jupyter command via copy to, instead of cp to mount * only print mixin output when failed * change ssh box logging * add visualizer for pass rate * add instance id to sandbox name * only remove container we created * use opendevin logger in main * support multi-processing infer * add back metadata, support keyboard interrupt * remove container with startswith * make pbar behave correctly * update instruction w/ multi-processing * show resolved rate by repo * rename tmp dir name * attempt to fix racing for copy to ssh_box * fix script * bump swe-bench-all version * fix ipython with self-contained commands * add jupyter demo to swe_env_box * make resolved count two column * increase height * do not add glob to url params * analyze obs length * print instance id prior to removal handler * add gold patch in visualizer * fix interactive git by adding a git --no-pager as alias * increase max_char to 10k to cover 98% of swe-bench obs cases * allow parsing note * prompt v2 * add iteration reminder * adjust user response * adjust order * fix return eval * fix typo * add reminder before logging * remove other resolve rate * re adjust to new folder structure * support adding eval note * fix eval note path * make sure first log of each instance is printed * add eval note * fix the display for visualizer * tweak visualizer for better git patch reading * exclude empty patch * add retry mechanism for swe_env_box start * fix ssh timeout issue * add stat field for apply test patch success * add visualization for fine-grained report * attempt to support monologue agent by constraining it to single thread * also log error msg when stopeed * save error as well * override WORKSPACE_MOUNT_PATH and WORKSPACE_BASE for monologue to work in mp * add retry mechanism for sshbox * remove retry for swe env box * try to handle loop state stopped * Add get report scripts * Add script to convert agent output to swe-bench format * Merge fine grained report for visualizer * Update eval readme * Update README.md * Add CodeAct gpt4-1106 output and eval logs on swe-bench-lite * Update the script to get model report * Update get_model_report.sh * Update get_agent_report.sh * Update report merge script * Add agent output conversion script * Update swe_lite_env_setup.sh * Add example swe-bench output files * Update eval readme * Remove redundant scripts * set iteration count down to false by default * fix: Issue where CodeAct agent was trying to log cost on local llm and throwing Undefined Model execption out of litellm (All-Hands-AI#1666) * fix: Issue where CodeAct agent was trying to log cost on local llm and throwing Undefined Model execption out of litellm * Review Feedback * Missing None Check * Review feedback and improved error handling --------- Co-authored-by: Robert Brennan <[email protected]> * fix prepare_swe_util scripts * update builder images * update setup script * remove swe-bench build workflow * update lock * remove experiments since they are moved to hf * remove visualizer (since it is moved to hf repo) * simply jupyter execution via heredoc * update ssh_box * add initial docker readme * add pkg-config as dependency * add script for swe_bench all-in-one docker * add rsync to builder * rename var * update commit * update readme * update lock * support specify timeout for long running tasks * fix path * separate building of all deps and files * support returning states at the end of controller * remove return None * support specify timeout for long running tasks * add timeout for all existing sandbox impl * fix swe_env_box for new codebase * update llm config in config.py * support pass sandbox in * remove force set * update eval script * fix issue of overriding final state * change default eval output to hf demo * change default eval output to hf demo * fix config * only close it when it is NOT external sandbox * add scripts * tweak config * only put in hostory when state has history attr * fix agent controller on the case of run out interaction budget * always assume state is always not none * remove print of final state * catch all exception when cannot compute completion cost * Update README.md * save source into json * fix path * update docker path * return the final state on close * merge AgentState with State * fix integration test * merge AgentState with State * fix integration test * add ChangeAgentStateAction to history in attempt to fix integration * add back set agent state * update tests * update tests * move scripts for setup * update script and readme for infer * do not reset logger when n processes == 1 * update eval_infer scripts and readme * simplify readme * copy over dir after eval * copy over dir after eval * directly return get state * update lock * fix output saving of infer * replace print with logger * update eval_infer script * add back the missing .close * increase timeout * copy all swe_bench_format file * attempt to fix output parsing * log git commit id as metadata * fix eval script * update lock * update unit tests * fix argparser unit test * fix lock * the deps are now lightweight enough to be incude in make build * add spaces for tests * add eval outputs to gitignore * remove git submodule * readme * tweak git email * update upload instruction * bump codeact version for eval --------- Co-authored-by: Bowen Li <[email protected]> Co-authored-by: huybery <[email protected]> Co-authored-by: Bart Shappee <[email protected]> Co-authored-by: Robert Brennan <[email protected]>
1 parent a84d19f commit 2406b90

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+2321
-708
lines changed

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,8 @@ cache
202202

203203
# configuration
204204
config.toml
205-
205+
evaluation/swe_bench/eval_workspace
206+
evaluation/outputs
207+
evaluation/evaluation_outputs
206208
test_results*
207209
/_test_files_tmp/

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ install-python-dependencies:
135135
export HNSWLIB_NO_NATIVE=1; \
136136
poetry run pip install chroma-hnswlib; \
137137
fi
138-
@poetry install --without evaluation
138+
@poetry install
139139
@if [ -f "/etc/manjaro-release" ]; then \
140140
echo "$(BLUE)Detected Manjaro Linux. Installing Playwright dependencies...$(RESET)"; \
141141
poetry run pip install playwright; \

agenthub/codeact_agent/codeact_agent.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,10 @@ def search_memory(self, query: str) -> list[str]:
276276
raise NotImplementedError('Implement this abstract method')
277277

278278
def log_cost(self, response):
279-
cur_cost = self.llm.completion_cost(response)
279+
try:
280+
cur_cost = self.llm.completion_cost(response)
281+
except Exception:
282+
cur_cost = 0
280283
self.cost_accumulator += cur_cost
281284
logger.info(
282285
'Cost: %.2f USD | Accumulated Cost: %.2f USD',

evaluation/README.md

Lines changed: 9 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -4,76 +4,21 @@ This folder contains code and resources to run experiments and evaluations.
44

55
## Logistics
66
To better organize the evaluation folder, we should follow the rules below:
7-
- Each subfolder contains a specific benchmark or experiment. For example, `evaluation/SWE-bench` should contain
7+
- Each subfolder contains a specific benchmark or experiment. For example, `evaluation/swe_bench` should contain
88
all the preprocessing/evaluation/analysis scripts.
9-
- Raw data and experimental records should not be stored within this repo (e.g. Google Drive or Hugging Face Datasets).
9+
- Raw data and experimental records should not be stored within this repo.
10+
- For model outputs, they should be stored at [this huggingface space](https://huggingface.co/spaces/OpenDevin/evaluation) for visualization.
1011
- Important data files of manageable size and analysis scripts (e.g., jupyter notebooks) can be directly uploaded to this repo.
1112

12-
## Roadmap
13+
## Supported Benchmarks
1314

14-
- Sanity check. Reproduce Devin's scores on SWE-bench using the released outputs to make sure that our harness pipeline works.
15-
- Open source model support.
16-
- Contributors are encouraged to submit their commits to our [forked SEW-bench repo](https://github.com/OpenDevin/SWE-bench).
17-
- Ensure compatibility with OpenAI interface for inference.
18-
- Serve open source models, prioritizing high concurrency and throughput.
15+
- SWE-Bench: [`evaluation/swe_bench`](./swe_bench)
1916

20-
## SWE-bench
21-
- notebooks
22-
- `devin_eval_analysis.ipynb`: notebook analyzing devin's outputs
23-
- scripts
24-
- `prepare_devin_outputs_for_evaluation.py`: script fetching and converting [devin's output](https://github.com/CognitionAI/devin-swebench-results/tree/main) into the desired json file for evaluation.
25-
- usage: `python prepare_devin_outputs_for_evaluation.py <setting>` where setting can be `passed`, `failed` or `all`
26-
- resources
27-
- Devin related SWE-bench test subsets
28-
- [🤗 OpenDevin/SWE-bench-devin-passed](https://huggingface.co/datasets/OpenDevin/SWE-bench-devin-passed)
29-
- [🤗 OpenDevin/SWE-bench-devin-full-filtered](https://huggingface.co/datasets/OpenDevin/SWE-bench-devin-full-filtered)
30-
- Devin's outputs processed for evaluations is available on [Huggingface](https://huggingface.co/datasets/OpenDevin/Devin-SWE-bench-output)
31-
- get predictions that passed the test: `wget https://huggingface.co/datasets/OpenDevin/Devin-SWE-bench-output/raw/main/devin_swe_passed.json`
32-
- get all predictions `wget https://huggingface.co/datasets/OpenDevin/Devin-SWE-bench-output/raw/main/devin_swe_outputs.json`
17+
### Result Visualization
3318

34-
See [`SWE-bench/README.md`](./SWE-bench/README.md) for more details on how to run SWE-Bench for evaluation.
19+
Check [this huggingface space](https://huggingface.co/spaces/OpenDevin/evaluation) for visualization of existing experimental results.
3520

36-
### Results
3721

38-
We have refined the original SWE-bench evaluation pipeline to enhance its efficiency and reliability. The updates are as follows:
39-
- Reuse testbeds and Conda environments.
40-
- Additionally try `patch` command for patch application if `git apply` command fails.
22+
### Upload your results
4123

42-
#### Results on SWE-bench-devin-passed
43-
44-
[🤗 OpenDevin/SWE-bench-devin-passed](https://huggingface.co/datasets/OpenDevin/SWE-bench-devin-passed)
45-
46-
| Model/Agent | #instances | #init | #apply | #resolve |
47-
|------------------------|------------|-------|--------|----------|
48-
| Gold | 79 | 79 | 79 | 79 |
49-
| Devin | 79 | 79 | 76 | 76 |
50-
51-
#init: number of instances where testbeds have been successfully initialized.
52-
53-
In the 3 Devin-failed instances (see below), Devin has made changes to the tests, which are incompatible with the provided test patch and causes failures during patch application. The evaluation adopted by Devin does not seem to align with the original SWE-bench evaluation.
54-
55-
```shell
56-
django__django-11244
57-
scikit-learn__scikit-learn-10870
58-
sphinx-doc__sphinx-9367
59-
```
60-
61-
#### Results on SWE-bench-devin-failed
62-
63-
| Model/Agent | #instances | #init | #apply | #resolve |
64-
|------------------------|------------|-------|--------|----------|
65-
| Gold | 491 | 491 | 491 | 371 |
66-
| Devin | 491 | 491 | 463 | 7 |
67-
68-
Devin **passes** 7 instances on the `SWE-bench-devin-failed` subset. SWE-bench dataset appears to be noisy, evidenced by 120 instances where gold patches do not pass.
69-
70-
We have filtered out the problematic 120 instances, resulting in the creation of the `SWE-bench-devin-full-filtered` subset.
71-
72-
## Results on SWE-bench-devin-full-filtered
73-
74-
[🤗 OpenDevin/SWE-bench-devin-full-filtered](https://huggingface.co/datasets/OpenDevin/SWE-bench-devin-full-filtered)
75-
76-
| Model/Agent | #instances | #init | #apply | #resolve |
77-
|------------------------|------------|-------|--------|----------|
78-
| Gold | 450 | 450 | 450 | 450 |
79-
| Devin | 450 | 450 | 426 | 83 |
24+
You can start your own fork of [our huggingface evaluation outputs](https://huggingface.co/spaces/OpenDevin/evaluation) and submit a PR of your evaluation results to our hosted huggingface repo via PR following the guide [here](https://huggingface.co/docs/hub/en/repositories-pull-requests-discussions#pull-requests-and-discussions).

evaluation/SWE-bench/README.md

Lines changed: 0 additions & 80 deletions
This file was deleted.

evaluation/SWE-bench/commands.sh

Lines changed: 0 additions & 155 deletions
This file was deleted.

evaluation/SWE-bench/environment.yml

Lines changed: 0 additions & 15 deletions
This file was deleted.

0 commit comments

Comments
 (0)