Source code for ewoksid13.mcp.tools.integration
"""MCP tool wrapping the pyFAI integration workflow.
FastMCP turns this function's type hints and docstring into the tool's input
schema and description. Import it in ``ewoksid13/mcp/tools/__init__.py`` and add
it to ``TOOLS`` to expose it.
"""
from typing import Dict, List, Optional, Union
from ...scripts.integration import _main_pyfai_integration
[docs]
def pyfai_integration_tool(
bliss_filenames: Union[str, List[str]],
pyfai_configurations: Union[str, List[str], List[Dict]],
detectors: Union[str, List[str], None] = None,
scans: Union[int, List[int], None] = None,
subscans: Union[int, List[int], None] = None,
save_separate_files: Optional[bool] = False,
save_pyfai_config: Optional[bool] = True,
output_root_folder: Optional[str] = None,
tag: Optional[str] = "",
submit_parameters: Optional[Dict] = None,
) -> List[Dict]:
"""Run a pyFAI integration workflow from an MCP tool call.
It accepts user-provided integration settings, normalizes tool inputs, and
triggers workflow submission/execution according to ``submit_parameters``.
Parameters
----------
bliss_filenames : str | list[str]
One BLISS HDF5 filename or a list of filenames to process.
pyfai_configurations : str | list[str] | list[dict]
One pyFAI configuration or a list of configurations (typically
``.poni``/``.json`` files).
detectors : str | list[str], optional
Detector name(s) to filter on. If ``None``, process all compatible
detectors.
scans : int | list[int], optional
Scan number(s) to process. If ``None``, process all scans.
subscans : int | list[int], optional
Subscan number(s) to process. If ``None``, process all subscans.
save_separate_files : bool, default=False
Save integrated data in separate files when ``True``.
save_pyfai_config : bool, default=True
Persist the effective pyFAI configuration near generated outputs.
output_root_folder : str, optional
Custom output root directory. If ``None``, default project rules apply.
tag : str, default=""
Suffix added to job/output names to distinguish runs.
submit_parameters : dict, optional
Submission/execution options (for example queue/slurm settings and
dry-run behavior via ``submit``).
Returns
-------
list[dict]
A list of dictionaries, each containing the job ID and worker type of a submitted job.
"""
submit_parameters = submit_parameters or {}
submitted_jobs = _main_pyfai_integration(
bliss_filenames=bliss_filenames,
pyfai_configurations=pyfai_configurations,
detectors=detectors,
scans=scans,
subscans=subscans,
save_separate_files=save_separate_files,
save_pyfai_config=save_pyfai_config,
output_root_folder=output_root_folder,
tag=tag,
submit_parameters=submit_parameters,
wait_for_completion=False,
)
return [{"job_id": j.job_id, "worker_type": j.worker_type} for j in submitted_jobs]