mirror of
https://github.com/deepset-ai/haystack.git
synced 2026-01-01 17:47:19 +00:00
111 lines
3.7 KiB
Plaintext
111 lines
3.7 KiB
Plaintext
---
|
|
title: "GitHubFileEditorTool"
|
|
id: githubfileeditortool
|
|
slug: "/githubfileeditortool"
|
|
description: "A Tool that allows Agents and ToolInvokers to edit files in GitHub repositories."
|
|
---
|
|
|
|
# GitHubFileEditorTool
|
|
|
|
A Tool that allows Agents and ToolInvokers to edit files in GitHub repositories.
|
|
|
|
<div className="key-value-table">
|
|
|
|
| | |
|
|
| --- | --- |
|
|
| **Mandatory init variables** | `github_token`: GitHub personal access token. Can be set with `GITHUB_TOKEN` env var. |
|
|
| **API reference** | [Tools](/reference/tools-api) |
|
|
| **GitHub link** | https://github.com/deepset-ai/haystack-core-integrations/tree/main/integrations/github |
|
|
|
|
</div>
|
|
|
|
## Overview
|
|
|
|
`GitHubFileEditorTool` wraps the [`GitHubFileEditor`](../../pipeline-components/connectors/githubfileeditor.mdx) component, providing a tool interface for use in agent workflows and tool-based pipelines.
|
|
|
|
The tool supports multiple file operations including editing existing files, creating new files, deleting files, and undoing recent changes. It supports four main commands:
|
|
|
|
- **EDIT**: Edit an existing file by replacing specific content
|
|
- **CREATE**: Create a new file with specified content
|
|
- **DELETE**: Delete an existing file
|
|
- **UNDO**: Revert the last commit if made by the same user
|
|
|
|
### Parameters
|
|
|
|
- `name` is _optional_ and defaults to "file_editor". Specifies the name of the tool.
|
|
- `description` is _optional_ and provides context to the LLM about what the tool does.
|
|
- `github_token` is _mandatory_ and must be a GitHub personal access token for API authentication. The default setting uses the environment variable `GITHUB_TOKEN`.
|
|
- `repo` is _optional_ and sets a default repository in owner/repo format.
|
|
- `branch` is _optional_ and defaults to "main". Sets the default branch to work with.
|
|
- `raise_on_failure` is _optional_ and defaults to `True`. If False, errors are returned instead of raising exceptions.
|
|
|
|
## Usage
|
|
|
|
Install the GitHub integration to use the `GitHubFileEditorTool`:
|
|
|
|
```shell
|
|
pip install github-haystack
|
|
```
|
|
|
|
:::info Repository Placeholder
|
|
|
|
To run the following code snippets, you need to replace the `owner/repo` with your own GitHub repository name.
|
|
:::
|
|
|
|
### On its own
|
|
|
|
Basic usage to edit a file:
|
|
|
|
```python
|
|
from haystack_integrations.tools.github import GitHubFileEditorTool
|
|
|
|
tool = GitHubFileEditorTool()
|
|
result = tool.invoke(
|
|
command="edit",
|
|
payload={
|
|
"path": "src/example.py",
|
|
"original": "def old_function():",
|
|
"replacement": "def new_function():",
|
|
"message": "Renamed function for clarity"
|
|
},
|
|
repo="owner/repo",
|
|
branch="main"
|
|
)
|
|
|
|
print(result)
|
|
```
|
|
|
|
```bash
|
|
{'result': 'Edit successful'}
|
|
```
|
|
|
|
### With an Agent
|
|
|
|
You can use `GitHubFileEditorTool` with the [Agent](../../pipeline-components/agents-1/agent.mdx) component. The Agent will automatically invoke the tool when needed to edit files in GitHub repositories.
|
|
|
|
```python
|
|
from haystack.components.generators.chat import OpenAIChatGenerator
|
|
from haystack.dataclasses import ChatMessage
|
|
from haystack.components.agents import Agent
|
|
from haystack_integrations.tools.github import GitHubFileEditorTool
|
|
|
|
editor_tool = GitHubFileEditorTool(repo="owner/repo")
|
|
|
|
agent = Agent(
|
|
chat_generator=OpenAIChatGenerator(),
|
|
tools=[editor_tool],
|
|
exit_conditions=["text"]
|
|
)
|
|
|
|
agent.warm_up()
|
|
response = agent.run(messages=[
|
|
ChatMessage.from_user("Edit the file README.md in the repository \"owner/repo\" and replace the original string 'tpyo' with the replacement 'typo'. This is all context you need.")
|
|
])
|
|
|
|
print(response["last_message"].text)
|
|
```
|
|
|
|
```bash
|
|
The file `README.md` has been successfully edited to correct the spelling of 'tpyo' to 'typo'.
|
|
```
|