Use research when you want GEPA to propose code changes to tracker source files and score them on a benchmark.
Reference material:
!!! example
=== "CLI"
```bash
boxmot research \
--benchmark mot17 --split ablation \
--tracker bytetrack \
--proposal-model openai/gpt-5.4 \
--max-metric-calls 24
```
=== "Python"
```python
from boxmot import BoxMOT
result = BoxMOT(tracker="bytetrack").research(
benchmark="mot17",
split="ablation",
proposal_model="openai/gpt-5.4",
max_metric_calls=24,
)
print(result.delta_summary)
```
See Mode-specific extras.
research needs the research extra for GEPA, plus whatever detector backend the selected benchmark uses.
BoxMOT expects provider-prefixed model identifiers such as:
openai/gpt-5.4anthropic/claude-sonnet-4-20250514openrouter/openai/gpt-5.4
Bare OpenAI model names such as gpt-5.4 are normalized to openai/gpt-5.4, but explicit prefixes are still preferred.
Set the provider API key in the matching environment variable, for example:
export OPENAI_API_KEY=...
export ANTHROPIC_API_KEY=...max_metric_callslimits how many benchmark evaluations GEPA can spend.eval_timeoutis per evaluation subprocess, not the total wall-clock runtime of the full research job.
Use --tracker-backend cpp to score candidate changes through a native C++ replay backend:
boxmot research --benchmark mot17 --split ablation --tracker bytetrack --tracker-backend cppThis is only useful for trackers with registered native replay support: botsort, bytetrack, ocsort, occluboost, and sfsort.
research writes:
- GEPA state and logs
- accepted and rejected candidate artifacts
- best-candidate code snapshots
- benchmark summaries before and after optimization
::: mkdocs-click :module: boxmot.engine.cli :command: boxmot :depth: 1 :command: research :style: table :prog_name: boxmot research