Spaces:
Paused
Paused
| # Contributing to LiteLLM | |
| Thank you for your interest in contributing to LiteLLM! We welcome contributions of all kinds - from bug fixes and documentation improvements to new features and integrations. | |
| ## **Checklist before submitting a PR** | |
| Here are the core requirements for any PR submitted to LiteLLM: | |
| - [ ] **Sign the Contributor License Agreement (CLA)** - [see details](#contributor-license-agreement-cla) | |
| - [ ] **Add testing** - Adding at least 1 test is a hard requirement - [see details](#adding-testing) | |
| - [ ] **Ensure your PR passes all checks**: | |
| - [ ] [Unit Tests](#running-unit-tests) - `make test-unit` | |
| - [ ] [Linting / Formatting](#running-linting-and-formatting-checks) - `make lint` | |
| - [ ] **Keep scope isolated** - Your changes should address 1 specific problem at a time | |
| ## **Contributor License Agreement (CLA)** | |
| Before contributing code to LiteLLM, you must sign our [Contributor License Agreement (CLA)](https://cla-assistant.io/BerriAI/litellm). This is a legal requirement for all contributions to be merged into the main repository. | |
| **Important:** We strongly recommend reviewing and signing the CLA before starting work on your contribution to avoid any delays in the PR process. | |
| ## Quick Start | |
| ### 1. Setup Your Local Development Environment | |
| ```bash | |
| # Clone the repository | |
| git clone https://github.com/BerriAI/litellm.git | |
| cd litellm | |
| # Create a new branch for your feature | |
| git checkout -b your-feature-branch | |
| # Install development dependencies | |
| make install-dev | |
| # Verify your setup works | |
| make help | |
| ``` | |
| That's it! Your local development environment is ready. | |
| ### 2. Development Workflow | |
| Here's the recommended workflow for making changes: | |
| ```bash | |
| # Make your changes to the code | |
| # ... | |
| # Format your code (auto-fixes formatting issues) | |
| make format | |
| # Run all linting checks (matches CI exactly) | |
| make lint | |
| # Run unit tests to ensure nothing is broken | |
| make test-unit | |
| # Commit your changes | |
| git add . | |
| git commit -m "Your descriptive commit message" | |
| # Push and create a PR | |
| git push origin your-feature-branch | |
| ``` | |
| ## Adding Testing | |
| **Adding at least 1 test is a hard requirement for all PRs.** | |
| ### Where to Add Tests | |
| Add your tests to the [`tests/test_litellm/` directory](https://github.com/BerriAI/litellm/tree/main/tests/test_litellm). | |
| - This directory mirrors the structure of the `litellm/` directory | |
| - **Only add mocked tests** - no real LLM API calls in this directory | |
| - For integration tests with real APIs, use the appropriate test directories | |
| ### File Naming Convention | |
| The `tests/test_litellm/` directory follows the same structure as `litellm/`: | |
| - `litellm/proxy/caching_routes.py` β `tests/test_litellm/proxy/test_caching_routes.py` | |
| - `litellm/utils.py` β `tests/test_litellm/test_utils.py` | |
| ### Example Test | |
| ```python | |
| import pytest | |
| from litellm import completion | |
| def test_your_feature(): | |
| """Test your feature with a descriptive docstring.""" | |
| # Arrange | |
| messages = [{"role": "user", "content": "Hello"}] | |
| # Act | |
| # Use mocked responses, not real API calls | |
| # Assert | |
| assert expected_result == actual_result | |
| ``` | |
| ## Running Tests and Checks | |
| ### Running Unit Tests | |
| Run all unit tests (uses parallel execution for speed): | |
| ```bash | |
| make test-unit | |
| ``` | |
| Run specific test files: | |
| ```bash | |
| poetry run pytest tests/test_litellm/test_your_file.py -v | |
| ``` | |
| ### Running Linting and Formatting Checks | |
| Run all linting checks (matches CI exactly): | |
| ```bash | |
| make lint | |
| ``` | |
| Individual linting commands: | |
| ```bash | |
| make format-check # Check Black formatting | |
| make lint-ruff # Run Ruff linting | |
| make lint-mypy # Run MyPy type checking | |
| make check-circular-imports # Check for circular imports | |
| make check-import-safety # Check import safety | |
| ``` | |
| Apply formatting (auto-fixes issues): | |
| ```bash | |
| make format | |
| ``` | |
| ### CI Compatibility | |
| To ensure your changes will pass CI, run the exact same checks locally: | |
| ```bash | |
| # This runs the same checks as the GitHub workflows | |
| make lint | |
| make test-unit | |
| ``` | |
| For exact CI compatibility (pins OpenAI version like CI): | |
| ```bash | |
| make install-dev-ci # Installs exact CI dependencies | |
| ``` | |
| ## Available Make Commands | |
| Run `make help` to see all available commands: | |
| ```bash | |
| make help # Show all available commands | |
| make install-dev # Install development dependencies | |
| make install-proxy-dev # Install proxy development dependencies | |
| make install-test-deps # Install test dependencies (for running tests) | |
| make format # Apply Black code formatting | |
| make format-check # Check Black formatting (matches CI) | |
| make lint # Run all linting checks | |
| make test-unit # Run unit tests | |
| make test-integration # Run integration tests | |
| make test-unit-helm # Run Helm unit tests | |
| ``` | |
| ## Code Quality Standards | |
| LiteLLM follows the [Google Python Style Guide](https://google.github.io/styleguide/pyguide.html). | |
| Our automated quality checks include: | |
| - **Black** for consistent code formatting | |
| - **Ruff** for linting and code quality | |
| - **MyPy** for static type checking | |
| - **Circular import detection** | |
| - **Import safety validation** | |
| All checks must pass before your PR can be merged. | |
| ## Common Issues and Solutions | |
| ### 1. Linting Failures | |
| If `make lint` fails: | |
| 1. **Formatting issues**: Run `make format` to auto-fix | |
| 2. **Ruff issues**: Check the output and fix manually | |
| 3. **MyPy issues**: Add proper type hints | |
| 4. **Circular imports**: Refactor import dependencies | |
| 5. **Import safety**: Fix any unprotected imports | |
| ### 2. Test Failures | |
| If `make test-unit` fails: | |
| 1. Check if you broke existing functionality | |
| 2. Add tests for your new code | |
| 3. Ensure tests use mocks, not real API calls | |
| 4. Check test file naming conventions | |
| ### 3. Common Development Tips | |
| - **Use type hints**: MyPy requires proper type annotations | |
| - **Write descriptive commit messages**: Help reviewers understand your changes | |
| - **Keep PRs focused**: One feature/fix per PR | |
| - **Test edge cases**: Don't just test the happy path | |
| - **Update documentation**: If you change APIs, update docs | |
| ## Building and Running Locally | |
| ### LiteLLM Proxy Server | |
| To run the proxy server locally: | |
| ```bash | |
| # Install proxy dependencies | |
| make install-proxy-dev | |
| # Start the proxy server | |
| poetry run litellm --config your_config.yaml | |
| ``` | |
| ### Docker Development | |
| If you want to build the Docker image yourself: | |
| ```bash | |
| # Build using the non-root Dockerfile | |
| docker build -f docker/Dockerfile.non_root -t litellm_dev . | |
| # Run with your config | |
| docker run \ | |
| -v $(pwd)/proxy_config.yaml:/app/config.yaml \ | |
| -e LITELLM_MASTER_KEY="sk-1234" \ | |
| -p 4000:4000 \ | |
| litellm_dev \ | |
| --config /app/config.yaml --detailed_debug | |
| ``` | |
| ## Submitting Your PR | |
| 1. **Push your branch**: `git push origin your-feature-branch` | |
| 2. **Create a PR**: Go to GitHub and create a pull request | |
| 3. **Fill out the PR template**: Provide clear description of changes | |
| 4. **Wait for review**: Maintainers will review and provide feedback | |
| 5. **Address feedback**: Make requested changes and push updates | |
| 6. **Merge**: Once approved, your PR will be merged! | |
| ## Getting Help | |
| If you need help: | |
| - π¬ [Join our Discord](https://discord.gg/wuPM9dRgDw) | |
| - π§ Email us: ishaan@berri.ai / krrish@berri.ai | |
| - π [Create an issue](https://github.com/BerriAI/litellm/issues/new) | |
| ## What to Contribute | |
| Looking for ideas? Check out: | |
| - π [Good first issues](https://github.com/BerriAI/litellm/labels/good%20first%20issue) | |
| - π [Feature requests](https://github.com/BerriAI/litellm/labels/enhancement) | |
| - π Documentation improvements | |
| - π§ͺ Test coverage improvements | |
| - π New LLM provider integrations | |
| Thank you for contributing to LiteLLM! π |