mirror of
https://github.com/deepset-ai/haystack.git
synced 2026-02-06 06:52:53 +00:00
* Update documentation and remove unused assets. Enhanced the 'agents' and 'components' sections with clearer descriptions and examples. Removed obsolete images and updated links for better navigation. Adjusted formatting for consistency across various documentation pages. * remove dependency * address comments * delete more empty pages * broken link * unduplicate headings * alphabetical components nav
107 lines
3.6 KiB
Plaintext
107 lines
3.6 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.
|
|
|
|
| | |
|
|
| --- | --- |
|
|
| **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 |
|
|
|
|
## 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'.
|
|
``` |