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 ID | Status | Approx scale (ent / rel) | Section |
|---|---|---|---|
gp_kg | loaded | 61K / 1.24M | GP-KG |
prime_kg | loaded | 129K / 8.0M | PrimeKG |
civic | loaded | 6.0K / 11.5K | CIViC |
clinvar | loaded | 933 / 1.6K | ClinVar |
oncokb | loaded | 176 / 483 (1,221 / 7,217 on 2026-10-05, after #744) | OncoKB |
pharmgkb_variants | loaded | 5.0K / 9.4K | PharmGKB CPIC |
maple_patient | loaded | 5 / 339 | Maple Patient Overlay |
rtx_kg2 | partial | 3.54M / 10.2M | RTX-KG2 |
drkg | running | (ingest in progress) | DRKG |
dbsnp | cross_ref_only | 2.7K / 0 | Variant cross-ref services |
gnomad | cross_ref_only | 30 / 0 | Variant cross-ref services |
myvariant_aggregator | cross_ref_only | 116 / 0 | Variant cross-ref services |
translator_ncats | api_only | — | NCATS Translator |
txgnn | api_only | — | TxGNN |
Status vocabulary (from mods_kg_source.status):
loaded— Fully ingested, usable in compositionsrunning— Ingest in progresspartial— Some data loaded, raw data on disk, full load not done. RTX-KG2 is partial; seeGH #85.cross_ref_only— Identifiers loaded for joining; no edges contributedapi_only— Live API; no local copyplanned— Identified, not started
Loaded KGs
GP-KG (Genotypic-Phenotypic Knowledge Graph)
| Attribute | Value |
|---|---|
| Paper | Gao Z, Ding P, Xu R. “KG-Predict: A knowledge graph computational framework for drug repurposing.” J Biomed Inform 2022 |
| DOI | 10.1016/j.jbi.2022.104133 |
| Data URL | http://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 sources | DrugBank, MGI, HPO, GTEx, GOA, Phenomebrowser, TreatKB (NLP from FAERS, FDA labels, MEDLINE, clinical trials) |
| Algorithm in original paper | CompGCN (embeddings) + ConvE (link prediction) |
| DB row | mods_kg_source.id='gp_kg' (status: loaded) |
| Connector | backend/connectors/gpkg_connector.py |
| Domain fit | Primary — this is the KG used by KG-Predict and the PDR papers we replicate. Drug-disease focus with strong phenotype coverage. |
Published metrics
| Source | Metric | Value | Task |
|---|---|---|---|
| KG-Predict (Gao 2022) CV | AUROC | 0.981 | 10-fold CV on GP-KG, full head+tail link prediction |
| KG-Predict (Gao 2022) CV | AUPR | 0.409 | Same |
| KG-Predict (Gao 2022) CV | MRR | 0.261 | Same |
| KG-Predict (Gao 2022) AD case study | AUROC | 0.868 | Drug ranking vs FDA-approved + active-trial AD drugs as positives |
| KG-Predict (Gao 2022) AD case study | AUPR | 0.364 | Same |
| PDR1 (Oğuztüzün 2025) Table 3 | MR / MRR / Hits@1 / Hits@3 / Hits@5 / Hits@10 / AUC | 1390.6 / 0.19231 / 0.13126 / 0.20721 / 0.24959 / 0.31331 / 0.866 | 5-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:
| Key | Paper | Year | Authors | Published metrics’ task |
|---|---|---|---|---|
| KG-Predict | ”KG-Predict: A knowledge graph computational framework for drug repurposing” | 2022 | Gao / Srivastava | Introduced 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…“ | 2025 | Oğ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) | 2026 | Oğuztüzün, Gao, Li, Qi, Koyutürk, Xu | Code + 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 measurement | Right comparator |
|---|---|
compute_metrics.py AUROC/AUPR on AD drug ranking vs 60 NCT positives | KG-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 history | PDR1 Table 3 per-patient AUC 0.856, MRR 0.192 — not attempted; we have no UK Biobank data. |
PrimeKG (Precision Medicine Knowledge Graph)
| Attribute | Value |
|---|---|
| Paper | Chandak P, Huang K, Zitnik M. “Building a knowledge graph to enable precision medicine.” Sci Data 2023 |
| DOI | 10.1038/s41597-023-01960-3 |
| Data URL | Harvard 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 sources | 20+ resources including DrugBank, OMIM, DisGeNET, HPO, GO, Uberon, Reactome, SIDER, PharmGKB |
| Supplementary files | disease_features.tab (MONDO, Orphanet, Mayo descriptions), drug_features.tab (MoA, ATC codes, pharmacokinetics) |
| DB row | mods_kg_source.id='prime_kg' (status: loaded) |
| Connector | backend/connectors/prime_kg_connector.py |
| Known issues | 64 node collisions from temporal name ambiguity — see docs/primekg_anomaly_report.md. Report sent to authors. |
| Domain fit | Strong — broadest entity coverage, rich edge types (indication/contraindication/off-label), disease+drug feature tables. More granular than GP-KG but different relation schema. |
| Wishlist | Orient 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
| Attribute | Value |
|---|---|
| Resource | Clinical Interpretations of Variants in Cancer |
| Project | civicdb.org (WashU) |
| DB row | mods_kg_source.id='civic' (status: loaded) |
| Connector | backend/connectors/civic_connector.py |
| What it adds | Curated variant→drug response / prognostic / predictive / diagnostic evidence with evidence-tier grading. Critical for variant-aware reasoning (Phase 8.5). |
| Domain fit | Strong — 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
| Attribute | Value |
|---|---|
| Resource | NCBI ClinVar — variant ↔ condition assertions |
| Connector path | Via eutils-esummary (see DB version string) |
| DB row | mods_kg_source.id='clinvar' (status: loaded) |
| What it adds | Variant identity + germline disease assertions. Smaller than CIViC because we only ingested the variation IDs relevant to our cohort. |
| Domain fit | Germline complement to CIViC’s somatic-oncology focus. Used in Maureen compositions. |
OncoKB
| Attribute | Value |
|---|---|
| Resource | Memorial Sloan Kettering OncoKB precision-oncology knowledgebase |
| Project | oncokb.org |
| DB row | mods_kg_source.id='oncokb' (status: loaded) |
| License gotcha | Commercial, 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 adds | FDA + 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 fit | High-precision oncology layer for Maureen compositions. |
| Wishlist | Fusion 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
| Attribute | Value |
|---|---|
| Resource | PharmGKB — Clinical Pharmacogenetics Implementation Consortium variant guidelines |
| Project | pharmgkb.org |
| DB row | mods_kg_source.id='pharmgkb_variants' (status: loaded) |
| What it adds | CPIC-graded pharmacogenetics: variant→drug toxicity / response / metabolism evidence. Layered on top of primekg_civic_v1 to make primekg_civic_pharmgkb_v1. |
| Domain fit | PGx layer (germline drug metabolism) — complements CIViC (somatic oncology) and ClinVar (germline disease). |
Maple Patient Overlay
| Attribute | Value |
|---|---|
| What it is | Internal patient-as-node overlay. Currently just Maureen. |
| DB row | mods_kg_source.id='maple_patient' (status: loaded) |
| Pattern | Unioned 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. |
| Reference | memory/project_pdr2_mechanism.md, memory/project_paan_thinking_doc.md, docs/paan_planning.md |
| Domain fit | Required for any per-patient training run. The whole PDR2 personalization story passes through this. |
Partial / Running KGs
RTX-KG2
| Attribute | Value |
|---|---|
| Resource | NCATS Translator canonicalized KG (~70 upstream biomedical sources merged + normalized to Biolink) |
| Project | github.com/RTXteam/RTX-KG2 |
| DB row | mods_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. |
| Compositions | rtx_kg2_full, rtx_kg2_tier1 (empty until D0 lands); tier1_mvp_v1 headline (empty until D0/D1/D2/D3 land) |
| Domain fit | Highest 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)
| Attribute | Value |
|---|---|
| Paper | Ioannidis et al. / SNAP group |
| Repository | github.com/gnn4dr/DRKG |
| Entity types | Drug, disease, gene, anatomy, atc, pharmacologic class, side effect, symptom, pathway |
| Upstream sources | DrugBank, Hetionet, GNBR, String, IntAct, DGIdb |
| Format | TSV triples |
| DB row | mods_kg_source.id='drkg' (status: running — ingest in progress as of 2026-05-29) |
| Domain fit | Strong — 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 ID | Resource | Purpose |
|---|---|---|
dbsnp | NCBI dbSNP rsIDs | Standardize variant identifiers |
gnomad | gnomAD allele frequency | Population-frequency context for variants |
myvariant_aggregator | MyVariant.info | Convenience aggregator across variant sources |
API-only KGs
NCATS Biomedical Data Translator
| Attribute | Value |
|---|---|
| Type | Federated query API (TRAPI 1.6.0), not a static downloadable KG |
| Endpoints | ARAGORN, ARAX |
| Coverage | 200+ biomedical data sources |
| DB row | mods_kg_source.id='translator_ncats' (status: api_only) |
| Connector | backend/connectors/translator_connector.py |
| Queries | query_treatments_for_disease(), query_drug_targets(), query_drug_pathways() |
| Domain fit | Complementary — on-demand enrichment, not suitable for batch GNN training |
TxGNN (Therapeutic Genome-wide Neural Network)
| Attribute | Value |
|---|---|
| Type | Pre-trained GNN model (uses PrimeKG internally) |
| Paper | Huang et al., Harvard |
| DB row | mods_kg_source.id='txgnn' (status: api_only) |
| Connector | backend/connectors/txgnn_connector.py |
| Capabilities | predict_for_disease() → (indications, contraindications) with scores |
| Disease coverage | Colorectal, breast, lung, pancreatic, ovarian cancer |
| Domain fit | Comparator — independent predictions from the same underlying KG (PrimeKG) |
Reference / not-yet-evaluated
HGTDR (Heterogeneous Graph Transformer for Drug Repurposing)
| Attribute | Value |
|---|---|
| Paper | 2024, Bioinformatics |
| Type | Heterogeneous KG + HGT embedding + link scoring |
| Mentioned in | docs/_archive/2026-06-02/deep-research-report.md (archived) |
| Domain fit | Architectural 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
| Attribute | Value |
|---|---|
| Paper | Toutanova 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 |
| Origin | Subset of FB15k (Bordes et al. 2013), with inverse-relation leakage removed (e.g., (A, born_in, B) / (B, contains, A) redundancies stripped) |
| Source domain | Freebase — general world knowledge (people, places, films, organizations) |
| Entities | 14,541 |
| Relations | 237 |
| Triples | 272,115 train / 17,535 val / 20,466 test |
| Character | Dense, many-to-many, broad-domain factual |
| Standard download | Bundled with most KGE libraries (PyKEEN, OpenKE, DGL-KE); also via the ULTRA repo |
| Role in mix | Teaches the model dense, many-relation graph patterns |
WN18RR
| Attribute | Value |
|---|---|
| Paper | Dettmers T, Minervini P, Stenetorp P, Riedel S. “Convolutional 2D Knowledge Graph Embeddings.” AAAI 2018 |
| Origin | Subset of WN18 (Bordes et al. 2013), with inverse-relation leakage removed (same fix as FB15k-237) |
| Source domain | WordNet — English lexical database; relationships between word senses (synsets) |
| Entities | 40,943 synsets |
| Relations | 11 (hypernym, hyponym, member_meronym, derivationally_related_form, etc.) |
| Triples | 86,835 train / 3,034 val / 3,134 test |
| Character | Sparse, deep-hierarchy, taxonomic — tree-like chains, mostly chain-following reasoning |
| Standard download | Bundled with most KGE libraries; also via the ULTRA repo |
| Role in mix | Teaches the model sparse, deep-hierarchy graph patterns |
CoDEx (CoDEx-M used by ULTRA)
| Attribute | Value |
|---|---|
| Paper | Safavi T, Koutra D. “CoDEx: A Comprehensive Knowledge Graph Completion Benchmark.” EMNLP 2020 |
| Source domain | Wikidata — modern, type-aware, multi-domain |
| Variants | CoDEx-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 features | Includes entity-type information and curated hard negatives (designed to be harder than FB15k-237’s near-trivial negatives) |
| Standard download | github.com/tsafavi/codex |
| Role in mix | Teaches 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:
| ID | Members | Purpose |
|---|---|---|
gp_kg_baseline_v1 | gp_kg | Reproduces Gao 2022 / PDR1 baseline |
primekg_baseline_v1 | prime_kg | Full PrimeKG, PDR2 baseline |
primekg_civic_v1 | prime_kg + civic | First base composition for canonical → PDR2 pipeline |
primekg_civic_pharmgkb_v1 | prime_kg + civic + pharmgkb_variants | Adds CPIC PGx evidence on top of primekg_civic_v1 |
maureen_focus_v1 | PrimeKG (anatomy/CC/MF/exposure excluded) + civic + pharmgkb_variants + oncokb + clinvar | Maureen proof-out, scoped PrimeKG |
maureen_full_v1 | Same members, no PrimeKG domain exclusions | Maureen full-vs-focus ablation |
rtx_kg2_full | rtx_kg2 | All of RTX-KG2 (empty until D0 lands) |
rtx_kg2_tier1 | rtx_kg2 (Tier 1 domains only) | Faster iteration variant (empty until D0 lands) |
tier1_mvp_v1 | rtx_kg2_tier1 + civic + oncokb + pharmgkb_variants | Headline composition — skips PrimeKG because RTX-KG2 absorbs it (empty until D0/D1/D2/D3 land) |
tier1_mvp_with_primekg_v1 | tier1_mvp_v1 + prime_kg | Cross-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.
| Feature | GP-KG | PrimeKG | RTX-KG2 | DRKG | Translator |
|---|---|---|---|---|---|
| Static downloadable | Yes | Yes | Yes | Yes | No (API) |
| Drug-disease edges | Yes (treat) | Yes (indication, contraindication, off-label) | Yes | Yes | Yes |
| Drug-gene edges | Yes (target) | Yes (target, enzyme, carrier, transporter) | Yes | Yes | Yes |
| Disease-gene edges | Yes (associate) | Yes (disease_protein) | Yes | Yes | Yes |
| Phenotype coverage | MP + HP | effect/phenotype | Yes | symptom | Limited |
| GO term coverage | Yes | biological_process, molecular_function, cellular_component | Yes | No | No |
| Tissue/anatomy | Yes (tissue) | Yes (anatomy) | Yes | Yes (anatomy) | Limited |
| Drug feature tables | No | Yes (MoA, ATC, pharmacokinetics) | Via upstreams | No | No |
| Disease feature tables | No | Yes (MONDO, Orphanet, Mayo) | Via upstreams | No | No |
| Biolink-canonical predicates | No | Partial | Yes | No | Yes |
| Published repurposing baselines | Yes — KG-Predict CV AUROC 0.981; AD-CS AUROC 0.868 | Via TxGNN | — | Some | — |
Adding a New KG
To add a new knowledge graph to the pipeline:
-
Connector: Create
backend/connectors/<kg_name>_connector.pyimplementing:is_downloaded() → booldownload(progress_callback) → Dictstream_triples(batch_size) → Generator[List[Tuple], None, None]get_stats() → Dictdata_summary() → Dictcount_triples() → int
-
Register in DB: Insert a row in
mods_kg_source(or use the bootstrap path that wires it duringworker/task_handlers.handle_import_kg). Set initialstatus='planned', fill citation / source_url / license / version. Status auto-advances torunningthenloadedduring ingest. -
Load: Trigger via
mods_kg_importMCP tool or directly throughModsKGCanonicalService.import_from_connector(kg_source, connector). -
Validate: Run
mods_kg_canonical_statsandmods_kg_list_sourcesto confirm live counts line up with what the connector said it would emit. -
Composition (optional): If the new KG should participate in a training run, add a member row in
mods_kg_composition_memberfor the relevant composition(s), with anyinclude_domains/include_relationsfilters. -
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.
-
Feature tables (optional): If the KG ships supplementary node features, extend
mods_kg_disease_feature/mods_kg_drug_featureor 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.