ai-agent / docs /development /contributing.md
katospiegel's picture
Deploy develop: FastAPI+React frontend, multi-stage Docker (ai_agent serve)
07c2476 verified
|
Raw
History Blame Contribute Delete
6.49 kB
# Contributing
Thank you for your interest in contributing to the AI Imaging Agent! This guide will help you get started.
## Getting Started
### 1. Fork and Clone
```bash
# Fork the repository on GitHub
# Then clone your fork
git clone https://github.com/YOUR_USERNAME/ai-agent.git
cd ai-agent
```
### 2. Set Up Development Environment
```bash
# Create virtual environment
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
# Install in development mode
pip install -e ".[dev]"
```
### 3. Create a Branch
```bash
git checkout -b feature/your-feature-name
# or
git checkout -b fix/issue-description
```
## Development Workflow
### Making Changes
1. **Make your changes** in the appropriate module
2. **Test your changes** (see [Testing](testing.md))
3. **Update documentation** if needed
4. **Update CHANGELOG.md** following [Keep a Changelog](https://keepachangelog.com/) format
<!-- ### Code Style
We use standard Python tools for code quality:
#### Black
Code formatting:
```bash
black src/ tests/
```
#### Ruff
Linting:
```bash
ruff check src/ tests/
``` -->
#### Type Checking
MyPy for type checking:
```bash
mypy src/
```
### Running Tests
```bash
# Run all tests
pytest tests/
# Run specific test file
pytest tests/test_retrieval_pipeline.py
# Run with coverage
pytest --cov=ai_agent tests/
```
## Contribution Guidelines
### Code Quality
- **Follow PEP 8**: Use Black for formatting
- **Type hints**: Add type annotations to new functions
- **Docstrings**: Document all public functions and classes
- **Tests**: Add tests for new functionality
- **No warnings**: Fix any linter warnings before submitting
### Commit Messages
Use clear, descriptive commit messages:
```
feat: Add alternative search tool for agent
- Implement search_alternative tool
- Add retry logic for insufficient results
- Update agent prompt with tool description
```
**Format**:
- `feat:` New features
- `fix:` Bug fixes
- `docs:` Documentation changes
- `test:` Test additions/changes
- `refactor:` Code refactoring
- `chore:` Maintenance tasks
### Pull Requests
1. **Update CHANGELOG.md** under `[Unreleased]` section
2. **Write clear PR description** explaining changes
3. **Link related issues** if applicable
4. **Request review** from maintainers
**PR description template**:
```markdown
## Description
Brief description of changes
## Type of Change
- [ ] Bug fix
- [ ] New feature
- [ ] Documentation update
- [ ] Refactoring
## Testing
How to test these changes
## Checklist
- [ ] Code follows project style
- [ ] Tests added/updated
- [ ] Documentation updated
- [ ] CHANGELOG.md updated
```
## Areas to Contribute
### High Priority
- **Catalog expansion**: Add more imaging tools
- **Demo integration**: Improve Gradio Space execution and add new spaces for tools
- **Format support**: Add new image format handlers
<!-- ### Good First Issues
Look for issues tagged `good-first-issue` on GitHub:
- Bug fixes
- Documentation improvements
- Test coverage expansion
- Example scripts -->
### Feature Requests
Before implementing new features:
1. **Check existing issues** for similar requests
2. **Open an issue** to discuss the feature
3. **Get feedback** from maintainers
4. **Implement** after discussion
## Documentation
### Writing Documentation
Documentation lives in `docs/` and uses MkDocs Material.
```bash
# Install MkDocs
pip install mkdocs-material
# Serve locally
mkdocs serve
# Open http://127.0.0.1:8000
```
### Documentation Style
- Use **clear headings** and structure
- Include **code examples** where relevant
- Add **warnings** and **tips** for important information
- Keep **language simple** and accessible
## Adding Tools to Catalog
### Process
1. **Create tool entry** in `dataset/catalog.jsonl`:
```json
{
"@type": "SoftwareSourceCode",
"name": "ToolName",
"description": "Tool description",
"url": "https://github.com/user/tool",
"license": "Apache-2.0",
"keywords": ["segmentation", "CT"],
"supportingData": {
"modalities": ["CT"],
"dimensions": ["3D"],
"formats": ["DICOM"],
"demo_url": "https://huggingface.co/spaces/user/tool"
}
}
```
2. **Validate entry**:
```bash
# Check JSON syntax
python -c "import json; print(json.loads('YOUR_JSON_HERE'))"
```
3. **Update checksum**:
```bash
shasum dataset/catalog.jsonl > dataset/catalog.jsonl.sha1
```
4. **Sync catalog**:
```bash
ai_agent sync
```
5. **Test retrieval**:
```bash
ai_agent chat
# Try queries that should return your new tool
```
### Tool Criteria
Tools should:
- ✅ Be relevant to imaging analysis
- ✅ Be actively maintained
- ✅ Have clear documentation
- ✅ Preferably have a runnable demo
- ✅ Be open-source or have free tier
## Reporting Issues
### Bug Reports
Include:
- **Description** of the bug
- **Steps to reproduce**
- **Expected behavior**
- **Actual behavior**
- **Environment** (OS, Python version, etc.)
- **Logs** if available
### Feature Requests
Include:
- **Use case** for the feature
- **Proposed solution** (if you have one)
- **Alternatives considered**
- **Examples** of similar features
## Code Review Process
1. **Automated checks** run on PR (tests, linting)
2. **Maintainer review** provides feedback
3. **Address feedback** and update PR
4. **Approval** from maintainer(s)
5. **Merge** into main branch
## Release Process
Releases follow semantic versioning:
1. Update version in `pyproject.toml`
2. Update `CHANGELOG.md` with release date
3. Create git tag: `git tag v0.2.0`
4. Push tag: `git push origin v0.2.0`
5. GitHub Actions deploys documentation
## Getting Help
- **GitHub Discussions**: Ask questions
- **GitHub Issues**: Report bugs
## Code of Conduct
Be respectful and professional:
- Use welcoming and inclusive language
- Respect differing viewpoints
- Accept constructive criticism
- Focus on what's best for the community
## License
By contributing, you agree that your contributions will be licensed under the Apache 2.0 License.
## Next Steps
- Review [Project Structure](structure.md)
- Learn about [Testing](testing.md)
- Read [Architecture Overview](../architecture/overview.md)