Spaces:
Running
Running
| """LangChain ``@tool`` wrapper for gRASPA simulations. | |
| Delegates to the pure-Python implementation in | |
| :mod:`chemgraph.tools.graspa_core`. | |
| """ | |
| from __future__ import annotations | |
| from langchain_core.tools import tool | |
| from chemgraph.schemas.graspa_schema import graspa_input_schema | |
| from chemgraph.tools.graspa_core import ( | |
| # Re-export core helpers so existing ``from graspa_tools import ...`` | |
| # statements (e.g. in graspa_mcp_parsl.py) continue to work. | |
| _read_graspa_sycl_output, | |
| mock_graspa, | |
| run_graspa_core, | |
| ) | |
| __all__ = [ | |
| "_read_graspa_sycl_output", | |
| "mock_graspa", | |
| "run_graspa_core", | |
| "run_graspa", | |
| ] | |
| def run_graspa(graspa_input: graspa_input_schema): | |
| """Run a gRASPA simulation using the core engine and return the uptakes. | |
| This tool acts as a wrapper for the agentic workflow. | |
| Parameters | |
| ---------- | |
| graspa_input : graspa_input_schema | |
| Legacy gRASPA tool input. | |
| Returns | |
| ------- | |
| float | |
| Uptake in mol/kg from the core gRASPA result. | |
| """ | |
| params = graspa_input_schema( | |
| input_structure_file=graspa_input.cif_path, | |
| adsorbate=graspa_input.adsorbate, | |
| temperature=graspa_input.temperature, | |
| pressure=graspa_input.pressure, | |
| n_cycles=graspa_input.n_cycle, | |
| output_result_file="raspa.log", | |
| ) | |
| result = run_graspa_core(params) | |
| if result["status"] == "success": | |
| return result["uptake_in_mol_kg"] | |
| else: | |
| raise RuntimeError(f"gRASPA simulation failed for {graspa_input.mof_name}") | |