Files
pr-agent/Usage.md

364 lines
16 KiB
Markdown
Raw Normal View History

2023-09-29 09:47:13 +03:00
## Usage Guide
2023-07-16 14:59:40 +03:00
2023-09-02 09:43:46 +03:00
### Table of Contents
- [Introduction](#introduction)
- [Working from a local repo (CLI)](#working-from-a-local-repo-cli)
- [Online usage](#online-usage)
- [Working with GitHub App](#working-with-github-app)
- [Working with GitHub Action](#working-with-github-action)
2023-09-30 10:51:37 +03:00
- [Changing a model](#changing-a-model)
2023-10-02 18:10:41 +03:00
- [Working with large PRs](#working-with-large-prs)
2023-09-02 09:43:46 +03:00
- [Appendix - additional configurations walkthrough](#appendix---additional-configurations-walkthrough)
2023-09-02 09:19:35 +03:00
### Introduction
2023-10-26 12:10:14 +03:00
After [installation](/INSTALL.md), there are three basic ways to invoke CodiumAI PR-Agent:
2023-09-02 09:19:35 +03:00
1. Locally running a CLI command
2. Online usage - by [commenting](https://github.com/Codium-ai/pr-agent/pull/229#issuecomment-1695021901) on a PR
2023-09-02 09:25:38 +03:00
3. Enabling PR-Agent tools to run automatically when a new PR is opened
2023-09-02 09:19:35 +03:00
2023-09-02 09:37:44 +03:00
Specifically, CLI commands can be issued by invoking a pre-built [docker image](/INSTALL.md#running-from-source), or by invoking a [locally cloned repo](INSTALL.md#method-2-run-from-source).
2023-09-02 09:19:35 +03:00
For online usage, you will need to setup either a [GitHub App](INSTALL.md#method-5-run-as-a-github-app), or a [GitHub Action](INSTALL.md#method-3-run-as-a-github-action).
GitHub App and GitHub Action also enable to run PR-Agent specific tool automatically when a new PR is opened.
#### The configuration file
2023-09-02 09:37:44 +03:00
The different tools and sub-tools used by CodiumAI PR-Agent are adjustable via the **[configuration file](pr_agent/settings/configuration.toml)**.
In addition to general configuration options, each tool has its own configurations. For example, the `review` tool will use parameters from the [pr_reviewer](/pr_agent/settings/configuration.toml#L16) section in the configuration file.
2023-08-04 12:13:04 +03:00
2023-10-01 09:00:58 +03:00
The [Tools Guide](./docs/TOOLS_GUIDE.md) provides a detailed description of the different tools and their configurations.
2023-10-06 22:13:03 +11:00
#### Ignoring files from analysis
In some cases, you may want to exclude specific files or directories from the analysis performed by CodiumAI PR-Agent. This can be useful, for example, when you have files that are generated automatically or files that shouldn't be reviewed, like vendored code.
To ignore files or directories, edit the **[ignore.toml](/pr_agent/settings/ignore.toml)** configuration file. This setting is also exposed the following environment variables:
- `IGNORE.GLOB`
- `IGNORE.REGEX`
See [dynaconf envvars documentation](https://www.dynaconf.com/envvars/).
2023-10-01 09:00:58 +03:00
#### git provider
2023-09-01 20:27:29 +03:00
The [git_provider](pr_agent/settings/configuration.toml#L4) field in the configuration file determines the GIT provider that will be used by PR-Agent. Currently, the following providers are supported:
2023-09-01 20:22:10 +03:00
`
2023-10-01 09:00:58 +03:00
"github", "gitlab", "azure", "codecommit", "local", "gerrit"
2023-09-01 20:22:10 +03:00
`
2023-09-01 19:40:38 +03:00
2023-09-02 09:25:38 +03:00
[//]: # (** online usage:**)
[//]: # (Options that are available in the configuration file can be specified at run time when calling actions. Two examples:)
[//]: # (```)
[//]: # (- /review --pr_reviewer.extra_instructions="focus on the file: ...")
[//]: # (- /describe --pr_description.add_original_user_description=false -pr_description.extra_instructions="make sure to mention: ...")
[//]: # (```)
2023-08-04 12:13:04 +03:00
2023-09-02 09:19:35 +03:00
### Working from a local repo (CLI)
2023-09-02 09:33:33 +03:00
When running from your local repo (CLI), your local configuration file will be used.
2023-09-01 20:22:10 +03:00
Examples for invoking the different tools via the CLI:
2023-09-30 10:51:37 +03:00
- **Review**: `python -m pr_agent.cli --pr_url=<pr_url> review`
- **Describe**: `python -m pr_agent.cli --pr_url=<pr_url> describe`
- **Improve**: `python -m pr_agent.cli --pr_url=<pr_url> improve`
- **Ask**: `python -m pr_agent.cli --pr_url=<pr_url> ask "Write me a poem about this PR"`
- **Reflect**: `python -m pr_agent.cli --pr_url=<pr_url> reflect`
- **Update Changelog**: `python -m pr_agent.cli --pr_url=<pr_url> update_changelog`
2023-09-01 20:22:10 +03:00
`<pr_url>` is the url of the relevant PR (for example: https://github.com/Codium-ai/pr-agent/pull/50).
**Notes:**
2023-09-02 09:37:44 +03:00
2023-09-02 09:33:33 +03:00
(1) in addition to editing your local configuration file, you can also change any configuration value by adding it to the command line:
2023-09-02 09:19:35 +03:00
```
2023-09-30 10:51:37 +03:00
python -m pr_agent.cli --pr_url=<pr_url> /review --pr_reviewer.extra_instructions="focus on the file: ..."
2023-09-02 09:19:35 +03:00
```
2023-09-01 20:22:10 +03:00
(2) You can print results locally, without publishing them, by setting in `configuration.toml`:
2023-08-04 12:13:04 +03:00
```
[config]
publish_output=true
verbosity_level=2
```
This is useful for debugging or experimenting with the different tools.
2023-07-16 14:59:40 +03:00
2023-09-02 09:19:35 +03:00
### Online usage
Online usage means invoking PR-Agent tools by [comments](https://github.com/Codium-ai/pr-agent/pull/229#issuecomment-1695021901) on a PR.
Commands for invoking the different tools via comments:
- **Review**: `/review`
- **Describe**: `/describe`
- **Improve**: `/improve`
2023-09-02 09:33:33 +03:00
- **Ask**: `/ask "..."`
2023-09-02 09:19:35 +03:00
- **Reflect**: `/reflect`
- **Update Changelog**: `/update_changelog`
To edit a specific configuration value, just add `--config_path=<value>` to any command.
For example if you want to edit the `review` tool configurations, you can run:
```
2023-09-02 09:33:33 +03:00
/review --pr_reviewer.extra_instructions="..." --pr_reviewer.require_score_review=false
2023-09-02 09:19:35 +03:00
```
2023-10-01 09:00:58 +03:00
Any configuration value in [configuration file](pr_agent/settings/configuration.toml) file can be similarly edited. comment `/config` to see the list of available configurations.
2023-09-02 09:19:35 +03:00
### Working with GitHub App
2023-11-01 18:36:12 +02:00
When running PR-Agent from GitHub App, the default [configuration file](pr_agent/settings/configuration.toml) from a pre-built docker will be initially loaded.
By uploading a local `.pr_agent.toml` file, you can edit and customize any configuration parameter.
For example, if you set in `.pr_agent.toml`:
```
[pr_reviewer]
num_code_suggestions=1
```
Than you will overwrite the default number of code suggestions to be 1.
2023-09-02 09:19:35 +03:00
#### GitHub app automatic tools
2023-11-01 18:36:12 +02:00
The [github_app](pr_agent/settings/configuration.toml#L76) section defines GitHub app-specific configurations.
In this section you can define configurations to control the conditions for which tools will **run automatically**.
##### GitHub app automatic tools for PR actions
The GitHub app can respond to the following actions on a PR:
1. `opened` - Opening a new PR
2. `reopened` - Reopening a closed PR
3. `ready_for_review` - Moving a PR from Draft to Open
4. `review_requested` - Specifically requesting review (in the PR reviewers list) from the `github-actions[bot]` user
The configuration parameter `handle_pr_actions` defines the list of actions for which the GitHub app will trigger the PR-Agent.
The configuration parameter `pr_commands` defines the list of tools that will be **run automatically** when one of the above action happens (e.g. a new PR is opened):
2023-08-30 19:42:46 +03:00
```
[github_app]
handle_pr_actions = ['opened', 'reopened', 'ready_for_review', 'review_requested']
2023-08-30 19:42:46 +03:00
pr_commands = [
"/describe --pr_description.add_original_user_description=true --pr_description.keep_original_user_title=true",
"/auto_review",
]
```
This means that when a new PR is opened/reopened or marked as ready for review, PR-Agent will run the `describe` and `auto_review` tools.
2023-08-31 08:19:33 +03:00
For the describe tool, the `add_original_user_description` and `keep_original_user_title` parameters will be set to true.
2023-08-30 19:42:46 +03:00
2023-10-01 09:00:58 +03:00
You can override the default tool parameters by uploading a local configuration file called `.pr_agent.toml` to the root of your repo.
2023-08-30 19:42:46 +03:00
For example, if your local `.pr_agent.toml` file contains:
```
[pr_description]
add_original_user_description = false
keep_original_user_title = false
```
2023-09-02 09:19:35 +03:00
When a new PR is opened, PR-Agent will run the `describe` tool with the above parameters.
2023-08-30 19:42:46 +03:00
2023-10-05 17:03:10 +03:00
To cancel the automatic run of all the tools, set:
```
[github_app]
handle_pr_actions = []
2023-10-05 17:03:10 +03:00
```
##### GitHub app automatic tools for new code (PR push)
2023-11-01 18:36:12 +02:00
In addition to running automatic tools when a PR is opened, the GitHub app can also respond to new code that is pushed to an open PR.
2023-10-05 17:03:10 +03:00
The configuration toggle `handle_push_trigger` can be used to enable this feature.
The configuration parameter `push_commands` defines the list of tools that will be **run automatically** when new code is pushed to the PR.
```
[github_app]
handle_push_trigger = true
push_commands = [
"/describe --pr_description.add_original_user_description=true --pr_description.keep_original_user_title=true",
"/auto_review -i --pr_reviewer.remove_previous_review_comment=true",
]
```
2023-11-08 19:27:16 +02:00
The means that when new code is pushed to the PR, the PR-Agent will run the `describe` and incremental `auto_review` tools.
For the describe tool, the `add_original_user_description` and `keep_original_user_title` parameters will be set to true.
For the `auto_review` tool, it will run in incremental mode, and the `remove_previous_review_comment` parameter will be set to true.
Much like the configurations for `pr_commands`, you can override the default tool paramteres by uploading a local configuration file to the root of your repo.
2023-08-30 19:46:33 +03:00
2023-08-31 08:02:14 +03:00
#### Editing the prompts
2023-08-31 08:06:43 +03:00
The prompts for the various PR-Agent tools are defined in the `pr_agent/settings` folder.
2023-10-06 22:13:03 +11:00
In practice, the prompts are loaded and stored as a standard setting object.
2023-09-02 09:25:38 +03:00
Hence, editing them is similar to editing any other configuration value - just place the relevant key in `.pr_agent.toml`file, and override the default value.
2023-08-31 08:02:14 +03:00
For example, if you want to edit the prompts of the [describe](./pr_agent/settings/pr_description_prompts.toml) tool, you can add the following to your `.pr_agent.toml` file:
```
[pr_description_prompt]
system="""
...
"""
user="""
...
"""
```
2023-08-31 08:08:09 +03:00
Note that the new prompt will need to generate an output compatible with the relevant [post-process function](./pr_agent/tools/pr_description.py#L137).
2023-08-31 08:02:14 +03:00
2023-09-02 09:19:35 +03:00
### Working with GitHub Action
2023-10-29 13:01:55 +02:00
You can configure settings in GitHub action by adding environment variables under the env section in `.github/workflows/pr_agent.yml` file.
2023-10-29 13:07:22 +02:00
Specifically, start by setting the following environment variables:
2023-09-25 18:56:10 +03:00
```yaml
env:
2023-10-29 13:05:15 +02:00
OPENAI_KEY: ${{ secrets.OPENAI_KEY }} # Make sure to add your OpenAI key to your repo secrets
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Make sure to add your GitHub token to your repo secrets
2023-10-29 13:07:22 +02:00
github_action.auto_review: "true" # enable\disable auto review
github_action.auto_describe: "true" # enable\disable auto describe
github_action.auto_improve: "false" # enable\disable auto improve
2023-09-25 18:56:10 +03:00
```
2023-10-29 13:01:55 +02:00
`github_action.auto_review`, `github_action.auto_describe` and `github_action.auto_improve` are used to enable/disable automatic tools that run when a new PR is opened.
2023-10-01 09:00:58 +03:00
If not set, the default option is that only the `review` tool will run automatically when a new PR is opened.
2023-09-25 18:56:10 +03:00
2023-10-29 13:01:55 +02:00
Note that you can give additional config parameters by adding environment variables to `.github/workflows/pr_agent.yml`, or by using a `.pr_agent.toml` file in the root of your repo, similar to the GitHub App usage.
2023-10-29 13:05:15 +02:00
2023-10-29 13:01:55 +02:00
For example, you can set an environment variable: `pr_description.add_original_user_description=false`, or add a `.pr_agent.toml` file with the following content:
```
[pr_description]
add_original_user_description = false
```
2023-09-30 10:51:37 +03:00
### Changing a model
2023-08-30 19:42:46 +03:00
2023-08-07 09:04:52 +03:00
See [here](pr_agent/algo/__init__.py) for the list of available models.
2023-10-01 09:00:58 +03:00
To use a different model than the default (GPT-4), you need to edit [configuration file](pr_agent/settings/configuration.toml#L2).
2023-09-30 10:51:37 +03:00
For models and environments not from OPENAI, you might need to provide additional keys and other parameters. See below for instructions.
2023-08-07 09:04:52 +03:00
2023-09-05 16:23:22 -07:00
#### Azure
2023-10-06 22:13:03 +11:00
To use Azure, set in your .secrets.toml:
2023-09-05 15:19:56 -07:00
```
api_key = "" # your azure api key
api_type = "azure"
api_version = '2023-05-15' # Check Azure documentation for the current API version
api_base = "" # The base URL for your Azure OpenAI resource. e.g. "https://<your resource name>.openai.azure.com"
2023-10-10 17:23:58 +03:00
openai.deployment_id = "" # The deployment name you chose when you deployed the engine
2023-09-05 15:19:56 -07:00
```
2023-10-06 22:13:03 +11:00
and
2023-08-07 09:04:52 +03:00
```
[config]
2023-09-05 15:19:56 -07:00
model="" # the OpenAI model you've deployed on Azure (e.g. gpt-3.5-turbo)
```
2023-10-06 22:13:03 +11:00
in the configuration.toml
2023-09-05 15:19:56 -07:00
2023-09-05 16:23:22 -07:00
#### Huggingface
2023-10-06 22:13:03 +11:00
**Local**
You can run Huggingface models locally through either [VLLM](https://docs.litellm.ai/docs/providers/vllm) or [Ollama](https://docs.litellm.ai/docs/providers/ollama)
E.g. to use a new Huggingface model locally via Ollama, set:
```
[__init__.py]
MAX_TOKENS = {
"model-name-on-ollama": <max_tokens>
}
e.g.
MAX_TOKENS={
...,
"llama2": 4096
}
[config] # in configuration.toml
model = "ollama/llama2"
[ollama] # in .secrets.toml
2023-10-06 22:13:03 +11:00
api_base = ... # the base url for your huggingface inference endpoint
```
**Inference Endpoints**
2023-09-05 16:23:22 -07:00
To use a new model with Huggingface Inference Endpoints, for example, set:
```
[__init__.py]
MAX_TOKENS = {
"model-name-on-huggingface": <max_tokens>
}
e.g.
MAX_TOKENS={
...,
"meta-llama/Llama-2-7b-chat-hf": 4096
}
[config] # in configuration.toml
model = "huggingface/meta-llama/Llama-2-7b-chat-hf"
[huggingface] # in .secrets.toml
key = ... # your huggingface api key
2023-10-06 22:13:03 +11:00
api_base = ... # the base url for your huggingface inference endpoint
2023-09-05 16:23:22 -07:00
```
(you can obtain a Llama2 key from [here](https://replicate.com/replicate/llama-2-70b-chat/api))
#### Replicate
2023-09-05 15:19:56 -07:00
To use Llama2 model with Replicate, for example, set:
```
[config] # in configuration.toml
2023-08-07 09:04:52 +03:00
model = "replicate/llama-2-70b-chat:2c1608e18606fad2812020dc541930f2d0495ce32eee50074220b87300bc16e1"
2023-09-05 15:19:56 -07:00
[replicate] # in .secrets.toml
2023-08-07 09:04:52 +03:00
key = ...
```
(you can obtain a Llama2 key from [here](https://replicate.com/replicate/llama-2-70b-chat/api))
2023-09-05 16:23:22 -07:00
2023-08-07 09:04:52 +03:00
Also review the [AiHandler](pr_agent/algo/ai_handler.py) file for instruction how to set keys for other models.
2023-10-02 18:10:41 +03:00
### Working with large PRs
The default mode of CodiumAI is to have a single call per tool, using GPT-4, which has a token limit of 8000 tokens.
2023-10-06 22:13:03 +11:00
This mode provide a very good speed-quality-cost tradeoff, and can handle most PRs successfully.
2023-10-02 18:10:41 +03:00
When the PR is above the token limit, it employs a [PR Compression strategy](./PR_COMPRESSION.md).
However, for very large PRs, or in case you want to emphasize quality over speed and cost, there are 2 possible solutions:
2023-10-02 18:18:15 +03:00
1) [Use a model](#changing-a-model) with larger context, like GPT-32K, or claude-100K. This solution will be applicable for all the tools.
2023-10-06 22:13:03 +11:00
2) For the `/improve` tool, there is an ['extended' mode](./docs/IMPROVE.md) (`/improve --extended`),
2023-10-02 18:18:15 +03:00
which divides the PR to chunks, and process each chunk separately. With this mode, regardless of the model, no compression will be done (but for large PRs, multiple model calls may occur)
2023-10-02 18:10:41 +03:00
2023-09-30 10:51:37 +03:00
### Appendix - additional configurations walkthrough
2023-08-07 09:04:52 +03:00
#### Extra instructions
All PR-Agent tools have a parameter called `extra_instructions`, that enables to add free-text extra instructions. Example usage:
```
/update_changelog --pr_update_changelog.extra_instructions="Make sure to update also the version ..."
2023-08-31 11:47:51 +00:00
```
2023-10-05 08:38:43 +03:00
#### Patch Extra Lines
By default, around any change in your PR, git patch provides 3 lines of context above and below the change.
2023-10-05 08:46:02 +03:00
```
@@ -12,5 +12,5 @@ def func1():
code line that already existed in the file...
code line that already existed in the file...
code line that already existed in the file....
-code line that was removed in the PR
+new code line added in the PR
code line that already existed in the file...
code line that already existed in the file...
code line that already existed in the file...
```
2023-10-05 08:38:43 +03:00
For the `review`, `describe`, `ask` and `add_docs` tools, if the token budget allows, PR-Agent tries to increase the number of lines of context, via the parameter:
```
[config]
patch_extra_lines=3
```
2023-10-05 08:46:02 +03:00
2023-10-05 08:38:43 +03:00
Increasing this number provides more context to the model, but will also increase the token budget.
2023-10-05 08:46:02 +03:00
If the PR is too large (see [PR Compression strategy](./PR_COMPRESSION.md)), PR-Agent automatically sets this number to 0, using the original git patch.
2023-10-05 08:38:43 +03:00
2023-09-01 20:22:10 +03:00
#### Azure DevOps provider
2023-08-31 11:50:41 +00:00
To use Azure DevOps provider use the following settings in configuration.toml:
2023-08-31 11:47:51 +00:00
```
[config]
git_provider="azure"
use_repo_settings_file=false
2023-08-31 11:50:41 +00:00
```
And use the following settings (you have to replace the values) in .secrets.toml:
```
[azure_devops]
org = "https://dev.azure.com/YOUR_ORGANIZATION/"
pat = "YOUR_PAT_TOKEN"
2023-10-06 22:13:03 +11:00
```