Solving github issues#

In this notebook we will explore capabilities of LLMs to solve github issues. In order to run this notebook, you need to configure a “GITHUB_API_KEY” in your environment variables. You can get such a key here, after logging in to github.

We will be using these libraries:

from blablado import Assistant

The actual implementation of the interaction with github can be found in the github_utilities.py file in this folder.

from github_utilities import get_github_issue_details, list_issues, list_repository_files, get_repository_file_contents, update_file_in_new_branch, send_pull_request

First, we define the repository we want to work on.

repository = "scads/git-demo-dataweek2024"

Next, we define a blablado assistant, which can call functions using instructions from a human operator in English language. Note: These functions all have a proper docstring, telling the LLM what the functions can be used for.

assistant = Assistant()
# enabling the assistant to interact with github issues
assistant.register_tool(list_issues)
assistant.register_tool(get_github_issue_details)
# allow it to interact with files in the repository. 
assistant.register_tool(list_repository_files)
assistant.register_tool(get_repository_file_contents)
# modifying files
assistant.register_tool(update_file_in_new_branch)
assistant.register_tool(send_pull_request)

Listing github issues#

We start by exploring existing issues on the repository.

assistant.do(f"List all open issues on {repository}")

Here are the open issues on scads/git-demo-dataweek2024:

  1. Issue #11: Long texts

  2. Issue #10: Missing content

  3. Issue #9: Typo

  4. Issue #8: Update README.md

  5. Issue #7: sonnige Grüße

  6. Issue #6: Fix typo

  7. Issue #3: Update README.md

  8. Issue #2: Update README.md

We then pick one issue and ask for details.

assistant.do("Tell me the most important details of issue #9")

Issue #9: Typo

  • State: Open

  • Created at: 2024-07-23 07:29:11

  • Author: haesleinhuepf

  • Description: There is a typo in the file “content.md”.

Accessing files in the repository#

In order to determine which file might need modifications to solve the issue, we first list all files.

assistant.do(f"List all files in the repository {repository}")

The repository scads/git-demo-dataweek2024 contains the following files:

  1. LICENSE

  2. README.md

  3. content.md

Then, we ask the LLM which of the files might be related to the issue.

filename = assistant.tell("Which of these files might be relevant for issue 9 ? Respond ONLY the filename.")
filename
'content.md'
assistant.do(f"Load the entire content of {filename} from the  in the repository {repository} .")

The content of content.md is:

# History of a sentence

This sentence contains a tpyo.
Let's see what is going to happen with it.

May it stay here forever? Or does an AI find it and fix it?

Time will tell.

Best,
Robert

Modifying content#

After identifying the file, we can ask the LLM to fix the issue in the file.

assistant.do(f"Modify the file content of {filename} to fix the issue in a new branch.")

The file content.md has been modified to fix the issue and saved in a new branch mod-YZ5ZVRtibO.

Submitting a pull-request#

In order to let developers of the repository know that we would like to change something, we send a pull-request.

assistant.do("Send a pull-request of the new branch explaining what we changed.")

The pull request has been created: Fix typo in content.md.