GRASP-A3
The completed Step 2 encoder from the full-size A3 experiment: 93,089,496 encoder parameters, 12 layers and width 768. This is the exact checkpoint evaluated in the A3 OpenADMET comparison, converted to safetensors without changing tensors. The repository includes an installable loader with A3βs factorized atom pipeline, model configuration, provenance, validation and evaluation tables.
Test in Google Colab
- Download the quickstart notebook.
- Open Google Colab and upload it using File β Upload notebook.
- Use a fresh Python runtime. A GPU is optional for the small smoke test; select one in Runtime β Change runtime type if you want GPU inference.
- Run the cells in order. No Hugging Face login is required for this public model.
The notebook resolves a single immutable Hub revision, verifies the audited loader and safetensors hashes, loads A3 and saves example embeddings. It also provides an optional own-CSV fine-tuning template. Only run that template after supplying separate train/validation CSVs; the default smoke test does not start benchmark training. The notebook stops if the published weights/loader differ from the audited release.
The bundled loader is required: older GRASP notebooks that install an earlier
loader must update their install cell before using A3. Restart a runtime if it has
already imported an older grasp module. AutoModel is not the loading API for
this release; use GRASPEncoder as shown below.
Install and encode
Use Python 3.10β3.13 and install the A3-compatible loader wheel:
python -m pip install "https://huggingface.co/caithmac/GRASP-A3/resolve/main/grasp_molecular-0.1.2-py3-none-any.whl"
Restart a notebook kernel if it already imported an older grasp package.
The older A1/A2 loader does not support A3's factorized inputs.
from grasp import GRASPEncoder
encoder = GRASPEncoder.from_pretrained("caithmac/GRASP-A3")
vectors = encoder.encode(["CCO", "N[C@@H](C)C(=O)O"])
print(vectors.shape) # (2, 768)
The default device is CUDA when available, otherwise CPU. Use device="cpu" when
loading to select CPU explicitly. The repository also includes example.py for a small embedding smoke test. Embeddings are final-layer CLS vectors.
Fine-tune on your own task
Use separate train and validation CSVs with smiles,target columns:
from grasp.train import fit
from grasp import GRASPPredictor
fit(model_source="caithmac/GRASP-A3", train_csv="train.csv", valid_csv="valid.csv",
output_dir="my_a3_predictor", task="regression", method="full")
predictor = GRASPPredictor.from_pretrained("my_a3_predictor")
predictions = predictor.predict(["CCO"])
Tasks are regression or binary; binary targets must be 0/1. Adaptation methods
are full, lora and frozen. The predictor learns a four-layer mixture and atom
attention pooling plus a nonlinear task head. The package includes an encoder,
not pretrained endpoint-specific prediction heads. Training-set/validation-set
overlap is rejected by canonical molecular identity.
Inputs and training
A3 retains A2's bond and stereo channels and omits absolute positions. Seven categorical atom fields replace the opaque atom embedding: element, degree, total hydrogens, formal charge, aromaticity, ring membership and hybridization. Input schema version 1 distinguishes PAD, UNKNOWN, MASK and CLS. Isotope mass is not an explicit field. The loader preserves salts, charges, tautomers and specified stereochemistry as parsed by RDKit; it does not silently standardize them.
Step 1 used the recorded 1,538,242,560-presentation ZINC20 budget. Presentations are not a guarantee of unique molecule coverage. A3 also changed the generator targets and whole-atom corruption to operate on seven fields. Therefore this is a joint representation/training-objective ablation, not a representation-only causal experiment. GDES remains the embedding-sharing mechanism.
Step 2 used the same audited 511,897 molecules, 642 binary assay tasks and 50,000 updates as the matched arms. Continuous and censored ChEMBL supervision has not been added to this checkpoint. Source checkpoint SHA256:
ff491d5dcb183d5771abc102ebfcad0ba4c031adbf4077858484e50698a914b2
Evaluation and validation
On the three shared OpenADMET cluster splits, matched replicate 0, A3's mean
endpoint MAE is 0.358857, versus A2 0.366232, A1 0.368588 and matched
original-architecture control 0.370232. A3 is lower on 16/23 endpoints versus A2.
See evaluation/endpoint_comparison.csv. Those scores use full encoder fine-tuning
with the mixed-layer predictor; they are not scores for frozen CLS embeddings.
The macro mixes endpoint scales and is descriptive. One pretrained checkpoint per
arm does not establish repeat-stable superiority or chemical causality.
validation_report.json records actual installed-wheel checks: tensor identity,
strict loading, parity with EIDF inputs/embeddings, stereo/permutation controls and
tiny adaptation/save-reload smoke checks. The loader test suite covers original
GRASP/A1/A2 compatibility and A3's feature, adaptation and schema paths. Tiny fits
are software checks, not new benchmark measurements. The package accepts at most
511 atoms plus CLS; long-molecule transfer has not been established here.
At this release (2026-10-27), TDC evaluation for A3 is deferred in the experiment queue. AqSolDB remains blocked with its official test unchanged. No new benchmark-overlap audit or GPU performance benchmark was performed for this package.
License and contents
Weights and MolE-derived code use CC BY-NC 4.0 (LICENSE, vendor/MOLE_LICENSE).
The bundled DeBERTa code uses the MIT license (vendor/DEBERTA_LICENSE). See NOTICE.
This package includes safetensors, configuration, legacy graph-preprocessing
vocabulary, the installable loader, provenance, validation, evaluation tables and
an example. The vocabulary is retained for graph preprocessing; A3's embedding
lookup uses the seven factorized tables.
Python 3.10β3.13 is supported by package metadata; Python 3.12 is the tested local
runtime. RDKit is pinned to 2025.3.6 to preserve the feature schema. Exact tested
package versions are recorded in requirements-tested.txt. The release smoke checks were run on local CPU;
a Google-hosted Colab GPU runtime was not executed during publication.
- Downloads last month
- 45