# Contributing to NOVA Thank you for your interest in contributing to NOVA! This document provides guidelines for contributing. --- ## How to Contribute ### Reporting Issues **Bug Reports:** 1. Check existing issues first 2. Use the bug report template 3. Include: - Python version - OS and hardware - Steps to reproduce - Expected vs actual behavior - Error messages/logs **Feature Requests:** 1. Check if already proposed 2. Explain the use case 3. Describe the desired behavior ### Code Contributions **Setup Development Environment:** ```bash # Fork and clone git clone https://github.com/yourusername/nova.git cd nova # Create venv python -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate # Install dev dependencies pip install -r requirements.txt pip install -e .[dev] ``` **Before Submitting:** 1. **Run Tests:** ```bash pytest tests/ -v ``` 2. **Lint Code:** ```bash ruff check . black --check . ``` 3. **Format Code:** ```bash black nova_core/ nova_tokenizer/ nova_train/ nova_evo/ nova_chat/ ``` 4. **Type Check (optional but recommended):** ```bash mypy nova_core/ --ignore-missing-imports ``` ### Pull Request Process 1. **Branch Naming:** - `feature/description` for new features - `fix/description` for bug fixes - `docs/description` for documentation 2. **Commit Messages:** - Clear, descriptive messages - Reference issues: `Fix #123: Description` 3. **PR Description:** - What changed - Why the change - Testing performed - Screenshots (if UI changes) 4. **Review Process:** - CI must pass - At least one approval required - Address review feedback --- ## Development Guidelines ### Code Style **Python:** - Follow PEP 8 - Use Black formatter (line length 100) - Type hints encouraged - Docstrings for public APIs **Example:** ```python def example_function(param: str, optional: int = 0) -> bool: """ Brief description. Args: param: Description optional: Description (default: 0) Returns: Description """ return True ``` ### Testing **Write Tests For:** - New features - Bug fixes - Public APIs **Test Locations:** - `tests/test_core.py` - Core transformer - `tests/test_tokenizer.py` - Tokenizer - `tests/test_persona.py` - Persona system - `tests/test_.py` - Other modules **Run Tests:** ```bash # All tests pytest # Specific file pytest tests/test_core.py # With coverage pytest --cov=nova_core ``` ### Documentation **Update Docs For:** - API changes - New features - Configuration options **Documentation Files:** - `README.md` - Main documentation - `docs/MODEL_CARD.md` - Model information - `docs/PRIVACY_LOCAL.md` - Privacy details - `docs/DATA_LICENSES.md` - Data licensing --- ## Contribution Areas ### High Priority - **Pre-trained Models:** Training and releasing checkpoints - **Export Tools:** GGUF converter, quantization improvements - **Evaluation Suite:** Comprehensive benchmarks - **Dataset Downloaders:** Legal dataset acquisition scripts ### Medium Priority - **LoRA Support:** Fine-tuning with adapters - **Multi-language:** Support for non-English - **Performance:** Optimization improvements - **Tests:** Increase coverage ### Documentation - **Tutorials:** Step-by-step guides - **Examples:** Real-world use cases - **API Docs:** Complete API documentation - **Architecture:** Deep-dive technical docs --- ## License By contributing, you agree that your contributions will be licensed under Apache License 2.0. --- ## Code of Conduct ### Our Pledge - Be respectful and inclusive - Welcome newcomers - Focus on constructive feedback - Assume good intentions ### Unacceptable Behavior - Harassment or discrimination - Trolling or insulting comments - Publishing others' private information - Other unprofessional conduct ### Enforcement Violations can be reported to project maintainers. All complaints will be reviewed and investigated. --- ## Questions? - **Discussions:** GitHub Discussions - **Issues:** GitHub Issues - **General:** Open an issue with the "question" label --- ## Recognition Contributors will be: - Listed in CONTRIBUTORS.md - Mentioned in release notes - Credited for significant features --- Thank you for contributing to NOVA! 🌟