Spaces:
Running
Running
Commit History
-
Surface the active-learning surrogate as the Learn-phase "wow" moment
Tengo Gzirishvili +1: Claude Sonnet 5Research finding: the field's actual bottleneck isn't tool routing, it's getting smarter after every real measurement (ALDE, Nat. Commun.: 12%->93% yield in 3 rounds via uncertainty-aware active learning) — and our biggest funded competitor's headline feature is exactly "learns each time you upload experimental data." We already had both technical pieces (the per-user surrogate in active_learning.py, the cross-user aggregate + scheduled rebuild in aggregate.py/server.py) — they were just invisible, reduced to a one-line note nobody would notice. This makes them visible. Backend: - active_learning.Surrogate gains `components` (prior/learned/explore/ n_measured per mutation) and a new narrate() helper — a deterministic, template-only explanation of why a mutation's score moved (or didn't). Never fabricates: it's a pure decomposition of numbers fit_surrogate already computes. - _de_round2_library now also blends the cross-user global prior (parity with round 1, pr…874f438
-
Learning flywheel v1: Directed-Evolution active-learning loop (DBTL)
Tengo Gzirishvili +1: Claude Opus 4.8The first durable-moat feature: TuringDNA learns from a researcher's wet-lab results to design a smarter next round, on data no competitor has. Scoped to Directed Evolution (the only tool with quantitative per-variant fitness). Surrogate (dee/core/active_learning.py): additive ridge over single-site effects with the ESM-2 ΔLL as the prior — y ≈ b + w_prior·ΣΔLL + Σβ_m. Fit closed-form in numpy (no sklearn/scipy needed) on the user's measured variants; β shrinks unseen mutations to the prior; an exploration bonus rewards under-tested positions. Plugs straight into the existing additive SA: round 2 re-runs evolve() with per-mutation score = w_prior·ΔLL + β + κ·uncertainty. Numpy-tested: measured data overrides a misleading prior (Spearman 0.77), 0 labels → pure prior, <4 → honest fallback. Backend: migration 0007_de_outcomes.sql (USER RUNS IT); auth.py save/list/cleanup_de_outcomes; /api/de/outcomes (POST/GET) + /api/de/round2 (score WT → fit surrogate → evolve adjusted pool → assemble…26914b4