# How to Contribute

Welcome to the **ARAI AI Agents** project! We appreciate your interest in contributing. This guide outlines our contribution process, coding conventions, and best practices to ensure a smooth and collaborative experience.

## Table of Contents

1. [Code of Conduct](#code-of-conduct)  
2. [Getting Started](#getting-started)  
3. [Branching & Workflow](#branching--workflow)  
4. [Style & Documentation](#style--documentation)  
    - [Docstring Guidelines](#docstring-guidelines)  
    - [Author Attribution](#author-attribution)  
5. [Commit Messages & Tagging](#commit-messages--tagging)  
6. [Testing Your Changes](#testing-your-changes)  
7. [Pull Requests](#pull-requests)  
8. [Need Help?](#need-help)

---

## 1. Code of Conduct

Please review our [Code of Conduct](./CODE_OF_CONDUCT.md) before contributing. By participating, you agree to uphold a respectful and inclusive environment for everyone.

---

## 2. Getting Started

**1. Fork & Clone**  
- Fork this repository using the **Fork** button on GitHub.  
- Clone your fork locally, for example:
  ```bash
  git clone https://github.com/<your-username>/arai_ai_agents.git
  ```
- Set up your remote so you can pull changes from the official repo later:
  ```bash
  git remote add upstream https://github.com/arai-ai/arai_ai_agents.git
  ```

**2. Create a Virtual Environment**  
We recommend using [conda](https://docs.conda.io/en/latest/) or [venv](https://docs.python.org/3/library/venv.html):
```bash
conda create --name arai_ai_agents python=3.11
conda activate arai_ai_agents
```
  
**3. Install Dependencies**  
```bash
pip install -r requirements.txt
```

**4. You’re All Set!**  
Now you can explore the codebase, run `main.py`, or execute tests to ensure everything is working.

---

## 3. Branching & Workflow

1. **Create a Branch**  
   - Use a descriptive name for your branch, for example:  
     - `feat/new-twitter-connector`  
     - `fix/spelling-typos`  
     - `docs/improve-readme`
   ```bash
   git checkout -b feat/new-twitter-connector
   ```
2. **Make Changes & Commit**  
   - Keep commits small and focused.  
   - Write clear commit messages (see [Commit Messages & Tagging](#commit-messages--tagging)).

3. **Pull & Rebase** (before pushing)  
   - Keep your branch up-to-date with the main branch:
     ```bash
     git checkout main
     git pull upstream main
     git checkout feat/new-twitter-connector
     git rebase main
     ```
4. **Push Your Branch**  
   ```bash
   git push origin feat/new-twitter-connector
   ```

---

## 4. Style & Documentation

### Docstring Guidelines

We follow **Google Style Python Docstrings**:  
[https://sphinxcontrib-napoleon.readthedocs.io/en/latest/example_google.html](https://sphinxcontrib-napoleon.readthedocs.io/en/latest/example_google.html)

- **Module Docstrings**  
  At the top of each new or updated module, include something like:
  ```python
  """
  Module: twitter_connector
  =========================

  This module implements the TwitterConnector class for interacting with Twitter APIs.

  Title: Twitter Connector
  Summary: Twitter connector implementation.
  Authors:
      - @TheBlockRhino
  Date: 2024-12-31
  Last Updated: 2024-12-31
  URLs:
      - https://arai-ai.io
      - https://github.com/ARAIDevHub/arai-ai-agents
      - https://x.com/TheBlockRhino
  """
  ```
  - If you **modify** an existing file, add your name to the **Authors** list and update the **Last Updated** field.

- **Function & Class Docstrings**  
  Use the Google-style format for parameters, returns, exceptions, etc. Example:
  ```python
  def my_function(param1: str, param2: int) -> bool:
      """
      Perform an example operation and return a boolean.

      Args:
          param1 (str): Description of param1.
          param2 (int): Description of param2.

      Returns:
          bool: Explanation of the return value.
      """
  ```

### Author Attribution

Whenever you add a **substantial** piece of work (new module, major refactor), be sure to:
- Add your handle to the module docstring’s **Authors** list.
- Keep track of changes in the **Last Updated** date.

---

## 5. Commit Messages & Tagging

We recommend [semantic versioning](https://www.gitkraken.com/gitkon/semantic-versioning-git-tags) and **descriptive commit messages**.

- **Prefix** your commits with a type, for example:
  - `feat:` when you add a new feature
  - `fix:` when you fix a bug
  - `docs:` for documentation updates
  - `test:` for test-related changes
  - `refactor:` for code improvements without changing functionality
  - `perf:` for performance improvements
  - `chore:` for minor tasks like updating `.gitignore`

**Example**:
```
feat: add advanced prompt chaining for TwitterConnector

- Created prompt_chain_v2.py
- Updated docstrings in twitter_connector.py
- Bumped version from 1.2.0 to 1.3.0
```

Use **Git Tags** (`git tag v1.3.0`) for:
- Major releases
- Milestones

---

## 6. Testing Your Changes

1. **Run Existing Tests**  
   ```bash
   pytest
   ```
   or
   ```bash
   python -m unittest discover tests
   ```
2. **Add New Tests**  
   - Place new tests in the `tests/` folder, matching your new modules or functionalities.
   - Ensure all tests pass before submitting a pull request.

---

## 7. Pull Requests

1. **Open a Pull Request** in your fork’s **GitHub** page.  
2. **Provide a clear description** of what you changed and why.  
3. **Reference** any relevant **issues** or user stories (e.g., `Closes #42`).  
4. Wait for a **review**. Maintainers may request changes or clarifications.

**Pro-Tip**: If your PR covers multiple changes, consider splitting it into smaller PRs for easier review.

---

## 8. Need Help?

- Check the [Issues](https://github.com/arai-ai/arai_ai_agents/issues) or [Discussions](https://github.com/arai-ai/arai_ai_agents/discussions) for open topics.  
- Ask questions or clarifications in a GitHub Issue.  

We appreciate your time and effort in making **ARAI AI Agents** even better. Thank you for contributing!

---

*Happy coding!*  
*The ARAI AI Agents community*