Models
The models in this release, what each requires, how it generates and what it writes.
Model release
This page documents immutable model release iclr27-pbe-bcs-main-20261016, built from the ICLR 2027 submission method: PBE, the patient-bulk encoder — a generator conditioned on each sample's own bulk profile — followed by BCS, a bulk-consistency correction of the generated expression. Each model is trained against one single-cell reference and generates on a fixed 2,000-gene panel chosen at training time — the cohort's disease-prior genes first, then highly variable genes (HVGs) until the panel is full — and never re-selected at inference.
| MODEL | PUBLIC ID | CELL TYPES | REQUIRED GENES | REFERENCE |
|---|---|---|---|---|
| Breast tumour | breast-tumour-2k-v2 | 11 | 16,864 | GEO GSE176078 |
| T-ALL | t-all-2k-v2 | 10 | 55,719 | ScPCA SCPCP000003 |
| Sepsis PBMC | sepsis-pbmc-2k-v1 | 10 | 40,200 | GEO GSE279448 and GSE279452 |
Breast tumour
Cell-type composition and 1,000 generated single cells per sample for bulk breast tumour RNA-seq.
| Public id (disease_model) | breast-tumour-2k-v2 |
| model_id | iclr27-pbe-bcs-GSE176078 |
| release_id | iclr27-pbe-bcs-main-20261016 |
| Reference | Human breast tumour single-cell reference — GEO GSE176078 |
| Required input | 16,864 genes, every one present exactly once · raw counts · identifiers exactly as the list spells them (HGNC symbols) |
| Generation | 1,000 cells per sample · dopri5, 20 steps · seed 20260904 (fixed per release) |
| Method | PBE+BCS — generator A1_simple_bulk, correction BCS (legacy E01 consistent_cp10k) |
- B-cells
- Cancer Epithelial
- Cycling T-cells
- Endothelial
- Fibroblast
- Myeloid
- NK
- Normal Epithelial
- PVL
- Plasmablasts
- T cells
| Applies to | Human breast tumour tissue, bulk RNA-seq of the whole tumour including its microenvironment, raw counts. |
| Not applicable to | Blood, normal breast, other tumour types, cell lines or non-human samples. |
T-ALL
Cell-type composition and 1,000 generated single cells per sample for bulk T-ALL RNA-seq.
| Public id (disease_model) | t-all-2k-v2 |
| model_id | iclr27-pbe-bcs-SCPCP000003 |
| release_id | iclr27-pbe-bcs-main-20261016 |
| Reference | Human T-ALL single-cell reference — ScPCA SCPCP000003 |
| Required input | 55,719 genes, every one present exactly once · raw counts · identifiers exactly as the list spells them (17,475 Ensembl ids (ENSG…) and 38,244 HGNC symbols) |
| Generation | 1,000 cells per sample · dopri5, 20 steps · seed 20260904 (fixed per release) |
| Method | PBE+BCS — generator A1_simple_bulk, correction BCS (legacy E01 consistent_cp10k) |
- ALL blast
- B
- Classical Monocyte
- Cytotoxic T
- DC
- Erythroid
- FCGR3A+ Monocyte
- HSC
- NKT
- naive/Tcm
| Applies to | Human T-ALL bone marrow or peripheral blood, bulk RNA-seq, raw counts. |
| Not applicable to | Solid tissue, other leukaemias, cell lines or non-human samples. |
Sepsis PBMC
Cell-type composition and 1,000 generated single cells per sample for bulk sepsis PBMC RNA-seq.
| Public id (disease_model) | sepsis-pbmc-2k-v1 |
| model_id | iclr27-pbe-bcs-GSE279448_GSE279452_sepsis_PBMC |
| release_id | iclr27-pbe-bcs-main-20261016 |
| Reference | Human sepsis PBMC single-cell reference — GEO GSE279448 and GSE279452 |
| Required input | 40,200 genes, every one present exactly once · raw counts · identifiers exactly as the list spells them (11,253 Ensembl ids (ENSG…) and 28,947 HGNC symbols) |
| Generation | 1,000 cells per sample · dopri5, 20 steps · seed 20260904 (fixed per release) |
| Method | PBE+BCS — generator H03, correction BCS (legacy E01 consistent_cp10k) |
- T_cell
- Monocyte
- B_cell
- NK_cell
- Erythroid
- Platelet
- Plasma
- Neutrophil
- DC
- HSPC
| Applies to | Human PBMC from sepsis cohorts, bulk RNA-seq, raw counts. |
| Not applicable to | Whole blood with granulocytes, solid tissue, cell lines or non-human samples. The reference is PBMC, so neutrophil-rich whole blood will be described against an axis that under-represents it. |
Required input
The requirement is exact, and it is per model: the complete set of genes the reference cohort and the training data had in common, each present exactly once, as raw counts, under the identifier the list spells for it. The engine normalises over that whole set (log1p CP10k) before it selects the 2,000-gene panel, so a missing gene or a duplicate identifier is an error — not a zero, and not a lower coverage figure.
| MODEL | REQUIRED GENES | IDENTIFIERS IN THE LIST | REQUIRED GENE LIST |
|---|---|---|---|
| Breast tumour | 16,864 | HGNC symbols | GET /b2sc/models/breast-tumour-2k-v2/required-genes |
| T-ALL | 55,719 | 17,475 Ensembl ids (ENSG…) and 38,244 HGNC symbols | GET /b2sc/models/t-all-2k-v2/required-genes |
| Sepsis PBMC | 40,200 | 11,253 Ensembl ids (ENSG…) and 28,947 HGNC symbols | GET /b2sc/models/sepsis-pbmc-2k-v1/required-genes |
- Raw counts only. The model normalises for itself, so a matrix that is already CPM, TPM, FPKM, log-scaled or z-scored is the wrong input, not a lesser one — and the non-negative forms produce confident, wrong proportions rather than an error.
- Identifiers exactly as the list spells them. The lists are not symbols-only: the T-ALL and Sepsis PBMC lists mix HGNC symbols and Ensembl ids (ENSG…) gene by gene, as the reference data spelled them, and the breast list is HGNC symbols throughout. Your gene column is matched verbatim against the downloadable list — nothing is converted on the way in. gene_id_type other than symbol answers 400 GENE_IDS_MUST_BE_SYMBOLS, because a conversion would hide the exact mismatch the check exists to show; re-label the file to the list instead.
- Every required gene present exactly once. The new-run page fetches the list once per model and checks your file against it before uploading anything, reporting how many are missing and the first of them; a file that fails is refused there, with the engine's own rule stated.
- Extra genes are not an error. The engine takes the required set from your matrix and leaves the rest.
Generation and seeds
Every model in this release generates 1,000 cells per sample, allocated across its cell types by the estimated proportions (largest-remainder allocation, stable cell-type order for ties), and integrates the flow with the dopri5 solver over 20 steps in batches of 2,048. Generation is sample-major, then cell-type-major, with direct bulk conditioning throughout.
| MODEL | CELLS PER SAMPLE | SOLVER | STEPS | SEEDS |
|---|---|---|---|---|
| Breast tumour | 1,000 | dopri5 | 20 | 20260904, fixed for the release; weights for 20260905 and 20260906 are shipped but not selectable yet |
| T-ALL | 1,000 | dopri5 | 20 | 20260904, fixed for the release; weights for 20260905 and 20260906 are shipped but not selectable yet |
| Sepsis PBMC | 1,000 | dopri5 | 20 | 20260904, fixed for the release; weights for 20260905 and 20260906 are shipped but not selectable yet |
A job runs on one seed and records it. There is no seed parameter on the API or in the UI: every run uses the release's default seed, and the two other seeds are shipped weight sets that are not selectable yet. With the same seed, device class, solver, batch size and library versions the output is bitwise identical — measured on this platform as a same-GPU repeat for the breast and T-ALL models. Equality across different GPU generations is not promised; the run_manifest names the device and versions the job actually used.
Outputs
A completed job writes seven files directly under its result prefix. There is no analysis stage for any model in this release: the proportions and the generated cells are the complete result, and the job list, results page and GET /b2sc/jobs/{id}/files all read from the same manifest.
| FILE | WHAT IT HOLDS |
|---|---|
| platform_manifest.json | The index of the result. Names every other file, and carries release_id, model_id, seed, n_cells_per_sample, n_samples, the cell-type axis, the engine code version and image digest, the input sha256 and expression_semantics. |
| proportions.csv | One row per sample (sample_id), one column per cell type, the estimated proportion of each to six decimal places. Each row sums to 1 within rounding — the values are written to six decimal places, so a row can total 0.999999 or 1.000001. |
| cell_counts.csv | The same table as integer cell counts — how many of the generated cells per sample were allocated to each type (largest-remainder allocation, stable cell-type order for ties). |
| generated_cells.h5ad | The generated single cells as an AnnData file: obs carries sample_id and cell_type; var is the model's 2,000-gene panel; X is continuous BCS-corrected generated expression; not measured or integer counts. |
| generated_cells.npz | The same expression matrix and axes as compressed NumPy arrays, for readers without an AnnData stack. |
| run_manifest.json | The engine's own record of the run (schema b2sc.iclr27-inference/v1): solver, steps, batch size, seed, device and library versions, the sha256 of every checkpoint it loaded, and the per-sample proportions and allocations it computed. |
| verification.json | The engine's self-check of the output contract — shapes, finite non-negative expression, unique axes, allocation totals, checkpoint load, output hashes. PASS or the job does not complete. |
What changed from the previous generation
- An exact input contract instead of coverage floors. The earlier models accepted a file once it matched 70% of the panel on two floors; these require every one of the cohort's common genes — 16,864 for Breast tumour, 55,719 for T-ALL, 40,200 for Sepsis PBMC — present exactly once. The gene floor fields are gone from GET /b2sc/models and replaced by input_gene_contract.
- Different cell-type axes. Breast tumour has 11, T-ALL has 10, Sepsis PBMC has 10. The breast axis merges the ER+, HER2+ and TNBC epithelial types of the earlier model into one Cancer Epithelial; T-ALL goes from 12 to 10; Sepsis PBMC is new. Proportions from the earlier releases are not comparable with these.
- 1,000 generated cells per sample for every model, up from 200, each with a recorded seed and three shipped weight sets.
- No analysis stage for any model. The downstream R stage is not offered: proportions, cell counts and the generated cells are the whole result.
- A flat result layout. Every file sits directly under the job's result prefix and platform_manifest.json indexes them; there are no stage sub-folders and no summary file to read first.
- The old ids are retired and refused. breast-tumour-2k, breast-tumour-5k and t-all-2k, and the engine aliases behind them, are no longer served: a submission naming one answers 400 INVALID_MODEL listing the three current ids. Jobs and results produced by the retired releases are removed with them.
- One panel size per model. There is no 5,000-gene variant in this release; every model generates on its own fixed 2,000-gene panel.
Each release is dated on the Changelog. The API reference documents the endpoints these pages name.