16031aae96
CPU tests Workflow / Testing (ubuntu-latest, 3.12) (push) Failing after 1s
CPU tests Workflow / Testing (ubuntu-latest, 3.13) (push) Failing after 0s
Mypy Type Check / Type Check (push) Failing after 0s
Docs/Test WorkFlow / Test docs build (push) Failing after 1s
PR Conflict Labeler / labeling (push) Failing after 1s
Dependency resolution / Resolve [tflite] extra — Python 3.12 (push) Failing after 0s
Smoke Tests / try-all-models (ubuntu-latest, 3.10) (push) Failing after 0s
Smoke Tests / try-all-models (ubuntu-latest, 3.13) (push) Failing after 1s
CPU tests Workflow / build-pkg (push) Failing after 1s
CPU tests Workflow / Testing (ubuntu-latest, 3.10) (push) Failing after 0s
CPU tests Workflow / Testing (ubuntu-latest, 3.11) (push) Failing after 0s
Smoke Tests / try-all-models (macos-latest, 3.10) (push) Has been cancelled
Smoke Tests / try-all-models (macos-latest, 3.13) (push) Has been cancelled
Smoke Tests / try-all-models (windows-latest, 3.10) (push) Has been cancelled
Smoke Tests / try-all-models (windows-latest, 3.13) (push) Has been cancelled
CPU tests Workflow / Testing (macos-latest, 3.10) (push) Has been cancelled
CPU tests Workflow / Testing (macos-latest, 3.13) (push) Has been cancelled
CPU tests Workflow / Testing (windows-latest, 3.10) (push) Has been cancelled
CPU tests Workflow / Testing (windows-latest, 3.13) (push) Has been cancelled
CPU tests Workflow / testing-guardian (push) Has been cancelled
GPU tests Workflow / Testing (push) Has been cancelled
327 lines
11 KiB
Markdown
327 lines
11 KiB
Markdown
# RF-DETR - Agent Instructions
|
|
|
|
This file provides detailed technical context for AI coding agents working with RF-DETR.
|
|
|
|
**Canonical Sources:**
|
|
|
|
- **Contribution Guidelines:** [CONTRIBUTING.md](.github/CONTRIBUTING.md) - The authoritative source for all contribution practices
|
|
- **Human Documentation:** [README.md](README.md) - Project overview and usage
|
|
- **Copilot Instructions:** [.github/copilot-instructions.md](.github/copilot-instructions.md) - GitHub Copilot-specific guidance
|
|
|
|
This document supplements the contribution guidelines with detailed technical information for automated tooling.
|
|
|
|
## Agent Responsibilities
|
|
|
|
As an AI agent contributing to RF-DETR, you are responsible for:
|
|
|
|
1. **Following test-driven development practices**
|
|
|
|
- Write failing tests first for bug fixes
|
|
- Write comprehensive tests for new features
|
|
- Ensure final PR commit has all tests passing
|
|
|
|
2. **Adhering to code quality standards**
|
|
|
|
- Run `pre-commit run --all-files` before every commit
|
|
- Follow type hint and docstring requirements
|
|
- Prefer direct project imports; conventional third-party aliases are allowed
|
|
|
|
3. **Maintaining agentic documentation**
|
|
|
|
- Update `AGENTS.md` when architecture patterns or technical conventions change
|
|
- Update `.github/copilot-instructions.md` when high-level guidance changes
|
|
- Update `.github/CONTRIBUTING.md` when human workflow is affected
|
|
- Apply updates after receiving major feedback in PR reviews
|
|
|
|
4. **Consulting maintainers before major changes**
|
|
|
|
- Open an issue before adding new models or significant features
|
|
- Wait for approval on approach before implementing
|
|
|
|
5. **Writing secure, minimal code**
|
|
|
|
- Avoid over-engineering and unnecessary abstractions
|
|
- Write secure code (prevent injection vulnerabilities)
|
|
- Follow existing patterns in the codebase
|
|
|
|
> [!NOTE]
|
|
> Keeping documentation current ensures consistency across agent contributions and reduces repeated feedback on the same issues.
|
|
|
|
## Build & Development Environment
|
|
|
|
> [!NOTE]
|
|
> **Canonical Reference:** See [Development Environment Setup](.github/CONTRIBUTING.md#development-environment-setup) in CONTRIBUTING.md for complete setup instructions.
|
|
|
|
### Setup
|
|
|
|
```bash
|
|
# Install uv (if not already installed)
|
|
pip install uv
|
|
|
|
# Full development environment (always use this)
|
|
uv sync --all-groups
|
|
```
|
|
|
|
**Prerequisites:** Python >=3.10 (tested on 3.10-3.13)
|
|
|
|
### Dependency Information
|
|
|
|
See `pyproject.toml` for complete dependency specifications:
|
|
|
|
- **Core:** PyTorch, torchvision, transformers, supervision, pydantic, pyDeprecate
|
|
- **Optional:** `[train]` (training, including peft and pycocotools), `[lora]` (LoRA fine-tuning), `[plus]` (Plus models), `[onnx]` (ONNX export), `[loggers]` (tensorboard, wandb, mlflow, clearml)
|
|
- **Development:** `tests`, `docs`, `build` groups
|
|
|
|
**Important version constraints:**
|
|
|
|
- PyTorch: >=2.2.0, \<3.0.0
|
|
- Transformers: >=5.0.0, \<6.0.0
|
|
|
|
## Testing
|
|
|
|
> [!NOTE]
|
|
> **Canonical Reference:** See [Test-Driven Development](.github/CONTRIBUTING.md#test-driven-development) in CONTRIBUTING.md for complete guidelines.
|
|
>
|
|
> **CI Workflows (Source of Truth):** See `.github/workflows/ci-tests-cpu.yml` and `.github/workflows/ci-tests-gpu.yml` for exact test commands used in CI.
|
|
|
|
### Commands
|
|
|
|
```bash
|
|
# CPU tests (default for local development; mirrors CI)
|
|
uv run --no-sync pytest src/ tests/ -n 1 -m "not gpu" --ignore=tests/run_smoke_all_models.py --cov=rfdetr --cov-report=xml --timeout=240 --durations=50
|
|
|
|
# GPU tests (requires GPU; mirrors CI)
|
|
uv run --no-sync pytest tests/ -m gpu -n 2 --reruns 1 --only-rerun "OutOfMemoryError" --cov=rfdetr --cov-report=xml --timeout=600 --durations=20
|
|
|
|
# Pre-commit checks (ALWAYS run before committing)
|
|
pre-commit run --all-files
|
|
```
|
|
|
|
### Testing Principles
|
|
|
|
> [!IMPORTANT]
|
|
> **Testing Requirements:**
|
|
>
|
|
> - ⚠️ **During development:** Tests may fail as you work through TDD cycle
|
|
> - ✅ **Before opening PR:** Final commit MUST have all tests passing
|
|
> - ✅ **Before each commit:** Run `pre-commit run --all-files`
|
|
|
|
**Test-Driven Development:**
|
|
|
|
1. **Bug fixes:** Write failing test → Fix code → Verify all tests pass
|
|
2. **New features:** Write comprehensive tests → Implement feature → Refactor
|
|
|
|
**Test Organization:**
|
|
|
|
- Group related tests in classes
|
|
- Use `@pytest.mark.parametrize` with `pytest.param(..., id="name")`
|
|
- Mark GPU/heavy tests with `@pytest.mark.gpu`
|
|
- Avoid multiple validation cases in a single test - see [CONTRIBUTING.md](.github/CONTRIBUTING.md#avoid-multiple-validation-cases-in-a-single-test) for details
|
|
|
|
**CI Information:**
|
|
See [CI Testing](.github/CONTRIBUTING.md#ci-testing) in CONTRIBUTING.md for details on OS/Python version matrix and workflow configurations.
|
|
|
|
## Code Quality & Linting
|
|
|
|
> [!NOTE]
|
|
> **Canonical Reference:** See [Code Quality and Linting](.github/CONTRIBUTING.md#code-quality-and-linting) in CONTRIBUTING.md for setup and details.
|
|
|
|
### Command
|
|
|
|
```bash
|
|
# Always run full pre-commit (not individual tools)
|
|
pre-commit run --all-files
|
|
```
|
|
|
|
> [!TIP]
|
|
> Pre-commit hooks will auto-format many issues. Review changes and re-stage files.
|
|
|
|
**Configuration Files:**
|
|
|
|
- `.pre-commit-config.yaml` - Pre-commit hooks (ruff, mdformat, prettier, codespell, license headers)
|
|
- `pyproject.toml` - Ruff linting rules (`[tool.ruff]` section)
|
|
|
|
**License Header (required for all Python files):**
|
|
|
|
```python
|
|
# ------------------------------------------------------------------------
|
|
# RF-DETR
|
|
# Copyright (c) 2025 Roboflow. All Rights Reserved.
|
|
# Licensed under the Apache License, Version 2.0 [see LICENSE for details]
|
|
# ------------------------------------------------------------------------
|
|
```
|
|
|
|
## Documentation
|
|
|
|
### Building Docs
|
|
|
|
```bash
|
|
# Full install (matches CI — required for XLarge/2XLarge model pages)
|
|
uv pip install -e ".[plus]" --group docs
|
|
|
|
# Serve locally (live reload)
|
|
uv run mkdocs serve
|
|
|
|
# Build static site
|
|
uv run mkdocs build
|
|
```
|
|
|
|
**Documentation Structure:**
|
|
|
|
- **Source:** `docs/` directory (Markdown)
|
|
- **Config:** `mkdocs.yaml` (uses custom YAML tags: `!!python/name`)
|
|
- **Deployment:** GitHub Actions publishes to GitHub Pages
|
|
|
|
**Note:** `mkdocs.yaml` is checked by the `check-yaml` pre-commit hook with `--unsafe` so custom YAML tags such as `!!python/name` are accepted.
|
|
|
|
## Package Building
|
|
|
|
```bash
|
|
# Install build dependencies
|
|
uv sync --group build
|
|
|
|
# Build distributions
|
|
uv build
|
|
|
|
# Validate build
|
|
uv run twine check --strict dist/*
|
|
```
|
|
|
|
**Build outputs:**
|
|
|
|
- Source distribution: `dist/rfdetr-*.tar.gz`
|
|
- Wheel: `dist/rfdetr-*.whl`
|
|
|
|
## Project Structure
|
|
|
|
> [!NOTE]
|
|
> **Canonical Reference:** See [Project Structure](.github/CONTRIBUTING.md#project-structure) in CONTRIBUTING.md for complete project organization, directory descriptions, and configuration files.
|
|
>
|
|
> **Quick summary:** `src/rfdetr/` (source code), `tests/` (test suite), `docs/` (documentation), `.github/` (CI/CD), `pyproject.toml` (dependencies and config).
|
|
>
|
|
> Internal package organization within `src/rfdetr/` is subject to change as this is an active research and development project.
|
|
|
|
## Architecture & Conventions
|
|
|
|
### Key Patterns
|
|
|
|
**Model Architecture:**
|
|
|
|
- RFDETR wrappers: `self.model` is the model context returned by `get_model()`
|
|
- Underlying PyTorch module: `self.model.model`
|
|
- Segmentation models return `pred_masks` as `torch.Tensor` or dict with keys `['spatial_features', 'query_features', 'bias']`
|
|
|
|
**Imports:**
|
|
|
|
```python
|
|
# Prefer direct project imports. Standard aliases such as `numpy as np`,
|
|
# `torch.nn.functional as F`, and lazy module aliases are allowed when conventional.
|
|
from rfdetr.util.misc import get_rank, get_world_size, is_main_process, save_on_master
|
|
from rfdetr.util.logger import get_logger
|
|
|
|
# Logger usage
|
|
logger = get_logger() # Default name: "rf-detr", reads LOG_LEVEL env var
|
|
|
|
# TQDM (environment compatibility)
|
|
from tqdm.auto import tqdm # NOT: from tqdm import tqdm
|
|
```
|
|
|
|
**Plus Models (XLarge, 2XLarge):**
|
|
|
|
- Requires separate `rfdetr_plus` package (PML 1.0 license)
|
|
- Import handled lazily via `__getattr__` in `src/rfdetr/platform/models.py`
|
|
- Raises `ImportError` if package not installed
|
|
|
|
**Subprocess Usage:**
|
|
|
|
```python
|
|
import subprocess
|
|
|
|
result = subprocess.run(
|
|
["command", "arg1", "arg2"],
|
|
check=True, # Raise CalledProcessError on failure
|
|
text=True, # Return stdout/stderr as strings
|
|
capture_output=True,
|
|
)
|
|
# Note: stderr is already a string, don't decode
|
|
```
|
|
|
|
**Logging:**
|
|
|
|
- Use `logger.debug()` for detailed tensor/shape information (not `logger.info()`)
|
|
- Use `logger.info()` for high-level progress/status
|
|
|
|
**Checkpoint Handling:**
|
|
|
|
- Always check file existence before operations
|
|
- Prevents errors when training is interrupted
|
|
|
|
### Type Hints & Docstrings
|
|
|
|
> [!IMPORTANT]
|
|
> **Canonical Reference:** See [Google-Style Docstrings and Mandatory Type Hints](.github/CONTRIBUTING.md#google-style-docstrings-and-mandatory-type-hints) in CONTRIBUTING.md for complete requirements and examples.
|
|
|
|
**Requirements:**
|
|
|
|
- MANDATORY type hints for all function parameters and return types
|
|
- MANDATORY Google-style docstrings for all functions and classes
|
|
- **Do not duplicate types in docstrings** - types are in the function signature
|
|
- Target Python version: 3.10+
|
|
|
|
## Common Workflows
|
|
|
|
### Making Changes
|
|
|
|
1. **Setup:** `uv sync --all-groups`
|
|
2. **Before changes:** Run tests to establish baseline
|
|
3. **Development:**
|
|
- Make minimal, focused changes
|
|
- Follow existing patterns and conventions
|
|
- Add type hints and docstrings
|
|
4. **Testing:**
|
|
- Bug fixes: Write test first, then fix
|
|
- Features: Test all major use cases
|
|
- Run: `uv run --no-sync pytest src/ tests/ -n 2 -m "not gpu" --ignore=tests/run_smoke_all_models.py --timeout=240 --durations=50`
|
|
5. **Quality checks:** `pre-commit run --all-files`
|
|
6. **Build (if needed):** `uv build`
|
|
7. **Commit:** Pre-commit hooks run automatically
|
|
|
|
### Adding New Model Variants
|
|
|
|
> [!IMPORTANT]
|
|
> **Canonical Reference:** See [Adding a New Model](.github/CONTRIBUTING.md#adding-a-new-model) in CONTRIBUTING.md for detailed guidance.
|
|
>
|
|
> Always consult maintainers before implementing new models.
|
|
|
|
### Security Considerations
|
|
|
|
- **Write secure code:** Avoid injection vulnerabilities (XSS, SQL injection, command injection)
|
|
- **Validate inputs:** Especially for file paths, URLs, and user-provided data
|
|
- **No credentials:** Never commit API keys, tokens, or credentials
|
|
- **Follow OWASP best practices**
|
|
|
|
## CI/CD Workflows
|
|
|
|
GitHub Actions workflows in `.github/workflows/`:
|
|
|
|
- **ci-tests-cpu.yml:** CPU tests across OS/Python versions
|
|
- **ci-tests-gpu.yml:** GPU-dependent tests
|
|
- **build-package.yml:** Build and validate distributions
|
|
- **ci-build-docs.yml:** Documentation builds
|
|
- **publish-docs.yml:** Deploy docs to GitHub Pages
|
|
|
|
**Concurrency:** PRs cancel in-progress runs on new pushes
|
|
|
|
## Additional Resources
|
|
|
|
- **Documentation:** https://rfdetr.roboflow.com
|
|
- **Repository:** https://github.com/roboflow/rf-detr
|
|
- **Issues:** https://github.com/roboflow/rf-detr/issues
|
|
- **Discord:** https://discord.gg/GbfgXGJ8Bk
|
|
- **Contributing:** `.github/CONTRIBUTING.md`
|
|
- **Copilot Instructions:** `.github/copilot-instructions.md`
|
|
|
|
---
|
|
|
|
**Note:** This file is designed for AI coding agents. For human-readable project information, see README.md. For contribution guidelines, see CONTRIBUTING.md.
|