| """ | |
| Lazy singleton loader for all 4 ML models used by the MCP server. | |
| Fixes sys.path so the subprocess can import from models/. | |
| """ | |
| import sys | |
| import os | |
| # Ensure project root is on path (this file lives at project_root/mcp_server/tool_registry.py) | |
| sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) | |
| _monet = None | |
| _convnext = None | |
| _gradcam = None | |
| _rag = None | |
| def get_monet(): | |
| global _monet | |
| if _monet is None: | |
| from models.monet_tool import MonetTool | |
| _monet = MonetTool() | |
| _monet.load() | |
| return _monet | |
| def get_convnext(): | |
| global _convnext | |
| if _convnext is None: | |
| from models.convnext_classifier import ConvNeXtClassifier | |
| root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) | |
| _convnext = ConvNeXtClassifier( | |
| checkpoint_path=os.path.join(root, "models", "seed42_fold0.pt") | |
| ) | |
| _convnext.load() | |
| return _convnext | |
| def get_gradcam(): | |
| global _gradcam | |
| if _gradcam is None: | |
| from models.gradcam_tool import GradCAMTool | |
| _gradcam = GradCAMTool(classifier=get_convnext()) | |
| _gradcam.load() | |
| return _gradcam | |
| def get_rag(): | |
| global _rag | |
| if _rag is None: | |
| from models.guidelines_rag import get_guidelines_rag | |
| _rag = get_guidelines_rag() | |
| if not _rag.loaded: | |
| _rag.load_index() | |
| return _rag | |