When Edit Flows are Edit Jumps: replicating Edit Flows and EvoFlows
Paper โข 2609.18745 โข Published
One antibody sequence in, near neighbours out: insertions, deletions and substitutions placed where related natural sequences actually differ.
This repo holds weights only. Please check-out the official repo to learn more about the code, docs, training pipeline and evaluation artefacts: https://github.com/VisiumCH/editjumps
git clone git@github.com:VisiumCH/editjumps.git
cd editjumps
uv sync --all-groups
pip install -U "huggingface_hub[cli]"
hf download VisiumSA/EditJumps --include "model/*" --local-dir ./weights
From Python:
from huggingface_hub import snapshot_download
folder = snapshot_download("VisiumSA/EditJumps", allow_patterns="model/*")
From the terminal directly
uv run --group train editjumps edit \
--sequence QVQLVESGGGLVQPGGSLRLSCAAS \
--model ./weights/model \
--rate-head mlp \
--q-head esm_lm_head \
--edits 5
Or from Python:
from pathlib import Path
from editjumps.pipeline.train.evoflows import EvoFlowsModel
model = EvoFlowsModel.load_trained(
Path("weights/model"),
rate_head="mlp",
q_head="esm_lm_head",
)
| Model type | Discrete flow matching over insert / delete / substitute |
| Trunk | Stock facebook/esm2_t12_35M_UR50D โ 12 layers, hidden 480, 20 heads, vocab 33 |
| Heads | 3 rate heads (mlp) + 2 token heads, FiLM-conditioned on a time MLP |
| Parameters | 35,213,590 |
| Precision | fp32 |
| Input form | Joined VH.VL antibody chains โ . is a real token in the ESM-2 vocabulary |
| Training data | 1,660,105 unordered homolog pairs from the OAS paired corpus (2,586,927 VH.VL sequences) |
| Objective | Bregman rate-matching path (eq. 6), linear kappa schedule |
| Budget | 20,000 steps ร batch 16 = 320,000 pairs โ 19% of one epoch โ not converged, and not claimed to be |
| Optimizer | Adam, lr 1e-4, constant; no warm-up, decay or weight decay; grad-clip 1.0, seed 0 |
| Best val loss | 130.48 at step 18,500 |
| Training cost |
The trunk is deliberately stock ESM-2 rather than the project's OAS-adapted trunk: EvoFlows ยง3.4 specifies no domain adaptation, only "the encoder trunk of a pre-trained ESM-2 model".
Cite this reproduction via CITATION.cff in the source repository. The papers reproduced:
@article{editJumps2026,
title = {When Edit Flows are Edit Jumps: replicating Edit Flows and {EvoFlows}},
author = {Bรฉnรฉdict, Gabriel and Buechler, Melanie and Riera-Solร , Gerard and
Ancos, Chloรฉ de and Teukam, Yves Gaetan Nana and Freidank, Moritz},
year = {2026},
note = {arXiv:2609.18745}
}
@article{evoflows2026,
title = {EvoFlows: Evolutionary Edit-Based Flow-Matching for Protein Engineering},
author = {Deutschmann and Ferragu and Bixby},
year = {2026},
note = {arXiv:2603.11703. ICLR 2026 "AI for Science" workshop}
}
@article{editflows2025,
title = {Edit Flows: Flow Matching with Edit Operations},
author = {Havasi and Karrer and Gat},
year = {2025},
note = {arXiv:2506.09018. NeurIPS 2025}
}
MIT, for both the code and these weights. See the source repository.
Base model
facebook/esm2_t12_35M_UR50D