Source code for openprotein.app.services.fold

"""Application services for Fold."""

from openprotein.api import fold
from openprotein.app.models import (
    AlphaFold2Model,
    Boltz1Model,
    Boltz1xModel,
    Boltz2Model,
    ESMFoldModel,
    FoldModel,
    FoldResultFuture,
)
from openprotein.base import APISession


[docs] class FoldAPI: """ This class defines a high level interface for accessing the fold API. """ esmfold: ESMFoldModel alphafold2: AlphaFold2Model af2: AlphaFold2Model boltz_1: Boltz1Model boltz1: Boltz1Model boltz_1x: Boltz1xModel boltz1x: Boltz1xModel boltz_2: Boltz2Model boltz2: Boltz2Model
[docs] def __init__(self, session: APISession): self.session = session self._load_models()
def _load_models(self): # Dynamically add model instances as attributes - precludes any drift models = self.list_models() for model in models: model_name = model.id.replace("-", "_") # hyphens out setattr(self, model_name, model) # Setup aliases self.af2 = self.alphafold2 self.boltz1 = self.boltz_1 self.boltz1x = self.boltz_1x self.boltz2 = self.boltz_2
[docs] def list_models(self) -> list[FoldModel]: """list models available for creating folds of your sequences""" models = [] for model_id in fold.fold_models_list_get(self.session): models.append( FoldModel.create( session=self.session, model_id=model_id, default=FoldModel ) ) return models
[docs] def get_model(self, model_id: str) -> FoldModel: """ Get model by model_id. FoldModel allows all the usual job manipulation: \ e.g. making POST and GET requests for this model specifically. Parameters ---------- model_id : str the model identifier Returns ------- FoldModel The model Raises ------ HTTPError If the GET request does not succeed. """ return FoldModel.create( session=self.session, model_id=model_id, default=FoldModel )
[docs] def get_results(self, job) -> FoldResultFuture: """ Retrieves the results of a fold job. Parameters ---------- job : Job The fold job whose results are to be retrieved. Returns ------- FoldResultFuture An instance of FoldResultFuture """ return FoldResultFuture.create(job=job, session=self.session)