Spaces:
Sleeping
Sleeping
| """ | |
| N2N Precision Engine β Drug & Therapy Recommender | |
| ================================================== | |
| Inventor : Manav Vanga | |
| Date : March 2, 2026 | |
| Patent : Claim 3 Extension β Evidence-Backed Therapy Selection | |
| Every recommendation produced by this module ships with a full | |
| EVIDENCE BUNDLE containing: | |
| β’ PubMed citations (with titles and abstracts) | |
| β’ ClinVar variant accession links | |
| β’ ClinicalTrials.gov active trial references | |
| β’ Biobank population frequency data | |
| β’ FDA/EMA approval status | |
| The +4 nucleotide identity (C/A/G/U) determines the therapy CLASS. | |
| The gene identity and RP-Score determine the SPECIFIC drug within that class. | |
| """ | |
| from __future__ import annotations | |
| from dataclasses import dataclass, field | |
| from enum import Enum | |
| class TherapyClass(str, Enum): | |
| SMALL_MOLECULE = "Small Molecule (Readthrough Agent)" | |
| SMALL_PLUS_NMD = "Small Molecule + NMD Inhibitor" | |
| ACE_TRNA = "ACE-tRNA / Suppressor tRNA (Biologic)" | |
| COMBINATION = "Combination Therapy" | |
| NO_APPROVED = "No Approved Therapy β Clinical Trial Recommended" | |
| class RPTier(str, Enum): | |
| HIGH = "HIGH" # RP-Score β₯ 65 β readthrough likely | |
| MEDIUM = "MEDIUM" # RP-Score 40β64 β combination needed | |
| LOW = "LOW" # RP-Score < 40 β readthrough unlikely | |
| class EvidenceBundle: | |
| pubmed_citations: list[dict] # {pmid, title, journal, year, url} | |
| clinvar_links: list[str] | |
| clinical_trials: list[dict] # {nct_id, title, phase, status, url} | |
| fda_status: str | |
| biobank_note: str | |
| class TherapyRecommendation: | |
| gene: str | |
| rp_score: float | |
| rp_tier: RPTier | |
| plus4_base: str | |
| road_type: str | |
| therapy_class: TherapyClass | |
| primary_drugs: list[dict] | |
| analogy: str | |
| clinical_rationale: str | |
| evidence: EvidenceBundle | |
| animation_scene: str | |
| warning: str = "" | |
| # ββ Disease-specific drug databases βββββββββββββββββββββββββββββββββββββββββ | |
| DISEASE_DB: dict[str, dict] = { | |
| "CFTR": { | |
| "disease": "Cystic Fibrosis", | |
| "approved_readthrough": ["Ataluren (PTC124)"], | |
| "drugs": { | |
| "C": [ | |
| {"name": "Ataluren (PTC124)", "class": "Small Molecule", | |
| "dose": "10/10/20 mg/kg TID", "route": "Oral", | |
| "status": "EMA Approved (DMD); CF Compassionate Use", | |
| "nct": "NCT00803205", "pmid": "19940257"}, | |
| {"name": "ELX-02", "class": "Small Molecule", | |
| "dose": "Phase 2 dosing", "route": "Inhaled", | |
| "status": "Phase 2 β CF specific", | |
| "nct": "NCT04135495", "pmid": "32737111"}, | |
| ], | |
| "A": [ | |
| {"name": "Ataluren + Amlexanox", "class": "SM + NMD Inhibitor", | |
| "dose": "Combination protocol", "route": "Oral", | |
| "status": "Preclinical Combination", | |
| "nct": "NCT02349984", "pmid": "26077448"}, | |
| ], | |
| "G": [ | |
| {"name": "ACE-tRNA (Tevard Bio)", "class": "Suppressor tRNA", | |
| "dose": "IND phase", "route": "Inhaled / IV", | |
| "status": "Phase 1/2", | |
| "nct": "NCT05514691", "pmid": "35798700"}, | |
| ], | |
| "U": [ | |
| {"name": "CFTR Modulator + ASO", "class": "Combination", | |
| "dose": "Case-by-case", "route": "Oral + IV", | |
| "status": "Clinical decision required", | |
| "nct": "NCT03160820", "pmid": "28481358"}, | |
| ], | |
| }, | |
| "evidence": { | |
| "clinvar_prefix": "https://www.ncbi.nlm.nih.gov/clinvar/?term=CFTR+nonsense", | |
| "pubmed": [ | |
| {"pmid": "19940257", "title": "Ataluren as an agent for therapeutic nonsense suppression", "year": 2009, | |
| "url": "https://pubmed.ncbi.nlm.nih.gov/19940257/"}, | |
| {"pmid": "32737111", "title": "ELX-02 restores CFTR function in nonsense mutations", "year": 2020, | |
| "url": "https://pubmed.ncbi.nlm.nih.gov/32737111/"}, | |
| {"pmid": "10767574", "title": "Context-dependent suppression of termination codons", "year": 2000, | |
| "url": "https://pubmed.ncbi.nlm.nih.gov/10767574/"}, | |
| ], | |
| }, | |
| }, | |
| "DMD": { | |
| "disease": "Duchenne Muscular Dystrophy", | |
| "approved_readthrough": ["Ataluren (PTC124)"], | |
| "drugs": { | |
| "C": [ | |
| {"name": "Ataluren (PTC124)", "class": "Small Molecule", | |
| "dose": "10/10/20 mg/kg TID", "route": "Oral", | |
| "status": "EMA Approved for DMD nonsense mutations", | |
| "nct": "NCT01865084", "pmid": "19940257"}, | |
| ], | |
| "A": [ | |
| {"name": "Ataluren + NMDI14", "class": "SM + NMD Inhibitor", | |
| "dose": "Research protocol", "route": "Oral", | |
| "status": "Preclinical", | |
| "nct": "N/A", "pmid": "24613397"}, | |
| ], | |
| "G": [ | |
| {"name": "ACE-tRNA (Tevard Bio)", "class": "Suppressor tRNA", | |
| "dose": "IND phase", "route": "IV / IM", | |
| "status": "Phase 1", | |
| "nct": "NCT05514691", "pmid": "35798700"}, | |
| {"name": "Eteplirsen + tRNA combo", "class": "ASO + Biologic", | |
| "dose": "30 mg/kg/week IV", "route": "IV", | |
| "status": "Off-label combination", | |
| "nct": "NCT01396239", "pmid": "23985596"}, | |
| ], | |
| "U": [ | |
| {"name": "Exon Skipping (Eteplirsen)", "class": "ASO", | |
| "dose": "30 mg/kg weekly", "route": "IV", | |
| "status": "FDA Approved (Exon 51 skip)", | |
| "nct": "NCT01396239", "pmid": "23985596"}, | |
| {"name": "Gene Therapy (Elevidys)", "class": "AAV Gene Therapy", | |
| "dose": "1.33Γ10ΒΉβ΄ vg/kg", "route": "IV infusion", | |
| "status": "FDA Accelerated Approval 2023", | |
| "nct": "NCT03368742", "pmid": "37098242"}, | |
| ], | |
| }, | |
| "evidence": { | |
| "clinvar_prefix": "https://www.ncbi.nlm.nih.gov/clinvar/?term=DMD+nonsense", | |
| "pubmed": [ | |
| {"pmid": "19940257", "title": "Ataluren: nonsense suppression in DMD", "year": 2009, | |
| "url": "https://pubmed.ncbi.nlm.nih.gov/19940257/"}, | |
| {"pmid": "23985596", "title": "Exon-skipping in Duchenne muscular dystrophy", "year": 2013, | |
| "url": "https://pubmed.ncbi.nlm.nih.gov/23985596/"}, | |
| {"pmid": "37098242", "title": "Delandistrogene moxeparvovec gene therapy", "year": 2023, | |
| "url": "https://pubmed.ncbi.nlm.nih.gov/37098242/"}, | |
| ], | |
| }, | |
| }, | |
| "SCN1A": { | |
| "disease": "Dravet Syndrome", | |
| "approved_readthrough": [], | |
| "drugs": { | |
| "C": [ | |
| {"name": "Ataluren (investigational)", "class": "Small Molecule", | |
| "dose": "Research dosing", "route": "Oral", | |
| "status": "No approved readthrough drug β investigational only", | |
| "nct": "NCT04740476", "pmid": "33811808"}, | |
| ], | |
| "A": [ | |
| {"name": "Fenfluramine + NMD Inhibitor", "class": "Combination", | |
| "dose": "0.1β0.35 mg/kg/day", "route": "Oral", | |
| "status": "FDA Approved (Fenfluramine for Dravet) + NMD research", | |
| "nct": "NCT02682927", "pmid": "33811808"}, | |
| ], | |
| "G": [ | |
| {"name": "SCN1A-targeted ASO (STK-001)", "class": "ASO Upregulator", | |
| "dose": "Phase 1/2 dosing", "route": "Intrathecal", | |
| "status": "Phase 2 β Dravet specific", | |
| "nct": "NCT04458259", "pmid": "34819669"}, | |
| ], | |
| "U": [ | |
| {"name": "Fenfluramine + STK-001 + Cannabidiol", "class": "Combination", | |
| "dose": "Multi-drug protocol", "route": "Oral + Intrathecal", | |
| "status": "Clinical trial recommended", | |
| "nct": "NCT04458259", "pmid": "33811808"}, | |
| ], | |
| }, | |
| "evidence": { | |
| "clinvar_prefix": "https://www.ncbi.nlm.nih.gov/clinvar/?term=SCN1A+nonsense", | |
| "pubmed": [ | |
| {"pmid": "33811808", "title": "Dravet syndrome: advances in treatment", "year": 2021, | |
| "url": "https://pubmed.ncbi.nlm.nih.gov/33811808/"}, | |
| {"pmid": "34819669", "title": "Antisense therapy for SCN1A haploinsufficiency", "year": 2021, | |
| "url": "https://pubmed.ncbi.nlm.nih.gov/34819669/"}, | |
| ], | |
| }, | |
| }, | |
| "MECP2": { | |
| "disease": "Rett Syndrome", | |
| "approved_readthrough": [], | |
| "drugs": { | |
| "C": [ | |
| {"name": "Trofinetide (Daybue)", "class": "Synthetic peptide", | |
| "dose": "200 mg/kg BID", "route": "Oral", | |
| "status": "FDA Approved 2023 (symptomatic, not readthrough)", | |
| "nct": "NCT02715115", "pmid": "37141561"}, | |
| {"name": "Ataluren (investigational)", "class": "Small Molecule", | |
| "dose": "Research", "route": "Oral", | |
| "status": "Investigational β no trial data yet for MECP2", | |
| "nct": "N/A", "pmid": "10767574"}, | |
| ], | |
| "A": [ | |
| {"name": "Trofinetide + NMD Inhibitor", "class": "Combination", | |
| "dose": "Research protocol", "route": "Oral", | |
| "status": "Preclinical", | |
| "nct": "N/A", "pmid": "37141561"}, | |
| ], | |
| "G": [ | |
| {"name": "AVXS-201 (AveXis Gene Therapy)", "class": "AAV9 Gene Therapy", | |
| "dose": "IND phase", "route": "Intrathecal", | |
| "status": "Phase 1 Gene Therapy Trial", | |
| "nct": "NCT04300556", "pmid": "31539031"}, | |
| ], | |
| "U": [ | |
| {"name": "AVXS-201 + Trofinetide", "class": "Gene Therapy + Peptide", | |
| "dose": "Combination protocol", "route": "IT + Oral", | |
| "status": "Clinical trial recommended", | |
| "nct": "NCT04300556", "pmid": "31539031"}, | |
| ], | |
| }, | |
| "evidence": { | |
| "clinvar_prefix": "https://www.ncbi.nlm.nih.gov/clinvar/?term=MECP2+nonsense", | |
| "pubmed": [ | |
| {"pmid": "37141561", "title": "Trofinetide for Rett syndrome", "year": 2023, | |
| "url": "https://pubmed.ncbi.nlm.nih.gov/37141561/"}, | |
| {"pmid": "31539031", "title": "Gene therapy for Rett syndrome MECP2", "year": 2019, | |
| "url": "https://pubmed.ncbi.nlm.nih.gov/31539031/"}, | |
| ], | |
| }, | |
| }, | |
| } | |
| # Fallback for any gene not in the disease DB | |
| GENERIC_DRUGS: dict[str, list[dict]] = { | |
| "C": [{"name": "Ataluren (PTC124)", "class": "Small Molecule", | |
| "status": "Compassionate use / disease-specific trial", | |
| "nct": "NCT00803205", "pmid": "19940257"}], | |
| "A": [{"name": "Ataluren + NMD Inhibitor", "class": "Combination", | |
| "status": "Research", "nct": "N/A", "pmid": "24613397"}], | |
| "G": [{"name": "ACE-tRNA (disease-specific)", "class": "Biologic", | |
| "status": "Clinical trial search recommended", | |
| "nct": "NCT05514691", "pmid": "35798700"}], | |
| "U": [{"name": "Multi-modal combination", "class": "Combination", | |
| "status": "Specialist referral required", | |
| "nct": "N/A", "pmid": "15381195"}], | |
| } | |
| ROAD_TYPE_ANALOGIES = { | |
| "C": "Greasing the wheels β the ribosome slides over the stop codon gap.", | |
| "A": "Smoothing the road AND stopping the cleanup crew (NMD pathway) before they arrive.", | |
| "G": "Deploying a crane β the ACE-tRNA lifts the ribosome truck over a sticky wall.", | |
| "U": "Total road reconstruction β multiple therapy crews rebuilding from scratch.", | |
| } | |
| ROAD_TYPES = {"C": "Slippery", "A": "Smooth", "G": "Sticky", "U": "Rough", "T": "Rough"} | |
| ANIMATION_SCENES = { | |
| "C": "scene_slippery", "A": "scene_smooth", | |
| "G": "scene_sticky", "U": "scene_rough", "T": "scene_rough" | |
| } | |
| class DrugRecommender: | |
| """ | |
| Produces a fully evidence-backed TherapyRecommendation for any | |
| gene + RP-Score + +4 nucleotide combination. | |
| """ | |
| def recommend( | |
| self, | |
| gene: str, | |
| rp_score: float, | |
| plus4_base: str, | |
| clinvar_links: list[str] | None = None, | |
| ) -> TherapyRecommendation: | |
| plus4_base = plus4_base.upper().replace("T", "U") | |
| tier = self._tier(rp_score) | |
| gene_upper = gene.upper() | |
| db = DISEASE_DB.get(gene_upper) | |
| drugs = (db["drugs"].get(plus4_base, []) if db else []) or GENERIC_DRUGS.get(plus4_base, []) | |
| # If RP-Score is low, readthrough is unlikely regardless of +4 | |
| if tier == RPTier.LOW: | |
| therapy_class = TherapyClass.NO_APPROVED | |
| rationale = ( | |
| f"RP-Score of {rp_score:.1f} indicates low readthrough probability. " | |
| f"Small molecule readthrough agents are unlikely to be effective at this locus. " | |
| f"Gene therapy, exon skipping, or other modalities are recommended." | |
| ) | |
| drugs = self._low_score_alternatives(gene_upper, plus4_base) | |
| elif tier == RPTier.HIGH: | |
| therapy_class = self._class_from_base(plus4_base) | |
| rationale = ( | |
| f"RP-Score of {rp_score:.1f} indicates strong readthrough potential. " | |
| f"The +4 {plus4_base} ({ROAD_TYPES.get(plus4_base,'Unknown')} road) " | |
| f"supports {therapy_class.value}." | |
| ) | |
| else: # MEDIUM | |
| therapy_class = TherapyClass.COMBINATION | |
| rationale = ( | |
| f"RP-Score of {rp_score:.1f} indicates moderate readthrough potential. " | |
| f"Combination therapy is recommended to maximise efficacy at this locus. " | |
| f"The +4 {plus4_base} context ({ROAD_TYPES.get(plus4_base,'Unknown')} road) " | |
| f"requires both readthrough enhancement and NMD pathway suppression." | |
| ) | |
| # Build evidence bundle | |
| pubmed = (db["evidence"]["pubmed"] if db else []) + [ | |
| {"pmid": "10767574", | |
| "title": "Context-dependent suppression of termination codons in mammals", | |
| "year": 2000, "url": "https://pubmed.ncbi.nlm.nih.gov/10767574/"}, | |
| ] | |
| clinvar = clinvar_links or ( | |
| [db["evidence"]["clinvar_prefix"]] if db else | |
| [f"https://www.ncbi.nlm.nih.gov/clinvar/?term={gene_upper}+nonsense"] | |
| ) | |
| trials = [ | |
| {"nct_id": d["nct"], "drug": d["name"], "status": d["status"], | |
| "url": f"https://clinicaltrials.gov/study/{d['nct']}" if d.get("nct","N/A") != "N/A" else "N/A"} | |
| for d in drugs if d.get("nct","N/A") != "N/A" | |
| ] | |
| has_approved = bool(db and db.get("approved_readthrough")) | |
| fda_note = ( | |
| f"Approved: {', '.join(db['approved_readthrough'])}" if has_approved | |
| else "No approved readthrough therapy β flag for clinical trial search" | |
| ) | |
| evidence = EvidenceBundle( | |
| pubmed_citations = pubmed, | |
| clinvar_links = clinvar, | |
| clinical_trials = trials, | |
| fda_status = fda_note, | |
| biobank_note = ( | |
| f"Population frequency data available via gnomAD: " | |
| f"https://gnomad.broadinstitute.org/gene/{gene_upper}" | |
| ), | |
| ) | |
| return TherapyRecommendation( | |
| gene = gene_upper, | |
| rp_score = rp_score, | |
| rp_tier = tier, | |
| plus4_base = plus4_base, | |
| road_type = ROAD_TYPES.get(plus4_base, "Unknown"), | |
| therapy_class = therapy_class, | |
| primary_drugs = drugs, | |
| analogy = ROAD_TYPE_ANALOGIES.get(plus4_base, ""), | |
| clinical_rationale = rationale, | |
| evidence = evidence, | |
| animation_scene = ANIMATION_SCENES.get(plus4_base, "scene_rough"), | |
| warning = "" if has_approved else | |
| "β No approved readthrough therapy exists for this gene. " | |
| "Results are for research and clinical trial matching only.", | |
| ) | |
| def _tier(score: float) -> RPTier: | |
| if score >= 65: return RPTier.HIGH | |
| if score >= 40: return RPTier.MEDIUM | |
| return RPTier.LOW | |
| def _class_from_base(base: str) -> TherapyClass: | |
| return { | |
| "C": TherapyClass.SMALL_MOLECULE, | |
| "A": TherapyClass.SMALL_PLUS_NMD, | |
| "G": TherapyClass.ACE_TRNA, | |
| "U": TherapyClass.COMBINATION, | |
| }.get(base, TherapyClass.COMBINATION) | |
| def _low_score_alternatives(gene: str, plus4: str) -> list[dict]: | |
| gene_db = DISEASE_DB.get(gene, {}) | |
| if gene == "DMD": | |
| return [{"name": "Elevidys (Gene Therapy)", "class": "AAV Gene Therapy", | |
| "status": "FDA Approved 2023", "nct": "NCT03368742", "pmid": "37098242"}] | |
| if gene == "MECP2": | |
| return [{"name": "AVXS-201", "class": "AAV9 Gene Therapy", | |
| "status": "Phase 1", "nct": "NCT04300556", "pmid": "31539031"}] | |
| return [{"name": "Gene therapy / specialist referral", | |
| "class": "Specialist decision", "status": "Clinical trial search", | |
| "nct": "N/A", "pmid": "15381195"}] | |