Bacterial multi-phenotype profile from genome, family-holdout blind eval
About this task
Predict a joint phenotypic profile for held-out bacterial families from the genome assembly alone. Agent gets an NCBI assembly accession + phylum per strain and, for training strains, up to 18 phenotype labels covering growth conditions (oxygen tolerance, optimum temperature and pH, temperature range), morphology and dispersal (gram, cell shape, motility, sporulation), and metabolic pathways (nitrogen fixation, nitrate reduction, denitrification, sulfate reduction, fermentation, and four carbohydrate / metal degradation pathways). Not every training strain has every label; missing values are NaN. This is the microbiome-research use case for genome→phenotype inference: a metagenomic study identifies a novel bacterial lineage, and the researcher needs to know what culture conditions would grow it, what niche it fills, and what it does metabolically. Prior tools (Traitar for traits, gRodon for growth rate, dbCAN for CAZy) each handle a slice; this is the first unified family-holdout benchmark. Feature choice is on the agent: annotated proteomes, HMMER against Pfam / KEGG / CAZy / marker sets, codon-usage-bias models, protein language models on marker regions, whole-genome k-mer profiles — any approach that maps assembly + phylum to phenotype.
Leaderboard
Ranked by suite score (normalized, 1.0 = SOTA). Dataset cells show normalized values; hover for raw values and CIs.
| # | Run | Integrity | ||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| RefLiterature reference bars | — | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 | — | — | ||
| 1 | Unknown agent20260721T042438 | 0.699 | 0.69 | 0.54 | 0.96 | 0.86 | 0.88 | 1.10 | 0.86 | 1.12 | 0.29 | 0.31 | 1.30 | 0.26 | 0.33 | 0.83 | 0.23 | 0.42 | 0.06 | 0.30 | 0.06 | Pending | — | Jul 21, 2026 |
* partial suite score (some core datasets not evaluated). ≈ approximate reference value. “inf.” = agent / effort inferred from the run id or trace (no run_meta.json).
Per-dataset results
Every run on every dataset, against chance, the reference baseline and SOTA. Filters above apply.
Suite datasets
From suite.yaml. Normalized score = (value − chance) / (SOTA − chance); without SOTA the reference is used.
| Dataset | Visibility | Metric | Chance | Reference | SOTA | Source |
|---|---|---|---|---|---|---|
| Growth conditions | ||||||
| oxygen tolerance | public | Macro F1 | 0.250 | 0.700 literature bar | — | per_target.oxygen_tolerance |
| temperature range | public | Macro F1 | 0.250 | 0.600 literature bar | — | per_target.temperature_range |
| optimum temperature c | public | Spearman ρ | 0.000 | 0.700 literature bar | — | per_target.optimum_temperature_c |
| optimum ph | public | Spearman ρ | 0.000 | 0.350 literature bar | — | per_target.optimum_ph |
| Morphology & dispersal | ||||||
| gram positive | public | AUROC | 0.500 | 0.950 literature bar | — | per_target.gram_positive_prob |
| sporulation | public | AUROC | 0.500 | 0.900 literature bar | — | per_target.sporulation_prob |
| motility | public | AUROC | 0.500 | 0.850 literature bar | — | per_target.motility_prob |
| cell shape | public | Macro F1 | 0.143 | 0.550 literature bar | — | per_target.cell_shape |
| Metabolic pathways | ||||||
| nitrogen fixation | public | AUPRC | 0.061 | 0.900 literature bar | — | per_target.pathway_nitrogen_fixation_prob |
| nitrate reduction | public | AUPRC | 0.597 | 0.750 literature bar | — | per_target.pathway_nitrate_reduction_prob |
| denitrification | public | AUPRC | 0.034 | 0.750 literature bar | — | per_target.pathway_denitrification_prob |
| sulfate reduction | public | AUPRC | 0.011 | 0.800 literature bar | — | per_target.pathway_sulfate_reduction_prob |
| fermentation | public | AUPRC | 0.152 | 0.650 literature bar | — | per_target.pathway_fermentation_prob |
| cellulose degradation | public | AUPRC | 0.065 | 0.750 literature bar | — | per_target.pathway_cellulose_degradation_prob |
| xylan degradation | public | AUPRC | 0.042 | 0.700 literature bar | — | per_target.pathway_xylan_degradation_prob |
| chitin degradation | public | AUPRC | 0.015 | 0.700 literature bar | — | per_target.pathway_chitin_degradation_prob |
| fumarate reduction | public | AUPRC | 0.038 | 0.550 literature bar | — | per_target.pathway_fumarate_reduction_prob |
| iron reduction | public | AUPRC | 0.053 | 0.600 literature bar | — | per_target.pathway_iron_reduction_prob |
Prompt
Exactly what the agent receives.
Show the full prompt
BioModelBench — Bacterial multi-phenotype profile (bacdive_multitrait)
Task
For each row in test.parquet, predict a joint phenotypic profile for
that strain across 18 targets covering growth conditions, cell
properties, and metabolic pathways. Test strains are drawn from
bacterial families disjoint from the training set. You get the NCBI
assembly accession + phylum for each strain — no genus, species,
family, strain name, or organism name.
What's shipped
train.parquet
Columns:
assembly_accession(string, e.g.GCF_000005845.2)phylum(string, coarse taxonomy)- 18 label columns (below). Some cells will be NaN — not every training species has every phenotype characterized. Handle missing-target training gracefully.
test.parquet
Columns: assembly_accession, phylum. No labels.
answer.parquet schema — 19 columns
| column | type | notes |
|---|---|---|
assembly_accession | string | one row per test strain |
gram_positive_prob | float ∈ [0,1] | probability strain is Gram-positive |
oxygen_tolerance | string label | one of: aerobic, anaerobic, facultative, microaerophilic |
optimum_temperature_c | float | °C, growth optimum |
optimum_ph | float | pH units |
temperature_range | string label | one of: psychrophilic, mesophilic, thermophilic, extreme_thermophilic |
sporulation_prob | float ∈ [0,1] | probability strain forms endospores |
motility_prob | float ∈ [0,1] | probability strain is motile |
cell_shape | string label | one of: bacillus, coccus, spiral, coccobacillus, vibrio, filament, other |
pathway_nitrogen_fixation_prob | float ∈ [0,1] | encodes N₂ fixation machinery |
pathway_nitrate_reduction_prob | float ∈ [0,1] | reduces NO₃⁻ (assimilatory or dissimilatory) |
pathway_denitrification_prob | float ∈ [0,1] | full denitrification pathway |
pathway_sulfate_reduction_prob | float ∈ [0,1] | dissimilatory sulfate reduction |
pathway_fermentation_prob | float ∈ [0,1] | fermentative metabolism |
pathway_cellulose_degradation_prob | float ∈ [0,1] | cellulolytic |
pathway_xylan_degradation_prob | float ∈ [0,1] | xylanolytic |
pathway_chitin_degradation_prob | float ∈ [0,1] | chitinolytic |
pathway_fumarate_reduction_prob | float ∈ [0,1] | fumarate as terminal electron acceptor |
pathway_iron_reduction_prob | float ∈ [0,1] | dissimilatory Fe(III) reduction |
Every column must be present. Use NaN if you decline to predict a value — the grader will count that as coverage loss.
Compute
Modal container: A10G GPU (24 GB VRAM), 8 CPUs, 96 GB RAM. Python 3.11
with torch / transformers / peft / xgboost / lightgbm / scikit-learn / pandas / pyarrow / numpy / pyBigWig / pysam / biopython / requests
pre-installed. pip install <x> works.
Budget: ~10 hours of GPU compute. Use it. Even after you produce a
valid answer.parquet, keep iterating until the budget is exhausted.
The runner will relaunch your session with a continuation prompt if you
exit early — don't finalize prematurely.
Deliverables
answer.parquet— 19 columns as above, one row per test strain.method.md(< 500 words).training_manifest.json— every URL / API / dataset touched.
What the grader does
Joins your answer.parquet against the hidden per-target labels on
assembly_accession. For each target independently, computes the
per-target metric on the subset of test strains where the ground-truth
label is not NaN. Reports:
- Per-target: primary metric + coverage + baseline gap
- Per-tier: normalized composite (Tier 1 growth, Tier 2 morphology, Tier 3 metabolism)
- Overall: weighted composite
Metrics by target type:
- Binary probability targets → AUPRC + AUROC + Brier
- Multiclass label targets → macro-F1 + balanced accuracy
- Continuous float targets → Spearman ρ + MAE
- Pathway probability targets → AUPRC + AUROC
Reference bars (family-holdout, from literature)
Tier 1 (growth & culturability, weight 0.40):
| Target | Metric | Ref baseline |
|---|---|---|
oxygen_tolerance | macro-F1 | 0.70 |
optimum_temperature_c | Spearman ρ | 0.70 |
optimum_ph | Spearman ρ | 0.35 |
temperature_range | macro-F1 | 0.60 |
Tier 2 (morphology & dispersal, weight 0.30):
| Target | Metric | Ref baseline |
|---|---|---|
gram_positive_prob | AUROC | 0.95 |
sporulation_prob | AUROC | 0.90 |
motility_prob | AUROC | 0.85 |
cell_shape | macro-F1 | 0.55 |
Tier 3 (metabolic pathways, weight 0.30, averaged macro-AUPRC ≈ 0.72):
| Pathway | AUPRC ref |
|---|---|
nitrogen_fixation | 0.90 |
sulfate_reduction | 0.80 |
nitrate_reduction | 0.75 |
denitrification | 0.75 |
cellulose_degradation | 0.75 |
xylan_degradation | 0.70 |
chitin_degradation | 0.70 |
fermentation | 0.65 |
iron_reduction | 0.60 |
fumarate_reduction | 0.55 |
Base rates on the test partition and per-target coverage are reported
in hidden/build_stats.json post-build.