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
Each recipe may be accompanied by an
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
