Skip to main content
Chai-1 is a diffusion-based protein structure prediction model that generates high-quality 3D structures. It supports optional ESM embeddings, MSA server queries, and template-based modeling.

Quick example

from boileroom import Chai1

model = Chai1(backend="modal")
result = model.fold("MKTVRQERLKSIVRI")

print(result.atom_array)  # list of Biotite AtomArray objects
print(result.plddt)       # per-residue confidence scores

Methods

.fold()

Predict the 3D structure of one or more protein sequences.
result = model.fold(sequences, options=None)
sequences
str | Sequence[str]
required
A single amino acid sequence string or a list of sequences. Use ":" to separate chains in a multimer (e.g., "CHAIN_A:CHAIN_B"). Chai-1 currently supports a single batch entry.
options
dict | None
default:"None"
Per-call configuration overrides. Only dynamic config keys can be set here — static keys raise ValueError. See Configuration.
Returns: Chai1Output (see Output below)

Output

The Chai1Output dataclass returned by .fold().

Always included

metadata
PredictionMetadata
Prediction metadata with timing information. See PredictionMetadata.
atom_array
list[AtomArray] | None
List of Biotite AtomArray objects. Always generated.

Confidence metrics

pae
list[np.ndarray] | None
Predicted aligned error matrices (one per diffusion sample).
pde
list[np.ndarray] | None
Predicted distance error matrices (one per diffusion sample).
plddt
list[np.ndarray] | None
Per-residue pLDDT scores (one array per diffusion sample).
ptm
list[np.ndarray] | None
Complex pTM scores.
iptm
list[np.ndarray] | None
Interface pTM scores.
per_chain_iptm
list[np.ndarray] | None
Per-chain-pair interface pTM scores.

Structure representations

cif
list[str] | None
mmCIF-formatted structure strings. Only generated when include_fields contains "cif" or "*".

Configuration

These keys can be set via config={} at initialization or options={} per call (unless marked static).
KeyTypeDefaultStaticDescription
devicestr"cuda:0"YesGPU device identifier
num_trunk_recyclesint3NoNumber of trunk recycling iterations
num_diffn_timestepsint200NoNumber of diffusion timesteps
num_diffn_samplesint5NoNumber of diffusion samples to generate
num_trunk_samplesint1NoNumber of trunk samples
use_esm_embeddingsboolFalseNoWhether to use ESM embeddings as input features
use_msa_serverboolFalseNoWhether to query an MSA server for multiple sequence alignments
use_templates_serverboolFalseNoWhether to query a templates server for structural templates
include_fieldslist[str] | NoneNoneNoWhich output fields to return. Use ["cif"] to include CIF strings. Use ["*"] for everything

Multimer prediction

Separate chains with ":" in the sequence string:
result = model.fold("MKTVRQERLKSIVRI:LERSKEPVSGAQLAEE")

print(result.atom_array)  # structure with both chains
Chai-1 currently supports only a single batch entry (one sequence or one multimer). If you pass a list of sequences, it must contain exactly one element.