Molecule selections
One replayable contract for ranked and no-reference constrained molecule selection.
molecule-selection/1 separates exploration strategy, hard eligibility, ranking, and portfolio
construction. The document can be produced by HTTP, Python, CLI, UI, or an agent without semantic
loss.
No-reference constrained sample
{
"schema_version": "molecule-selection/1",
"database": {"database_id": "enamine-real-v5a"},
"references": [],
"strategy": {"type": "sample", "distribution": "route_product_tuple"},
"constraints": {
"presets": [{"preset_id": "lipinski-ro5", "version": "1"}]
},
"objectives": [],
"portfolio": {"limit": 1000},
"execution": {"quality": "balanced", "seed": 42},
"include": ["properties", "constraint_evidence", "execution_plan"]
}This means “condition the advertised route/product-tuple distribution on exact Lipinski eligibility, then return up to 1,000 products.” It does not mean “sample 1,000 arbitrary products and drop failures.” Validation expands the preset into ordinary registry conditions.
Ranked selection
The complete aspirin scaffold-different, alpha-amino-acid, MW-over-250 example is available in the Python builder guide. Its meaning is explicit: maximize ECFP4 similarity subject to exact product constraints and a different Bemis–Murcko scaffold. A shape-led scaffold hop instead needs a CHEESE shape objective and an explicit 2D-similarity cap.
Use POST /api/v2/selections:validate, then :estimate, then either bounded /selections or the
exact reusable /runs payload returned by the estimate. The service never silently weakens intent
or starts hidden durable work.