aqvolt26-models / README.md
omaraq's picture
Update README.md
8b693c9 verified
metadata
license: other
extra_gated_prompt: >-
  The AQVolt26 models and dataset are for non-commercial use. If you want to
  work with us or discuss obtaining a commercial license, please contact us
  directly at materials@sandboxaq.com.
extra_gated_fields:
  First Name: text
  Last Name: text
  Company Name or Affiliation: text
  Role or Job Title: text
  I want to use the AQVolt26 models and datasets for: text
  I agree to use the AQVolt26 models and datasets are for non-commercial use ONLY: checkbox
tags:
  - chemistry
  - materials-science
  - machine-learning
  - computational-chemistry
  - dft
  - batteries

AQVolt26 Universal Potentials 🔋

AQVolt26 Overview

This repository contains AQVolt26 model checkpoints. The models released currently are based on the Smooth Energy Network (eSEN) architecture, co-trained with a combination of datasets.

Please see our blog and paper for more details about the impact of the models and dataset.

1. Model Installation

This section details how to install and run the eSEN models.

Step 1.1: Create Environment

First, create and activate a new micromamba (or conda) environment with Python 3.10.

micromamba create -n aqvolt python=3.10
micromamba activate aqvolt

Step 1.2: Install Dependencies

Install all the required libraries

pip install huggingface_hub datasets pandas jupyterlab ase fairchem-core --no-input

Step 1.3: Log in to Hugging Face

If you don't have one, create an account at huggingface.co.

Create an Access Token: Navigate to your Settings -> Access Tokens page or click here. Create a new token with at least read permissions. Copy this token to your clipboard.

Step 1.4: Download the AQVolt26 Models

Access via Jupyter Lab:

Open your terminal or command prompt and type

python -m ipykernel install --user --name=aqvolt --display-name="aqvolt"
jupyter lab

This will open a tab in your web browser. Open a new Jupyter notebook. Make sure that your notebook is using the Python environment where the packages installed above are located when selecting your kernel. Type the following into a cell

import torch
from huggingface_hub import hf_hub_download

You can access the foundational potential more suited to off-equilibrium tasks at this checkpoint named aqvolt-esen.pt or the version more suited to tasks near 0K called aqvolt-mp-esen.pt.

model_path = hf_hub_download(
  repo_id="SandboxAQ/aqvolt26-models",
  filename="aqvolt-esen.pt", 
  token=<YOUR-TOKEN>
)

Load the model as an ASE-compatible calculator

from fairchem.core import FAIRChemCalculator
from fairchem.core.units.mlip_unit import load_predict_unit

predictor = load_predict_unit(path=model_path)
calc = FAIRChemCalculator(predictor)

2. Model Usage

You can test the model with a subset of the AQVolt26 test data

from datasets import load_dataset
dataset = load_dataset("SandboxAQ/aqvolt26-dataset-subset", split="test", token=<YOUR-TOKEN>)

from ase import Atoms
atoms = Atoms(**dataset[0]['atoms'])
atoms.calc = calc

print(atoms.get_potential_energy())
print(atoms.get_forces())
print(atoms.get_stress())

Example: Run a Molecular Dynamics NpT simulation with an AQVolt26 model:

Set the desired inputs

temperature = 400 # in Kelvin
pressure = 1 # in atm
timestep = 1 # in fs
interval = 1 # frequency of data logging, 1 for every frame
nsteps = 10 # MD steps to run

Convert the inputs into the correct units

import numpy as np
import scipy.constants as const
from ase import units

pressure_pa = pressure * const.atm  
angstrom_to_meter = const.angstrom  
joule_to_ev = 1 / const.e 
pressure_ev_per_cubic_meter = pressure_pa * joule_to_ev
conversion_factor_m3_to_A3 = angstrom_to_meter**3
pressure_ev_per_cubic_angstrom = pressure_ev_per_cubic_meter * conversion_factor_m3_to_A3

Scale the initial velocity

from ase.md.velocitydistribution import MaxwellBoltzmannDistribution
MaxwellBoltzmannDistribution(atoms, temperature_K=temperature)

Feed in the MD inputs

from ase.md.npt import NPT
dyn = NPT(
    atoms=atoms, 
    timestep=timestep * units.fs, 
    temperature_K=temperature, 
    externalstress=pressure_ev_per_cubic_angstrom, 
    ttime=float(25.0) * units.fs,
    pfactor=float(75.0**2.0) * units.fs,
    mask=np.array([(1, 0, 0), (0, 1, 0), (0, 0, 1)]) # mask for isotropic pressure
)

Set up a logger to monitor your run

from ase.md.logger import MDLogger
logger = MDLogger(
    dyn,
    atoms,
    'aqvolt.log',
    header=True,
    peratom=False,
    stress=False,
)
dyn.attach(logger, interval=interval)

Define your trajectory file to read the generated configurations

from ase.io import read, write, Trajectory
traj = Trajectory('aqvolt.traj', 'w', atoms)
dyn.attach(traj.write, interval=interval) 

Run the NpT simulation for the desired period of time

dyn.run(nsteps)

3. How to Cite

If you use the AQVolt26 models or dataset in your research, please cite the following paper:

Jiyoon Kim, Chuhong Wang, Aayush R. Singh, Tyler Sours, Shivang Agarwal, AJ Nish, Paul Abruzzo, Ang Xiao, Omar Allam. (2026). AQVolt26: High-Temperature r2SCAN Halide Dataset for Universal ML Potentials and Solid-State Batteries. arXiv preprint arXiv:XXXX.XXXXX.

BibTeX Entry

@article{kim2026aqvolt26hightemperaturer2scanhalide,
      title={AQVolt26: High-Temperature r2SCAN Halide Dataset for Universal ML Potentials and Solid-State Batteries}, 
      author={Jiyoon Kim and Chuhong Wang and Aayush R. Singh and Tyler Sours and Shivang Agarwal and AJ Nish and Paul Abruzzo and Ang Xiao and Omar Allam},
      year={2026},
      eprint={2604.02524},
      archivePrefix={arXiv},
      primaryClass={cond-mat.mtrl-sci},
      url={https://arxiv.org/abs/2604.02524}, 
}