Changelog¶
v0.0.7 (2026-06-23)¶
New features
variant: added--batch-size/-bto enable batched inference on PyTorch models. With--batch-size > 1the subcommand buffers records and scores their reference/alternate windows in batched forward passes (deduplicating the shared reference window across a position’s alternate alleles), for large speedups on many-variant VCFs. The default (1) preserves the exact original per-variant path bit-for-bit. Two optional environment knobs tune throughput:OSAI_CUDNN_BENCH(cuDNN autotuning) andOSAI_TF32(A100 TF32 fast path; setOSAI_TF32=0for bit-reproducible output).predict: added--gene-flank. With-a/--annotation, it includes real genomic flanking sequence on each side of every extracted gene so the model sees true context instead ofNpadding at gene boundaries (default-1usesflanking_size/2; set0for the legacy bare-gene-body behavior).predictnow also warns when an input sequence is shorter than the model’s required context and clarifies strand handling when no annotation is supplied (closes #16).
Packaging & distribution
OpenSpliceAI is now installable from Bioconda:
conda install -c conda-forge -c bioconda openspliceai.Corrected the conda recipe to GPL-3.0 built from the PyPI source tarball + checksum (it previously declared
MITand built from a git tag), and added GPLv3 license metadata and trove classifiers tosetup.py.Pruned three unused dependencies (
torchaudio,torchvision,matplotlib-inline) frominstall_requires.Added a regression test locking the new batched
variantpath to produce delta scores identical to the per-variant path (SNV / deletion / insertion / multi-allelic).
Bug fixes
variant: the reference one-hot encoder now folds every non-ACGT base (N, IUPAC ambiguity codes, gaps) to the all-zero row, matching its documented contract — previously only a literalNwas handled and other characters were silently miscoded. ACGTN reference sequence is encoded bit-identically, so real-genome scores are unchanged.predict: fixed a crash in theneg_strandsreverse-complement path ofget_sequences(it called a sequence-object method on a plain string).
Testing & quality
Greatly expanded the pytest suite (now ~300 tests) to ~96% line coverage of the packaged pipeline, including characterization tests that lock the cross-subcommand hyperparameter table, encode↔decode round-trips, and batched-vs-sequential variant equivalence.
Added a one-command, reproducible test entrypoint (
Makefile:make test/test-all/coverage/lint) with a coverage-floor gate (--cov-fail-under), atests/README.mddescribing the taxonomy and coverage policy, andKNOWN_ISSUES.mdreferences to each locking test.
v0.0.6 (2026-06-13)¶
Validation
Audited the
predictandvariantsubcommands step by step (seevalidation/).variant --model-type keras --flanking-size 10000reproduces the original Illuminaspliceaitool exactly (every delta score and position, across a mask/distance grid), andpredictcoordinates were verified correct on both strands.
Bug fixes
Fixed a crash in the
calibratesubcommand so it now runs end-to-end (fits a temperature, reports ECE/NLL/Brier, and writes calibration plots andtemperature.pt/.txt).Fixed
predictcheckpoint (.pt) path handling when loading a single model file.Fixed the
variantbuilt-in annotation paths: thegrch37/grch38tables now ship inside the package (openspliceai/variant/annotations/{grch37,grch38}.txt) and are resolved viaimportlib.resources, so they work regardless of the current working directory or install location.Fixed layer freezing in the
transfersubcommand.Restricted and validated
--flanking-sizeto{80, 400, 2000, 10000}across all subcommands, and hardenedpredictto raise on an unsupported value instead of silently defaulting to the 80 nt schedule.Fixed a crash in
variantwhen--output-vcfwas a bare filename (empty directory name).Fixed a path-handling bug in the
--remove-paralogs(paralog removal) flow ofcreate-data(the datafile/removed-paralog paths now useos.path.join, so an--output-dirwithout a trailing slash works).Fixed a crash in
create-data --verify-h5on small datasets: the verification step hardcoded a chunk index (X3) and raisedKeyErrorfor datasets with fewer than four chunks; it now visualizes the last available chunk.
Packaging, testing & tooling
Stopped shipping the top-level
testspackage in the built wheel (find_packages(include=['openspliceai', 'openspliceai.*'])).Added a
pytesttest suite (~143 tests) undertests/(unit,integration,regression,equivalencelayers with shared synthetic fixtures), designed to run CPU-only and cover every subcommand end-to-end — including a keras-vs-original-SpliceAI equivalence regression and predict/variant invariants.Added
rufflinting (ruff.toml),pre-commithooks (.pre-commit-config.yaml), and coverage configuration (.coveragerc), plus adevinstall extra (pip install -e '.[dev]'). See Development & Testing for details.Condensed the README “Development & Testing” section.
Initial release¶
Initial release of OpenSpliceAI, distributed on PyPI and GitHub.
Released via the documentation (https://khchao.com/OpenSpliceAI) and the paper (https://doi.org/10.7554/eLife.107454).