bio-retrosynthesis

SkillAI & models

Performs retrosynthetic planning using AiZynthFinder (template-based MCTS), maintained or version-pinned template-free models, ASKCOS, and emerging RetroSynFormer with explicit handling of route scoring, configurable MCTS rewards, building-block availability, and forward-prediction checks. Use when assessing synthetic feasibility of generated or selected molecules, planning multi-step syntheses, building synthesis-aware design pipelines, or screening libraries for retro-route feasibility.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the bio-retrosynthesis skill

What this skill tells your AI

The instructions your AI receives, as published by pku-yuangroup/openai4s in skills/bioskills/bio-chemoinformatics-retrosynthesis/SKILL.md and read by ahel’s review.

Version Compatibility

Reference examples tested with: AiZynthFinder 4.4+, RDKit 2024.09+, RDChiral 1.1+, and ASKCOS Lite 0.5+. Chemformer is archived legacy research code; if reproducing it, pin an exact repository commit, checkpoint, and configuration rather than assuming a current pip package or stable Python API.

Before using code patterns, verify installed versions match. If versions differ:

  • Python: pip show <package> then help(module.function) to check signatures
  • CLI: aizynthcli --version

If code throws ImportError, AttributeError, or TypeError, introspect the installed package and adapt the example to match the actual API rather than retrying.

Retrosynthesis

Plan synthetic routes from a target molecule back to commercially available building blocks. AiZynthFinder combines Monte Carlo Tree Search (MCTS), template-based expansion, configurable search rewards, and route scorers (Saigiridharan et al. 2024). Chemformer is a published template-free transformer baseline whose official repository is now archived; use its exact historical environment for reproduction or select a maintained model with a documented interface. ASKCOS is another open-source synthesis-planning platform. A useful workflow combines retrosynthesis with building-block availability and an independently configured forward-prediction check, while recognizing that a round-trip model match is not experimental validation.

For generative design pipelines that need synthetic feasibility, see chemoinformatics/generative-design. For reaction enumeration (forward direction), see chemoinformatics/reaction-enumeration.

Retrosynthesis Method Taxonomy

ToolApproachStrengthFails when
AiZynthFinder 4.4+Template-based MCTSMaintained, configurable open-source plannerBeyond selected policy coverage
Chemformer (archived)Template-free transformerReproducing the published baselineArchived code and checkpoint/config coupling
ASKCOSTemplate-based + neuralOpen-source synthesis-planning platformSetup complexity
Molecular TransformerForward + retro transformerSingle SMILES-to-SMILESLess robust to non-training distribution
RetroSynFormerDecision transformerModern methodLimited adoption

Decision: For most users, AiZynthFinder with its documented public USPTO expansion policy and a current stock is a practical open-source starting point. For high-stakes routes, apply expert review and an independently configured forward-prediction check; neither model agreement nor a solved search route is experimental validation.

Decision Tree by Scenario

ScenarioToolNotes
Standard medchem targetAiZynthFinder configured expansion policyRecord the public USPTO policy or licensed template source actually loaded
Novel chemotypeAiZynthFinder + maintained or exactly version-pinned template-free comparisonValidate each route independently
Generated molecules (REINVENT output)AiZynthFinder batchFilter to feasible routes
Multi-step synthesis planningAiZynthFinder + manual reviewTop-K routes
Validate generated routeMolecular Transformer forwardCheck round-trip
Cost-aware synthesisAiZynthFinder + custom building-block pricingScore weight
Disconnection-aware design (DAD)AiZynthFinder MCTS + verified rewards or post-search rerankingCompare route objectives explicitly
Patent-aware routesCustom template exclusionSpecialized

AiZynthFinder Setup

Goal: Configure AiZynthFinder with USPTO templates + a building-block stock and run MCTS retrosynthesis planning on a target SMILES.

Approach: Create a version-appropriate YAML configuration with the expansion policy and stock, instantiate AiZynthFinder from that file, set the target SMILES, then call tree_search() followed by build_routes(). Use the schema documented for the installed release rather than copying legacy policy / finder dictionaries.

from aizynthfinder.aizynthfinder import AiZynthFinder

finder = AiZynthFinder(configfile='config.yml')
finder.expansion_policy.select('uspto')  # key defined in config.yml
finder.stock.select('zinc')              # key defined in config.yml
# finder.filter_policy.select('uspto')   # optional configured filter
finder.target_smiles = 'CC(=O)Nc1ccc(C(=O)Nc2cccc(C(F)(F)F)c2)cc1'
finder.tree_search()
finder.build_routes()

Output: finder.routes, a RouteCollection containing ranked reaction_trees, initial scores, serialized route dictionaries, and route metadata.

Route Output Analysis

for tree, score in zip(finder.routes.reaction_trees, finder.routes.scores):
    leaves = list(tree.leafs())
    n_steps = len(list(tree.reactions()))
    print(f'Steps: {n_steps}, Score: {score}, Solved: {tree.is_solved}')
    print(f'In-stock: {sum(tree.in_stock(node) for node in leaves)} / {len(leaves)}')
    print(f'Building blocks: {[node.smiles for node in leaves]}')

Critical metrics:

  • Number of reactions: count tree.reactions(); do not assume graph depth and reaction count are interchangeable for branched routes
  • Score: interpret according to the configured scorer; scale and direction are scorer-specific
  • In-stock: how many leaf nodes are commercially available
  • Solved state: tree.is_solved is true only when all leaf nodes satisfy the configured stock criterion
  • Stock origin: record the selected stock name, source snapshot, and access date

Search Rewards and Route Scoring

AiZynthFinder retains the mcts search algorithm. It can combine configured search rewards through search.algorithm_config.search_rewards and corresponding weights, and it can rank completed routes with loaded scorers. There is no built-in mo_mcts algorithm or finder.mo_mcts configuration block. Available scorer names depend on the installed version, configuration, and plugins, so inspect the loaded scorers and use only documented names. If the desired objective is not available during search, export routes and rerank them explicitly after search.

Building Block Stocks

Stock sourceUseRequired provenance
ZINC-derived snapshotPublicly reproducible stock baselineDownload/source URL, filters, and snapshot date
Vendor building blocksPurchase-oriented route terminationVendor catalog version, region, and availability date
Make-on-demand catalogBroader route terminationCatalog release, synthesis/lead-time assumptions, and access date
Custom internal stockOrganization-specific availabilityInclusion rules, identifiers, prices, and refresh date

AiZynthFinder accepts HDF5 stocks built from plain-text SMILES with its documented smiles2stock command:

smiles2stock --files zinc_building_blocks.smi --output zinc.hdf5

Forward Validation with Molecular Transformer

AiZynthFinder predicts retrosynthesis (target -> precursors), while a forward model predicts products from reactants. For each proposed reaction step, serialize reactants and reagents in the format expected by the installed forward model, request its ranked product predictions, and compare standardized product structures with the planned product. The Molecular Transformer literature does not define a universal molecular_transformer.predict_forward Python function, so use the documented interface of the chosen implementation. Report the observed top-k round-trip match rate for the model, reaction representation, and dataset; no universal 30–50% pass rate is established by the AiZynthFinder 4.0 paper.

Template-Free with Chemformer

Chemformer uses a BART-style transformer trained on USPTO reactions for SMILES-to-SMILES prediction. Its official repository is archived and does not expose the Chemformer.load_pretrained(...).predict(...) convenience API sometimes shown in informal examples. To reproduce the published model, use the inference entry point, Hydra configuration, tokenizer, and checkpoint bundled with one pinned archived commit, and record that environment. For new work, prefer a maintained template-free implementation with a documented inference interface and benchmark it on the intended reaction domain.

Trade-off: A template-free model can propose disconnections outside a fixed template library, but its outputs require syntax checks, atom/reaction consistency checks, route-level review, and prospective validation. Treat it as a comparison or complementary hypothesis generator rather than assuming that merging its routes with AiZynthFinder is always superior.

Disconnection-Aware Design (DAD)

Modify generative design to also score retrosynthetic feasibility with AiZynthFinder batch mode.

Goal: Add retrosynthetic feasibility scoring to generative design pipelines for hundreds-to-thousands of candidate molecules.

Approach: Batch-process generated SMILES through aizynthcli, use the reported solved state and number of reactions for each route, and feed a documented feasibility definition back into the generative scoring function.

aizynthcli --smiles compounds.smi --output routes.json \
           --config config.yaml --policy uspto --stocks zinc

For each compound, returns top-K routes. Score-feasibility for generative design:

  • "Solved" = at least one extracted route has all leaves in the configured stock
  • "Short solved route" = a solved route whose reaction count is below a project-defined threshold
  • "Unsolved" = no extracted route is solved under the search budget and stock; this does not prove that the target is unsynthesizable

Cost-Aware Synthesis

Add building-block pricing as objective:

from rdkit import Chem

def route_cost(route, price_db):
    total = 0
    for leaf in route.leafs():
        smi = Chem.CanonSmiles(leaf.smiles)
        if smi not in price_db:
            raise KeyError(f'No observed building-block price for {smi}')
        total += price_db[smi]
    return total

Combine observed building-block prices with a project-specific reaction-cost model that documents labor, scale, yield, purification, and vendor assumptions. Do not apply a universal per-step cost.

Per-Tool Failure Modes

AiZynthFinder -- template coverage gap

Trigger: Target molecule uses bond formation not in training reactions.

Mechanism: USPTO templates are biased toward common transformations; novel chemistry (organometallics, exotic heterocycles) missing.

Symptom: No solved route or route uses unsuitable simplifications.

Fix: Use appropriately licensed additional templates, compare a maintained or exactly version-pinned template-free model, and perform manual review.

Chemformer -- non-canonical SMILES output

Trigger: Default Chemformer output.

Mechanism: Transformer can produce non-canonical SMILES variants.

Symptom: SMILES round-trip fails; validation tools confused.

Fix: Canonicalize Chemformer output via RDKit before comparing.

Route uses non-stock building block

Trigger: Leaf node not in stock database.

Mechanism: AiZynthFinder tree may end on non-purchasable molecules.

Symptom: Route "complete" but route has non-stock leaves.

Fix: Select routes whose ReactionTree.is_solved value is true, or explicitly require tree.in_stock(leaf) for every leaf. Expand the stock only when the additional availability definition is justified and versioned.

MCTS iteration limit too low

Trigger: Complex target requiring deep tree search.

Mechanism: MCTS may not find route in default 100 iterations.

Symptom: No routes returned despite plausible target.

Fix: Increase and record the iteration or time budget in a controlled sensitivity analysis, inspect policy coverage and stock termination, and stop when additional search no longer changes the route conclusions. No fixed budget is universally adequate.

Forward validation fails

Trigger: Retro route uses chemistry that doesn't actually work in forward.

Mechanism: Template-based retro lacks reaction conditions / catalysts; forward prediction more conservative.

Symptom: Forward predicts different product than target.

Fix: Use as confidence signal, not rejection; many routes don't round-trip but are still valid synthesis-wise.

Building block stock obsolete

Trigger: Old ZINC catalog used; building blocks no longer purchasable.

Mechanism: Commercial catalogs and regional availability change over time.

Symptom: Routes recommend unavailable building blocks.

Fix: Refresh and date the selected stock snapshot, and verify vendor availability before synthesis.

Reconciliation: AiZynthFinder vs Chemformer

AspectAiZynthFinderChemformer
ApproachTemplates + MCTSTransformer encoder-decoder
SpeedFast for shallow treesSingle-pass per target
InterpretabilityHigh (template + atom mapping)Low (black box)
Novel disconnectionsLimited by selected templatesCan emit hypotheses outside a fixed template library, with no guarantee of validity
Production maturityMaintained open-source packageOfficial repository archived; reproduce only with a pinned environment
CostCPUGPU recommended

If comparing both, standardize and validate their outputs independently before combining route hypotheses.

Common Errors

SymptomCauseFix
tree_search() returns no routesSearch budget, policy coverage, or stock criterionInspect each factor; compare a maintained or exactly version-pinned alternative
All extracted routes contain many reactionsComplex target or unsuitable disconnectionsCompare scorer values and alternatives; review manually
Route appears solved but stock status is unclearReading node attributes instead of the route API, or stale stock provenanceCheck tree.is_solved and tree.in_stock(leaf); record the stock snapshot
Building block price not foundCompound not in pricing DBUse Enamine quote or vendor inquiry
Chemformer truncates SMILESToken limitIncrease max_length
Forward prediction wrongOut-of-distribution reactionUse as confidence signal only
MCTS slow on simple targetDefault configReduce time_limit; use smaller template set

References

  • Saigiridharan L, Hassen AK, Lai J, Torren-Peraire P, Engkvist O, Genheden S. "AiZynthFinder 4.0: developments based on learnings from 3 years of industrial application." J. Cheminform. 16:57 (2024). DOI: 10.1186/s13321-024-00860-x.
  • Irwin R et al. "Chemformer: a pre-trained transformer for computational chemistry." Mach. Learn.: Sci. Technol. 3:015022 (2022). DOI: 10.1088/2632-2153/ac3ffb.
  • Schwaller P et al. "Molecular Transformer: A Model for Uncertainty-Calibrated Chemical Reaction Prediction." ACS Cent. Sci. 5:1572–1583 (2019). DOI: 10.1021/acscentsci.9b00576.
  • Tu Z et al. "ASKCOS: Open-Source, Data-Driven Synthesis Planning." Acc. Chem. Res. 58:1764–1775 (2025). DOI: 10.1021/acs.accounts.5c00155.
  • Granqvist E, Mercado R, Genheden S. "Retrosynformer: planning multi-step chemical synthesis routes via a decision transformer." Digital Discovery 5:348–362 (2026). DOI: 10.1039/D5DD00153F.
  • AiZynthFinder 4.4 Python interface and policy/stock selection: https://molecularai.github.io/aizynthfinder/python_interface.html.
  • AiZynthFinder configuration documentation: https://molecularai.github.io/aizynthfinder/configuration.html.
  • Chemformer official archived repository: https://github.com/MolecularAI/Chemformer.

Related Skills

  • chemoinformatics/molecular-io - Parse target and route SMILES
  • chemoinformatics/molecular-standardization - Standardize before retrosynthesis
  • chemoinformatics/generative-design - Add synthetic feasibility to scoring
  • chemoinformatics/reaction-enumeration - Forward direction (template enumeration)
  • chemoinformatics/admet-prediction - Filter targets before retrosynthesis

Signals

GitHub stars
404
Forks
48
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
bio-retrosynthesis
Source
github.com/pku-yuangroup/openai4s