Contribution Guide#
We welcome contributions to Pantheon! This guide will help you get started with contributing to the project.
Getting Started#
Setting Up Development Environment#
Fork the Repository
Visit aristoteleo/PantheonOS and click “Fork”
Clone Your Fork
git clone https://github.com/YOUR_USERNAME/pantheon-agents.git cd PantheonOS git remote add upstream https://github.com/aristoteleo/PantheonOS.git
Create Development Environment
# Create virtual environment python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate # Install in development mode pip install -e ".[dev]" # Install pre-commit hooks pre-commit install
Verify Installation
# Run tests pytest # Check code style black --check pantheon isort --check-only pantheon mypy pantheon
Development Workflow#
Creating a Feature Branch#
# Update main branch
git checkout main
git pull upstream main
# Create feature branch
git checkout -b feature/your-feature-name
# Make your changes
# ...
# Commit changes
git add .
git commit -m "feat: add new feature"
# Push to your fork
git push origin feature/your-feature-name
Commit Message Convention#
We follow conventional commits:
feat:New featurefix:Bug fixdocs:Documentation changesstyle:Code style changes (formatting, etc)refactor:Code refactoringtest:Test additions or changeschore:Build process or auxiliary tool changes
Examples:
feat: add support for Gemini models
fix: handle timeout in remote agents
docs: update team collaboration examples
test: add tests for SwarmCenter team
Code Standards#
Python Style Guide#
We follow PEP 8 with these additions:
Type Hints: Use type hints for all public functions
def process_data( data: List[Dict[str, Any]], options: Optional[ProcessOptions] = None ) -> ProcessResult: """Process data with given options.""" pass
Docstrings: Use Google-style docstrings
def complex_function(param1: str, param2: int) -> dict: """Brief description of function. More detailed explanation if needed. Args: param1: Description of param1 param2: Description of param2 Returns: Description of return value Raises: ValueError: When invalid input provided """ pass
Async/Await: Prefer async for I/O operations
async def fetch_data(url: str) -> dict: async with aiohttp.ClientSession() as session: async with session.get(url) as response: return await response.json()
Testing Guidelines#
Test Structure
import pytest from pantheon.agent import Agent class TestAgent: @pytest.fixture def agent(self): return Agent("test", "Test agent") async def test_basic_functionality(self, agent): response = await agent.run([{"role": "user", "content": "test"}]) assert response.messages async def test_error_handling(self, agent): with pytest.raises(ValueError): await agent.run([])
Test Coverage: Aim for >80% coverage
pytest --cov=pantheon --cov-report=html
Integration Tests: Mark with appropriate decorators
@pytest.mark.integration @pytest.mark.requires_api_key async def test_openai_integration(): # Test that requires OpenAI API pass
Areas for Contribution#
High Priority Areas#
Documentation - Add more examples - Improve API documentation - Create tutorials - Translate documentation
Testing - Increase test coverage - Add integration tests - Performance benchmarks - Edge case testing
Features - New team collaboration patterns - Additional toolsets - Enhanced memory systems - Better error handling
Bug Fixes - Check GitHub issues - Fix reported problems - Improve error messages
Example Contributions#
Adding a New Toolset:
# pantheon/tools/new_tool.py
from pantheon.toolsets.utils.toolset import Toolset
class NewToolSet(Toolset):
def __init__(self, name: str = "new_tools"):
super().__init__(name)
def get_tools(self):
return [self.tool1, self.tool2]
async def tool1(self, param: str) -> str:
"""Tool description."""
# Implementation
pass
Adding a New Team Pattern:
# pantheon/team/new_team.py
from pantheon.team.base import BaseTeam
class NewTeam(BaseTeam):
def __init__(self, agents: List[Agent]):
super().__init__(agents)
async def run(self, messages: List[dict]) -> AgentResponse:
# Team logic implementation
pass
Submitting Changes#
Pull Request Process#
Ensure Quality
# Format code black pantheon isort pantheon # Type check mypy pantheon # Run tests pytest # Check documentation cd docs make html
Create Pull Request
Use descriptive title
Fill out PR template
Link related issues
Add screenshots if UI changes
PR Description Template
## Description Brief description of changes ## Type of Change - [ ] Bug fix - [ ] New feature - [ ] Documentation update - [ ] Performance improvement ## Testing - [ ] Tests pass locally - [ ] Added new tests - [ ] Updated documentation ## Related Issues Fixes #123
Review Process#
Automated Checks: CI/CD runs tests and linting
Code Review: Maintainers review code
Feedback: Address review comments
Merge: Once approved, changes are merged
Community Guidelines#
Code of Conduct#
Be respectful and inclusive
Welcome newcomers
Provide constructive feedback
Focus on what’s best for the community
Getting Help#
Discord: Join our community server
GitHub Discussions: Ask questions
Issues: Report bugs or request features
Email: pantheon-dev@example.com
Recognition#
Contributors are recognized in: - README.md contributors section - Release notes - Annual contributor report
License#
By contributing, you agree that your contributions will be licensed under the same license as the project (MIT License).
Thank You!#
Thank you for contributing to Pantheon! Your efforts help make the project better for everyone.