Spaces:
Running
Running
Commit History
-
fix: use PDB instead of SDF for ligand (Vina SDF parser rejects RDKit tag)
36897bb -
fix: eliminate obabel entirely — use RDKit for SMILES→3D + Vina PDB/SDF input (avoids OOM from obabel C++ subprocess)
618a4e0 -
fix: add import subprocess and use subprocess.PIPE instead of asyncio.subprocess.PIPE (Python 3.14 compat)
6d68d15 -
fix: revert to BackgroundTasks + async DockingTool.run (no threads, no pybel); pre-download vina in build.sh
538a17a -
fix: fully sync _worker_sync — replaces asyncio.run with subprocess.run + httpx.Client to avoid Python 3.14 thread crash
890c537 -
fix: remove pybel bindings (causes segfault on Render), use obabel CLI subprocess only
0ed4824 -
fix: run docking worker in thread pool to keep event loop responsive + add vina download timeout
8be46a8 -
fix: move global to first line of function (Python 3.14 SyntaxError)
cb34bca -
fix: strip ROOT/BRANCH from receptor PDBQT (rigid-receptor compat)
fef08a5 -
fix: use low-level OB API with AddOption('r') for rigid receptor PDBQT
5b41dec -
fix: move global OBABEL_CMD declaration to function top (Python 3.14 SyntaxError)
f1b1916 -
fix: reduce OOM by using in-process obabel bindings + lower vina exhaustiveness
320581f
-
fix: simplify build.sh to only pip install (no risky binary downloads) + fix vina download path
- Removed set -e from build.sh — failures no longer crash the Render build - Removed vina/phyml wget/cp — handled at runtime by docking.py self-healing - Vina download target changed to tempfile.gettempdir() which is always writable - obabel installed via requirements.txt (openbabel-wheel)c9577de -
fix: obabel self-healing — openbabel-wheel in requirements, runtime pip fallback, Vina download
- openbabel-wheel in requirements.txt (default pip install on Render) - _find_obabel() searches PATH, Python bin dir, /usr/local/bin, /usr/bin - If obabel still missing at runtime, pip install openbabel-wheel on demand - If Vina missing, download binary at runtime (self-healing) - Both subprocess calls use OBABEL_CMD (fixes hardcoded obabel on SMILES line) - build.sh installs vina/phyml to Python bin dir (survives build-to-runtime)31d3bd8 -
fix: check obabel availability early with clear error message, use OBABEL_CMD variable
e86be3a -
feat: add interaction fingerprinting and 3Dmol.js viewer to molecular docking page
- Backend: H-bond, hydrophobic, pi-stacking detection with conservative cutoffs - Backend: inline ligand PDB generation per pose, stored in result - Backend: GET /api/docking/result/{job_id}/pdb endpoint - Frontend: DockingViewer (3Dmol.js) — protein cartoon + ligand stick overlay - Frontend: InteractionPanel — collapsible tables for all interaction types - Frontend: poses table now shows H/HP/π counts per posea6857c7 -
feat: add query coverage, organism, and query accession to BLAST results
cee7881
-
feat: add DNA sequence output across BLAST, UniProt, sequencing, primers, and SequenceRetrieval
00b6857 -
feat: implement 8 tool bridges (F1-F8) + audit child components
5561093
-
fix: replace dead lambda reference FTP URL with NCBI E-utilities
d10fc77 -
fix: resolve 10 bugs in sequencing/docking pipelines
- Bug 1: Accept 'synthetic'/'demo'/'test' in fastq_url validation - Bug 2: Download minimap2 to app/bin/ instead of /usr/local/bin/ - Bug 3: Persist _jobs to JSON file to survive HF Space cold starts - Bug 4: Cache reference genomes in app/data/references/ - Bug 5: Track fastq_source correctly (was always returning 'url') - Bug 6: Wire PIPELINE_TIMEOUT via asyncio.wait_for in _worker - Bug 7: Stream FASTQ download, check content-length before body - Bug 8: Exempt status endpoints from global 30/min rate limit - Bug 9: Prune stale _jobs entries (TTL=2h, max=200) - Bug 10: Log in-memory job count lost on startup01cadbb -
Fix pipeline stuck issue: synthetic FASTQ fallback and demo mode
e816a43 -
Move minimap2 download to runtime (avoids build failures on HF cpu-basic)
0be08e1
-
Phase 3: Sequencing pipeline (FASTQ -> QC -> alignment -> variant calling -> report)
- Backend: tools/sequencing.py -- SequencingPipeline with Python QC, minimap2 alignment, SAM-based variant calling, summary report - Backend: routers/sequencing.py -- /api/sequencing/run + status + references endpoints - Backend: Dockerfile -- added minimap2 v2.28 static binary - Frontend: analyze/sequencing/page.tsx -- full UI with pipeline progress, QC metrics, alignment rate, variant table - Frontend: analyze/page.tsx -- 'Sequencing Pipeline' card with 'New' badge - Frontend: lib/api.ts -- sequencing types and API functions1cb972c -
feat: molecular docking (AutoDock Vina) + docs site + Sentry + cache stats + Phase 2 docs update
- Molecular docking tool via AutoDock Vina (free, CPU-based, local binary) - Dockerfile: openbabel apt install + vina binary from GitHub releases - Backend: DockingTool (PDB fetch, obabel PDBQT conversion, vina subprocess, pose parser) - Backend: POST /api/docking/run + GET /api/docking/status/{job_id} - Frontend: analyze/docking/page.tsx — PDB ID + SMILES input, auto-detect binding pocket, results table with affinity color-coding, PDBe structure viewer - Frontend: docking card with 'New' badge added to analyze/page.tsx - Documentation site: /learn pages (10 topics + glossary), LearnPopover inline help, TutorialWalkthrough onboarding modal - Sentry error monitoring: sentry.client.config.ts, sentry.server.config.ts, next.config.js withSentryConfig, backend sentry_sdk init in main.py - Cache stats tracking: _cache_stats counters, from_cache flag, /api/admin/cache-stats endpoint, @ttl_cache on ncbi_service.search_by_name and pathway_enrichment - All .md docs (MASTER_PL…fb8c550
-
Security, crash fixes, demo prep, dead code removal
- Auth guard: GET/DELETE /api/jobs/{id} now verify ownership (403 on mismatch) - Streaming auth: interpretStream() injects Supabase Bearer token - DELETE 404: return 404 if job never existed - JobProgress: fixed active step to show next pending step - Step names unified: worker → definition → frontend all match - Null-guards: BlastPanel, ScoreBars, UniprotPanel handle undefined/null data - ErrorBoundary: new class component wrapping dashboard layout - Silent catches: replaced .catch(noop) with user-visible error banner - Demo data: filled alignment strings for all hits; added hemoglobin + BRCA1 - History page: linked in sidebar nav (was orphaned) - pipeline_type default fixed: blast → protein_analysis - Axios timeout: added 30s timeout to api client - Dead code: removed 8 files (engine.py, results/export/waitlist routers, celery_app, redis service, registration tool, StructureViewer component) and 4 unused api.ts functions9a28cd0
-
design.md + rules.md compliance: dark theme, teal palette, pulsing dot, Pydantic models, api.ts routing, config fixes, db/max_hits threading, Supabase migration 004
f42f5a6 -
fix: UniProt API sequence key is value not sequence -- confirmed via API response
627b3e0 -
fix: UniprotTool missing sequence field — empty sequence in fetchSequence for UniProt accessions
f1b67a7
-
Core pipeline testability: progress callback, rate limiter 429, history table
- Pipeline engine: progress_callback fires after BLAST/UniProt/AlphaFold, Pydantic models normalized to plain dict (fixes 'runs but no result') - Worker: async Supabase REST PATCH for real-time step progress - Rate limiter: raises HTTP 429 with Content-Range parsing, fail-open - History: table layout with clickable rows -> /results/[jobId] - BLAST: add stype param, fix email (EBI rejects invalid domains) - Celery: Redis ping check so fallback to sync thread works - UI: progress bar + percentage in JobProgress, nav link fixes - Auth: removed for testing (will re-enable in Phase 1) - Status: changed pending -> queued to match DB check constraint88aa370 -
Initial commit: Bio Nexus pipeline engine — BLAST + UniProt + AlphaFold + AI interpretation (Phase 1)
5a0e691