Sequential Experimental Design · CRISPR Screens · Genentech · 2026
Biology-in-the-loop: Amortized Adaptive Hit Discovery in CRISPR Screens
Genentech, South San Francisco, CA, USA · ★ equal contribution
Hits recovered against genes acquired. Ten rounds of a hundred genes. The dashed line is chance: what picking genes at random recovers. See the full recovery curves →
You can only test a hundred genes at a time, and testing all 20,000 genes is expensive; how do you pick the genes most likely to be hits without testing everything? LLMs know a lot of biology but learn from experimental feedback poorly. Classical sequential design learns from feedback but starts from nothing. AssayLoop hands the screen from one to the other: an LLM picks the first rounds, then a policy trained across a thousand historical screens takes over.
Abstract
Many biological discovery problems require experiments to be selected sequentially under constrained budgets. CRISPR screening is a prominent example, as exhaustive perturbation testing is often infeasible and candidate perturbations must instead be prioritized over multiple experimental rounds. Despite the importance of this problem, existing benchmarks for adaptive hit discovery remain limited in scale and diversity. Here, we introduce AssayBench-Loop, a large-scale benchmark for adaptive hit discovery comprising 1,389 CRISPR screens across five phenotype categories. Beyond enabling systematic evaluation, the scale of AssayBench-Loop makes it possible to learn acquisition strategies across historical experiments. Building on this resource, we introduce AssayLoop, a new acquisition policy for adaptive hit discovery that combines the strengths of large language models and a trained policy. At the core of AssayLoop is AssayFormer, a transformer-based amortized acquisition policy trained across historical screens to transfer screening strategies to new assays while adapting to observations collected during the current experiment. AssayLoop complements this learned policy with language-model-derived biological priors through an adaptive handoff strategy, using LLM guidance for early-round prioritization before transitioning to the learned policy; we further show with AssayLLM, a domain-specific post-trained LLM, that sequential acquisition capabilities can be transferred to smaller models. On temporally held-out screens, AssayLoop achieves a 5.67-fold enrichment over random selection and recovers 27.7% of hits after assaying only approximately 5% of the candidate library, outperforming existing adaptive-design methods, standalone LLMs, and AssayFormer alone. These results demonstrate the value of learning acquisition policies across historical experiments and combining them with broad biological priors for efficient active hit discovery.
Headline findings
- Amortization transfers. A policy trained across historical screens beats every per-assay model we tested, and the gap is largest in the early rounds where assay-specific feedback is scarce. See the recovery curves →
- Warm start and in-context adaptation are separable. The strongest warm-start model (Gemini-3.1-pro) and the strongest in-context learner (AssayFormer) are not the same model. Handing off between them beats either alone. See the table →
- LLMs do use experimental feedback, but it's limited. Removing the hit labels from the prompt does change what an LLM picks, but training a model specifically for in-context learning is better. See the label ablation →
- Performance scales with data. Scaling the training data of AssayFormer from 1 to 1,349 historical screens improves the performance. Scaling parameters does not. See the scaling curves →
- A 27B open model can be trained into the loop. AssayLLM (from base Qwen3.6-27B) reached performance comparable with leading open-source LLMs and was further trained to hand off with AssayFormer, showing that domain-specific LLM training is a viable strategy for building future biological foundation models.
By the numbers
A benchmark built for transfer
The held-out screens are deliberately unlike the historical screens used for training, hit frequencies are strongly long-tailed, and assay hit rates span several orders of magnitude. Together, these properties make the benchmark a test of transfer and adaptation rather than memorization of familiar screens or universally frequent hits.
Explore
Full results
Every method in the paper's main table, sortable and filterable by family.
Recovery curves
Watch hits accumulate round by round for any subset of the 59 methods.
Pathway diversity
What biology does each method actually go after?
Gene embeddings
Visualize and explore the gene embeddings that provide the foundation for AssayFormer.
How the loop is built
A detailed breakdown of the benchmark, the metrics, and the methodology of model training.
What biology did the models learn
Detailed round-by-round composition of model trajectories, what biology each model prioritizes, and gene-gene relationships extracted from AssayFormer.
Run it yourself
The full framework, the evaluation loop, and all baseline results and output.
Getting started
Score your own policy
pip install assaybench
That gives you the screen data and the metric functions for evaluation. Everything between is your method.
from assaybench import AssayBenchDataset, adjusted_nauc, enrichment_factor, load_manifest
# The paper's test set: 20 genome-wide screens, curated and shipped with the package.
wanted = {s["dataset_name"] for s in load_manifest("assayloop-test").screens}
_, _, test = AssayBenchDataset(dataset_name="biogrid", split_type="year", fold=0) \
.get_train_test_split()
screen = next(s for s in test if s["dataset_name"] in wanted)
library = screen["relevance_genes"]
hits = [g for g, is_hit in zip(library, screen["hit"]) if is_hit]
# Your policy. Ten rounds of 100 genes; the labels for a round are revealed
# before the next one is proposed.
rounds = my_policy(screen, n_rounds=10, batch_size=100)
acquired = [gene for batch in rounds for gene in batch]
print(enrichment_factor(acquired, library, hits, budget=1000))
print(adjusted_nauc(rounds, library, hits))
Reproduce the paper
The AssayFormer architecture, the GRPO training loop, the LLM harness and the handoff live here.
git clone https://github.com/Genentech/AssayLoop cd assayloop pip install -e . # Re-run a method on the same 20 screens. assayloop run --screen-set paper_test --model assayformer