2026 — in development

lifespan-extract

Structured longevity-intervention data from papers, measured against a hand-labeled gold set built before the pipeline.

github.com/sofiapetrusenko/lifespan-extract

gold records
26

gold records

papers labeled
10

papers labeled

hard negatives
15

hard negatives

tests in CI
485

tests in CI

schema version
0.4.0

schema version

Problem

Lifespan results are locked in prose across thousands of papers. Getting them out with an LLM is easy; getting them out auditably, and knowing when to refuse, is the problem.

Quantitative lifespan-intervention results are locked inside thousands of papers in inconsistent formats, and the curated databases that collect them lag the literature by years. Extracting them with an LLM is easy; extracting them so that every record is auditable — and the system knows when to refuse — is the actual problem.

Approach

The measurement comes before the pipeline: a hand-labeled gold set defines correct extraction, and ingestion is built behind it. Classification and extraction are next.

Pipeline

Select a stage for what it does and the artifact it reads or writes. Counts are the committed gold set, not a model run.

direction, 26 gold records

increase18
no_effect7
decrease1

organism, 26 gold records

M. musculus19
C. elegans3
M. mulatta2
other2

10 hand-labeled papers, 26 intervention records, counted from data/gold/. These are labels, not extractions — the model has not run against them yet.

fetchbuilt

PubMed E-utilities and bioRxiv clients pull abstracts and preprint metadata, retrying with backoff on rate limits. Preprint and published versions of the same work are deduplicated by DOI, and re-running the command does not duplicate rows. Remote XML is parsed with defusedxml rather than the standard library, because the payload is untrusted input.

iter 1 | REQUIRED: 4 | ingest/{pubmed,biorxiv,db,http,cli,dedup,models,errors}.py + 99 tests; reviewer flagged PubmedBookArticle silent drop, cross-run preprint->publication duplicate, unvalidated `published` DOI, dead self-throttle
LOOP_LOG.md — the ingestion phase's first review cycle

Verification

Quotes are checked character-for-character against the source, and a quote nobody can check is reported unverifiable rather than passing.

The gold set

A hand-labeled record, and the deterministic quote check running against the checker's own fixtures.

martinmontalvo2013-mmusculus-metformin-high-dose

Metformin improves healthspan and lifespan in mice

2013 · PMID 23900241 · data/gold/martinmontalvo2013.json

  • organismM. musculusabstract · “Here we show that long-term treatment with metformin (0.1% w/w in diet) starting at middle age extends healthspan and lifespan in male mice, while a higher dose (1% w/w) was toxic.
  • strainC57BL/6full_text · “We determined the long-term effects of two doses of metformin in male C57BL/6 mice.
  • sexmalefull_text · “We determined the long-term effects of two doses of metformin in male C57BL/6 mice.
  • sample_size90full_text · “n = 90 for metformin 1% group and n = 88 for their untreated counterparts
  • intervention.typepharmacologicalabstract · “Metformin is a drug commonly prescribed to treat patients with type 2 diabetes.
  • intervention.agentmetforminabstract · “a higher dose (1% w/w) was toxic
  • intervention.dose1% (w/w) in dietfull_text · “The second dose (1% w/w) yielded a concentration of 5.03 ± 0.87 mM in serum and 3.67 ± 0.32 nmoles.mg−1 protein in the liver
  • intervention.age_at_start54 weeksfull_text · “The arrows at 54 weeks indicate the age at which metformin treatment was initiated.
  • mechanism
  • lifespan_effect.directiondecreasefull_text · “a higher concentration of the drug (1% w/w) was toxic and significantly shortened mean lifespan of C57BL/6 mice by 14.4% (Fig. 1b), likely due to renal failure
  • lifespan_effect.median_change_pct
  • lifespan_effect.mean_change_pct-14.4full_text · “a higher concentration of the drug (1% w/w) was toxic and significantly shortened mean lifespan of C57BL/6 mice by 14.4%
  • lifespan_effect.max_change_pct
  • lifespan_effect.p_value< 0.001full_text · “χ2 = 51,70 and P< 0.001 in Gehan-Breslow survival test

11 populated · 0 not_reported · 3 null · 11 quoted

Quotes are shown without the surrounding source text: the abstracts are not committed to that repository, and a quote is shown with its verification status rather than fetched from anywhere.

Keeping the standard fixed

A PreToolUse hook stops an agent editing the gold set, so a disagreement between the pipeline and the standard cannot be settled by moving the standard.

How it's built

An implementer subagent writes, a reviewer subagent audits the full diff in a fresh context, and the loop runs until the reviewer returns nothing required.

Status

Phases 0 and 1 are complete and 485 tests pass. Nothing has been extracted by the model yet — the standard exists first, on purpose.

Stack

  • Python
  • PubMed / bioRxiv APIs
  • PostgreSQL

Links