Helico — contact-conditioned, MSA-free protein folding

An AlphaFold3-style folding model that takes a residue–residue contact map instead of a multiple sequence alignment. Given contacts at the accuracy a current contact predictor delivers, it matches Protenix-with-MSAs on FoldBench.

Code: Open-Athena/helico · Contacts: pyconfind · Predictor: MarinFold

Results

FoldBench, 27 protein targets scored by every arm (paired). All Helico rows are MSA-free — no alignment and no conservation profile, at training or inference.

Arm lDDT
Protenix v1, single sequence 0.329
Helico, contacts withheld 0.316
Helico, contacts @ 60% precision / 60% recall 0.824
Helico, oracle contacts (100%) 0.836
Protenix v1, with MSAs 0.837
Comparison Δ lDDT t
contacts @ 60/60 vs contacts withheld +0.508 ± 0.027 18.6
contacts @ 60/60 vs Protenix + MSA −0.013 ± 0.026 −0.5 (n.s.)
oracle vs contacts @ 60/60 +0.012 ± 0.003 4.1

Degrading a perfect contact map to 60% precision / 60% recall costs only 0.012 lDDT. The contact map is redundant enough that losing 40% of contacts and adding 40% false ones is nearly free.

⚠️ Read before using these numbers

Contacts are derived from the ground-truth structure. Both the oracle map and the 60/60 map come from the answer — the latter by degrading it with a synthetic noise model. These figures measure structure realisation given a contact map of a stated quality, not end-to-end structure prediction. The Protenix rows are genuine predictions; the Helico rows are not, and the two are not comparable as published benchmark numbers.

The false positives are synthetic. Our noise model draws false contacts uniformly from the eligible region. Real predictor errors are spatially correlated and cluster near true contacts, where they are plausibly much harder to reject. This model has not yet been evaluated on real MarinFold output.

Warm-started. Initialised from Protenix v1 (trained with MSAs) and fine-tuned for 6,000 steps MSA-free. Not trained from scratch.

What "MSA-free" means here

use_msa=False disables the MSA module and zeroes msa_profile / deletion_mean, the per-column conservation features that live in s_inputs outside that module. The training data loader skips alignment data entirely. An earlier version gated only the module, and the leaked conservation profile was worth +0.311 lDDT — see the repo's RESULTS_contact_conditioning.md.

Usage

import torch
from helico.model import Helico, HelicoConfig

ck = torch.load("contacts-msafree-01-step6000.pt", map_location="cpu", weights_only=False)
cfg = HelicoConfig(**{k: v for k, v in ck["config"].items()
                      if k in HelicoConfig.__dataclass_fields__})
model = Helico(cfg)
model.load_state_dict(ck["model_state_dict"])

Contacts enter as batch["contact_state"], a (N_tok, N_tok) uint8 matrix: 0 = UNKNOWN, 1 = ABSENT, 2 = PRESENT. Omitting the key entirely is the "no contacts" condition. Build it with helico.contacts, which wraps pyconfind using MarinFold's contacts-v1 parameters.

Benchmarking, including degradation to a predictor operating point:

HELICO_BENCH_SINGLE_SEQ=1 HELICO_BENCH_ORACLE_CONTACTS=1 \
HELICO_BENCH_CONTACT_PRECISION=0.6 HELICO_BENCH_CONTACT_RECALL=0.6 \
modal run modal/bench.py --checkpoint contacts-msafree-01-step6000.pt

Training

Warm start Protenix v1 → 6,000 steps, 48 pairformer blocks, crop 384, lr 5e-5 with 1,000 warmup, 8 diffusion samples, 8×H100. Contacts enter z_init through a zero-initialised projection, so the untrained pathway is an exact no-op and the warm start is lossless. That projection needs a 1000× learning-rate multiplier — at the shared 5e-5 it never moves, and the model silently ignores its contacts.

Conditioning is sampled per example across none / full / pair-subset / contact-list (a truncated top-k list at a sampled precision), so one model serves any level of contact knowledge including none.

Weights are model_state_dict — the exact tensors the benchmark loaded. EMA weights were not evaluated and are not shipped.

Limitations

  • Evaluated on 27 FoldBench protein targets; not a broad benchmark.
  • No real contact-predictor output has been fed through yet.
  • The trunk still constructs an MSA module (~3M unused parameters) so that warm starting stays simple.
  • Nucleic-acid and ligand tokens receive no contact information — pyconfind emits protein side-chain contacts only.
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support