← NVIDIA BioNeMo Agent ToolkitCONTENT HISTORY

Update to NVIDIA BioNeMo Agent Toolkit

Snapshot Sep 30, 2026 · 23:14 UTC · version 0.1.0

Collection source: not recorded for this historical snapshot.

WHAT CHANGED · RULE-BASED ANALYSIS

First saved snapshot

No earlier snapshot is available to establish a change.

Compare saved observations

Download comparison JSON
Full technical diff · 0 changed fields
Full snapshot data
{
  "name": "diffdock-nim",
  "description": "Run DiffDock molecular docking via NVIDIA NIM to predict small-molecule binding poses against protein targets. Use for DiffDock, molecular docking, ligand docking, blind docking, SMILES or SDF ligands, ranked poses, confidence scores, hosted NVIDIA API, or local Docker deployment.",
  "included_files": [
    {
      "relative_path": "references/api.md",
      "size_in_bytes": 4636
    },
    {
      "relative_path": "references/examples.md",
      "size_in_bytes": 2092
    },
    {
      "relative_path": "references/parameters.md",
      "size_in_bytes": 1738
    },
    {
      "relative_path": "references/science.md",
      "size_in_bytes": 1974
    },
    {
      "relative_path": "references/validation.md",
      "size_in_bytes": 1793
    }
  ],
  "skill_md_contents": "---\nname: diffdock-nim\ndescription: >\n  Run DiffDock molecular docking via NVIDIA NIM to predict small-molecule binding poses against protein targets. Use for DiffDock, molecular docking, ligand docking, blind docking, SMILES or SDF ligands, ranked poses, confidence scores, hosted NVIDIA API, or local Docker deployment.\nlicense: Apache-2.0 AND CC-BY-4.0\ncompatibility: \"requests>=2.28\"\nallowed-tools: Bash, Read, Write, AskUserQuestion\n---\n\n# DiffDock NIM\n\nPredict protein-ligand binding poses with blind docking. Use this `SKILL.md` for\nfirst-pass hosted/local usage; load supplemental files only when needed:\n\n- `references/api.md`: exact hosted/local endpoints, schemas, Docker flags.\n- `references/science.md`: docking use cases, limits, and handoffs.\n- `references/parameters.md`: ligand formats, pose counts, diffusion controls.\n- `references/validation.md`: receptor, ligand, pose, and confidence checks.\n- `references/examples.md`: compact hosted/local and pose-saving patterns.\n\n## Choose Mode\n\nAsk only when context is unclear:\n\n> Hosted NVIDIA API or local Docker NIM?\n\n- Hosted: `https://health.api.nvidia.com/v1/biology/mit/diffdock`\n- Local: `http://localhost:8000/molecular-docking/diffdock/generate`\n\nThe hosted and local paths differ. Local has no `/v1/` prefix and uses the\n`/molecular-docking/` route. Hosted requests use `Authorization: Bearer $NGC_API_KEY`. Supported local Docker\nstartup uses `NGC_API_KEY` (or `NVIDIA_API_KEY` via the preflight) for\nregistry login, entitlement checks, and first-run model downloads; pass it\ninto the container with `-e NGC_API_KEY`. Local inference requests use no\nauth header after readiness. Warm-cache key-free startup varies by\nimage/version and should not be assumed.\n\n## Local Docker\n\nFor local setup answers, copy the preflight below exactly. Keep the optional\n`.env` load, `NVIDIA_API_KEY` fallback, `LOCAL_NIM_CACHE`,\n`NVIDIA_VISIBLE_DEVICES=0` default, `--shm-size=2G`, and both `--ulimit` flags.\n\n```bash\nset -a\n[ -f .env ] && . ./.env\nset +a\n\nif [ -z \"${NGC_API_KEY:-}\" ] && [ -n \"${NVIDIA_API_KEY:-}\" ]; then\n  export NGC_API_KEY=\"$NVIDIA_API_KEY\"\nfi\n: \"${NGC_API_KEY:?Set NGC_API_KEY or NVIDIA_API_KEY}\"\n: \"${LOCAL_NIM_CACHE:?Set LOCAL_NIM_CACHE}\"\n\necho \"$NGC_API_KEY\" | docker login nvcr.io --username '$oauthtoken' --password-stdin\n\nexport NIM_TEST_GPU=\"${NIM_TEST_GPU:-0}\"\nmkdir -p \"${LOCAL_NIM_CACHE}\"\nchmod 777 \"${LOCAL_NIM_CACHE}\"\n\ndocker run --rm -it --name diffdock-nim \\\n  --runtime=nvidia \\\n  -e NVIDIA_VISIBLE_DEVICES=\"${NIM_TEST_GPU}\" \\\n  --shm-size=2G \\\n  --ulimit memlock=-1 \\\n  --ulimit stack=67108864 \\\n  -e NGC_API_KEY \\\n  -v \"${LOCAL_NIM_CACHE}:/opt/nim/.cache\" \\\n  -p 8000:8000 \\\n  nvcr.io/nim/mit/diffdock:2.2.0\n```\n\nReadiness:\n\n```bash\nuntil curl -sf http://localhost:8000/v1/health/ready; do sleep 5; done\n```\n\n## Prepare Inputs\n\nProtein receptor must be ATOM records only. Strip headers, water, and HETATM.\n\n```python\nfrom pathlib import Path\nraw_pdb = Path(\"protein.pdb\").read_text()\nprotein = \"\\n\".join(line for line in raw_pdb.splitlines() if line.startswith(\"ATOM\"))\nif not protein:\n    raise ValueError(\"protein.pdb has no ATOM records\")\n```\n\nLigand options:\n\n- SMILES: `ligand = \"CC(=O)OC1=CC=CC=C1C(=O)O\"`; `ligand_file_type = \"txt\"`.\n- SDF: `ligand = Path(\"ligand.sdf\").read_text()`; `ligand_file_type = \"sdf\"`.\n- MOL2: `ligand_file_type = \"mol2\"`.\n\nDo not use `\"smiles\"` as `ligand_file_type`; SMILES is `\"txt\"`.\n\n## Request Pattern\n\n```python\nimport os\nimport requests\n\nHOSTED = True\nurl = (\n    \"https://health.api.nvidia.com/v1/biology/mit/diffdock\"\n    if HOSTED else \"http://localhost:8000/molecular-docking/diffdock/generate\"\n)\nheaders = {\"Content-Type\": \"application/json\"}\nif HOSTED:\n    headers[\"Authorization\"] = f\"Bearer {os.environ['NGC_API_KEY']}\"\n\npayload = {\n    \"protein\": protein,\n    \"ligand\": ligand,\n    \"ligand_file_type\": ligand_file_type,\n    \"num_poses\": 10,\n    \"time_divisions\": 20,\n    \"steps\": 18,\n    \"save_trajectory\": False,\n}\nresponse = requests.post(url, headers=headers, json=payload, timeout=300)\nresponse.raise_for_status()\nresult = response.json()\n```\n\n## Save And Report Output\n\n`ligand_positions` and `position_confidence` are parallel ranked lists.\n`position_confidence[0]` is the rank-1 pose confidence.\n\n```python\nposes = result[\"ligand_positions\"]\nscores = result[\"position_confidence\"]\nfor rank, (pose_sdf, score) in enumerate(zip(poses, scores), start=1):\n    filename = f\"pose_{rank}_conf{score:.3f}.sdf\"\n    with open(filename, \"w\", encoding=\"utf-8\") as handle:\n        handle.write(pose_sdf)\n    print(f\"pose {rank}: confidence={score:.4f} saved={filename}\")\nprint(f\"best pose confidence: {scores[0]:.4f}\")\n```\n\nView pose SDF files with the receptor in PyMOL, ChimeraX, or UCSF Chimera. For\npose sanity checks and confidence caveats, read `references/validation.md`.\n\n## Limits And Troubleshooting\n\n- Max `num_poses`: 100. Max `time_divisions`: 20. Max `steps`: 18.\n- Single GPU; local minimum is about 24 GB VRAM.\n- `422`: invalid `ligand_file_type`, invalid SMILES/SDF, or no ATOM records.\n- Empty poses: validate receptor ATOM records and ligand parseability.\n- Local URL 404 usually means the wrong hosted path or an accidental `/v1/`.\n"
}

SHA-256: ac3978d8ea837eebb046b94c9292160c63bb0dafdb8a0f26175d9cc115ff7eac