Single-step retrosynthesis
SkillSearchGenerate ranked one-step precursor sets for a product with RetroChimera; use for disconnection ideas or expansion-policy calls. Do not recurse, search stock, or call the result a complete route.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Single-step retrosynthesis skill
What this skill tells your AI
The instructions your AI receives, as published by pku-yuangroup/openai4s in skills/single-step-retrosynthesis/SKILL.md and read by ahel’s review.
Answer one scientific question: given one product, which precursor sets could
produce it in one reaction? Do not recurse, check stock, invent conditions, or
call the output a synthesis route. Hand accepted candidates to
retrosynthesis_planning for multi-step search.
Use RetroChimera 1 as the default. Its ensemble combines edit-based and de-novo components, exposes a direct Syntheseus-compatible Python API, and publishes Pistachio, USPTO-FULL, and USPTO-50K checkpoints. The OpenAI4S adapter already runs it in an isolated process so PyTorch and model dependencies never enter the stdlib core.
Run through the checked adapter
Create a separate environment and install the model:
conda create -n retrochimera python=3.10 -y
conda run -n retrochimera python -m pip install "retrochimera==1.2.0"
The USPTO-50K checkpoint uses RetroChimera's Graphium architecture and requires
"retrochimera[graphium]==1.2.0" instead. Install that extra before using the
smaller checkpoint as a smoke test.
Acquire and verify a reviewed checkpoint with
retrosynthesis_planning/model_deployment.py; keep weights outside git. Then:
The checked adapter and deployment notes are deliberately owned by the
retrosynthesis_planning Skill. A delegated specialist that runs this recipe
must therefore be allowlisted for both single-step-retrosynthesis and
retrosynthesis_planning; loading a Skill never widens that allowlist. Load and
read the dependency through the Skill APIs before importing it:
host.load_skill("retrosynthesis_planning")
backend_notes = host.skills.read("retrosynthesis_planning", "MODEL_BACKENDS.md")
If either call is refused, stop and ask the caller to add the dependency to the
specialist profile. Do not bypass the gate with workspace file reads or a ../
resource path. Once access is confirmed, the USPTO-50K smoke-test checkpoint
created by those notes lives under the same workspace root. Run the adapter:
from pathlib import Path
from retrosynthesis_planning.external_backends import SyntheseusBackend
workspace = Path.cwd().resolve()
model_dir = workspace / "models" / "retrochimera" / "uspto50k"
manifest = model_dir / "model-manifest.json"
backend = SyntheseusBackend(
model="RetroChimera",
model_dir=model_dir,
manifest=manifest,
python_command=(
"conda",
"run",
"--no-capture-output",
"-n",
"retrochimera",
"python",
),
)
result = backend.single_step("Oc1ccc(OCc2ccccc2)c(Br)c1", num_results=5)
for proposal in result["predictions"]:
print(proposal["rank"], proposal["reactants_smiles"], proposal["score"])
Require a path-free manifest containing model version, checkpoint ID and hash, training dataset, and code/weight licenses. Leave automatic model download off. The adapter caps requests at ten candidates because low-ranked beams become increasingly hallucination-prone.
Compare candidates correctly
- Canonicalize each molecule, sort dot-separated components, and collapse exact duplicate precursor sets before comparing models.
- Preserve raw rank and raw model score. Do not calibrate a probability without a held-out set matching the deployment domain.
- Reject unparsable outputs and obvious atom/charge pathologies, but label this as structural screening rather than feasibility validation.
- Use
reaction-forward-predictionfor round-trip product recovery andreaction-atom-mappingonly after both sides of a proposed reaction are known. - Keep disagreements between edit-based and sequence-based models as review diversity; do not average scores from unlike models.
For a class-unknown benchmark, run the deterministic protocol after model inference. The protocol fails closed without RDKit because identity/string fallbacks would corrupt exact-match science; install the repository's optional chemistry environment first:
uv sync --extra chemistry
Then normalize the frozen public output:
uv run python skills/retrosynthesis_planning/single_step_benchmark.py normalize \
--targets input/targets.csv \
--predictions results/predictions.jsonl \
--model-manifest input/model_manifest.json \
--top-k 10 \
--output results/intermediate_results.json
The public target CSV is intentionally strict: it accepts only target_id and
product_smiles, so a reaction class, reference precursor, patent identifier,
or accidental extra column fails closed. Run evaluate only in the separate
evaluator process after predictions are frozen:
uv run python skills/retrosynthesis_planning/single_step_benchmark.py evaluate \
--targets input/targets.csv \
--predictions results/predictions.jsonl \
--references private_evaluator/reference_precursor_sets.jsonl \
--top-k 10 \
--output private_evaluator/metrics.json
The evaluator compares dot-separated precursor molecules as unordered multisets, preserves invalid and duplicate beams, scores each target before aggregation, and supports multiple recorded precursor sets per product. It does not turn patent-record recovery into a feasibility label.
Optional diversity model
Use sagawa/ReactionT5v2-retrosynthesis when a second sequence model is useful.
It is MIT, 0.2B parameters, and loads directly through Transformers. Record
whether the checkpoint is the ORD-pretrained model or the USPTO-50K fine-tune:
their benchmark meanings are very different. It is not the default proposal
model.
Output contract
Return product SMILES, ordered precursor sets, model/checkpoint provenance, raw scores, parse status, duplicate group, and explicit caveats. A precursor set is a hypothesis for chemist review, not evidence of literature precedent, selectivity, available conditions, yield, safety, or experimental success.
Failure modes
| Symptom | Action |
|---|---|
model_dir is required | Install a reviewed checkpoint and pass its directory; do not enable an implicit download. |
| backend timeout or OOM | Lower num_results, use the smaller USPTO-50K checkpoint for a smoke test, or move the isolated worker to a GPU environment. |
| many invalid or repeated beams | Stop expanding the beam; report low candidate diversity and try an independent model. |
| high score but failed forward recovery | Keep it as a disagreement requiring chemistry review; never overwrite either raw result. |
Primary model source: https://github.com/microsoft/retrochimera. Read deployment
details and reviewed checkpoint metadata with
host.skills.read("retrosynthesis_planning", "MODEL_BACKENDS.md") after the
dependency has been allowed and loaded.
Signals
- GitHub stars
- 404
- Forks
- 48
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
single-step-retrosynthesis- Source
- github.com/pku-yuangroup/openai4s