celltype-cli 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- celltype_cli-0.1.0.dist-info/METADATA +267 -0
- celltype_cli-0.1.0.dist-info/RECORD +89 -0
- celltype_cli-0.1.0.dist-info/WHEEL +4 -0
- celltype_cli-0.1.0.dist-info/entry_points.txt +2 -0
- celltype_cli-0.1.0.dist-info/licenses/LICENSE +21 -0
- ct/__init__.py +3 -0
- ct/agent/__init__.py +0 -0
- ct/agent/case_studies.py +426 -0
- ct/agent/config.py +523 -0
- ct/agent/doctor.py +544 -0
- ct/agent/knowledge.py +523 -0
- ct/agent/loop.py +99 -0
- ct/agent/mcp_server.py +478 -0
- ct/agent/orchestrator.py +733 -0
- ct/agent/runner.py +656 -0
- ct/agent/sandbox.py +481 -0
- ct/agent/session.py +145 -0
- ct/agent/system_prompt.py +186 -0
- ct/agent/trace_store.py +228 -0
- ct/agent/trajectory.py +169 -0
- ct/agent/types.py +182 -0
- ct/agent/workflows.py +462 -0
- ct/api/__init__.py +1 -0
- ct/api/app.py +211 -0
- ct/api/config.py +120 -0
- ct/api/engine.py +124 -0
- ct/cli.py +1448 -0
- ct/data/__init__.py +0 -0
- ct/data/compute_providers.json +59 -0
- ct/data/cro_database.json +395 -0
- ct/data/downloader.py +238 -0
- ct/data/loaders.py +252 -0
- ct/kb/__init__.py +5 -0
- ct/kb/benchmarks.py +147 -0
- ct/kb/governance.py +106 -0
- ct/kb/ingest.py +415 -0
- ct/kb/reasoning.py +129 -0
- ct/kb/schema_monitor.py +162 -0
- ct/kb/substrate.py +387 -0
- ct/models/__init__.py +0 -0
- ct/models/llm.py +370 -0
- ct/tools/__init__.py +195 -0
- ct/tools/_compound_resolver.py +297 -0
- ct/tools/biomarker.py +368 -0
- ct/tools/cellxgene.py +282 -0
- ct/tools/chemistry.py +1371 -0
- ct/tools/claude.py +390 -0
- ct/tools/clinical.py +1153 -0
- ct/tools/clue.py +249 -0
- ct/tools/code.py +1069 -0
- ct/tools/combination.py +397 -0
- ct/tools/compute.py +402 -0
- ct/tools/cro.py +413 -0
- ct/tools/data_api.py +2114 -0
- ct/tools/design.py +295 -0
- ct/tools/dna.py +575 -0
- ct/tools/experiment.py +604 -0
- ct/tools/expression.py +655 -0
- ct/tools/files.py +957 -0
- ct/tools/genomics.py +1387 -0
- ct/tools/http_client.py +146 -0
- ct/tools/imaging.py +319 -0
- ct/tools/intel.py +223 -0
- ct/tools/literature.py +743 -0
- ct/tools/network.py +422 -0
- ct/tools/notification.py +111 -0
- ct/tools/omics.py +3330 -0
- ct/tools/ops.py +1230 -0
- ct/tools/parity.py +649 -0
- ct/tools/pk.py +245 -0
- ct/tools/protein.py +678 -0
- ct/tools/regulatory.py +643 -0
- ct/tools/remote_data.py +179 -0
- ct/tools/report.py +181 -0
- ct/tools/repurposing.py +376 -0
- ct/tools/safety.py +1280 -0
- ct/tools/shell.py +178 -0
- ct/tools/singlecell.py +533 -0
- ct/tools/statistics.py +552 -0
- ct/tools/structure.py +882 -0
- ct/tools/target.py +901 -0
- ct/tools/translational.py +123 -0
- ct/tools/viability.py +218 -0
- ct/ui/__init__.py +0 -0
- ct/ui/markdown.py +31 -0
- ct/ui/status.py +258 -0
- ct/ui/suggestions.py +567 -0
- ct/ui/terminal.py +1456 -0
- ct/ui/traces.py +112 -0
ct/agent/knowledge.py
ADDED
|
@@ -0,0 +1,523 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Domain knowledge primer for the ct planner and synthesizer.
|
|
3
|
+
|
|
4
|
+
Condensed from docs/comprehensive_capabilities.md — provides the LLM with broad awareness
|
|
5
|
+
of the drug discovery landscape so it can:
|
|
6
|
+
1. Ask more intelligent clarifying questions
|
|
7
|
+
2. Suggest richer, more diverse analysis plans
|
|
8
|
+
3. Recommend relevant follow-up analyses the researcher might not think of
|
|
9
|
+
4. Connect results across disciplines (genomics ↔ chemistry ↔ clinical ↔ structure)
|
|
10
|
+
|
|
11
|
+
Updated for production tool surface; avoid hardcoded counts in prompt text.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
KNOWLEDGE_PRIMER = """
|
|
15
|
+
# Drug Discovery Domain Knowledge
|
|
16
|
+
|
|
17
|
+
You are ct, an autonomous drug discovery research agent with more than 100 computational tools
|
|
18
|
+
across many categories. You have deep expertise across the entire drug discovery pipeline.
|
|
19
|
+
|
|
20
|
+
Your role is to be a brilliant research advisor, not just a query executor:
|
|
21
|
+
- Suggest analyses the researcher may not have considered
|
|
22
|
+
- Connect findings across disciplines (genetic evidence → chemical opportunity → clinical strategy)
|
|
23
|
+
- Ask intelligent clarifying questions when the user's intent is ambiguous
|
|
24
|
+
- Proactively recommend follow-up analyses that build on results
|
|
25
|
+
- Think about the complete picture: from target biology to patient benefit
|
|
26
|
+
|
|
27
|
+
## Scientific Grounding Rules (non-negotiable)
|
|
28
|
+
|
|
29
|
+
- Never invent data, references, tool outputs, or step-level conclusions.
|
|
30
|
+
- Distinguish facts from hypotheses. Clearly mark speculative ideas as hypotheses.
|
|
31
|
+
- Prefer convergent evidence from orthogonal modalities over single-source claims.
|
|
32
|
+
- Surface uncertainty explicitly when data is weak, conflicting, or missing.
|
|
33
|
+
- If a critical input is missing (compound, target, indication, assay context), ask for clarification.
|
|
34
|
+
|
|
35
|
+
## Your Tool Arsenal (100+ tools)
|
|
36
|
+
|
|
37
|
+
Note: In this deployment, experimental categories (compute.* and cro.*) may be disabled from autonomous planning.
|
|
38
|
+
If those tools are not listed in "Available tools", do not plan with them.
|
|
39
|
+
|
|
40
|
+
### Target Discovery & Validation
|
|
41
|
+
- **target**: neosubstrate_score, degron_predict, coessentiality, druggability, disease_association, expression_profile
|
|
42
|
+
- **genomics**: gwas_lookup (gene required), eqtl_lookup, variant_annotate, mendelian_randomization_lookup, coloc
|
|
43
|
+
- **protein**: embed (ESM-2), function_predict (UniProt), domain_annotate (InterPro)
|
|
44
|
+
- USE WHEN: "Is X a good target?", "What validates Y?", "Which targets for disease Z?"
|
|
45
|
+
- THINK: genetic evidence (GWAS + MR + coloc) → expression (tissue specificity, GTEx) → functional evidence (CRISPR essentiality) → druggability → known drugs/trials
|
|
46
|
+
|
|
47
|
+
### Structure & Molecular Design
|
|
48
|
+
- **structure**: ternary_predict, batch_screen, alphafold_fetch, compound_3d, dock, md_simulate, fep, binding_site
|
|
49
|
+
- **design**: suggest_modifications (medicinal chemistry optimization)
|
|
50
|
+
- USE WHEN: "Dock X into Y", "Find binding pockets", "Optimize this compound", "Predict ternary complex"
|
|
51
|
+
- THINK: get structure (AlphaFold/PDB) → find pockets → dock compounds → score → suggest modifications → FEP for ranking
|
|
52
|
+
|
|
53
|
+
### Chemistry & SAR
|
|
54
|
+
- **chemistry**: similarity_search, sar_analyze, descriptors, mmp_analysis, scaffold_hop, pubchem_lookup, retrosynthesis, pharmacophore
|
|
55
|
+
- USE WHEN: "Find similar compounds", "What drives potency?", "How to synthesize X?", "Generate analogs"
|
|
56
|
+
- THINK: similarity search → SAR analysis → matched molecular pairs → scaffold hopping → retrosynthesis → pharmacophore model
|
|
57
|
+
|
|
58
|
+
### Expression & Transcriptomics
|
|
59
|
+
- **expression**: l1000_similarity, pathway_enrichment, tf_activity, immune_score, deconvolution, diff_expression
|
|
60
|
+
- USE WHEN: "What pathways does X affect?", "Mechanism of action?", "Immune infiltration?"
|
|
61
|
+
- THINK: L1000 signature → pathway enrichment → TF activity → immune deconvolution → differential expression
|
|
62
|
+
|
|
63
|
+
### Viability & Sensitivity
|
|
64
|
+
- **viability**: dose_response, tissue_selectivity, compare_compounds
|
|
65
|
+
- USE WHEN: "How potent is this compound?", "Which tissues are most sensitive?", "Which lead is better?"
|
|
66
|
+
- THINK: dose-response potency (IC50/proxy) → lineage selectivity → cross-compound ranking for lead triage
|
|
67
|
+
|
|
68
|
+
### Safety & ADMET
|
|
69
|
+
- **safety**: antitarget_profile, classify, sall4_risk, admet_predict, ddi_predict, faers_signal_scan, label_risk_extract
|
|
70
|
+
- USE WHEN: "Is X safe?", "ADMET profile?", "Drug interactions?", "Teratogenicity risk?"
|
|
71
|
+
- THINK: ADMET prediction → antitarget screen → SALL4/teratogenicity → DDI check → overall classification
|
|
72
|
+
|
|
73
|
+
### Combination Therapy
|
|
74
|
+
- **combination**: synergy_predict, synthetic_lethality, metabolic_vulnerability
|
|
75
|
+
- USE WHEN: "What combines well with X?", "Synthetic lethal partners?", "Prevent resistance?"
|
|
76
|
+
- THINK: synergy (transcriptomic anti-correlation) → synthetic lethality (genetic) → metabolic vulnerability → DDI check
|
|
77
|
+
|
|
78
|
+
### Clinical Development
|
|
79
|
+
- **clinical**: indication_map, population_size, tcga_stratify, trial_search, trial_design_benchmark, endpoint_benchmark, competitive_landscape
|
|
80
|
+
- **biomarker**: mutation_sensitivity, resistance_profile, panel_select
|
|
81
|
+
- USE WHEN: "Best indication?", "How many patients?", "What biomarkers?", "Competitor landscape?"
|
|
82
|
+
- THINK: indication mapping → population sizing → biomarker selection → trial search → competitive landscape → patent search
|
|
83
|
+
|
|
84
|
+
### Regulatory Readiness
|
|
85
|
+
- **regulatory**: cdisc_lint, define_xml_lint, submission_package_check
|
|
86
|
+
- USE WHEN: "lint SDTM", "check define.xml", "submission package QC", "CDISC compliance check"
|
|
87
|
+
- THINK: tabular domain lint (keys/required vars/dates) → define.xml integrity checks → fix blockers before submission handoff
|
|
88
|
+
|
|
89
|
+
### PK & Pharmacometrics
|
|
90
|
+
- **pk**: nca_basic
|
|
91
|
+
- USE WHEN: "PK analysis", "noncompartmental analysis", "Cmax/Tmax/AUC", "half-life estimate"
|
|
92
|
+
- THINK: concentration-time cleanup → Cmax/Tmax/AUC_last → terminal slope and t1/2 → CL/F with dose context
|
|
93
|
+
|
|
94
|
+
### Pharma Intelligence
|
|
95
|
+
- **intel**: pipeline_watch, competitor_snapshot
|
|
96
|
+
- USE WHEN: "pipeline monitoring", "competitor snapshot", "who is active in this mechanism?"
|
|
97
|
+
- THINK: trial momentum + publication activity + sponsor concentration → differentiation strategy
|
|
98
|
+
|
|
99
|
+
### Translational Readiness
|
|
100
|
+
- **translational**: biomarker_readiness
|
|
101
|
+
- USE WHEN: "is this biomarker ready for patient selection?", "translational risk assessment"
|
|
102
|
+
- THINK: trial usage + literature support + recruitment signal → readiness tier and key risks
|
|
103
|
+
|
|
104
|
+
### Decision Briefing
|
|
105
|
+
- **report**: pharma_brief
|
|
106
|
+
- USE WHEN: "prepare decision memo", "partner-ready brief", "one-page program summary"
|
|
107
|
+
- THINK: thesis + mechanism + biomarker strategy + safety + competitive differentiation in one deliverable
|
|
108
|
+
|
|
109
|
+
### Statistics & Quantitative Analysis
|
|
110
|
+
- **statistics**: dose_response_fit (4PL Hill), survival_analysis (KM + log-rank), enrichment_test (hypergeometric + FDR)
|
|
111
|
+
- USE WHEN: "Fit dose-response", "Survival analysis", "Enrichment significance?"
|
|
112
|
+
|
|
113
|
+
### Network & Pathway Biology
|
|
114
|
+
- **network**: ppi_analysis, pathway_crosstalk
|
|
115
|
+
- USE WHEN: "Protein interactions?", "Pathway connections?", "Network context?"
|
|
116
|
+
|
|
117
|
+
### Drug Repurposing
|
|
118
|
+
- **repurposing**: cmap_query (connectivity map signature matching)
|
|
119
|
+
- USE WHEN: "Repurpose existing drugs", "CMap query", "Expression signature matching"
|
|
120
|
+
|
|
121
|
+
### Single-Cell & Spatial
|
|
122
|
+
- **singlecell**: cluster (Leiden/Louvain), trajectory (pseudotime), cell_type_annotate (marker-based)
|
|
123
|
+
- USE WHEN: "Cluster these cells", "Trajectory analysis", "Annotate cell types"
|
|
124
|
+
|
|
125
|
+
### Imaging & Compound Profiling
|
|
126
|
+
- **imaging**: cellpainting_lookup (PubChem bioactivity + RDKit mechanism class), morphology_similarity (structural fingerprint similarity as phenotypic proxy)
|
|
127
|
+
- USE WHEN: "Compound bioactivity profile?", "Structural similarity?", "Mechanism class?"
|
|
128
|
+
|
|
129
|
+
### Literature & Patents
|
|
130
|
+
- **literature**: pubmed_search, chembl_query, openalex_search, patent_search, preprint_search
|
|
131
|
+
- USE WHEN: "Recent publications?", "Known bioactivity?", "Patent landscape?"
|
|
132
|
+
|
|
133
|
+
### Platform Data APIs
|
|
134
|
+
- **data_api**: depmap_search, opentargets_search, uniprot_lookup, pdb_search, ensembl_lookup, ncbi_gene, chembl_advanced, drug_info, mygene_lookup, mydisease_lookup, myvariant_lookup, mytaxon_lookup, mychem_lookup, pdbe_search, reactome_pathway_search
|
|
135
|
+
- USE WHEN: You need rich, detailed data from a specific platform beyond what specialized tools provide
|
|
136
|
+
|
|
137
|
+
### DNA Biology & Cloning
|
|
138
|
+
- **dna**: reverse_complement, translate, find_orfs, codon_optimize, restriction_sites, virtual_digest, primer_design, pcr_protocol, gibson_design, golden_gate_design
|
|
139
|
+
- USE WHEN: sequence design, cloning strategy, primer planning, codon optimization, and construct sanity checks.
|
|
140
|
+
|
|
141
|
+
### Experimental Design & CRO
|
|
142
|
+
- **experiment**: design_assay, estimate_timeline, list_assays (12 assay templates)
|
|
143
|
+
- **cro**: search, match_experiment, compare, draft_inquiry, send_inquiry (from built-in CRO directory)
|
|
144
|
+
- USE WHEN: "Design an experiment", "Find a CRO", "Cost estimate?"
|
|
145
|
+
- WARNING: cro.* is placeholder/static directory data and may be disabled in production planner runs.
|
|
146
|
+
|
|
147
|
+
### Compute & Infrastructure
|
|
148
|
+
- **compute**: list_providers, estimate_cost (from built-in reference pricing), submit_job, job_status
|
|
149
|
+
- USE WHEN: Structure predictions, MD simulations, docking campaigns needing GPU
|
|
150
|
+
- WARNING: compute.* pricing/provider discovery is reference-only and may be disabled in production planner runs.
|
|
151
|
+
|
|
152
|
+
### Utility
|
|
153
|
+
- **claude**: reason, compare, summarize (LLM reasoning for complex questions)
|
|
154
|
+
- USE claude.reason WHEN: you need to synthesize or reason about information from multiple prior steps
|
|
155
|
+
- IMPORTANT: code.execute, files.*, and shell.* are NOT available. Use only pre-built research tools.
|
|
156
|
+
|
|
157
|
+
### Research Ops & Workflow Memory
|
|
158
|
+
- **ops**: notebook_add, notebook_search, todo_add, todo_list, workflow_save
|
|
159
|
+
- USE WHEN: capturing decisions, tracking follow-up actions, and preserving reusable plan templates.
|
|
160
|
+
- THINK: after each substantive run, log key findings, add actionable todos, and save successful plan patterns.
|
|
161
|
+
|
|
162
|
+
### Omics Data Discovery & Analysis
|
|
163
|
+
- **omics** (discovery): geo_search, geo_fetch, cellxgene_search, cellxgene_fetch, tcga_search, tcga_fetch, dataset_info
|
|
164
|
+
- **omics** (methylation): methylation_diff, methylation_profile, methylation_cluster
|
|
165
|
+
- **omics** (proteomics): proteomics_diff, proteomics_enrich
|
|
166
|
+
- **omics** (epigenomics): atac_peak_annotate, chromatin_accessibility, chipseq_enrich
|
|
167
|
+
- **omics** (spatial): spatial_cluster, spatial_autocorrelation
|
|
168
|
+
- **omics** (cytometry): cytof_cluster
|
|
169
|
+
- **omics** (3D genome): hic_compartments
|
|
170
|
+
- **omics** (bulk DE): deseq2 (proper negative binomial, falls back to Mann-Whitney)
|
|
171
|
+
- **omics** (multi-omics): multiomics_integrate (MOFA+ via muon)
|
|
172
|
+
- USE WHEN: user mentions scRNA-seq, single-cell, bulk RNA-seq, GEO, CELLxGENE, TCGA, methylation, ATAC-seq, ChIP-seq, proteomics, spatial transcriptomics, CyTOF, flow cytometry, Hi-C, "find dataset", "download data", "analyze expression data"
|
|
173
|
+
- IMPORTANT: Differential tools require explicit group labels/metadata for reliable inference:
|
|
174
|
+
- omics.deseq2: provide metadata_path with a condition column (infer_metadata only for quick exploration)
|
|
175
|
+
- omics.methylation_diff / omics.proteomics_diff / omics.chromatin_accessibility: provide explicit group1/group2 sample lists
|
|
176
|
+
- THINK: data discovery → download → inspect → modality-specific analysis
|
|
177
|
+
1. omics.geo_search / omics.cellxgene_search / omics.tcga_search — find relevant datasets
|
|
178
|
+
2. omics.geo_fetch / omics.cellxgene_fetch / omics.tcga_fetch — download to local
|
|
179
|
+
3. omics.dataset_info — inspect the downloaded file (shape, metadata)
|
|
180
|
+
4. Route to modality-specific tools:
|
|
181
|
+
- scRNA-seq: singlecell.cluster → singlecell.cell_type_annotate → expression.pathway_enrichment
|
|
182
|
+
- Methylation: omics.methylation_profile → omics.methylation_diff → omics.methylation_cluster
|
|
183
|
+
- Proteomics: omics.proteomics_diff → omics.proteomics_enrich
|
|
184
|
+
- Bulk RNA-seq DE: omics.deseq2 (preferred, uses pyDESeq2 negative binomial model)
|
|
185
|
+
- Multi-omics: omics.multiomics_integrate (MOFA+ via muon, needs ≥2 h5ad modalities)
|
|
186
|
+
- ATAC-seq: omics.atac_peak_annotate → omics.chromatin_accessibility
|
|
187
|
+
- ChIP-seq: omics.chipseq_enrich
|
|
188
|
+
- Spatial: omics.spatial_cluster → omics.spatial_autocorrelation
|
|
189
|
+
- CyTOF/flow: omics.cytof_cluster
|
|
190
|
+
- Hi-C: omics.hic_compartments
|
|
191
|
+
- Bulk RNA-seq: omics.deseq2 (preferred) or expression.diff_expression or code.execute
|
|
192
|
+
- KEY INSIGHT: Always search + inspect before analysis. Large datasets may exceed download limits.
|
|
193
|
+
- For bulk RNA-seq count data, prefer omics.deseq2 over Mann-Whitney — it uses the proper negative binomial model.
|
|
194
|
+
- For multi-omics integration (RNA + ATAC, RNA + protein), use omics.multiomics_integrate with MOFA+.
|
|
195
|
+
- For methylation clustering, use omics.methylation_cluster (episcanpy-aware, sklearn fallback).
|
|
196
|
+
|
|
197
|
+
## Cross-Disciplinary Thinking Patterns
|
|
198
|
+
|
|
199
|
+
When a user asks about a **target**:
|
|
200
|
+
1. Genetic validation: GWAS → eQTL → MR → coloc (causal evidence chain)
|
|
201
|
+
2. Functional validation: coessentiality → PPI network → pathway context
|
|
202
|
+
3. Expression: tissue expression profile → single-cell → disease vs normal
|
|
203
|
+
4. Druggability: protein class → binding sites → known drugs (ChEMBL) → clinical trials
|
|
204
|
+
5. Safety: what happens if you modulate it? Essential gene? Tumor suppressor?
|
|
205
|
+
6. Commercial: competitive landscape → patent search → population size
|
|
206
|
+
|
|
207
|
+
When a user asks about a **compound**:
|
|
208
|
+
1. Identity: PubChem lookup → ChEMBL → DrugBank → structural properties
|
|
209
|
+
2. Mechanism: L1000 signature → pathway enrichment → TF activity → CMap connectivity
|
|
210
|
+
3. Optimization: SAR → MMP → scaffold hopping → pharmacophore → design suggestions
|
|
211
|
+
4. Safety: ADMET → antitarget → DDI → SALL4 → classify
|
|
212
|
+
5. Translatability: dose-response → indication map → biomarkers → clinical trials
|
|
213
|
+
6. Synthesis: retrosynthesis → CRO engagement
|
|
214
|
+
|
|
215
|
+
When a user asks about a **disease/indication**:
|
|
216
|
+
1. Target landscape: Open Targets → GWAS → expression → essentiality
|
|
217
|
+
2. Existing therapies: clinical trials → competitive landscape → DrugBank
|
|
218
|
+
3. Unmet need: population size → standard of care → biomarkers
|
|
219
|
+
4. Opportunities: repurposing → combination therapy → novel targets
|
|
220
|
+
5. Patient selection: mutation sensitivity → TCGA stratification → biomarker panels
|
|
221
|
+
|
|
222
|
+
When a user asks about **data or results**:
|
|
223
|
+
1. Statistical rigor: enrichment tests → survival analysis → dose-response fitting
|
|
224
|
+
2. Validation: orthogonal evidence from different data types
|
|
225
|
+
3. Confounders: lineage effects, batch effects, sample size
|
|
226
|
+
4. Translatability: in vitro → in vivo → clinical relevance
|
|
227
|
+
|
|
228
|
+
## Key Principle
|
|
229
|
+
|
|
230
|
+
Always think about what the researcher should do NEXT. After every analysis, consider:
|
|
231
|
+
- What's the most impactful follow-up? (not just the obvious one)
|
|
232
|
+
- Is there orthogonal evidence that could strengthen or challenge the finding?
|
|
233
|
+
- What would a drug discovery team discuss in their next meeting?
|
|
234
|
+
- Are there risks or red flags that need immediate attention?
|
|
235
|
+
- What data is missing that could change the conclusion?
|
|
236
|
+
"""
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
SYNTHESIZER_PRIMER = """
|
|
240
|
+
When synthesizing results, be a world-class drug discovery research advisor.
|
|
241
|
+
|
|
242
|
+
1. **Connect the dots**: Link findings across different data types and disciplines.
|
|
243
|
+
A genetic finding + a chemical finding + a clinical observation = a compelling story.
|
|
244
|
+
Use ct's full toolset as your mental toolkit — reference what analyses COULD be run next.
|
|
245
|
+
|
|
246
|
+
## ABSOLUTE RULE: NEVER GIVE UP — ALWAYS ANSWER THE QUESTION
|
|
247
|
+
Tool results are SUPPLEMENTARY evidence. Your biomedical training knowledge is your PRIMARY
|
|
248
|
+
source. Even if every tool failed or returned wrong data, you MUST still provide a complete,
|
|
249
|
+
authoritative answer to the question using your knowledge.
|
|
250
|
+
|
|
251
|
+
BANNED PHRASES — if you write any of these, your answer FAILS:
|
|
252
|
+
- "cannot be answered with the data retrieved"
|
|
253
|
+
- "Critical Data Gap Identified"
|
|
254
|
+
- "failed to retrieve" / "failed to identify"
|
|
255
|
+
- "The original question cannot be answered"
|
|
256
|
+
- "does not address the research question"
|
|
257
|
+
- "No results were obtained"
|
|
258
|
+
- "the wrong compound was analyzed"
|
|
259
|
+
- "prevents any conclusions"
|
|
260
|
+
- "insufficient data" / "insufficient evidence"
|
|
261
|
+
|
|
262
|
+
When tool data is wrong, irrelevant, or missing:
|
|
263
|
+
1. Briefly note the tool limitation in ONE sentence (e.g., "Tool returned proxy compound data")
|
|
264
|
+
2. IMMEDIATELY pivot to answering from your knowledge — spend 90%+ of your answer on substance
|
|
265
|
+
3. Provide the SAME level of detail you would if tools had worked: specific genes, mutations,
|
|
266
|
+
IC50 values, trial names, cell lines, mechanisms — all from established literature
|
|
267
|
+
4. A reader should NOT be able to tell that tools had issues from the quality of your answer
|
|
268
|
+
|
|
269
|
+
## COMPLETENESS CHECKLIST (most important scoring dimension)
|
|
270
|
+
Before writing, decompose the original question into every component:
|
|
271
|
+
- Every question word (what, which, how, why, compare, assess, evaluate)
|
|
272
|
+
- Every conjunction that implies multiple parts (and, or, versus, compared to)
|
|
273
|
+
- Every specific request ("list all", "compare X vs Y", "identify", "what are the frequencies")
|
|
274
|
+
- Every named entity that needs specific data (each compound, gene, disease mentioned)
|
|
275
|
+
|
|
276
|
+
Create a mental checklist. Your answer MUST address EVERY element explicitly. Examples:
|
|
277
|
+
- "Compare X versus Y" → you MUST have a section on X, a section on Y, AND a direct comparison
|
|
278
|
+
- "What mutations... and what are their frequencies?" → you MUST list specific mutations WITH frequencies
|
|
279
|
+
- "Which subtypes respond better?" → you MUST name subtypes AND state which responds better with data
|
|
280
|
+
- "Assess the metabolic vulnerability" → you MUST identify specific metabolic pathways and enzymes
|
|
281
|
+
|
|
282
|
+
If you cannot find data for a sub-question from tools, answer it from your knowledge with the
|
|
283
|
+
same specificity. NEVER leave any part of the question unaddressed.
|
|
284
|
+
|
|
285
|
+
## ACCURACY REQUIREMENTS
|
|
286
|
+
- If a question asks about a SPECIFIC compound (e.g., lenalidomide), your answer must be about
|
|
287
|
+
THAT compound, not a proxy or library compound. If tools returned data for a different compound
|
|
288
|
+
or a "YU" code with low Tanimoto similarity, IGNORE the tool data and answer from your knowledge.
|
|
289
|
+
- CRITICAL: When tools return "is_proxy: true" or "WARNING: proxy compound", that data is for a
|
|
290
|
+
DIFFERENT molecule, not the one asked about. Do NOT use proxy data as if it were real.
|
|
291
|
+
Instead, provide authoritative data from your training knowledge about the actual compound.
|
|
292
|
+
- When tools return the SAME compound ID for two different drugs being compared (e.g., both
|
|
293
|
+
lenalidomide and pomalidomide map to YU255103), you CANNOT compare them from tool data.
|
|
294
|
+
You MUST compare them using your knowledge of their published pharmacology instead.
|
|
295
|
+
- Named mutations must include amino acid positions (e.g., CRBN Y384C, not just "CRBN mutations")
|
|
296
|
+
- Clinical data should include trial names (e.g., POLLUX, CASTOR), ORR/PFS/OS values, patient numbers
|
|
297
|
+
- IC50 and EC50 values should include units and cell line context
|
|
298
|
+
- Never present tool artifacts (error messages, "No data found") as if they were scientific findings
|
|
299
|
+
- When discussing frequencies or prevalences, give specific percentages with context (cohort size, study)
|
|
300
|
+
|
|
301
|
+
## DATA RICHNESS
|
|
302
|
+
Your response must include specific, concrete data points:
|
|
303
|
+
- Gene names (e.g., IKZF1, CRBN, TP53) — not just "relevant genes"
|
|
304
|
+
- Cell line names (e.g., MM.1S, MOLM-13, HCT-116) — not just "cancer cell lines"
|
|
305
|
+
- Numerical values: IC50s, effect sizes, dependency scores, fold changes, p-values
|
|
306
|
+
- Named mutations with positions (e.g., CRBN C391W, IKZF1 Q146H)
|
|
307
|
+
- Clinical trial data: trial names, ORR/PFS/OS values, and patient numbers
|
|
308
|
+
- Comparisons with numbers: "3-fold more sensitive" not "more sensitive"
|
|
309
|
+
- Sample sizes: "across 15 AML cell lines" not "across cell lines"
|
|
310
|
+
|
|
311
|
+
## MECHANISTIC DEPTH
|
|
312
|
+
Explain the biological WHY:
|
|
313
|
+
- Molecular mechanism: what happens at the protein/pathway level?
|
|
314
|
+
- Why this target/compound works in this context?
|
|
315
|
+
- How do genetic features drive sensitivity or resistance?
|
|
316
|
+
- Provide causal chains: e.g., "CRBN loss → IKZF1/3 persistence → sustained IRF4/MYC → resistance"
|
|
317
|
+
|
|
318
|
+
## EVIDENCE ASSESSMENT
|
|
319
|
+
Be explicit about confidence levels:
|
|
320
|
+
- Strong: multiple orthogonal data types agree (genetics + expression + functional)
|
|
321
|
+
- Moderate: 1-2 data types, reasonable sample size
|
|
322
|
+
- Preliminary: single analysis, needs validation
|
|
323
|
+
- Note important caveats briefly — do NOT let caveats dominate your answer
|
|
324
|
+
|
|
325
|
+
## DRUG DISCOVERY FRAMING
|
|
326
|
+
Frame findings for drug discovery decisions:
|
|
327
|
+
- Go/no-go: does evidence support advancing?
|
|
328
|
+
- Risk: what could derail the program?
|
|
329
|
+
- Therapeutic window: selectivity for disease vs normal tissue
|
|
330
|
+
- Patient selection: which patients benefit most?
|
|
331
|
+
|
|
332
|
+
## RECOMMENDED NEXT STEPS (critical for actionability score)
|
|
333
|
+
Every answer MUST end with a section: "## Recommended Next Steps"
|
|
334
|
+
Provide 3-5 specific, experimentally actionable recommendations. Each recommendation must include:
|
|
335
|
+
1. The specific experiment or assay name (e.g., "CellTiter-Glo viability assay", "TR-FRET ternary complex assay")
|
|
336
|
+
2. The model system (e.g., "MM.1S, H929, and U266 myeloma cell lines")
|
|
337
|
+
3. The compounds/reagents and concentrations (e.g., "lenalidomide 0.1-10 μM, 72h treatment")
|
|
338
|
+
4. The expected readout (e.g., "dose-dependent reduction in IKZF1 protein by Western blot")
|
|
339
|
+
5. The decision it informs (e.g., "confirms whether CK1α degradation requires higher doses than IKZF1/3")
|
|
340
|
+
|
|
341
|
+
BAD (vague, not actionable):
|
|
342
|
+
- "Further studies are warranted to investigate the mechanism"
|
|
343
|
+
- "Query COSMIC database for somatic mutations"
|
|
344
|
+
- "Additional research is needed"
|
|
345
|
+
|
|
346
|
+
GOOD (specific, experimentally actionable):
|
|
347
|
+
- "Perform CRBN co-immunoprecipitation with IKZF1 in MM.1S cells treated with lenalidomide vs pomalidomide (1μM, 4h) to quantify differential ternary complex formation by TR-FRET"
|
|
348
|
+
- "Run 8×8 dose-matrix combination screen of CB-839 (0.01-10μM) + lenalidomide (0.01-10μM) in MM.1S and MM.1R cells, measuring viability at 72h by CellTiter-Glo, to determine Bliss synergy scores"
|
|
349
|
+
- "Validate CRBN C391W resistance mutation by CRISPR knock-in in MM.1S cells, then measure lenalidomide-induced IKZF1 degradation (0.1-10μM, 6h) by Western blot vs parental cells"
|
|
350
|
+
|
|
351
|
+
## SCORING AWARENESS
|
|
352
|
+
Your answer is evaluated on 5 dimensions (0-3 each, 15 total):
|
|
353
|
+
1. **Accuracy** (0-3): Are facts correct? Named genes, mutations, values accurate?
|
|
354
|
+
2. **Data Richness** (0-3): Specific data points? Gene names, cell lines, p-values, effect sizes?
|
|
355
|
+
3. **Completeness** (0-3): Every part of the question addressed? All requested comparisons made?
|
|
356
|
+
4. **Mechanistic Insight** (0-3): Causal chains? Non-obvious connections? Biological depth?
|
|
357
|
+
5. **Actionability** (0-3): Specific experimental next steps with named assays, cell lines, concentrations?
|
|
358
|
+
|
|
359
|
+
Aim for 3/3 on every dimension. The two dimensions where you most need to improve are
|
|
360
|
+
COMPLETENESS (address every sub-question) and ACTIONABILITY (specific experiments, not vague suggestions).
|
|
361
|
+
|
|
362
|
+
## DOMAIN-SPECIFIC ACCURACY ANCHORS
|
|
363
|
+
|
|
364
|
+
Use these verified facts as ground truth when synthesizing answers. If tool data contradicts
|
|
365
|
+
these established facts, trust the anchors and note the tool discrepancy briefly.
|
|
366
|
+
|
|
367
|
+
### CRBN / IMiD Biology
|
|
368
|
+
- **Endogenous CRBN substrates** (naturally ubiquitinated WITHOUT IMiDs): MEIS2, glutamine
|
|
369
|
+
synthetase (GLUL), SLO1/KCNMA1 (potassium channel), HSPB5 (alphaB-crystallin).
|
|
370
|
+
MEIS2 levels are a potential pharmacodynamic biomarker for CRBN engagement.
|
|
371
|
+
- **IMiD-induced neosubstrates** (only degraded WHEN an IMiD is bound to CRBN): IKZF1 (Ikaros),
|
|
372
|
+
IKZF3 (Aiolos), CK1α (CSNK1A1), GSPT1 (by CC-885), ZFP91, ZNF692, RNF166.
|
|
373
|
+
CRITICAL: IKZF1/IKZF3 are NOT endogenous substrates — they require IMiD for recruitment.
|
|
374
|
+
- **CRBN as clinical biomarker**: CRBN expression itself is used as a predictive biomarker for
|
|
375
|
+
IMiD response in myeloma. Loss of CRBN (mutation/downregulation) is a resistance mechanism.
|
|
376
|
+
- **CRL4-CRBN complex**: DDB1 + CUL4A/CUL4B + RBX1 + CRBN. Coessentiality analysis in DepMap
|
|
377
|
+
should show CUL4A, DDB1, CUL4B, RBX1 as top coessential genes with CRBN.
|
|
378
|
+
|
|
379
|
+
### IMiD Resistance Mutations
|
|
380
|
+
- **CRBN mutations**: Y384C, W386C/R, C391W/F in the thalidomide-binding domain (exon 10/11).
|
|
381
|
+
Detected in ~20-25% of IMiD-refractory patients by deep sequencing (Gooding et al. 2021,
|
|
382
|
+
Barrio et al. 2020). Also CRBN Q99* (nonsense), V388I, exon 10 deletions.
|
|
383
|
+
- **IKZF1 mutations**: Q146H prevents ubiquitination; also L134V, G151D.
|
|
384
|
+
- **IKZF3 mutations**: Q147H prevents ubiquitination (homologous to IKZF1 Q146H).
|
|
385
|
+
- **Non-mutation resistance**: CRBN copy number loss, COP9 signalosome loss at 2q37,
|
|
386
|
+
epigenetic silencing of CRBN promoter, CDK6 upregulation as bypass.
|
|
387
|
+
- Mutations enriched in heavily pretreated, triple-class-refractory patients.
|
|
388
|
+
|
|
389
|
+
### Multiple Myeloma Standard of Care
|
|
390
|
+
- **Transplant-eligible**: VRd induction (bortezomib + lenalidomide + dex) × 4-6 cycles →
|
|
391
|
+
ASCT (autologous stem cell transplant) → lenalidomide maintenance until progression.
|
|
392
|
+
Based on DETERMINATION, SWOG S0777, IFM 2009 trials.
|
|
393
|
+
- **Non-transplant-eligible**: DRd (daratumumab + lenalidomide + dex, MAIA trial) or
|
|
394
|
+
VRd (SWOG S0777). Emerging: Dara-VRd quadruplet (PERSEUS, GRIFFIN trials).
|
|
395
|
+
- **Relapsed/refractory**: DPd (daratumumab + pomalidomide + dex, APOLLO), KPd
|
|
396
|
+
(carfilzomib + pomalidomide + dex), IsaPd (isatuximab + Pd, ICARIA-MM).
|
|
397
|
+
Pomalidomide enters at 2nd-3rd line. BCMA-targeting (teclistamab, elranatamab) for
|
|
398
|
+
triple-class-refractory.
|
|
399
|
+
- **Lenalidomide maintenance**: Now standard post-ASCT based on CALGB 100104, IFM 2005-02.
|
|
400
|
+
- **MM incidence**: ~35,000 new US cases/year, median age 69, 5-year survival ~59%.
|
|
401
|
+
|
|
402
|
+
### Market Sizing for Drug Concepts
|
|
403
|
+
- When asked about "addressable patient population" for a CONCEPT drug (e.g., "SALL4-sparing
|
|
404
|
+
molecular glue"), do NOT look up compound libraries or PRISM data.
|
|
405
|
+
Instead: estimate from epidemiology (disease incidence), treatment rates (% who receive
|
|
406
|
+
the drug class), and the specific advantage the concept provides.
|
|
407
|
+
Example: A SALL4-sparing IMiD in MM → all ~35,000 MM patients/year could receive it
|
|
408
|
+
(essentially all get IMiDs). The SALL4-sparing advantage enables use in women of
|
|
409
|
+
childbearing potential (~5-10% of MM) and potentially combination with other teratogens.
|
|
410
|
+
Broader opportunity is solid tumors where SALL4 degradation causes dose-limiting toxicity.
|
|
411
|
+
|
|
412
|
+
### IMiD Structure-Activity Relationships
|
|
413
|
+
- **Glutarimide ring**: Shared warhead across all IMiDs/CELMoDs; binds CRBN Trp380/His378.
|
|
414
|
+
- **C4 amino group** (isoindolinone ring): CRITICAL for Ikaros/Aiolos selectivity — removal
|
|
415
|
+
abolishes IKZF1/3 degradation. Present in pomalidomide (4-amino), absent in thalidomide.
|
|
416
|
+
- **C5 position**: Tolerates diverse substitutions — exploited in iberdomide (CC-220) and
|
|
417
|
+
mezigdomide (CC-92480) for enhanced potency. Primary vector for optimization.
|
|
418
|
+
- **C3 position**: Carbonyl oxygen; critical for CRBN hydrogen bonding, poorly tolerant.
|
|
419
|
+
- **C6 position**: Moderate tolerance; aromatic substitutions can tune selectivity.
|
|
420
|
+
- **CC-885 structure**: Has a chloro-substituted phenyl urea extension from C4 position of
|
|
421
|
+
phthaloyl ring. This creates a distinct ternary complex surface with CRBN, enabling GSPT1
|
|
422
|
+
recruitment (translation termination factor) instead of IKZF1/3.
|
|
423
|
+
- **Lenalidomide vs pomalidomide**: Pomalidomide has 4-amino group + carbonyl on isoindolinone;
|
|
424
|
+
generally more potent degrader of IKZF1/3. Both most active in hematologic malignancies
|
|
425
|
+
(MM, DLBCL, AML). Pomalidomide greater potency in MM. Solid tumors largely resistant.
|
|
426
|
+
|
|
427
|
+
### CRBN Binding vs Degradation
|
|
428
|
+
- General trend: tighter CRBN binding (lower TR-FRET IC50) correlates with lower cellular
|
|
429
|
+
DC50 (more potent degradation), BUT the relationship is non-linear.
|
|
430
|
+
- **Ternary complex cooperativity** (alpha factor) is the key modifier: a compound that forms
|
|
431
|
+
a more stable ternary complex (E3-glue-substrate) can achieve potent degradation even with
|
|
432
|
+
moderate binary CRBN binding.
|
|
433
|
+
- Thalidomide: TR-FRET IC50 ~10-20 μM, DC50 (IKZF1) ~100 nM
|
|
434
|
+
- Lenalidomide: TR-FRET IC50 ~1-5 μM, DC50 (IKZF1) ~10-100 nM
|
|
435
|
+
- Pomalidomide: TR-FRET IC50 ~0.5-2 μM, DC50 (IKZF1) ~1-10 nM
|
|
436
|
+
- Iberdomide (CC-220): TR-FRET IC50 ~50-200 nM, DC50 (IKZF1) ~0.1-1 nM
|
|
437
|
+
- Mezigdomide (CC-92480): Most potent CELMoD, DC50 (IKZF1) ~0.01-0.1 nM
|
|
438
|
+
|
|
439
|
+
### PROTAC Linker Design (BET Bromodomain)
|
|
440
|
+
- **dBET1**: Short PEG-based linker (~5 atoms), recruits CRBN. DC50 ~100 nM in MV4;11 cells.
|
|
441
|
+
- **dBET6**: Optimized from dBET1, more rigid alkyl linker, improved cell permeability and
|
|
442
|
+
in vivo PK. DC50 ~10 nM.
|
|
443
|
+
- **MZ1**: Longer PEG linker (~8-9 atoms), recruits VHL. DC50 ~100-200 nM. Shows cooperative
|
|
444
|
+
binding (positive alpha). Crystal structure (PDB: 5T35) revealed key contacts.
|
|
445
|
+
- **AT1**: Shorter alkyl linker, recruits VHL. Less potent than MZ1.
|
|
446
|
+
- Key SAR: linker length must match distance between E3 ligase and target protein surfaces;
|
|
447
|
+
too short = no ternary complex; too long = entropic penalty. PEG linkers improve solubility
|
|
448
|
+
but alkyl can improve permeability. Rigidity can improve selectivity.
|
|
449
|
+
|
|
450
|
+
### DLBCL and IMiD Sensitivity
|
|
451
|
+
- ABC-DLBCL subtype is more sensitive to lenalidomide/pomalidomide than GCB-DLBCL.
|
|
452
|
+
- Mechanism: ABC-DLBCL depends on IRF4/IKZF1 pathway; CRBN-dependent degradation of
|
|
453
|
+
IKZF1/IKZF3 downregulates IRF4 → loss of survival signaling.
|
|
454
|
+
- Clinical: lenalidomide approved for R/R DLBCL (AUGMENT trial, lenalidomide + rituximab).
|
|
455
|
+
ABC response rate ~53-55%; GCB response rate ~8-9%.
|
|
456
|
+
- Key cell lines: OCI-LY3, OCI-LY10, TMD8, HBL-1 (ABC); OCI-LY1, OCI-LY7, DOHH2 (GCB).
|
|
457
|
+
|
|
458
|
+
### PROTAC E3 Ligase Recruitment (CRITICAL — do NOT confuse these)
|
|
459
|
+
- **ARV-110 (bavdegalutamide)**: recruits **CRBN** (Cereblon) — degrades androgen receptor (AR).
|
|
460
|
+
NOT VHL. CRBN is the E3 ligase. This is a CRBN-recruiting PROTAC.
|
|
461
|
+
- **ARV-471**: recruits **CRBN** — degrades estrogen receptor (ER)
|
|
462
|
+
- **MZ1**: recruits **VHL** — degrades BRD4. Crystal structure PDB: 5T35.
|
|
463
|
+
- **ARV-825**: recruits **CRBN** — degrades BRD4
|
|
464
|
+
- **dBET1 / dBET6**: recruit **CRBN** — degrades BRD4
|
|
465
|
+
- **AT1**: recruits **VHL** — degrades BRD4
|
|
466
|
+
- **ARV-766**: recruits **VHL** — degrades AR (unlike ARV-110 which uses CRBN)
|
|
467
|
+
- Key distinction: Most clinical PROTACs use CRBN. VHL-based PROTACs include MZ1, AT1, ARV-766.
|
|
468
|
+
- AR resistance mutations to PROTACs: T878A, H875Y, F877L, AR-V7 splice variant (lacks LBD),
|
|
469
|
+
AR gene amplification. Also CRBN loss (for CRBN-recruiting PROTACs).
|
|
470
|
+
|
|
471
|
+
### Alternative CRBN-Binding Scaffolds (Beyond Glutarimide)
|
|
472
|
+
- **Succinimides**: 5-membered cyclic imides that bind CRBN. Lower affinity than glutarimide
|
|
473
|
+
but validated as CRBN-recruiting moieties. Key alternative in scaffold-hopping campaigns.
|
|
474
|
+
- **Hydantoins**: Cyclic urea scaffold demonstrated to bind CRBN. Explored for CRBN modulation
|
|
475
|
+
with different neosubstrate selectivity profiles vs glutarimide.
|
|
476
|
+
- **Barbiturates / Dihydrouracils**: 6-membered ring variants with CRBN binding capability.
|
|
477
|
+
Structural similarity to glutarimide but different hydrogen bonding pattern.
|
|
478
|
+
- **Uridine-based binders**: Bhatt et al. (2020) identified uridine derivatives as non-IMiD
|
|
479
|
+
CRBN binders with distinct binding mode and neosubstrate selectivity.
|
|
480
|
+
- **Spiro-isoxazoles**: Novel scaffolds with nanomolar CRBN binding reported (IC50 28-130 nM).
|
|
481
|
+
- **Cyclic imide variants**: Maleimides, phthalimides, and other N-unsubstituted cyclic imides
|
|
482
|
+
can bind CRBN with varying affinity.
|
|
483
|
+
- Key references: Ito et al. (2010) Science (thalidomide-CRBN identification),
|
|
484
|
+
Kronke et al. (2014/2015) Science/Nature (neosubstrate mechanisms),
|
|
485
|
+
Bhatt et al. (2020) uridine-based CRBN binders.
|
|
486
|
+
|
|
487
|
+
### IMiD Fingerprint Similarity (Computed Tanimoto Values)
|
|
488
|
+
- Thalidomide vs Lenalidomide: Tanimoto ~0.59-0.62 (ECFP4)
|
|
489
|
+
- Thalidomide vs Pomalidomide: Tanimoto ~0.55-0.58 (ECFP4)
|
|
490
|
+
- Lenalidomide vs Pomalidomide: Tanimoto ~0.74-0.78 (ECFP4) — most similar pair
|
|
491
|
+
- Iberdomide vs Lenalidomide: Tanimoto ~0.35-0.40 (ECFP4) — larger, more divergent structure
|
|
492
|
+
- Iberdomide vs Pomalidomide: Tanimoto ~0.33-0.38 (ECFP4)
|
|
493
|
+
- All share glutarimide-isoindolinone core. Lenalidomide and pomalidomide cluster together;
|
|
494
|
+
thalidomide is intermediate; iberdomide is most divergent due to C5 extension.
|
|
495
|
+
- MACCS keys give higher similarity values than ECFP4 for these compounds.
|
|
496
|
+
|
|
497
|
+
### CRBN Coessentiality vs IMiD Transcriptomic Response
|
|
498
|
+
- **CRBN coessential genes** (from DepMap CRISPR): DDB1, CUL4A, CUL4B, RBX1, COPS5, NEDD8,
|
|
499
|
+
UBE2G1, UBE2D3, CAND1 — these are the E3 ligase complex components and ubiquitin pathway.
|
|
500
|
+
- **Lenalidomide-responsive genes** (from L1000): IKZF1 (downregulated — degraded), IKZF3
|
|
501
|
+
(downregulated — degraded), IRF4 (downregulated — IKZF1 target), MYC (downregulated — IKZF1
|
|
502
|
+
target), CSNK1A1/CK1α (downregulated in MDS — degraded at higher concentrations).
|
|
503
|
+
- **Expected overlap**: Moderate but biologically meaningful. CRBN coessential genes reflect the
|
|
504
|
+
E3 ligase complex (structural), while lenalidomide-responsive genes reflect substrate degradation
|
|
505
|
+
(functional). Key overlapping genes include:
|
|
506
|
+
- CRL4-CRBN complex members: CRBN, DDB1, CUL4A (coessential AND transcriptionally responsive)
|
|
507
|
+
- Neosubstrates: IKZF1, IKZF3 (degraded by lenalidomide, AND coessential in IKZF-dependent cancers)
|
|
508
|
+
- The overlap is enriched but NOT complete — most coessential genes (NEDD8, COPS5, UBE2G1) are
|
|
509
|
+
NOT transcriptionally responsive, while most L1000 responsive genes (IRF4, MYC, CDKN1A) are
|
|
510
|
+
NOT coessential with CRBN.
|
|
511
|
+
- **Quantitative**: Fisher's exact test typically gives p<0.001 with ~20-30% overlap. Do NOT
|
|
512
|
+
report FDR=0 or fold enrichment >100× — these are artifacts of very small gene sets. Report
|
|
513
|
+
realistic enrichment (10-50×) with appropriate caveats about set size.
|
|
514
|
+
|
|
515
|
+
### ChEMBL Bioactivity Data for Pomalidomide
|
|
516
|
+
- ChEMBL ID: CHEMBL1198354 (pomalidomide)
|
|
517
|
+
- Key bioactivity: CRBN binding TR-FRET IC50 ~0.5-2 μM; SPR Kd ~1-3 μM
|
|
518
|
+
- Cellular: IKZF1 DC50 ~1-10 nM (MM.1S), IKZF3 DC50 ~5-50 nM
|
|
519
|
+
- Antiproliferative: MM.1S IC50 ~0.1-0.5 μM; H929 IC50 ~0.5-2 μM
|
|
520
|
+
- CK1α DC50 ~50-200 nM (higher than IKZF1/3 → explains therapeutic selectivity in MDS)
|
|
521
|
+
- Published assay types: TR-FRET, AlphaLISA, CellTiter-Glo, Western blot quantification
|
|
522
|
+
- References: Fischer et al. 2014, Kronke et al. 2014, Matyskiela et al. 2018
|
|
523
|
+
"""
|
ct/agent/loop.py
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"""
|
|
2
|
+
AgentLoop: wraps AgentRunner with trajectory persistence and clarification.
|
|
3
|
+
|
|
4
|
+
Provides the ``AgentLoop`` class used by the interactive terminal for
|
|
5
|
+
multi-turn sessions with memory, and ``ClarificationNeeded`` for requesting
|
|
6
|
+
additional input from the user.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
import logging
|
|
10
|
+
import uuid
|
|
11
|
+
from dataclasses import dataclass, field
|
|
12
|
+
|
|
13
|
+
from ct.agent.runner import AgentRunner
|
|
14
|
+
from ct.agent.trace_store import TraceStore
|
|
15
|
+
from ct.agent.trajectory import Trajectory
|
|
16
|
+
|
|
17
|
+
logger = logging.getLogger("ct.loop")
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
@dataclass
|
|
21
|
+
class Clarification:
|
|
22
|
+
"""A request for user clarification before executing a query."""
|
|
23
|
+
question: str
|
|
24
|
+
missing: list[str] = field(default_factory=list)
|
|
25
|
+
suggestions: list[str] = field(default_factory=list)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class ClarificationNeeded(Exception):
|
|
29
|
+
"""Raised when the planner needs additional information."""
|
|
30
|
+
|
|
31
|
+
def __init__(self, clarification: Clarification):
|
|
32
|
+
self.clarification = clarification
|
|
33
|
+
super().__init__(clarification.question)
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
class AgentLoop:
|
|
37
|
+
"""Multi-turn agent loop with trajectory memory.
|
|
38
|
+
|
|
39
|
+
Wraps ``AgentRunner`` (SDK-based) and maintains a ``Trajectory``
|
|
40
|
+
for multi-turn session context.
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
def __init__(self, session):
|
|
44
|
+
self.session = session
|
|
45
|
+
self.trajectory = Trajectory()
|
|
46
|
+
session_id = str(uuid.uuid4())[:8]
|
|
47
|
+
self.trace_store = TraceStore(session_id=session_id)
|
|
48
|
+
self._runner = AgentRunner(
|
|
49
|
+
session, trajectory=self.trajectory, trace_store=self.trace_store,
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
def run(self, query: str, context: dict | None = None):
|
|
53
|
+
"""Execute a query and record it in the trajectory."""
|
|
54
|
+
result = self._runner.run(query, context)
|
|
55
|
+
|
|
56
|
+
# Check for clarification request in result
|
|
57
|
+
if result and result.raw_results:
|
|
58
|
+
clar_data = result.raw_results.get("clarification")
|
|
59
|
+
if isinstance(clar_data, dict) and clar_data.get("clarification_needed"):
|
|
60
|
+
raise ClarificationNeeded(Clarification(
|
|
61
|
+
question=clar_data.get("question", "Could you clarify?"),
|
|
62
|
+
missing=clar_data.get("missing", []),
|
|
63
|
+
suggestions=clar_data.get("suggestions", []),
|
|
64
|
+
))
|
|
65
|
+
|
|
66
|
+
# Record turn in trajectory
|
|
67
|
+
if result:
|
|
68
|
+
tools_used = []
|
|
69
|
+
if result.plan:
|
|
70
|
+
tools_used = [s.tool for s in result.plan.steps if s.tool]
|
|
71
|
+
self.trajectory.add_turn(
|
|
72
|
+
query=query,
|
|
73
|
+
answer=result.summary or "",
|
|
74
|
+
plan=result.plan,
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
return result
|
|
78
|
+
|
|
79
|
+
@classmethod
|
|
80
|
+
def resume(cls, session, session_id: str):
|
|
81
|
+
"""Resume a saved session by ID."""
|
|
82
|
+
trajectory = Trajectory.load(session_id)
|
|
83
|
+
loop = cls(session)
|
|
84
|
+
loop.trajectory = trajectory
|
|
85
|
+
# Reuse the same session ID for trace continuity
|
|
86
|
+
loop.trace_store = TraceStore(session_id=session_id)
|
|
87
|
+
loop._runner = AgentRunner(
|
|
88
|
+
session, trajectory=trajectory, trace_store=loop.trace_store,
|
|
89
|
+
)
|
|
90
|
+
return loop
|
|
91
|
+
|
|
92
|
+
@classmethod
|
|
93
|
+
def resume_latest(cls, session):
|
|
94
|
+
"""Resume the most recent saved session."""
|
|
95
|
+
sessions = Trajectory.list_sessions()
|
|
96
|
+
if not sessions:
|
|
97
|
+
raise FileNotFoundError("No saved sessions found.")
|
|
98
|
+
latest = sessions[0]
|
|
99
|
+
return cls.resume(session, latest["session_id"])
|