> ## Documentation Index
> Fetch the complete documentation index at: https://docs.consensus.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Screen thousands of target-disease pairs for evidence

> Pull literature evidence for every pair in a large matrix — the batch workload that breaks most retrieval APIs.

## What you get

Evidence attached to every cell of a screening matrix. Not interactive search: a pipeline that walks tens of thousands of pairs, retrieves the literature for each, and produces a structured result you can rank and filter.

## Who it's for

Computational biology and platform teams running systematic screens, and anyone whose "search" is really a batch job with a six-figure cell count.

## How Phylo runs it

[Phylo](https://consensus.app/home/community-voices/phylo/) is an AI-native IDE for biology built by researchers from Stanford. One internal team uses the Consensus API to screen roughly **20,000 targets across hundreds of diseases**, pulling literature evidence for every target-disease pair.

> "It's very robust, with almost zero errors. It gives you genuinely useful results, and it embeds into a high-throughput agentic workflow easily."
>
> — **Kexin Huang**, Co-founder & CEO, Phylo

Literature is not a side feature of that product — it is underneath nearly everything it does:

> "Even in analysis tasks, there's literature research underneath. For single-cell annotation, you need to find marker genes. To compare a paper's findings against your own dataset, you need literature. To brainstorm a hypothesis, to understand a mechanism of action for a particular drug and disease, all of this requires a large volume of literature. That's why we spent so much time making sure our literature search was the highest quality."
>
> — **Kexin Huang**, Co-founder & CEO, Phylo

## Building the screen

<Steps>
  <Step title="Separate the template from the entity lists">
    One query template crossed with two entity lists is auditable and cheap to change. Hundreds of hand-written queries are neither.
  </Step>

  <Step title="Decide the evidence question per cell">
    "Is there any literature linking this target to this disease" and "is there strong human evidence" are different screens with different filters. Pick one and hold it constant, or your cells are not comparable.
  </Step>

  <Step title="Pace to the rate limit, not to your ambition">
    This is where batch pipelines fail. The ceiling is per user, per second — see [rate limits](/use-cases/best-practices#rate-limits-and-result-caps). Build a bounded work queue with backoff and jitter before you scale the matrix, not after.
  </Step>

  <Step title="Cache on the full parameter set">
    Screens have enormous overlap — the same target appears against hundreds of diseases. Cache on every parameter with a short TTL and you cut a large fraction of the calls.
  </Step>

  <Step title="Score, don't just count">
    Paper count is a poor signal. Weight by study design, recency, and whether the evidence is human. A cell with one strong trial outranks a cell with forty in vitro papers.
  </Step>

  <Step title="Record the empty cells">
    A pair with no literature is a finding — it is either a genuine gap worth investigating or a terminology problem in your template. Distinguish them by spot-checking.
  </Step>
</Steps>

```python theme={null}
def screen(targets, diseases, template, search):
    for target in targets:
        for disease in diseases:
            query = template.format(target=target, disease=disease)
            body = search(query=query, human=True, page_size=25)
            yield {
                "target": target,
                "disease": disease,
                "n": len(body["results"]),
                "top": body["results"][:5],      # keep DOIs for provenance
            }
```

Pace the loop to one search per second and build in backoff, rather than firing cells in parallel.

## What to check before you trust it

* **Validate the template on 50 cells first.** A template that produces noise at cell 50 produces noise at cell 50,000, expensively.
* **Watch for entity-name collisions.** Short gene symbols and common disease words pull in unrelated literature. Spot-check the highest-volume cells — anomalously high counts usually mean an ambiguous name.
* **Distinguish a plan cap from a real result.** If responses report finding more than they returned, your matrix is measuring your ceiling, not the literature.
* **Alert when a whole run returns nothing.** Silence looks identical to a broken job.

## Related

<CardGroup cols={2}>
  <Card title="Answer one question with many parallel searches" icon="diagram-project" href="/use-cases/parallel-search-angles">
    The interactive counterpart to this batch pattern.
  </Card>

  <Card title="Track new papers across many topics on a schedule" icon="calendar-days" href="/use-cases/scheduled-research-pipeline">
    Re-run a screen on a cadence and report only the delta.
  </Card>

  <Card title="Best practices" icon="shapes" href="/use-cases/best-practices">
    Exhaustive sweep, rate limits, and the five primitives.
  </Card>

  <Card title="All use cases" icon="grid-2" href="/use-cases">
    Browse the gallery by persona.
  </Card>
</CardGroup>
