Benchmarks and Recipes
QitOS keeps three different layers separate by design.1. Framework layer
This is the reusable kernel (the core AgentModule + Engine execution loop):AgentModule + EngineDesktopEnvActionSpaceEnvironmentAdapter- family presets
- qita replay and visual inspection
2. Benchmark layer
Dataset-specific integration belongs here:qitos.benchmark.desktopfor the starter benchmark familyqitos.benchmark.osworldfor the real OSWorld adapter path- benchmark-specific runtimes
- benchmark-specific evaluators/scorers
- benchmark-native task metadata and artifact (a persistent output file or data record from a run) handling
test_all.json, evaluator bridges, setup/postconfig, qcow2 boot inputs, or benchmark-native scoring, it belongs here.
The benchmark layer is the legacy interface for dataset adapters. New code should
use recipes directly. The benchmark runners are being simplified into thin delegation
layers that call recipes.
3. Recipe layer
Recipes are the canonical location for reproducible baseline methods:- canonical single-agent baselines
- benchmark baseline methods
- multimodal starter methods
| Recipe | Module | Description |
|---|---|---|
| GAIA | qitos.recipes.benchmarks.gaia | Multi-step reasoning with web and file tools |
| TauBench | qitos.recipes.benchmarks.tau_bench | Airline/retail customer service simulation |
| CyBench | qitos.recipes.benchmarks.cybench | Cybersecurity CTF challenges |
| CyberGym | qitos.recipes.benchmarks.cybergym | Interactive cybersecurity gym environments |
| Desktop | qitos.recipes.desktop.osworld_starter | Desktop UI automation |
eval_config.yaml in qitos/recipes/benchmarks/eval_configs/ that specifies recommended defaults (model, max steps, max tokens, scorer).
Using eval configs
Why this split matters
This split solves three real problems:- benchmark runners no longer depend on example files
- one baseline can be reused by examples, docs, and benchmark runners
- future
qitos-recipesextraction becomes a packaging move instead of a redesign
