License notice. By downloading, accessing, using, distributing, or creating a derivative of LULA-2, you agree to the Om LULA Community License 1.3. LULA-2 is open-weight, not OSI open source. It may be used for research, evaluation, benchmarking, teaching, local inference, local fine-tuning, and Permitted Om Fulfillment Use. Commercial local/open-weight use outside Om Fulfillment, hosted API/SaaS access, resale, paid support or deployment, product bundling, and competing model services require a separate written Om commercial license. You may not publish, distribute, or make available raw or bulk LULA-2 Outputs, including scores, predictions, rankings, embeddings, screened molecule lists, or benchmark datasets, unless Om gives prior written approval. Public disclosure rights are limited to customer-derived experimental data, analyses, conclusions, and reports from molecules purchased through Om Fulfillment. For commercial licensing, contact dmc@omtx.ai.
LULA-2
LULA-2 is an Om cross-attention protein-ligand scorer. It takes an amino-acid protein sequence and ligand SMILES, then returns a probability-like binding score and within-batch ranks. The local scorer does not require a protein structure, docking, or folding step.
This repository contains the LULA-2 open-weight checkpoint, model configuration, inference-window configuration, and a release manifest with byte counts and SHA256 hashes. It does not bundle third-party pretrained encoders; the SDK downloads ESM-2 and ChemBERTa from Hugging Face at first use. See NOTICE.
Benchmark Snapshot
On public no-structure protein-ligand benchmark data covering 503 proteins and 14,139 protein-ligand pairs, LULA-2 ranked known binders ahead of non-binders substantially better than Boltz2.
| Metric | LULA-2 | Boltz2 |
|---|---|---|
| Pooled AUROC | 0.819 | 0.543 |
| Pooled AUPRC | 0.900 | 0.735 |
| Pooled BEDROC20 | 0.969 | 0.843 |
| Per-target AUROC wins | 123 | 57 |
The per-target AUROC comparison uses the 190 targets that had both binder and non-binder examples; 10 additional targets were ties. For this benchmark, "no-structure" means the selected proteins had no close experimental PDB sequence match at audit time (<40% sequence identity). This is a ranking benchmark only. It does not mean LULA-2 identifies a binding site or explains the binding mechanism, and some ligands in the benchmark also appear in the training data. Read this as a public ranking benchmark, not a test of entirely new chemistry.
Example Workflows
LULA-2 is designed for a simple customer workflow: start from a protein sequence, score candidate molecules, rank the most promising structures, and decide what to order or validate next. The examples below show how Om presents that workflow across benchmarking, validation, target coverage, and model interpretability.
Public No-Structure Benchmark
A visual summary of the 503-protein benchmark above. The key takeaway is that LULA-2 can rank likely binders from sequence and SMILES alone, without requiring a target structure, docking run, or folding step.
Sequence-To-Validation Example
A validation example from an earlier Om model, showing the intended path from sequence-first predictions to experimentally tested molecules. The same product loop applies to LULA-2: score molecules, choose a set, order or validate them, then use the results to improve the next round.
Target-Family Coverage
An example of how Om summarizes performance across protein families. This helps teams decide where a model is strongest and where additional customer-specific fine-tuning or validation data may be useful.
Interpretable Ranking Signals
An example of how LULA attention can be inspected after scoring. These views can help scientists review model behavior, but they should be treated as interpretability signals rather than guaranteed binding-site or mechanism predictions.
Files
model/best.pt- LULA-2 cross-attention checkpoint.model/model_config.json- architecture and encoder dimensions.model/inference_config.json- protein-windowing and tokenizer settings.release_manifest.json- public checksum manifest verified by the SDK.examples/- small local scoring and fine-tuning examples.notebooks/lula2_quickstart.ipynb- notebook quickstart.
Install And Download
Use omtx[lula]>=2.0.20, the first Om SDK release with LULA-2 local scoring
and fine-tuning support.
pip install "omtx[lula]>=2.0.20"
hf auth login
omtx lula download --model lula2
omtx lula verify --model lula2
Full workflow cookbooks:
LULA Score To Order,
Om Accessible Space To Order, and
Explicit SMILES.
To verify a local checkout of this repository without downloading from Hugging Face:
omtx lula verify --model-root . --model lula2
Score
omtx lula score \
--model lula2 \
--protein examples/protein.fasta \
--smiles examples/molecules.smi
from pathlib import Path
from omtx.lula import load_model
def read_fasta(path: str) -> str:
return "".join(
line.strip()
for line in Path(path).read_text().splitlines()
if line and not line.startswith(">")
)
model = load_model("lula2")
records = model.score(
protein_sequence=read_fasta("examples/protein.fasta"),
smiles=["CC(=O)Nc1nnc(s1)S(N)(=O)=O", "CC(=O)OC1=CC=CC=C1C(=O)O"],
)
for row in sorted(records, key=lambda item: item["rank"]):
print(row["rank"], f"{row['score']:.6f}", row["smiles"])
Common Workflows
Use smiles=[...] when you want to score molecules you already have. This is
local open-weight scoring after model and encoder setup.
from omtx.lula import load_model
protein_sequence = "MKTAYIAKQRQISFVKSHFSRQLEERLGLIEVQANN"
smiles = [
"CCOc1ccc2nc(S(N)(=O)=O)sc2c1",
"Cn1ccnc1CCNCc1cn(-c2ccc(F)c(Cl)c2)nn1",
"CCO",
]
model = load_model("lula2")
scores = model.score(protein_sequence=protein_sequence, smiles=smiles)
Use source="om" and a Wallet Credit tier when you want Om to return orderable
molecules from Om Accessible Space. This requires an Om API key. For local
open-weight scoring, the SDK fetches the authenticated molecule slice without
sending your protein sequence to Om.
from omtx import OmClient
from omtx.lula import load_model
protein_sequence = "MKTAYIAKQRQISFVKSHFSRQLEERLGLIEVQANN"
with OmClient(api_key="your-api-key") as client:
model = load_model("lula2")
scores = model.score(
protein_sequence=protein_sequence,
source="om",
tier=50,
n=50000,
client=client,
)
Only Om Accessible Space rows include source_metadata and can be ordered
directly with Wallet Credits:
from uuid import uuid4
from omtx import OmClient
selected = sorted(scores, key=lambda row: row["score"], reverse=True)[:96]
with OmClient(api_key="your-api-key") as client:
order = client.molecules.order(
items=selected,
shipping_address_id="your-shipping-address-id",
idempotency_key=f"order-round-1-{uuid4()}",
)
Fine-Tune With Customer Data
The fine-tuning API is intentionally simple: input base checkpoint plus customer CSV, output a new checkpoint directory. The CSV must contain exactly the customer's labeled examples, with these required columns:
target_id,protein_sequence,smiles,label,split
split is required. Use train for training rows and test for the customer
holdout. The SDK rejects train/test duplicate target-protein-SMILES examples and
requires both positive and negative labels in each split.
Default LULA-2 fine-tuning uses 10 epochs, learning rate 1e-5, batch size 64,
and saves an intermediate checkpoint every epoch plus final/. The pretrained
protein and ligand encoders stay frozen. The trainable surface is the LULA-2
adapter, attention-pooling, and scoring-head layer set.
omtx lula finetune examples/finetune_customer.csv \
--model lula2 \
--out lula2-finetuned-ca2
omtx lula score \
--model lula2 \
--model-root lula2-finetuned-ca2/final \
--protein examples/protein.fasta \
--smiles examples/molecules.smi
Programmatic use:
from omtx.lula import finetune_lula
result = finetune_lula(
"examples/finetune_customer.csv",
model_id="lula2",
out="lula2-finetuned-ca2",
)
print(result.final_model_root)
print(result.metrics)
Local Data Behavior
After the weights and third-party encoders are downloaded, local scoring and fine-tuning run on the user's machine. Protein sequences, SMILES, labels, and fine-tuned checkpoints are not uploaded by the SDK scoring or fine-tuning commands.
Hosted Om scoring is a separate product surface.
Free to Use With Om Fulfillment
You may use LULA-2 locally, including local fine-tuning, to select, prioritize, order, and test molecules through Om.
If you purchase molecules through Om Fulfillment, you may use the resulting customer-derived experimental data, assay results, validation data, analyses, conclusions, and reports internally and commercially for your own discovery programs, subject to the License and the applicable Om fulfillment, platform, or enterprise agreement.
You may not resell LULA-2, host it as an API/SaaS, provide LULA-powered services to third parties, or use LULA-2 as a free internal commercial screening engine while ordering or testing outside Om. Those uses require a separate Om commercial license.
You own your targets, compounds, and Customer-Derived Om Fulfillment Data, subject to the applicable Om fulfillment, platform, or enterprise agreement. This does not include a right to publish raw or bulk LULA-2 Outputs, scores, predictions, rankings, embeddings, screened molecule lists, virtual screening results, or benchmark datasets without Om's prior written approval.
Score To Order
Use LULA Score To Order
for hosted LULA-2 Om Accessible Space scoring, local open-weight scoring,
shipping address lookup, and Wallet Credits-funded Molecule Fulfillment orders.
License
Weights are released under the Om LULA Community License 1.3. By downloading,
accessing, using, distributing, or creating a derivative of LULA-2, you agree to
that license. See LICENSE for the full terms and NOTICE for third-party
components.
Summary (the LICENSE file governs):
- Allowed without a separate paid model license - non-commercial research, evaluation, benchmarking, teaching, security testing, local inference, local fine-tuning, non-commercial demos, using LULA-2 to select, prioritize, order, test, or generate data through Om, and use or publication of Customer-Derived Om Fulfillment Data as allowed by the License and the applicable Om agreement.
- Output publication restriction - raw or bulk LULA-2 Outputs, including scores, predictions, rankings, embeddings, screened molecule lists, virtual screening results, or benchmark datasets, may not be published, distributed, or made available without Om's prior written approval.
- Requires a separate Om commercial license - commercial use of local/open- weight LULA-2 itself outside Om Fulfillment, commercial screening or production discovery not fulfilled through Om, self-hosting, monetized hosting, paid API/SaaS access, reselling model access, support/deployment, third-party services, bundling LULA-2 into a paid product, or building a competing model API around Om weights.
- Commercial licensing contact - email dmc@omtx.ai.
- Publication attribution required - permitted public papers, preprints,
reports, or presentations using Customer-Derived Om Fulfillment Data must cite
Om Therapeutics Inc. LULA-2, checkpoint
maxcontext_v2_epoch_3656, and the Hugging Face model page.
Release Manifest
The SDK verifies every file listed in release_manifest.json before loading the
model. The manifest intentionally lists only public-safe files needed for local
inference and fine-tuning.




