Skip to main content

swe-agent.com

Website & Demo  |   Discord  |   Paper [coming April 10th]

👋 Overview

SWE-agent automatically turns bug reports from real GitHub repos into pull requests, using an LM such as GPT-4.

On the full SWE-bench test set, SWE-agent resolves 12.29% of issues, achieving the state-of-the-art result on the full test set.

✨ Agent-Computer Interface (ACI)

We accomplish these results by designing simple LM-centric commands and specially-built input and output formats to make it easier for the LM to browse the repository, view, edit and execute code files. We call this Agent-Computer Interface (ACI) and build the SWE-agent repository to make it easy to iterate on ACI design for repository-level coding agents.

Just like typical language model use requires good prompt engineering, good ACI design leads to much better results when using agents. As we show in our paper, a baseline agent without a well-tuned ACI does much worse than SWE-agent.

SWE-agent contains features that we discovered to be immensly helpful during the agent-computer interface design process:

  1. We add a linter that runs when an edit command is issued, and do not let the edit command go through if the code isn't syntactically correct.
  2. We supply the agent with a special-built file viewer, instead of having it just cat files. We found that this file viewer works best when displaying just 100 lines in each turn. The file editor that we built has commands for scrolling up and down and for performing a search within the file.
  3. We supply the agent with a special-built full-directory string searching command. We found that it was important for this tool to succintly list the matches- we simply list each file that had at least one match. Showing the model more context about each match proved to be too confusing for the model.
  4. When commands have an empty output we return a message saying "Your command ran successfully and did not produce any output."

Read our paper for more details.

@misc{yang2024sweagent,
      title={SWE-agent: Agent Computer Interfaces Enable Software Engineering Language Models}, 
      author={John Yang and Carlos E. Jimenez and Alexander Wettig and Shunyu Yao and Karthik Narasimhan and Ofir Press},
      year={2024},
}

🚀 Setup

  1. Install Docker, then start Docker locally.
  2. Install Miniconda, then create the swe-agent environment with conda env create -f environment.yml
  3. Activate using conda activate swe-agent.
  4. Run ./setup.sh to create the intercode-swe docker image.
  5. Create a keys.cfg file at the root of this repository and fill in the following:
OPENAI_API_KEY: 'OpenAI API Key Here if using OpenAI Model (optional)'
ANTHROPIC_API_KEY: 'Anthropic API Key Here if using Anthropic Model (optional)'
GITHUB_TOKEN: 'GitHub Token Here (required)'

See the following links for tutorials on obtaining Anthropic, OpenAI, and Github tokens.

💽 Usage

There are two steps to the SWE-agent pipeline. First SWE-agent takes an input GitHub issue and returns a pull request that attempts to fix it. We call that step inference. The second step (only available for issues in the SWE-bench set) is to evaluate the pull request to verify that it has indeed fixed the issue.

👩‍💻 Inference

Inference on any GitHub Issue: Using this script, you can run SWE-agent on any GitHub issue!

python run.py --model_name gpt4 \
  --data_path https://github.com/pvlib/pvlib-python/issues/1603

Inference on SWE-bench: Run SWE-agent on SWE-bench Lite and generate patches.

python run.py --model_name gpt4 \
  --per_instance_cost_limit 2.00 \
  --config_file ./config/default.yaml \
  --per_instance_cost_limit 2.00

If you'd like to run on a single issue from SWE-bench, use the --instance_filter option as follows:

python run.py --model_name gpt4 \
  --instance_filter marshmallow-code__marshmallow-1359
  • See the scripts/ folder for details about using run.py.
  • See the config/ folder for details about how you can define your own configuration!
  • See the agents/ folder for details about the logic behind configuration based workflows.
  • See the intercode/ folder for details about the SWEEnv environment (interface + implementation).
  • See the trajectories/ folder for details about the output of run.py.

🧪 Evaluation

This step is only available for issues from the SWE-bench set. To evaluate generated pull requests:

cd evaluation/
./run_eval.sh <predictions_path>

Replace <predictions_path> with the path to the model's predictions, which should be generated from the Inference step. The <predictions_path> arguments should look like ../trajectories/<username>/<model>-<dataset>-<hyperparams>/all_preds.jsonl

  • See the evaluation/ folder for details about how evaluation works.

💫 Contributions

  • If you'd like to ask questions, learn about upcoming features, and participate in future development, join our Discord community!
  • If you'd like to contribute to the codebase, we welcome issues and pull requests!
  • If you'd like to see a post or tutorial about some topic, please let us know via an issue.

🪪 License

MIT. Check LICENSE.

Metadata

Release files for sweagent 0.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sweagent 0.0.1
File Size Uploaded
sweagent-0.0.1.tar.gz 40.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for sweagent 0.0.1
File Interpreter ABI Platform
sweagent-0.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 81.1 kB

Release files / sweagent-0.0.1.tar.gz

Download URL sweagent-0.0.1.tar.gz
Size 40.0 kB
Tags Source
SHA-256 checksum
How to use checksums
17f6465b4da9cc0b3efbb071d4edf6025f078d74cff8b49c0e9fe7826621cff5
BLAKE2b-256 checksum
How to use checksums
5574b76c1f7f0f6de2199279d30b4c2a104ad3307bce10b4debe5de6d0a8c22d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.12.1

Release files / sweagent-0.0.1-py3-none-any.whl

Download URL sweagent-0.0.1-py3-none-any.whl
Size 41.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c9804233c229f10a9f0a17b3aca8462b621d04852b510dd07dfd5585ccee642d
BLAKE2b-256 checksum
How to use checksums
9fa3e5f2ebd4fe1900da9a41a5571277561580c6d5741307444839e6ecb41354
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.12.1

Release history Release notifications | RSS feed

This release

0.0.1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page