OpenHands Issue Resolver
Project description
OpenHands Github Backlog Resolver 🙌
Do you have a bunch of open github issues that need to be resolved but no time to do it? What about asking an AI agent to do it for you instead?
This tool allows you to do just that, point towards a github repository, and you can use open-source AI agents based on OpenHands to attempt to resolve issues for you.
It's quite simple to get setup, just follow the instructions below.
Installation
You can install the OpenHands Github Resolver package directly from PyPI using pip:
pip install openhands-resolver
Alternatively, if you want to install from source or contribute to the project, you can clone the repository and use poetry:
git clone github.com/All-Hands-AI/openhands-resolver
cd openhands-resolver
poetry install
If you don't have one already, create a GitHub access token. You can use this link to quickly generate a classic access token. Or, for additional security, you can create a fine-grained token that has "Content" and "Pull requests" scopes for the repository you want to resolve issues in. If you don't have push access to that repo, you can create a fork of the repo and use the fork.
Once you have your token set the GITHUB_TOKEN
environment variable, e.g.
export GITHUB_TOKEN="your-secret-token"
You'll also need to have choose an LLM_MODEL
and prepare an LLM_API_KEY
,
for which you can follow the OpenHands setup instructions. OpenHands works
best with large, popular models like OpenAI's gpt-4o and Anthropic's Claude.
export LLM_MODEL="anthropic/claude-3-5-sonnet-20240620"
export LLM_API_KEY="sk_test_12345"
Running the agent to resolve issues
After installing the package, you can run the agent to resolve issues using the following command:
python -m openhands_resolver.resolve_issues --repo [OWNER]/[REPO]
For instance, if you want to resolve issues in this repo, you would run:
python -m openhands_resolver.resolve_issues --repo all-hands-ai/openhands-resolver
The output will be written to the output/
directory.
Alternatively, if you only want to resolve a subset of the issues, you can specify a list of issues to resolve. For instance, if you want to resolve issues 100 and 101, you can run:
python -m openhands_resolver.resolve_issues --repo all-hands-ai/openhands-resolver --issue-numbers 100,101
If you've installed the package from source using poetry, you can still use the previous method:
poetry run python openhands_resolver/resolve_issues.py --repo all-hands-ai/openhands-resolver
Visualizing successful PRs
To find successful PRs, you can run the following command:
grep '"success":true' output/output.jsonl | sed 's/.*\("number":[0-9]*\).*//g'
Then you can go through and visualize the ones you'd like.
python -m openhands_resolver.visualize_resolver_output --issue-number ISSUE_NUMBER --vis-method json
Uploading PRs
If you find any PRs that were successful, you can upload them. There are three ways you can upload
branch
- upload a branch without creating a PRdraft
- create a draft PRready
- create a non-draft PR that's ready for review
python -m openhands_resolver.send_pull_request --issue-number ISSUE_NUMBER --github-username YOUR_GITHUB_USERNAME --pr-type draft
If you want to upload to a fork, you can do so by specifying the fork-owner
.
python -m openhands_resolver.send_pull_request --issue-number ISSUE_NUMBER --github-username YOUR_GITHUB_USERNAME --pr-type draft --fork-owner YOUR_GITHUB_USERNAME
Using the GitHub Actions Workflow
This repository includes a GitHub Actions workflow that can automatically attempt to fix issues labeled with 'fix-me'. To use this workflow in your own repository:
-
Copy the
examples/openhands-resolver.yml
file to your repository's.github/workflows/
directory. -
Set up the following GitHub secrets in your repository:
PAT_TOKEN
: A Personal Access Token with repo scope (used for creating PRs and branches)PAT_USERNAME
: Your GitHub usernameLLM_MODEL
: The LLM model to use (e.g., "anthropic/claude-3-5-sonnet-20240620")LLM_API_KEY
: Your API key for the LLM serviceLLM_BASE_URL
: The base URL for the LLM API (if applicable)
Note: The workflow also uses the default
GITHUB_TOKEN
secret for some operations, which is automatically provided by GitHub Actions. -
To trigger the workflow, add the 'fix-me' label to any issue you want the AI to attempt to resolve.
The workflow will:
- Attempt to resolve the issue using the OpenHands resolver
- Create a draft PR if successful, or push a branch if unsuccessful
- Comment on the issue with the results
Note: This workflow requires the openhands-resolver
package, which will be installed automatically during the workflow execution.
Troubleshooting
If you have any issues, please open an issue on this github repo, we're happy to help! Alternatively, you can join the OpenHands Slack workspace and ask there.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file openhands_resolver-0.1.6.tar.gz
.
File metadata
- Download URL: openhands_resolver-0.1.6.tar.gz
- Upload date:
- Size: 185.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.3 CPython/3.11.9 Darwin/23.1.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | fec1ebfcdb2c7fdda3b73e534cf4d0b168371929e1c530a140e7381ea1bf97ae |
|
MD5 | 9c81db5b353f9c7414493bdde1aad6d2 |
|
BLAKE2b-256 | acfa6fa5f6ad88f8b5a763d242706ac5531592ba517902e32d1a7f33ebbecf4e |
File details
Details for the file openhands_resolver-0.1.6-py3-none-any.whl
.
File metadata
- Download URL: openhands_resolver-0.1.6-py3-none-any.whl
- Upload date:
- Size: 190.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.3 CPython/3.11.9 Darwin/23.1.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a113e24aa8c7c0e12968c0ab071e209e61dd59671bd45c685c04c4630705602e |
|
MD5 | 208aa1412349ae493fbfcb31c362a0bc |
|
BLAKE2b-256 | 26e69f2b229f95e862fcc93188f9f7cd880197bd4e251ac4420fa964d6d871c3 |