This guide explains how to add a new BenchStore catalog entry under AISB/catalog/,
how auto-discovery works, and which fields BenchStore actually reads today.
For packaging and publishing downloadable benchmark source bundles on GitHub Releases, see 23 BenchStore GitHub Releases Spec.
BenchStore does not use a manual registry.
If you add a YAML file under AISB/catalog/, BenchStore will pick it up
automatically on the next catalog scan.
The current rules are:
- BenchStore scans
AISB/catalog/**/*.yamlrecursively. - One YAML file represents one entry.
nameis the only strictly required field.idis optional. If missing, BenchStore derives it from the file stem.- Entry ids must be unique across the whole catalog.
- Files ending in
.zh.yamlare locale-specific variants for Chinese surfaces. - When locale is
zh, BenchStore prefers<stem>.zh.yamlover<stem>.yaml. - The
.zh.yamlfile is a full replacement, not a partial override.
Examples:
AISB/catalog/my.benchmark.yamlAISB/catalog/my.benchmark.zh.yamlAISB/catalog/vision/my.benchmark.yaml
Recommended naming rule:
- Keep the file stem identical to the intended entry id.
- Use only letters, numbers,
.,_, and-in the stem.
This is the smallest valid file:
name: My BenchmarkThat entry will appear in BenchStore, but it will be very bare.
Use this as the normal starting point:
schema_version: 1
id: my.benchmark
name: My Benchmark
version: 0.1.0
one_line: One-sentence summary shown in cards and compact views.
task_description: >
A longer description used by the detail view and BenchStore setup flow.
task_mode: evaluation_driven
requires_execution: true
requires_paper: true
capability_tags:
- scientific_discovery
track_fit:
- benchmark_track
time_band: 1-2h
cost_band: medium
difficulty: medium
data_access: public
snapshot_status: runnable
support_level: advanced
resources:
minimum:
cpu_cores: 8
ram_gb: 16
disk_gb: 50
gpu_count: 1
gpu_vram_gb: 12
recommended:
cpu_cores: 16
ram_gb: 32
disk_gb: 100
gpu_count: 1
gpu_vram_gb: 24
paper:
title: My Benchmark Paper
venue: NeurIPS 2026
year: 2026
url: https://example.com/paper
download:
url: https://example.com/my.benchmark.zip
archive_type: zip
local_dir_name: my.benchmark
image_path: ../../../AISB/image/my.benchmark.jpgIf you want a Chinese catalog entry, create a second file with the same stem:
AISB/catalog/my.benchmark.yamlAISB/catalog/my.benchmark.zh.yaml
Important:
my.benchmark.zh.yamlmust contain a complete entry.- BenchStore does not merge the Chinese file onto the English file.
- If you only put translated fragments into
.zh.yaml, missing fields will really be missing.
The following are hard requirements or hard runtime behaviors in the current implementation:
- The YAML root must be an object, not a plain string or list.
namemust be a non-empty string.- If
idis present, it should be a string. If omitted, BenchStore derives it from the file stem. - The final resolved
idmust be unique across the whole catalog. .zh.yamlfully replaces the matching English file. It is not merged field-by-field.capability_tags,track_fit,primary_outputs,risk_flags,risk_notes,environment.key_packages,environment.notes,dataset_download.notes,credential_requirements.items,credential_requirements.notes, andlaunch_profilesmust be lists.- If present,
resources.minimumandresources.recommendedmust be objects. - If present,
environment,dataset_download,credential_requirements,paper,download,display, andcommercialmust be objects. - Every item in
launch_profilesmust be an object. download.urlis the true minimum field required by the install flow. Without it, BenchStore install cannot run.
These are not strict validator rules, but if you want stable entries, predictable recommendations, and low maintenance cost, you should follow them closely.
Base conventions
schema_version: always write1.id: make it identical to the file stem. For example, if the file isaisb.t3.026_gartkg.yaml, writeid: aisb.t3.026_gartkg.idstyle: prefer lowercase, stable identifiers, using only letters, numbers,.,_, and-.version: prefer semver such as0.1.0or0.2.3.requires_executionandrequires_paper: write YAML booleanstrue/false, not natural-language strings.
Writing conventions
name: primary user-facing title; prefer the official benchmark or project name.one_line: one sentence suitable for a card; do not turn it into a long paragraph.task_description: usually 1 to 3 paragraphs describing what this benchmark actually means inside DeepScientist, not just a copy of the paper abstract.recommended_when/not_recommended_when: write complete sentences describing fit and non-fit conditions.
Canonical values recognized by recommendation logic
cost_band: prefer onlyvery_low,low,medium,high,very_high.difficulty: prefer onlyeasy,medium,hard,expert.data_access: prefer onlypublic,restricted,private.snapshot_status: prefer onlyrunnable,runnable_not_verified,partial,restore_needed,external_eval_required,data_only.support_level: prefer onlyturnkey,advanced,recovery.
Important:
cost_band,difficulty,snapshot_status, andsupport_levelare not hard-enforced enums, but the recommendation logic only assigns special meaning to these canonical values.- If you write another string, the entry will still load, but recommendation behavior will usually fall back to unknown/default handling.
time_band format
BenchStore currently parses these formats reliably:
- single value:
30m,2h,3d - closed range:
30-60m,1-2h,2-4d - open-ended range:
6h+,1d+,4d+
Guidance:
- estimate the first credible end-to-end wall-clock run
- prefer normalized no-space forms like
1-2hinstead of natural-language text such as "about one day"
Resource conventions
- Inside
resources.minimumandresources.recommended, BenchStore currently reads only these five numeric keys: cpu_coresram_gbdisk_gbgpu_countgpu_vram_gb
Notes:
- Keep them numeric.
- Even if you add extra keys such as
notesinsideresources.minimum, current compatibility logic does not use them. - Put explanatory prose into
task_descriptionorenvironment.notesinstead.
Download conventions
download.url: must point to a concrete downloadable asset.download.archive_type: prefer onlyzip,tar.gz, ortar.download.local_dir_name: make it match the unpacked root directory; in most cases it should also match the entry id.- For GitHub Releases distribution, also fill
download.provider,download.repo,download.tag,download.asset_name,download.sha256, anddownload.size_bytes.
Image and localization conventions
image_path: prefer a path relative to the YAML file; the resolved file must exist and stay inside the current workspace..zh.yaml: duplicate the full English entry first, then translate only the text-bearing fields; do not write a partial Chinese delta file.
Risk conventions
- Fill
risk_flagsandrisk_notesonly when there are real caveats worth surfacing. - As soon as an entry has
risk_flagsorrisk_notes, BenchStore recommendation logic excludes it from recommended results.
Required:
name
Strongly recommended:
idone_linetask_description
These fields materially affect catalog quality:
task_modecapability_tagsaisb_directiontrack_fitcost_bandtime_banddifficultydata_accessresources.minimumresources.recommendedsnapshot_statussupport_level
Notes:
resources.minimumandresources.recommendeddrive device-fit checks.snapshot_statusandsupport_levelaffect recommendation scoring.risk_flagsandrisk_notesmark known caveats.- Entries with
risk_flagsorrisk_notesare excluded from BenchStore recommendations.
Strict minimum for the install flow:
download.url
Strongly recommended:
download.archive_typedownload.local_dir_namedownload.providerdownload.repodownload.tagdownload.asset_namedownload.sha256download.size_bytes
Important behavior:
- If
requires_execution: true, BenchStore launch is blocked until the entry is installed locally. - If
download.archive_typeis omitted, BenchStore tries to infer it from the URL suffix. - If
download.local_dir_nameis omitted, BenchStore falls back to the entry id.
Useful fields:
paperprimary_outputslaunch_profilesdataset_downloadcredential_requirementsenvironmentrecommended_whennot_recommended_whenimage_pathhomepageofficial_linksdiscoverydisplaycommercial
BenchStore currently reads these top-level keys:
schema_versionidnamehomepageversionone_linetask_descriptioncapability_tagsaisb_directiontrack_fittask_moderequires_executionrequires_paperintegrity_levelsnapshot_statussupport_levelprimary_outputslaunch_profilescost_bandtime_banddifficultydata_accessrisk_flagsrisk_notesrecommended_whennot_recommended_whenpaperdownloaddataset_downloadcredential_requirementsresourcesenvironmentcommercialofficial_linksdiscoverydisplayimage_path
Nested objects currently recognized:
paper.titlepaper.venuepaper.yearpaper.urldownload.urldownload.archive_typedownload.local_dir_namedownload.providerdownload.repodownload.tagdownload.asset_namedownload.sha256download.size_bytesdataset_download.primary_methoddataset_download.sources[].kinddataset_download.sources[].urldataset_download.sources[].accessdataset_download.sources[].notedataset_download.notes[]credential_requirements.modecredential_requirements.items[]credential_requirements.notes[]resources.minimum.cpu_coresresources.minimum.ram_gbresources.minimum.disk_gbresources.minimum.gpu_countresources.minimum.gpu_vram_gbresources.recommended.cpu_coresresources.recommended.ram_gbresources.recommended.disk_gbresources.recommended.gpu_countresources.recommended.gpu_vram_gbenvironment.pythonenvironment.cudaenvironment.pytorchenvironment.flash_attnenvironment.key_packages[]environment.notes[]commercial.annual_feedisplay.palette_seeddisplay.art_styledisplay.accent_prioritydisplay.placementdisplay.card_sizedisplay.badgeofficial_links.homepageofficial_links.githubofficial_links.docsdiscovery.collectiondiscovery.collection_prioritydiscovery.recommendation_weightdiscovery.featureddiscovery.featured_reasonlaunch_profiles[].idlaunch_profiles[].labellaunch_profiles[].description
If you add extra keys beyond this set, they are preserved in raw_payload for downstream
consumers but do not affect the current UI, installer, or recommendation logic directly.
To propose a new first-class field, open an RFC issue and update this reference doc alongside
the service.py and prompt_builder.py changes.
BenchStore generates these fields itself:
source_fileimage_urlsearch_textinstall_statecompatibilityrecommendationsetup_prompt_previewraw_payload
Also note:
schema_versiondefaults to1if omitted.idis auto-derived from the file stem if omitted.
Wrong approach:
- English file has all fields.
- Chinese file contains only
nameandone_line.
Result:
- the Chinese surface loses every other field, because the Chinese YAML fully replaces the base file.
If two files resolve to the same id, BenchStore marks the later one invalid.
These must be lists if present:
capability_tagstrack_fitprimary_outputsrisk_flagsrisk_notesenvironment.key_packagesenvironment.notesdataset_download.sourcesdataset_download.notescredential_requirements.itemscredential_requirements.noteslaunch_profiles
image_path is resolved relative to the YAML file unless you use an absolute path.
The resolved file must stay inside the DeepScientist workspace and actually exist.
After creating or editing a YAML file, you can verify it in any of these ways:
- Open BenchStore in the web UI and check whether the card appears.
- Call
GET /api/benchstore/entriesand confirm the entry is listed. - Call
GET /api/benchstore/entries/<entry_id>and inspect the normalized payload. - Check
invalid_entriesin the catalog response if an entry does not appear.
There is no extra registration step. Creating the file is the registration step.