Skip to content

DrugTargetBench

An Environment for Therapeutic Target Discovery

Run the benchmark →Read the paper →GitHub →9 models · 20 worlds · 540 episodes
v1.0
Mean benchmark score and component scores for nine models over 540 episodes. Sortable by any numeric column.
#ModelServing
1Opus 5api-alias@2026-09-0739.9814.807.1913.0586.64$4.14API
2GPT-5.6 Solapi-alias@2026-09-0535.3815.813.1613.0083.19$2.02API
3Sonnet 5api-alias@2026-09-0421.3310.241.166.9683.88$1.47API
4Haiku 4.5api-alias@2026-09-0412.925.270.215.9175.00$0.26API
5gpt-oss-20b6cee5e817.412.940.683.4375.00$0.07GPU
6Qwen3-Coder-30Bb2cff6465.903.260.141.9475.00$0.05GPU
7GLM-4-32B077b5c2f1.461.120.080.2525.00$0.20GPU
8Qwen3-8Bb968826d1.310.700.390.2230.71$0.22GPU
9Devstral-Smallbd165ab20.810.750.060.0015.00$0.20GPU

Mean score across 20 worlds × 3 budget conditions, one replicate each. Scores are out of 100; measured ceiling = 85.5.

Qwen3-8B and GLM-4-32B ran a reduced 8,000-token output budget and are not a like-for-like comparison.

20
WORLDS
54K
PARTICIPANTS/WORLD
2,941
PROTEINS
8,192
VARIANTS
3
BUDGETS

Each synthetic world expresses hidden disease biology through participant-level medical data.

Control
HFpEF

Preserved ejection fraction with a thickened wall and impaired filling.

How it works

  1. Biobank

    Genetics, omics, imaging, ECG, EHR.

  2. Phenotype

    Segment the myocardium from raw arrays, engineer features, fit a model against a proxy outcome.

  3. Causal targets

    Screen the proteome, instrument it genetically, separate drivers from decoys.

  4. Experiments

    Spend a finite research budget.

  5. Submission

    Nominate targets and therapeutic direction.

Release
world_07/
├─ genotypes.vcf.gz
├─ proteomics.parquet
├─ transcriptomics.parquet
├─ metabolomics.parquet
├─ covariates.parquet
├─ ecg_features.parquet
├─ coronary_ct.parquet
├─ ehr_diagnoses.parquet
├─ mortality.parquet
├─ mace_events.parquet
├─ targetability.parquet
├─ imaging/
└─ imaging_visit2/
Episode
>>> d = np.load(f); cine, t1 = d['cine'], d['t1map']
(3, 25, 128, 128) uint8 (3, 128, 128) float32, 98.2% NaN
>>> mc = ndi.binary_closing(~np.isnan(t1[s])); filled = ndi.binary_fill_holes(mc)
>>> cav = filled & ~mc; thr = (np.median(cm[:, mc]) + np.median(cm[fED][cav])) / 2
>>> A[s, f] = np.bincount(ndi.label((cm > thr) & reg)[0].ravel())[1:].max()
SUBJ_00001 [494 387 277 212 174 140 132 ... 467 474 492] EF 0.775
>>> for fp in files: rows.append(feat(fp)) # 10,800 subjects
159.9 s elapsed # turn limit 300 s
>>> y = hf_icd | mace | cardiac_death # proxy label, prev 0.307
>>> lr = LogisticRegression(max_iter=2000).fit(Z[feats], y)
edvi 0.111 esvi 0.424 ef 0.427 myoi -0.502 wt 0.217 gfr -0.442
corr(score, y) 0.260 hand-built composite 0.241
>>> pd.DataFrame({"subject_id": ids, "phenotype": z}).to_csv(OUT_CSV)
>>> G = load_genotypes(); B = (Gs.T @ Yc) / M.sum(0) # 8,192 x 2,941
>>> b_iv, z = wald(g[:, j], y, mask) # cis Wald ratio
PROT_1606 rs104994 bx 0.436 MR -0.396 z -17.4
PROT_1858 rs102089 bx 0.153 MR 0.005 z 0.1 obs r 0.36
>>> request_experiment("knockdown", "PROT_1850")
delta {cavity_r: 0.00, wall_t: 0.00, ef: 0.000, surv5y: 0.00}

The agent receives the files, writes Python, and chooses analyses and experiments over 30 turns.

Hidden causal worlds

Each world is procedurally generated from a sealed structural causal model linking genetics, molecular measurements, hidden disease state, observable phenotypes, and intervention outcomes.

Disease state

Li=z[∑j∈DwjPij+γ⊤Ci+δGi,direct+ϵi]L_i = z\left[\sum_{j\in\mathcal D} w_j P_{ij} + \gamma^\top C_i + \delta G_{i,\mathrm{direct}} + \epsilon_i\right]

The identity and number of causal molecular drivers are hidden from the agent.

Research policy

at∼π(a∣st,Bt)a_t \sim \pi(a \mid s_t, B_t)
Bt+1=Bt−c(at)B_{t+1} = B_t - c(a_t)

Analyses and experiments are chosen against accumulated evidence and the remaining budget.

T1 Confounding · T2 Reverse causation · T3 Selection bias · T4 Causal non-identifiability · T5 Imaging batch effects · T6 Benign remodeling · T7 Instrument pleiotropy · T8 Surrogate-outcome discordance · T9 Assay unit mixing · A9 Slow effect