Module path
run.py; the manifest writer picks up the result.
Pattern
LIBERO is the cleanest example.LIBEROEvalSummary per suite. If output_dir is set, it also writes a JSON artifact with the same content.
What ships
Some bridges run a local adapter and return dataclasses; others import raw
external results into the audit-input schema. The manifest writer or audit flow
then owns the final JSON surface. Import bridges do not upload artifacts or
decide whether a claim is publishable.
Wiring an adapter
A curated adapter’srun.py typically does three things:
- Start the adapter’s policy server (or call its inference function directly).
- Call the bridge with the right
taskargument. - Hand the bridge’s return value to the manifest writer.
Adding a bridge
1
Write the function
Add
src/worldflux/eval_bridges/<suite>.py. Keep it function-first; only add a class if state genuinely needs to live across episodes.2
Define the output dataclass
A frozen
@dataclass with the fields the dashboard will need to render. Avoid optionals where you can; mean_* should always be a float, even if it’s 0.0.3
Write the JSON artifact
If the suite produces per-episode detail, write a JSON file under
output_dir and reference it from the dataclass. The dashboard’s run detail panel previews JSON inline.4
Snapshot test
tests/eval_bridges/test_<suite>.py plus a snapshot or fixture for the smallest deterministic path. Use dry-run or raw-import fixtures for GPU-only suites; do not label smoke data as Grade A benchmark evidence.When you do not need a bridge
If the suite already returns JSON in roughly the shape the manifest expects, the adapter can write straight intomanifest.metrics and skip the bridge layer. Bridges exist for suites whose native output (per-episode logs, per-task success matrices, vector embeddings) does not map onto the manifest 1:1.