CoolFace
Datasetpublic

huggingworld/clinvar-annotations

part of 🧬 Genomic Reasoning Agent LLM-driven agentic system for personal genomic variant interpretation Overview This project builds a multi-step reasoning agent that interprets personal genomic data from 23andMe against biomedical knowledge databases (ClinVar, GWAS Catalog, gnomAD). The agent is trained with GRPO (Group Relative Policy Optimization) using fully verifiable reward signals β€” no human labelers needed. The core insight mirrors… See the full description on the dataset page: https://huggingface.co/datasets/huggingworld/clinvar-annotations.

sourceHugging Facemitupdated 5mo agoView on Hugging Face
0likes14downloads
Dataset Card

part of

🧬 Genomic Reasoning Agent

LLM-driven agentic system for personal genomic variant interpretation

![HuggingFace](https://huggingface.co/spaces/mioulin/genomic-reasoning-agent) ![Dataset](https://huggingface.co/datasets/mioulin/genomic-reasoning-qa) ![Model](https://huggingface.co/mioulin/genomic-reasoning-grpo) ![License: MIT](LICENSE)


Overview

This project builds a multi-step reasoning agent that interprets personal genomic data from 23andMe against biomedical knowledge databases (ClinVar, GWAS Catalog, gnomAD). The agent is trained with GRPO (Group Relative Policy Optimization) using fully verifiable reward signals β€” no human labelers needed.

The core insight mirrors DeepSeek-R1's approach to mathematics: genomic variant interpretation has verifiable ground truth (ClinVar classifications, GWAS p-values, population frequencies), making it ideal for RL-based reasoning training.

23andMe SNPs (631K)
        ↓
  ClinVar Annotation          ← rs1801133 β†’ MTHFR β†’ Pathogenic
        ↓
 Tool-Using LLM Agent         ← 5 tools: lookup / scan / haplotype / stats / reward
        ↓
   GRPO Training Loop         ← verifiable reward from ClinVar ground truth
        ↓
  Reasoning Model             ← factual Β· calibrated Β· evidence-grounded
        ↓
   HF Spaces Demo             ← upload 23andMe β†’ ask questions β†’ reasoning trace

Motivation

Standard LLMs hallucinate on genomic questions. This project trains a model that:

  • β€”Cites sources (ClinVar review status, GWAS p-values, PubMed IDs)
  • β€”Shows reasoning chains (mechanism β†’ evidence β†’ conclusion)
  • β€”Calibrates uncertainty (risk factor β‰  diagnosis)
  • β€”Uses tools to look up live databases rather than relying on memorised weights

The training signal is 100% verifiable β€” reward is computed by checking responses against ClinVar annotations, not scored by humans.


Repository Structure

genomic-reasoning-agent/
β”œβ”€β”€ genomic_pipeline.py              # Step 1: Parse 23andMe .txt β†’ DataFrame
β”œβ”€β”€ clinvar_pipeline_full.py         # Step 2: Annotate variants via ClinVar API
β”œβ”€β”€ genomic_agent_huggingface.py     # Step 3: smolagents tool-using agent (5 tools)
β”œβ”€β”€ train_grpo.py                    # Step 4: GRPO training with TRL
β”œβ”€β”€ app.py                           # HF Spaces Gradio UI
β”œβ”€β”€ data/
β”‚   β”œβ”€β”€ clinvar_annotations.json     # 12 variants with full ClinVar metadata
β”‚   └── genomic_qa_dataset.json      # 36 Q&A pairs (3 task types Γ— 12 variants)
└── README.md

Pipeline: Step by Step

Step 1 β€” Parse 23andMe

Reads the raw .txt export (Build GRCh37) into a DataFrame of 631,455 SNPs.

python
from genomic_pipeline import parse_23andme
df = parse_23andme("genome_23andme.txt")
# β†’ 631,455 SNPs across chromosomes 1–22, X, Y, MT
# β†’ 104,617 heterozygous (16.6%) | 522,909 homozygous (82.8%)

Step 2 β€” ClinVar Annotation

Queries NCBI E-utilities and GWAS Catalog for each rsID. Builds a Q&A dataset with verifiable answers.

python
from clinvar_pipeline_full import query_clinvar_batch, build_qa_dataset
annotations = query_clinvar_batch(rsids, email="your@email.com")
qa_dataset  = build_qa_dataset(annotations, genome_df)
# β†’ 12 variants annotated
# β†’ 36 Q&A pairs: variant_interpretation / genotype_interpretation / pathway_reasoning

Sample annotation:

rsIDGeneGenotypeSignificanceCondition
rs1801133MTHFRGGPathogenic/Likely pathogenicHomocystinuria
rs429358 + rs7412APOETT / CCrisk factorAlzheimer disease
rs9939609FTOATrisk factorObesity
rs762551CYP1A2ACdrug responseCaffeine metabolism

Step 3 β€” Tool-Using Agent (smolagents)

A ToolCallingAgent with 5 tools that plans multi-step queries across databases.

python
from smolagents import ToolCallingAgent, InferenceClientModel
from genomic_agent_huggingface import (
    VariantLookupTool,    # rsID β†’ ClinVar + genotype
    GeneScannerTool,      # gene/trait β†’ all patient variants
    HaplotypeCallerTool,  # APOE Ξ΅2/Ξ΅3/Ξ΅4 from two SNPs
    GenomeStatsTool,      # 631K SNPs overview
    RewardEvaluatorTool,  # GRPO reward score (used during training)
)
model = InferenceClientModel("meta-llama/Llama-3.1-8B-Instruct")
agent = ToolCallingAgent(tools=[...], model=model, max_steps=10)
answer = agent.run("What is my APOE haplotype and what does it mean?")

6-step reasoning trace for "Give me a genomic health summary":

Step 1 [genome_stats]       β†’ 631,455 SNPs | 16.6% heterozygous
Step 2 [variant_lookup]     β†’ rs1801133 | MTHFR | GG | Pathogenic
Step 3 [call_haplotype]     β†’ APOE Ξ΅3/Ξ΅3 | Neutral Alzheimer's risk
Step 4 [scan_gene_variants] β†’ dopamine: ANKK1 GG (risk), COMT GG (Val/Val)
Step 5 [scan_gene_variants] β†’ caffeine: CYP1A2 AC (intermediate), ADORA2A CT
Step 6 [evaluate_reasoning] β†’ reward: 0.93 / 1.00 (excellent)

Step 4 β€” GRPO Training

Trains the base LLM to reason better about genomic questions using reinforcement learning with verifiable rewards β€” no human annotation required.

python
from train_grpo import train, TrainingConfig
config = TrainingConfig(
    model_name="meta-llama/Llama-3.1-8B-Instruct",
    num_epochs=3,
    num_generations=4,        # G: completions per question
    beta=0.04,                # KL penalty
    use_lora=True,
)
trainer = train(config)

Reward function β€” 6 verifiable components:

ComponentWeightVerifiable against
Factual accuracy0.35ClinVar clinical significance
Condition coverage0.25ClinVar associated conditions
Gene mention0.15ClinVar gene annotation
Reasoning chain0.15Presence of causal language
Uncertainty calibration0.05Hedging language
Response completeness0.05Word count

Training progression (simulated):

untrained  reward=0.06  |β–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘|
epoch_1    reward=0.56  |β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘|
epoch_3    reward=0.71  |β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘β–‘|
epoch_5    reward=0.93  |β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘|
epoch_10   reward=1.00  |β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ|

GRPO advantage formula:

advantage_i = (reward_i βˆ’ mean(rewards)) / std(rewards)
No critic network. No value function. No human labeler.
Just relative comparison within each group of G=4 completions.

Key Results from Real Genome Data

Running the full pipeline on a real 23andMe export (Zalina Dezhina, v5 chip):

VariantGeneGenotypeClinical Note
πŸ”΄ rs1801133MTHFRGGPathogenic β€” folate metabolism (p.Ala222Val)
🟑 rs9939609FTOATRisk factor β€” obesity, 1 risk allele (40.4% population)
🧠 APOEβ€”Ξ΅3/Ξ΅3Neutral β€” most common haplotype, no elevated AD risk
πŸ’Š rs762551CYP1A2ACDrug response β€” intermediate caffeine metabolizer
🟑 rs1800497ANKK1GGRisk factor β€” reward pathway / DRD2 association
🟒 rs6265BDNFCCBenign (Val/Val) β€” better episodic memory
⚠️ This is a research and portfolio project, not medical advice. All interpretations are for educational purposes only.

Tech Stack

LayerTechnology
Genome parsingpandas, Python
Variant annotationNCBI E-utilities (ClinVar), EBI GWAS Catalog
Agentic frameworksmolagents (HuggingFace)
RL trainingTRL GRPOTrainer
Fine-tuningLoRA (PEFT) + 4-bit quantization (bitsandbytes)
Base modelmeta-llama/Llama-3.1-8B-Instruct
Demo UIGradio (HF Spaces)
EvaluationPer-task reward breakdown, 3 task types

HuggingFace Deployment

Spaces (interactive demo):

1. Create new Space β†’ Gradio SDK
2. Upload: genomic_agent_huggingface.py, app.py, data/
3. Add secret: HF_TOKEN
4. Upload your 23andMe .txt β†’ ask questions in chat

Model Hub (trained weights):

python
trainer.push_to_hub("mioulin/genomic-reasoning-llm")

Dataset Hub:

python
from datasets import Dataset
Dataset.from_list(qa_dataset).push_to_hub("mioulin/genomic-reasoning-qa")

Connection to ML Scientist Role

This project was built to demonstrate the exact skills required for ML Scientist roles in AIΓ—biology:

  • β€”Agentic systems β€” 5-tool ToolCallingAgent with multi-step planning
  • β€”RL/RLHF training β€” GRPO with verifiable reward, no human labelers
  • β€”Biomedical data integration β€” ClinVar, GWAS Catalog, gnomAD, PubMed
  • β€”Evaluation framework β€” 6-component reward breakdown across 3 task types
  • β€”Real scientific domain β€” 631,455 SNPs from real 23andMe genome
  • β€”Reasoning over evidence β€” multi-hop: SNP β†’ gene β†’ pathway β†’ phenotype

Running Locally

bash
git clone https://huggingface.co/spaces/mioulin/genomic-reasoning-agent
cd genomic-reasoning-agent
pip install smolagents trl transformers accelerate peft datasets gradio
# Annotate your genome
python clinvar_pipeline_full.py \
  --genome your_23andme.txt \
  --output data/clinvar_annotations.json \
  --email your@email.com
# Run agent (requires HF token for model inference)
export HF_TOKEN=hf_...
python genomic_agent_huggingface.py
# Train with GRPO (requires GPU)
python train_grpo.py \
  --model meta-llama/Llama-3.1-8B-Instruct \
  --epochs 3 --lora --G 4

Author

Zalina Dezhina, PhD ![HuggingFace](https://huggingface.co/mioulin)

Citation

bibtex
@misc{dezhina2026genomic,
  title  = {Genomic Reasoning Agent: GRPO Training on Personal SNP Data},
  author = {Dezhina, Zalina},
  year   = {2026},
  url    = {https://huggingface.co/spaces/mioulin/genomic-reasoning-agent}
}

License

MIT β€” research and educational use only. Not intended for clinical or medical decision-making.


Built with 🧬 smolagents · TRL · HuggingFace · ClinVar · 23andMe