Knowledge Graph Catalog

Purpose: Scholarly + comparative context for the knowledge graphs we use — paper citations, published baselines, domain-fit rationale, known issues, and pretraining background. This file is not the source of truth for live state.

Live state — current load status, node/edge counts, license, version, and composition membership — lives in the mods_kg_source and mods_kg_composition_* tables. Query via the mods_kg_list_sources and mods_kg_list_compositions MCP tools. Always defer to the DB for exact counts and current status; the snapshots in this file are illustrative.

Updated: 2026-05-29


Live state quick reference (snapshot 2026-05-29)

Run mods_kg_list_sources for live values.

Source IDStatusApprox scale (ent / rel)Section
gp_kgloaded61K / 1.24MGP-KG
prime_kgloaded129K / 8.0MPrimeKG
civicloaded6.0K / 11.5KCIViC
clinvarloaded933 / 1.6KClinVar
oncokbloaded176 / 483 (1,221 / 7,217 on 2026-10-05, after #744)OncoKB
pharmgkb_variantsloaded5.0K / 9.4KPharmGKB CPIC
maple_patientloaded5 / 339Maple Patient Overlay
rtx_kg2partial3.54M / 10.2MRTX-KG2
drkgrunning(ingest in progress)DRKG
dbsnpcross_ref_only2.7K / 0Variant cross-ref services
gnomadcross_ref_only30 / 0Variant cross-ref services
myvariant_aggregatorcross_ref_only116 / 0Variant cross-ref services
translator_ncatsapi_only—NCATS Translator
txgnnapi_only—TxGNN

Status vocabulary (from mods_kg_source.status):

  • loaded — Fully ingested, usable in compositions
  • running — Ingest in progress
  • partial — Some data loaded, raw data on disk, full load not done. RTX-KG2 is partial; see GH #85.
  • cross_ref_only — Identifiers loaded for joining; no edges contributed
  • api_only — Live API; no local copy
  • planned — Identified, not started

Loaded KGs

GP-KG (Genotypic-Phenotypic Knowledge Graph)

AttributeValue
PaperGao Z, Ding P, Xu R. “KG-Predict: A knowledge graph computational framework for drug repurposing.” J Biomed Inform 2022
DOI10.1016/j.jbi.2022.104133
Data URLhttp://nlp.case.edu/public/data/GPKG-Predict/
Entity types (7)drug, gene, disease, mammalian_phenotype, human_phenotype, go_term, tissue
Relation types (9)drug-target-gene, disease-associate-gene, drug-treat-disease, gene-relate-MP, gene-relate-GO, gene-relate-UT, drug-relate-HP, drug-relate-MP, disease-relate-HP
Upstream sourcesDrugBank, MGI, HPO, GTEx, GOA, Phenomebrowser, TreatKB (NLP from FAERS, FDA labels, MEDLINE, clinical trials)
Algorithm in original paperCompGCN (embeddings) + ConvE (link prediction)
DB rowmods_kg_source.id='gp_kg' (status: loaded)
Connectorbackend/connectors/gpkg_connector.py
Domain fitPrimary — this is the KG used by KG-Predict and the PDR papers we replicate. Drug-disease focus with strong phenotype coverage.

Published metrics

SourceMetricValueTask
KG-Predict (Gao 2022) CVAUROC0.98110-fold CV on GP-KG, full head+tail link prediction
KG-Predict (Gao 2022) CVAUPR0.409Same
KG-Predict (Gao 2022) CVMRR0.261Same
KG-Predict (Gao 2022) AD case studyAUROC0.868Drug ranking vs FDA-approved + active-trial AD drugs as positives
KG-Predict (Gao 2022) AD case studyAUPR0.364Same
PDR1 (Oğuztüzün 2025) Table 3MR / MRR / Hits@1 / Hits@3 / Hits@5 / Hits@10 / AUC1390.6 / 0.19231 / 0.13126 / 0.20721 / 0.24959 / 0.31331 / 0.8665-fold CV foundational model; per-patient models comparable (mean AUC 0.856)

Paper taxonomy (avoids the KG-Predict / PDR1 / PDR2 mix-up)

Three distinct papers reuse the same GP-KG + CompGCN+ConvE stack. Different numbers, different tasks — don’t cross-compare:

KeyPaperYearAuthorsPublished metrics’ task
KG-Predict”KG-Predict: A knowledge graph computational framework for drug repurposing”2022Gao / SrivastavaIntroduced GP-KG. Reports CV numbers (0.981/0.409/0.261) and an AD case study (0.868/0.364).
PDR1”Precision Drug Repurposing (PDR): Patient-level modeling and prediction…“2025Oğuztüzün et al.Reuses KG-Predict’s foundational model, adds per-patient biobank data. Table 3 foundational AUC 0.866, MRR 0.192.
PDR2 / PDR-II”Learning to take it personally…” (DOI 10.1016/j.jbi.2026.105039)2026Oğuztüzün, Gao, Li, Qi, Koyutürk, XuCode + PDF in docs/References/PDR2/. Same GP-KG, new backbone (ULTRA + NBFNet). Personalization in the loss function (learnable disease/protein weights × PRS/biomarker). Reports 1.3×–5.4× AUPRC improvement per patient vs PDR1.

Which comparator applies where:

Our measurementRight comparator
compute_metrics.py AUROC/AUPR on AD drug ranking vs 60 NCT positivesKG-Predict AD-CS AUROC 0.868, AUPR 0.364
Val MRR during training (with -skip_head)Not directly comparable — tail-only eval roughly doubles MRR vs head+tail. For fair comparison to KG-Predict CV MRR 0.261, must re-run without -skip_head (Run 4).
Test-set MRR/Hits@k/AUROC without -skip_head (Run 4)KG-Predict CV AUROC 0.981, MRR 0.261
Per-patient drug ranking vs prescription historyPDR1 Table 3 per-patient AUC 0.856, MRR 0.192 — not attempted; we have no UK Biobank data.

PrimeKG (Precision Medicine Knowledge Graph)

AttributeValue
PaperChandak P, Huang K, Zitnik M. “Building a knowledge graph to enable precision medicine.” Sci Data 2023
DOI10.1038/s41597-023-01960-3
Data URLHarvard Dataverse DOI:10.7910/DVN/IXA7BM
Entity types (10)drug, disease, gene/protein, effect/phenotype, biological_process, molecular_function, cellular_component, anatomy, pathway, exposure
Relation types (30)indication, contraindication, off-label use, target, enzyme, carrier, transporter, side_effect, phenotype_protein, disease_protein, protein_protein, etc.
Upstream sources20+ resources including DrugBank, OMIM, DisGeNET, HPO, GO, Uberon, Reactome, SIDER, PharmGKB
Supplementary filesdisease_features.tab (MONDO, Orphanet, Mayo descriptions), drug_features.tab (MoA, ATC codes, pharmacokinetics)
DB rowmods_kg_source.id='prime_kg' (status: loaded)
Connectorbackend/connectors/prime_kg_connector.py
Known issues64 node collisions from temporal name ambiguity — see docs/primekg_anomaly_report.md. Report sent to authors.
Domain fitStrong — broadest entity coverage, rich edge types (indication/contraindication/off-label), disease+drug feature tables. More granular than GP-KG but different relation schema.
WishlistOrient PrimeKG’s seven hierarchies from their source ontologies. PrimeKG labels them all parent-child and stores each edge both ways. Before the doubling it built MONDO, HPO and GO parent→child but UBERON child→parent, so only the ontologies can orient them. Training exports keep them in both directions until then (D-Q4-14, #610; the anatomy and cellular-component mapping question is #866). Not scheduled.

CIViC

AttributeValue
ResourceClinical Interpretations of Variants in Cancer
Projectcivicdb.org (WashU)
DB rowmods_kg_source.id='civic' (status: loaded)
Connectorbackend/connectors/civic_connector.py
What it addsCurated variant→drug response / prognostic / predictive / diagnostic evidence with evidence-tier grading. Critical for variant-aware reasoning (Phase 8.5).
Domain fitStrong — clinically graded somatic-variant evidence is the closest thing to oncology gold-standard for KG-based reasoning. Used in maureen_focus_v1, primekg_civic_v1, tier1_mvp_v1.

ClinVar

AttributeValue
ResourceNCBI ClinVar — variant ↔ condition assertions
Connector pathVia eutils-esummary (see DB version string)
DB rowmods_kg_source.id='clinvar' (status: loaded)
What it addsVariant identity + germline disease assertions. Smaller than CIViC because we only ingested the variation IDs relevant to our cohort.
Domain fitGermline complement to CIViC’s somatic-oncology focus. Used in Maureen compositions.

OncoKB

AttributeValue
ResourceMemorial Sloan Kettering OncoKB precision-oncology knowledgebase
Projectoncokb.org
DB rowmods_kg_source.id='oncokb' (status: loaded)
License gotchaCommercial, with a free academic tier. We’re on academic-annotate. Surface to user before any redistribution / publication use; see memory/feedback_user_handles_ethical_calls.md.
What it addsFDA + NCCN level-of-evidence tagging for variant→therapy claims in cancer. Smaller graph (176 ent / 483 rel; 1,221 / 7,217 after #744’s re-annotation, 2026-10-05) but very high-precision.
Domain fitHigh-precision oncology layer for Maureen compositions.
WishlistFusion annotation through OncoKB’s structural-variant endpoint (annotate/structuralVariants). byProteinChange cannot express a fusion: all 480 :: queries came back geneExist=False, the annotator now refuses them, and #744’s compound-profile retirement took the graph’s only OncoKB fusion edges. Not scheduled.

PharmGKB CPIC

AttributeValue
ResourcePharmGKB — Clinical Pharmacogenetics Implementation Consortium variant guidelines
Projectpharmgkb.org
DB rowmods_kg_source.id='pharmgkb_variants' (status: loaded)
What it addsCPIC-graded pharmacogenetics: variant→drug toxicity / response / metabolism evidence. Layered on top of primekg_civic_v1 to make primekg_civic_pharmgkb_v1.
Domain fitPGx layer (germline drug metabolism) — complements CIViC (somatic oncology) and ClinVar (germline disease).

Maple Patient Overlay

AttributeValue
What it isInternal patient-as-node overlay. Currently just Maureen.
DB rowmods_kg_source.id='maple_patient' (status: loaded)
PatternUnioned into compositions at export via --include-source maple_patient. NOT a permanent member of any composition; it’s overlaid on top of whatever base composition the export targets.
Referencememory/project_pdr2_mechanism.md, memory/project_paan_thinking_doc.md, docs/paan_planning.md
Domain fitRequired for any per-patient training run. The whole PDR2 personalization story passes through this.

Partial / Running KGs

RTX-KG2

AttributeValue
ResourceNCATS Translator canonicalized KG (~70 upstream biomedical sources merged + normalized to Biolink)
Projectgithub.com/RTXteam/RTX-KG2
DB rowmods_kg_source.id='rtx_kg2' (status: partial)
Status detail~7% loaded; full raw data on disk; full load tracked in GH #85. See memory/project_kg_source_completeness.md.
What it adds (when complete)Biolink-normalized predicates across most of the public biomedical-KG ecosystem — absorbs most of what PrimeKG carries, plus much more.
Compositionsrtx_kg2_full, rtx_kg2_tier1 (empty until D0 lands); tier1_mvp_v1 headline (empty until D0/D1/D2/D3 land)
Domain fitHighest potential — the single largest source we can ingest, and Biolink-canonical, so it composes cleanly. Bottleneck right now is finishing the load.

DRKG (Drug Repurposing Knowledge Graph)

AttributeValue
PaperIoannidis et al. / SNAP group
Repositorygithub.com/gnn4dr/DRKG
Entity typesDrug, disease, gene, anatomy, atc, pharmacologic class, side effect, symptom, pathway
Upstream sourcesDrugBank, Hetionet, GNBR, String, IntAct, DGIdb
FormatTSV triples
DB rowmods_kg_source.id='drkg' (status: running — ingest in progress as of 2026-05-29)
Domain fitStrong — drug repurposing focus, active community, well-documented. Similar scale to GP-KG (~97K ent / ~5.9M rel). Good third-KG comparator once loaded.

Variant cross-reference services

Loaded with identifiers only — no edges contributed to the canonical KG. Used to validate / normalize variant references that come in via CIViC / ClinVar / OncoKB / PharmGKB.

Source IDResourcePurpose
dbsnpNCBI dbSNP rsIDsStandardize variant identifiers
gnomadgnomAD allele frequencyPopulation-frequency context for variants
myvariant_aggregatorMyVariant.infoConvenience aggregator across variant sources

API-only KGs

NCATS Biomedical Data Translator

AttributeValue
TypeFederated query API (TRAPI 1.6.0), not a static downloadable KG
EndpointsARAGORN, ARAX
Coverage200+ biomedical data sources
DB rowmods_kg_source.id='translator_ncats' (status: api_only)
Connectorbackend/connectors/translator_connector.py
Queriesquery_treatments_for_disease(), query_drug_targets(), query_drug_pathways()
Domain fitComplementary — on-demand enrichment, not suitable for batch GNN training

TxGNN (Therapeutic Genome-wide Neural Network)

AttributeValue
TypePre-trained GNN model (uses PrimeKG internally)
PaperHuang et al., Harvard
DB rowmods_kg_source.id='txgnn' (status: api_only)
Connectorbackend/connectors/txgnn_connector.py
Capabilitiespredict_for_disease() → (indications, contraindications) with scores
Disease coverageColorectal, breast, lung, pancreatic, ovarian cancer
Domain fitComparator — independent predictions from the same underlying KG (PrimeKG)

Reference / not-yet-evaluated

HGTDR (Heterogeneous Graph Transformer for Drug Repurposing)

AttributeValue
Paper2024, Bioinformatics
TypeHeterogeneous KG + HGT embedding + link scoring
Mentioned indocs/_archive/2026-06-02/deep-research-report.md (archived)
Domain fitArchitectural reference — 3-step KG construction approach may inform our pipeline. Not in DB.

ULTRA Pretraining KGs (non-biomedical)

These three datasets aren’t biomedical and don’t enter the MODS pipeline directly. They’re the standard pretraining mix for ULTRA (Galkin et al., ICLR 2024) — the relation-invariant foundation model that PDR2 builds on. ULTRA’s whole pitch is that it doesn’t memorize entities or relations; it learns the structure of the relation graph. To learn that, it needs exposure to varied relation patterns — dense vs sparse, broad vs taxonomic, factual vs modern. These three together cover that space well enough that the trained model transfers zero-shot to 50+ unseen KGs (including biomedical ones like Hetionet and PrimeKG) without fine-tuning.

ULTRA paper: Galkin M, Yuan X, Mostafa H, Tang J, Zhu Z. “Towards Foundation Models for Knowledge Graph Reasoning.” ICLR 2024. arxiv:2310.04562. Mirror at docs/References/ULTRA/.

These KGs are not tracked in mods_kg_source; they live in the PDR2 vendor tree (lib/pdr2/) and are only used for pretraining the ULTRA backbone.

FB15k-237

AttributeValue
PaperToutanova K, Chen D. “Observed versus latent features for knowledge base and text inference.” Proc. 3rd Workshop on Continuous Vector Space Models and their Compositionality, 2015
OriginSubset of FB15k (Bordes et al. 2013), with inverse-relation leakage removed (e.g., (A, born_in, B) / (B, contains, A) redundancies stripped)
Source domainFreebase — general world knowledge (people, places, films, organizations)
Entities14,541
Relations237
Triples272,115 train / 17,535 val / 20,466 test
CharacterDense, many-to-many, broad-domain factual
Standard downloadBundled with most KGE libraries (PyKEEN, OpenKE, DGL-KE); also via the ULTRA repo
Role in mixTeaches the model dense, many-relation graph patterns

WN18RR

AttributeValue
PaperDettmers T, Minervini P, Stenetorp P, Riedel S. “Convolutional 2D Knowledge Graph Embeddings.” AAAI 2018
OriginSubset of WN18 (Bordes et al. 2013), with inverse-relation leakage removed (same fix as FB15k-237)
Source domainWordNet — English lexical database; relationships between word senses (synsets)
Entities40,943 synsets
Relations11 (hypernym, hyponym, member_meronym, derivationally_related_form, etc.)
Triples86,835 train / 3,034 val / 3,134 test
CharacterSparse, deep-hierarchy, taxonomic — tree-like chains, mostly chain-following reasoning
Standard downloadBundled with most KGE libraries; also via the ULTRA repo
Role in mixTeaches the model sparse, deep-hierarchy graph patterns

CoDEx (CoDEx-M used by ULTRA)

AttributeValue
PaperSafavi T, Koutra D. “CoDEx: A Comprehensive Knowledge Graph Completion Benchmark.” EMNLP 2020
Source domainWikidata — modern, type-aware, multi-domain
VariantsCoDEx-S (small), CoDEx-M (medium — used by ULTRA), CoDEx-L (large)
CoDEx-S size~2,000 entities, 42 relations, ~36K triples
CoDEx-M size~17,050 entities, 51 relations, ~206K triples ← the one ULTRA pretrains on
CoDEx-L size~77,950 entities, 69 relations, ~612K triples
Special featuresIncludes entity-type information and curated hard negatives (designed to be harder than FB15k-237’s near-trivial negatives)
Standard downloadgithub.com/tsafavi/codex
Role in mixTeaches the model mid-density, modern Wikidata-style patterns with type signal and harder negatives

Planned experiment — 64d vs 128d ULTRA pretraining

Current ULTRA pretraining (lib/pdr2/) uses 64-dimensional hidden representations. Planned sweep: re-pretrain on the same three-KG mix (FB15k-237 + WN18RR + CoDEx-M) at 128d and compare:

  • (a) Standard link-prediction metrics (MRR, Hits@k) on the three pretraining datasets
  • (b) Zero-shot transfer to GP-KG and PrimeKG (the targets we actually care about)
  • (c) Downstream impact on per-patient PDR2 fine-tune AUPRC (Maureen + RGCC validation)

Hypothesis: larger capacity may help on harder transfer targets, but the pretraining set is small (combined ~565K triples) so over-parameterization is a real risk. Worth measuring rather than assuming. Track in a follow-up writeup under docs/pdr2_* when run.


Compositions

Compositions are named, versioned graph mixes that training runs reference by ID. Live list via mods_kg_list_compositions. Snapshot 2026-05-29:

IDMembersPurpose
gp_kg_baseline_v1gp_kgReproduces Gao 2022 / PDR1 baseline
primekg_baseline_v1prime_kgFull PrimeKG, PDR2 baseline
primekg_civic_v1prime_kg + civicFirst base composition for canonical → PDR2 pipeline
primekg_civic_pharmgkb_v1prime_kg + civic + pharmgkb_variantsAdds CPIC PGx evidence on top of primekg_civic_v1
maureen_focus_v1PrimeKG (anatomy/CC/MF/exposure excluded) + civic + pharmgkb_variants + oncokb + clinvarMaureen proof-out, scoped PrimeKG
maureen_full_v1Same members, no PrimeKG domain exclusionsMaureen full-vs-focus ablation
rtx_kg2_fullrtx_kg2All of RTX-KG2 (empty until D0 lands)
rtx_kg2_tier1rtx_kg2 (Tier 1 domains only)Faster iteration variant (empty until D0 lands)
tier1_mvp_v1rtx_kg2_tier1 + civic + oncokb + pharmgkb_variantsHeadline composition — skips PrimeKG because RTX-KG2 absorbs it (empty until D0/D1/D2/D3 land)
tier1_mvp_with_primekg_v1tier1_mvp_v1 + prime_kgCross-KG corroboration variant

Patient overlay pattern: maple_patient is unioned at export via --include-source maple_patient, not as a permanent composition member. This keeps Maureen out of the canonical composition graph while letting any base composition be exported with the patient overlay on top.

Composition lock state, exact filters (include_domains / include_relations / weight), and member counts are in mods_kg_composition + mods_kg_composition_member. Query via mods_kg_list_compositions for live state.


Comparison Matrix

High-level fitness comparison for the biomedical KGs. For live counts / status / license, query mods_kg_list_sources.

FeatureGP-KGPrimeKGRTX-KG2DRKGTranslator
Static downloadableYesYesYesYesNo (API)
Drug-disease edgesYes (treat)Yes (indication, contraindication, off-label)YesYesYes
Drug-gene edgesYes (target)Yes (target, enzyme, carrier, transporter)YesYesYes
Disease-gene edgesYes (associate)Yes (disease_protein)YesYesYes
Phenotype coverageMP + HPeffect/phenotypeYessymptomLimited
GO term coverageYesbiological_process, molecular_function, cellular_componentYesNoNo
Tissue/anatomyYes (tissue)Yes (anatomy)YesYes (anatomy)Limited
Drug feature tablesNoYes (MoA, ATC, pharmacokinetics)Via upstreamsNoNo
Disease feature tablesNoYes (MONDO, Orphanet, Mayo)Via upstreamsNoNo
Biolink-canonical predicatesNoPartialYesNoYes
Published repurposing baselinesYes — KG-Predict CV AUROC 0.981; AD-CS AUROC 0.868Via TxGNN—Some—

Adding a New KG

To add a new knowledge graph to the pipeline:

  1. Connector: Create backend/connectors/<kg_name>_connector.py implementing:

    • is_downloaded() → bool
    • download(progress_callback) → Dict
    • stream_triples(batch_size) → Generator[List[Tuple], None, None]
    • get_stats() → Dict
    • data_summary() → Dict
    • count_triples() → int
  2. Register in DB: Insert a row in mods_kg_source (or use the bootstrap path that wires it during worker/task_handlers.handle_import_kg). Set initial status='planned', fill citation / source_url / license / version. Status auto-advances to running then loaded during ingest.

  3. Load: Trigger via mods_kg_import MCP tool or directly through ModsKGCanonicalService.import_from_connector(kg_source, connector).

  4. Validate: Run mods_kg_canonical_stats and mods_kg_list_sources to confirm live counts line up with what the connector said it would emit.

  5. Composition (optional): If the new KG should participate in a training run, add a member row in mods_kg_composition_member for the relevant composition(s), with any include_domains / include_relations filters.

  6. Document here: Add a section under “Loaded KGs” with paper / DOI / domain fit narrative and known issues. Don’t duplicate node/edge counts or license text — those live in the DB.

  7. Feature tables (optional): If the KG ships supplementary node features, extend mods_kg_disease_feature / mods_kg_drug_feature or create new tables via migration.

Critical: Preserve source entity types and relation types exactly. Never collapse finer-grained types into coarser ones during import. See “Data and Mapping Integrity Rules” in CLAUDE.md — this rule was paid for in real data loss.