Compile arbitrary FASTQ + messy metadata into a validated, machine-independent sequencing library manifest and a runnable Snakemake config.
Project description
seqforge
Compile (arbitrary FASTQ files) + (unstructured human/DB metadata) into a validated,
machine-independent dataset manifest, then into a runnable Snakemake config — for headless
reprocessing of large collections of public sequencing datasets into a genomic-AI training corpus.
seqforge is a compiler, not a chatbot. Deterministic code owns every decision. The LLM has exactly two jobs: parse prose into span-verified assertions, and arbitrate ambiguity the deterministic layer has already flagged. Everything else is a verifier.
probe(files) -> Observation deterministic, no LLM, no network, bytes only
harvest(prose, instructions) -> Assertion LLM, each claim span-verified
resolve(Observations, KB, hypothesis?) -> candidates, Conflicts, Questions, Blockers
──────────────────────────────────────────────────────────────────────────────────────────────────
=> manifest.yaml what the data IS. One per dataset. Immutable, content-addressed.
plan(Assertions, flags, policy) -> ProcessingSection flag > instruction > policy
──────────────────────────────────────────────────────────────────────────────────────────────────
=> processing.yaml what to DO with it. Many per dataset.
compose(manifest, processing) -> config.yaml + units.tsv + module selection
Same dataset + a different recipe = a different pipeline, and the dataset's hash does not move.
The files can be local or remote: seqforge io probe-remote <url> fingerprints a library straight
from a URL via one bounded HTTP Range read — same identification, no download.
Status: the pilot compiles end to end. The deterministic spine is implemented and green
(pixi run check), and seqforge run takes the worm pilot PRJNA1027859 from its raw FASTQs and paper
to a validated manifest + a runnable Snakefile in one headless pass. The ground-truth alignment runs
(kb e2e) are still on synthetic yeast/worm fixtures with injected counts — it has not yet executed a
pipeline on real reads at scale.
Docs: https://liuhlab.github.io/seqforge/ · design + rationale + scope delta:
docs/design.md (its §9 is the running list of what is not yet built) · rules:
CLAUDE.md
Install
pip install seqforge
This gives you the compiler and the seqforge CLI. The two lab-only stages — compose against a real
genome and kb e2e — additionally need the lab's liulab-genome and liulab-data packages, which are
not on PyPI. Install them from git when you need those features:
pip install "liulab-genome @ git+https://github.com/liuhlab/liulab-genome.git" \
"liulab-data @ git+https://github.com/liuhlab/liulab-data.git"
(Inside the lab, pixi install already pulls both — see below.)
Develop
Everything runs through pixi (not pip/conda/venv):
pixi install # build environments
pixi run test # pytest
pixi run lint # ruff check .
pixi run typecheck # mypy --strict on models/, probe/, resolve/, manifest/,
# compose/, workflows/, harvest/, evals/
pixi run check # lint + fmt-check + typecheck + test
pixi run -- pre-commit install # once per clone — ruff, mypy, shellcheck (not the suite)
Most of the non-negotiable rules in CLAUDE.md are enforced by tests, so pixi run check is the
mechanism rather than a formality — and CI runs it on every push and PR. The pre-commit hooks are
deliberately limited to the fast ones, so run check yourself when you change behaviour.
Consumer of the liulab stack
seqforge references genomes by a liulab-genome UCSC assembly id + registered GTF name, and aligner
environments by their literal liulab-runtime name (align-rna, ...). It never defines genome-file
machinery or aligner environments itself — and there is a test that says so.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file seqforge-2026.7.1.tar.gz.
File metadata
- Download URL: seqforge-2026.7.1.tar.gz
- Upload date:
- Size: 1.1 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bdb6a24286d2284bb37503645d33a33977da6f9048bc834eda907ea103f94d91
|
|
| MD5 |
2144ea5f73be6cdf202c08440fc78aa4
|
|
| BLAKE2b-256 |
b975fad7a343c97cc54912c31f8956c4881603124344837ba943f82a046168ae
|
Provenance
The following attestation bundles were made for seqforge-2026.7.1.tar.gz:
Publisher:
release.yml on liuhlab/seqforge
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
seqforge-2026.7.1.tar.gz -
Subject digest:
bdb6a24286d2284bb37503645d33a33977da6f9048bc834eda907ea103f94d91 - Sigstore transparency entry: 2219960482
- Sigstore integration time:
-
Permalink:
liuhlab/seqforge@cdd0c8e4d8aa57ee854c949eb31e9eba85823872 -
Branch / Tag:
refs/tags/v2026.7.1 - Owner: https://github.com/liuhlab
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@cdd0c8e4d8aa57ee854c949eb31e9eba85823872 -
Trigger Event:
release
-
Statement type:
File details
Details for the file seqforge-2026.7.1-py3-none-any.whl.
File metadata
- Download URL: seqforge-2026.7.1-py3-none-any.whl
- Upload date:
- Size: 526.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b07f4c8491fbcc2e3284449207f09a26484ce9e2baaa47f68597487a5c3e67ee
|
|
| MD5 |
550c89ac30abccf5c643c689652c5eb7
|
|
| BLAKE2b-256 |
45659fb03a337189925007008b7912a82af0c4dd482b2dabf152d700d760e213
|
Provenance
The following attestation bundles were made for seqforge-2026.7.1-py3-none-any.whl:
Publisher:
release.yml on liuhlab/seqforge
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
seqforge-2026.7.1-py3-none-any.whl -
Subject digest:
b07f4c8491fbcc2e3284449207f09a26484ce9e2baaa47f68597487a5c3e67ee - Sigstore transparency entry: 2219960548
- Sigstore integration time:
-
Permalink:
liuhlab/seqforge@cdd0c8e4d8aa57ee854c949eb31e9eba85823872 -
Branch / Tag:
refs/tags/v2026.7.1 - Owner: https://github.com/liuhlab
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@cdd0c8e4d8aa57ee854c949eb31e9eba85823872 -
Trigger Event:
release
-
Statement type: