File size: 3,807 Bytes
0ccfe4a
 
 
 
ac8f675
0ccfe4a
 
 
 
 
 
 
 
 
 
 
 
 
 
af01504
0ccfe4a
 
 
 
 
2e5367f
 
 
 
 
 
 
 
 
 
 
 
e53bbe5
 
 
 
 
 
0ccfe4a
e53bbe5
 
 
 
6e92226
e53bbe5
 
 
 
 
6e92226
0ccfe4a
 
 
6e92226
 
0ccfe4a
3bfe897
 
 
 
 
 
 
 
 
 
 
 
 
 
0ccfe4a
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
from pathlib import Path

# Models
SYNTHESIS_MODEL = "claude-sonnet-4-6"
EXTRACTION_MODEL = "claude-haiku-4-5-20251001"

# External API endpoints
CTGOV_BASE = "https://clinicaltrials.gov/api/v2/studies"
SEMANTIC_SCHOLAR_BASE = "https://api.semanticscholar.org/graph/v1"
HGNC_REST_BASE = "https://rest.genenames.org"
PUBCHEM_REST_BASE = "https://pubchem.ncbi.nlm.nih.gov/rest/pug"

# Data paths
DATA_DIR = Path(__file__).parent / "data"
PAPERS_PATH = DATA_DIR / "papers" / "papers.jsonl"
TRIALS_PATH = DATA_DIR / "trials" / "trials.jsonl"
ENTITIES_PATH = DATA_DIR / "extracted" / "entities.jsonl"
CANONICAL_IDS_PATH = DATA_DIR / "extracted" / "canonical_ids.json"
EXTRACTION_PROGRESS_PATH = DATA_DIR / "extracted" / ".progress.json"
EXTRACTION_BATCH_STATE_PATH = DATA_DIR / "extracted" / ".batch_state.json"
GRAPH_PICKLE_PATH = DATA_DIR / "graph" / "als_graph.pkl"
GRAPH_JSON_PATH = DATA_DIR / "graph" / "als_graph.json"
CHROMA_DIR = DATA_DIR / "chroma"
CHROMA_COLLECTION = "als_papers"

# Experimental therapy landscape (offline-built, committed to git — small)
LANDSCAPE_PATH = DATA_DIR / "landscape" / "landscape.json"
LANDSCAPE_PROGRESS_PATH = DATA_DIR / "landscape" / ".progress.json"
LANDSCAPE_BATCH_STATE_PATH = DATA_DIR / "landscape" / ".batch_state.json"
THERAPY_CLASSES_PATH = DATA_DIR / "seeds" / "therapy_classes.json"
THERAPY_GOLD_PATH = DATA_DIR / "seeds" / "therapy_gold.json"
# Mechanism classification (v2): frontier model, grounded + multi-label + abstaining.
LANDSCAPE_MODEL = "claude-opus-4-8"
LANDSCAPE_MIN_CONFIDENCE = 0.55   # τ — drop LLM mechanisms below this confidence
LANDSCAPE_XCHECK_MIN_COSINE = 0.20  # BioLORD guard: drop a mechanism whose justification↔class cosine is below this (loose; catches gross mismatch)
LANDSCAPE_EVIDENCE_ABSTRACTS = 4  # top abstracts retrieved per therapy as MoA evidence

# Seed entity files
MANUAL_SEEDS_PATH = DATA_DIR / "seeds" / "manual_seeds.json"
DERIVED_SEEDS_PATH = DATA_DIR / "seeds" / "derived_seeds.json"
SEED_PROMOTION_THRESHOLD = 5   # min papers for entity to become a derived seed
REFRESH_STATE_PATH = DATA_DIR / ".refresh_state.json"

# PubMed ingestion defaults
PUBMED_BASE_QUERY = (
    '"amyotrophic lateral sclerosis"[MeSH Major Topic] '
    "AND hasabstract[text]"
)
PUBMED_DEFAULT_QUERY = PUBMED_BASE_QUERY  # no date cap — fetch all 19k+ ALS papers
PUBMED_REFRESH_QUERY_TEMPLATE = (
    '"amyotrophic lateral sclerosis"[MeSH Major Topic] '
    'AND ("{since_date}"[PDAT]:"3000"[PDAT]) '
    "AND hasabstract[text]"
)
PUBMED_DEFAULT_MAX = 20000
PUBMED_BATCH_SIZE = 200  # PMIDs per Entrez efetch call

# Entity extraction
EXTRACTION_BATCH_SIZE = 20  # papers per Claude call
EXTRACTION_WORKERS = 8      # parallel Claude calls (Haiku limit: 1000 RPM on paid tier)

# RAG — retrieval counts per stage
CHROMA_N_RESULTS = 10          # legacy default (kept for backward compat)
CHROMA_ENTITY_N_RESULTS = 15   # legacy default (kept for backward compat)
RETRIEVAL_SEMANTIC_N = 30      # semantic search candidate pool
RETRIEVAL_ENTITY_N = 30        # entity search candidate pool
RETRIEVAL_ENTITY_QUERY_CAP = 12  # max entity names to query individually

# RRF merge
RRF_K = 10       # lower k → stronger rank differentiation (k=60 is too flat for 30-item lists)
RRF_TOP_N = 20   # candidates passed to cross-encoder

# Cross-encoder reranking
CROSS_ENCODER_MODEL = "cross-encoder/ms-marco-MiniLM-L-6-v2"
CROSS_ENCODER_TOP_N = 15  # final papers sent to Claude for synthesis

# Knowledge graph
KG_EXPANSION_HOPS = 1  # hops for query entity expansion
KG_MIN_EDGE_CONFIDENCE = 0.3  # edges below this are excluded from traversal

# ALS condition synonyms for ClinicalTrials.gov queries
ALS_CONDITION_TERMS = [
    "Amyotrophic Lateral Sclerosis",
    "ALS",
    "Motor Neuron Disease",
    "Lou Gehrig's Disease",
]