File size: 5,905 Bytes
d152f1a 5f6420b ea32789 5f6420b d152f1a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 | ---
license: mit
language:
- en
metrics:
- accuracy
- f1
- recall
- precision
base_model:
- facebook/esm2_t33_650M_UR50D
pipeline_tag: graph-ml
tags:
- biology
---
# Stoic
Fast and accurate protein stoichiometry prediction.
[](https://github.com/PickyBinders/stoic/blob/master/LICENSE.txt)
[](https://www.biorxiv.org/content/10.64898/2026.03.13.711535)
[](https://codecov.io/gh/PickyBinders/stoic)
[](https://colab.research.google.com/github/PickyBinders/stoic/blob/main/stoic_colab.ipynb)
[](https://huggingface.co/spaces/PickyBinders/stoic-space)
[](https://huggingface.co/PickyBinders/stoic)

Stoic predicts copy numbers for protein complex components directly from sequence, and can also export AF3-ready JSON based on the top predicted stoichiometries.
Web version (Hugging Face Space): [stoic-space](https://huggingface.co/spaces/PickyBinders/stoic-space)
Pre-print: [Stoic: Fast and accurate protein stoichiometry prediction](https://www.biorxiv.org/content/10.64898/2026.03.13.711535v1.abstract?%3Fcollection=)
## Installation
### 1. Create and activate an environment
#### `venv`
```bash
python -m venv .venv
source .venv/bin/activate
```
#### `conda` / `mamba`
```bash
mamba create -n stoic-env python=3.10 -y
mamba activate stoic-env
```
### 2. Install Stoic (after env activation)
#### Install from local clone (editable)
```bash
git clone https://github.com/PickyBinders/stoic.git
cd stoic
python -m pip install --upgrade pip
python -m pip install -e .
```
#### Install directly from GitHub
```bash
python -m pip install git+https://github.com/PickyBinders/stoic.git
```
> **Note:** The first inference run requires internet connection to download model weights from Hugging Face. Next runs reuse cached files from `~/.cache/huggingface`, so offline usage works once the model is cached.
## Predict Stoichiometry from CLI
The `stoic_predict_stoichiometry` command supports:
1. a list of sequences,
2. a single FASTA file,
3. a directory of FASTA files (each FASTA treated as a separate complex).
```text
usage: stoic_predict_stoichiometry [-h]
[--sequences SEQ [SEQ ...] | --input-path INPUT_PATH]
[--model MODEL]
[--top-n TOP_N]
[--return-residue-weights]
[--max-inference-seq-len MAX_INFERENCE_SEQ_LEN]
[--output-dir OUTPUT_DIR]
[--device DEVICE]
options:
-h, --help show this help message and exit
--sequences SEQ [SEQ ...]
Protein sequences (one per unique chain)
--input-path INPUT_PATH
Path to a FASTA file or a directory with FASTA files
--model MODEL HuggingFace model name or local path (default: PickyBinders/stoic)
--top-n TOP_N Number of top stoichiometry candidates (default: 3)
--return-residue-weights
Return residue weights and save residue-level predictions
--max-inference-seq-len MAX_INFERENCE_SEQ_LEN
Maximum sequence length for full-length inference
--output-dir OUTPUT_DIR
Output directory for predictions and AF3 JSON files
--device DEVICE Device to use, e.g. cuda or cpu (default: auto-detect)
```
### Sequence list
```bash
stoic_predict_stoichiometry \
--sequences "SENECA" "VIRTVS" \
--top-n 3
```
### Single FASTA file
```bash
stoic_predict_stoichiometry \
--input-path path/to/complex.fasta \
--top-n 3
```
### Directory of FASTA files
```bash
stoic_predict_stoichiometry \
--input-path path/to/fasta_dir \
--top-n 3 \
--output-dir stoic_predictions
```
In directory mode, outputs are saved per complex (`<fasta_stem>.json`, `<fasta_stem>_af3_input.json`, and optional residue predictions).
### Output files
When `--output-dir` is provided:
- single input (sequence list or single FASTA):
- `results.json`
- `af3_input.json`
- `residue_predictions.pkl` (if `--return-residue-weights`)
- FASTA directory input:
- `<complex_name>.json`
- `<complex_name>_af3_input.json`
- `<complex_name>_residue_predictions.pkl` (if `--return-residue-weights`)
## Use as a Python API
### High-level inference helper
```python
from stoic.predict_stoichiometry import predict_stoichiometry
results = predict_stoichiometry(
sequences=["SENECA", "VIRTVS"], # or FASTA path / FASTA dir path
model_name="PickyBinders/stoic",
top_n=3,
)
print(results)
```
### Load model directly from Hugging Face
```python
import torch
from stoic.model import Stoic
device = "cuda" if torch.cuda.is_available() else "cpu"
model = Stoic.from_pretrained("PickyBinders/stoic")
model.eval().to(device)
pred = model.predict_stoichiometry(["SENECA", "VIRTVS"], top_n=3)
print(pred)
```
## Citation
If you use Stoic, please cite:
```text
@article{litvinov2026stoic,
title = {Stoic: Fast and accurate protein stoichiometry prediction},
author = {Litvinov, Daniil and Pantolini, Lorenzo and {\v{S}}krinjar, Peter and Tauriello, Gerardo and McCafferty, Caitlyn L and Engel, Benjamin D and Schwede, Torsten and Durairaj, Janani},
journal = {bioRxiv},
year = {2026},
doi = {10.64898/2026.03.13.711535},
url = {https://www.biorxiv.org/content/10.64898/2026.03.13.711535v1}
}
``` |