| |
| |
|
|
| from diffusers.utils import logging |
| from diffusers.modular_pipelines import AutoPipelineBlocks, SequentialPipelineBlocks |
|
|
| from .before_denoise import ( |
| RF3InputStep, |
| RF3PrepareLatentsStep, |
| RF3RecyclingStep, |
| RF3SetTimestepsStep, |
| ) |
| from .decoders import RF3DecodeStep |
| from .denoise import RF3DenoiseStep |
|
|
|
|
| logger = logging.get_logger(__name__) |
|
|
|
|
| class RF3BeforeDenoiseStep(SequentialPipelineBlocks): |
| """Sequential block for pre-denoising: input → timesteps → recycling → latents.""" |
|
|
| block_classes = [ |
| RF3InputStep, |
| RF3SetTimestepsStep, |
| RF3RecyclingStep, |
| RF3PrepareLatentsStep, |
| ] |
| block_names = ["input", "set_timesteps", "recycling", "prepare_latents"] |
|
|
| @property |
| def description(self): |
| return ( |
| "Before denoise step:\n" |
| " - `RF3InputStep` parses sequence and builds feature dict\n" |
| " - `RF3SetTimestepsStep` constructs EDM noise schedule\n" |
| " - `RF3RecyclingStep` runs trunk recycler (pairformer + MSA + templates)\n" |
| " - `RF3PrepareLatentsStep` samples initial noised coordinates\n" |
| ) |
|
|
|
|
| class RF3AutoBeforeDenoiseStep(AutoPipelineBlocks): |
| block_classes = [RF3BeforeDenoiseStep] |
| block_names = ["fold"] |
| block_trigger_inputs = [None] |
|
|
| @property |
| def description(self): |
| return "Before denoise step for RF3 structure prediction." |
|
|
|
|
| class RF3AutoDenoiseStep(AutoPipelineBlocks): |
| block_classes = [RF3DenoiseStep] |
| block_names = ["denoise"] |
| block_trigger_inputs = [None] |
|
|
| @property |
| def description(self) -> str: |
| return "Denoise step for RF3 structure prediction." |
|
|
|
|
| class RF3AutoDecodeStep(AutoPipelineBlocks): |
| block_classes = [RF3DecodeStep] |
| block_names = ["decode"] |
| block_trigger_inputs = [None] |
|
|
| @property |
| def description(self): |
| return "Decode step for RF3 — coordinates to tensor/PDB/CIF." |
|
|
|
|
| class RF3AutoBlocks(SequentialPipelineBlocks): |
| """Full RF3 structure prediction pipeline.""" |
|
|
| block_classes = [ |
| RF3AutoBeforeDenoiseStep, |
| RF3AutoDenoiseStep, |
| RF3AutoDecodeStep, |
| ] |
| block_names = [ |
| "before_denoise", |
| "denoise", |
| "decoder", |
| ] |
|
|
| @property |
| def description(self): |
| return ( |
| "Modular pipeline for protein structure prediction using RF3.\n" |
| "Provide `sequence` to predict a protein's 3D structure." |
| ) |
|
|