Commit History
3 days ago
-
fix(drugs): one ChEMBL window for the mechanism lookups, retried round-robin
avoigt1121 +1: Claude Opus 5.5The 2026-10-29 -> 11-05 smoke week failed at 91.8 % on one probe: right after 00, 06, 12 and 18 UTC ChEMBL did not answer drugs_kras's three mechanism lookups within 30 s (26 of 57 runs). Each lookup waited its own 30 s, so a failing run took ~90 s and reported three identical errors; the Open Targets rows were already returned. The request is not heavy (/mechanism.json, 1.3 KB, < 1 s by hand): ChEMBL is slow then, from HF's network. - drugs.py: the mechanism lookups share one window (MECHANISM_WINDOW_SECONDS, capped by what is left of the endpoint budget). A source_unavailable lookup is retried round-robin with the other pending drugs; a quick failure pauses 5 s first; a drift is not retried. Whatever is unanswered when the window closes gets ONE chembl source_unavailable entry ("... not looked up for N of M drugs (k attempts in a W s window)") and looked_up: false. - _common.py: Collector.attempt returns the error instead of recording it; every call's deadline is now cappe…01b3ee5
18 days ago
-
feat: the five knowledge endpoints, gradio_ui and frozen descriptor (s2)
avoigt1121 +1: Claude Opus 5.5- src/endpoints/: drugs_for_targets, trials_for_genes, annotate_genes, pathways_for_genes, targets_for_disease on the s1 core. Inputs validated before any call; every row and nested block (ChEMBL mechanisms, UniProt protein, HGNC mapping, disease resolution) stamped; deterministic "According to <source> (queried <date>)" narratives; unresolved inputs and structured source errors instead of guesses. - Loaded tool set narrowed 12 -> 8 once real responses were seen (HGNC gives Ensembl + UniProt ids; one batched UniProt search; Reactome's mapping is already lowest-level). The other 4 stay approved, unloaded. - 8 pinned output schemas, written from the recorded responses. - scripts/record_fixtures.py: the only live step. 11 cassettes recorded 2026-10-20 through ToolUniverse 1.5.6 (123 calls): the Phase 0 lookups Q1-Q9 plus the C1 SORD2P case and two edge cases. All Phase 0 expectations replay. - gradio_ui.py: machine gate first in every handler (x-orchestrator-token), ty…3ed6b66