Models¶
For each recipe, the models to evaluate are defined in the models.py file.
In most cases, you can use mlipx.GenericASECalculator to access models.
However, in certain scenarios, you may need to provide a custom calculator.
Below, we demonstrate how to write a custom calculator node for SevenCalc.
While this is an example, note that SevenCalc could also be used with mlipx.GenericASECalculator.
Defining Models¶
Here is the content of a typical models.py file:
Content of models.py
import mlipx
from src import SevenCalc
mace_medium = mlipx.GenericASECalculator(
module="mace.calculators",
class_name="MACECalculator",
device='auto',
kwargs={
"model_paths": "mace_models/y7uhwpje-medium.model",
},
)
mace_agnesi = mlipx.GenericASECalculator(
module="mace.calculators",
class_name="MACECalculator",
device='auto',
kwargs={
"model_paths": "mace_models/mace_mp_agnesi_medium.model",
},
)
sevennet = SevenCalc(model='7net-0')
MODELS = {
"mace_medm": mace_medium,
"mace_agne": mace_agnesi,
"7net": sevennet,
}
Custom Calculator Example¶
The SevenCalc class, used in the example above, is defined in src/__init__.py as follows:
Content of src/__init__.py
import dataclasses
from ase.calculators.calculator import Calculator
@dataclasses.dataclass
class SevenCalc:
model: str
def get_calculator(self, **kwargs) -> Calculator:
from sevenn.sevennet_calculator import SevenNetCalculator
sevennet = SevenNetCalculator(self.model, device='cpu')
return sevennet
For more details, refer to the Build your own Graph section.
Updating Dataset Keys¶
In some cases, models may need to be defined to convert existing dataset keys into the format mlipx expects.
For example, you may need to provide isolated atom energies or convert data where energies are stored as atoms.info['DFT_ENERGY']
and forces as atoms.arrays['DFT_FORCES'].
Here’s how to define a model for such a scenario:
import mlipx
REFERENCE = mlipx.UpdateFramesCalc(
results_mapping={"energy": "DFT_ENERGY", "forces": "DFT_FORCES"},
info_mapping={mlipx.abc.ASEKeys.isolated_energies.value: "isol_ene"},
)