# Repo Chat

Repo Chat is a software package for answering queries about code repositories using large language models with document retrieval. It leverages the [langchain](https://github.com/OpenAI/langchain) library to facilitate the retrieval and chat operations.

## Installation

To install the required libraries, run:

```bash
pip install -r requirements.txt
```

## Usage

### Basic Usage

In order to use Repo Chat, you need to set the `OPENAI_API_KEY` in a .env file as shown below:

```
OPENAI_API_KEY=your_api_key_here
```

After setting the API key, you can use the `chain_manager` module to create a chain:

```python
from repo_chat import chain_manager

chain = chain_manager.get_chain("UPGRADE_QUERY")
```

You can then call the chain with input data:

```python
chain_input_data = {
    "query": "What does the function do?",
    "repo": "https://github.com/my-org/my-repo",
}

output = chain(chain_input_data)
```

### Advanced Usage

Please refer to the source code examples in the following files to learn more about Repo Chat's advanced features:

- `repo_chat\chain_manager.py`
- `repo_chat\chat_utils.py`
- `repo_chat\eval_utils.py`
- `repo_chat\templates.py`

## Chain Templates

Repo Chat uses multiple chain templates for different purposes. The templates are defined in `repo_chat\templates.py`. Here is a brief explanation of the available templates:

- `UPGRADE_QUERY`: Expand or refine a given query to improve the retrieved documents' quality and relevance.
- `RUN_QUERY_RAG`: Process the given query and its similar documents to provide the most accurate and relevant response possible.
- `CONTEXT_VALIDATOR`: Validate the context sufficiency of the given query and similar documents.
- `CRITIC`: Score a given response for a query by evaluating relevancy and accuracy.
- `RAW_CODE`: Process a given query for a specific code repository.

## Evaluation

Repo Chat provides evaluation utilities in the `repo_chat\eval_utils.py` module. The `CriticChain` class is used to evaluate a response generated by the model. The `QueryEvaluator` class is used to evaluate a single query against the Repo Chat chain, and `MultiQueryEvaluator` evaluates multiple queries in parallel.

## Contributing

Feel free to submit issues or pull requests if you have any suggestions or improvements you would like to add to Repo Chat.

## License

Repo Chat is released under the MIT License.