From 32205ba045796c8493ac78f232452f68f9a927e7 Mon Sep 17 00:00:00 2001 From: yxd92326 Date: Wed, 28 May 2025 14:54:21 +0100 Subject: [PATCH 1/5] Send cryolo model when flushing spa --- .../workflows/spa/flush_spa_preprocess.py | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/murfey/workflows/spa/flush_spa_preprocess.py b/src/murfey/workflows/spa/flush_spa_preprocess.py index 27664aa41..c7f7400ef 100644 --- a/src/murfey/workflows/spa/flush_spa_preprocess.py +++ b/src/murfey/workflows/spa/flush_spa_preprocess.py @@ -8,6 +8,7 @@ from murfey.server import _transport_object from murfey.server.api.auth import MurfeySessionID +from murfey.server.api.spa import _cryolo_model_path from murfey.server.feedback import _murfey_id from murfey.util import sanitise, secure_path from murfey.util.config import get_machine_config, get_microscope @@ -314,15 +315,12 @@ def flush_spa_preprocess(message: dict, murfey_db: Session, demo: bool = False) ).all() if not stashed_files: return True - instrument_name = ( - murfey_db.exec( - select(MurfeySession).where(MurfeySession.id == message["session_id"]) - ) - .one() - .instrument_name - ) - machine_config = get_machine_config(instrument_name=instrument_name)[ - instrument_name + + murfey_session = murfey_db.exec( + select(MurfeySession).where(MurfeySession.id == message["session_id"]) + ).one() + machine_config = get_machine_config(instrument_name=murfey_session.instrument_name)[ + murfey_session.instrument_name ] recipe_name = machine_config.recipes.get("em-spa-preprocess", "em-spa-preprocess") collected_ids = murfey_db.exec( @@ -424,6 +422,11 @@ def flush_spa_preprocess(message: dict, murfey_db: Session, demo: bool = False) else f.eer_fractionation_file ), "do_icebreaker_jobs": default_spa_parameters.do_icebreaker_jobs, + "cryolo_model_weights": str( + _cryolo_model_path( + murfey_session.visit, murfey_session.instrument_name + ) + ), "foil_hole_id": foil_hole_id, }, } From 44fe0215e5a3f1cda71aa2f0e7768420afcdc715 Mon Sep 17 00:00:00 2001 From: yxd92326 Date: Thu, 29 May 2025 15:18:28 +0100 Subject: [PATCH 2/5] Move cryolo model function to util --- src/murfey/util/processing_params.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/murfey/util/processing_params.py b/src/murfey/util/processing_params.py index 66ea481c0..2051df6c6 100644 --- a/src/murfey/util/processing_params.py +++ b/src/murfey/util/processing_params.py @@ -1,7 +1,29 @@ +from datetime import datetime +from functools import lru_cache +from pathlib import Path from typing import Literal, Optional from pydantic import BaseModel +from murfey.util.config import get_machine_config + + +@lru_cache(maxsize=5) +def _cryolo_model_path(visit: str, instrument_name: str) -> Path: + machine_config = get_machine_config(instrument_name=instrument_name)[ + instrument_name + ] + if machine_config.model_search_directory: + visit_directory = ( + machine_config.rsync_basepath / str(datetime.now().year) / visit + ) + possible_models = list( + (visit_directory / machine_config.model_search_directory).glob("*.h5") + ) + if possible_models: + return sorted(possible_models, key=lambda x: x.stat().st_ctime)[-1] + return machine_config.default_model + class CLEMAlignAndMergeParameters(BaseModel): crop_to_n_frames: Optional[int] = 50 From 3eec7a23610766c157954efc137085ad0ce4a6f7 Mon Sep 17 00:00:00 2001 From: yxd92326 Date: Thu, 29 May 2025 15:21:25 +0100 Subject: [PATCH 3/5] Rename to not be private --- src/murfey/server/api/workflow.py | 5 ++--- src/murfey/util/processing_params.py | 2 +- src/murfey/workflows/spa/flush_spa_preprocess.py | 5 ++--- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/murfey/server/api/workflow.py b/src/murfey/server/api/workflow.py index df6da6705..be7c5a629 100644 --- a/src/murfey/server/api/workflow.py +++ b/src/murfey/server/api/workflow.py @@ -27,7 +27,6 @@ import murfey.server.prometheus as prom from murfey.server import _transport_object from murfey.server.api.auth import MurfeySessionID, validate_token -from murfey.server.api.spa import _cryolo_model_path from murfey.server.feedback import ( _murfey_id, check_tilt_series_mc, @@ -58,7 +57,7 @@ TiltSeries, ) from murfey.util.models import ProcessingParametersSPA, ProcessingParametersTomo -from murfey.util.processing_params import default_spa_parameters +from murfey.util.processing_params import cryolo_model_path, default_spa_parameters from murfey.util.tomo import midpoint logger = getLogger("murfey.server.api.workflow") @@ -479,7 +478,7 @@ async def request_spa_preprocessing( ), "do_icebreaker_jobs": default_spa_parameters.do_icebreaker_jobs, "cryolo_model_weights": str( - _cryolo_model_path(visit_name, instrument_name) + cryolo_model_path(visit_name, instrument_name) ), }, } diff --git a/src/murfey/util/processing_params.py b/src/murfey/util/processing_params.py index 2051df6c6..ed7f89f1e 100644 --- a/src/murfey/util/processing_params.py +++ b/src/murfey/util/processing_params.py @@ -9,7 +9,7 @@ @lru_cache(maxsize=5) -def _cryolo_model_path(visit: str, instrument_name: str) -> Path: +def cryolo_model_path(visit: str, instrument_name: str) -> Path: machine_config = get_machine_config(instrument_name=instrument_name)[ instrument_name ] diff --git a/src/murfey/workflows/spa/flush_spa_preprocess.py b/src/murfey/workflows/spa/flush_spa_preprocess.py index c7f7400ef..bc226e537 100644 --- a/src/murfey/workflows/spa/flush_spa_preprocess.py +++ b/src/murfey/workflows/spa/flush_spa_preprocess.py @@ -8,7 +8,6 @@ from murfey.server import _transport_object from murfey.server.api.auth import MurfeySessionID -from murfey.server.api.spa import _cryolo_model_path from murfey.server.feedback import _murfey_id from murfey.util import sanitise, secure_path from murfey.util.config import get_machine_config, get_microscope @@ -25,7 +24,7 @@ from murfey.util.db import Session as MurfeySession from murfey.util.db import SPAFeedbackParameters, SPARelionParameters from murfey.util.models import FoilHoleParameters, GridSquareParameters -from murfey.util.processing_params import default_spa_parameters +from murfey.util.processing_params import cryolo_model_path, default_spa_parameters from murfey.util.spa_metadata import ( GridSquareInfo, foil_hole_data, @@ -423,7 +422,7 @@ def flush_spa_preprocess(message: dict, murfey_db: Session, demo: bool = False) ), "do_icebreaker_jobs": default_spa_parameters.do_icebreaker_jobs, "cryolo_model_weights": str( - _cryolo_model_path( + cryolo_model_path( murfey_session.visit, murfey_session.instrument_name ) ), From 42c032357fcc84b0fe4ca81ebfe206509ab1cbb1 Mon Sep 17 00:00:00 2001 From: yxd92326 Date: Thu, 29 May 2025 15:21:44 +0100 Subject: [PATCH 4/5] Remove cryolo model api endpoint --- src/murfey/server/api/spa.py | 38 ----------------------------- src/murfey/util/route_manifest.yaml | 8 ------ 2 files changed, 46 deletions(-) delete mode 100644 src/murfey/server/api/spa.py diff --git a/src/murfey/server/api/spa.py b/src/murfey/server/api/spa.py deleted file mode 100644 index c34a4f6db..000000000 --- a/src/murfey/server/api/spa.py +++ /dev/null @@ -1,38 +0,0 @@ -from __future__ import annotations - -from datetime import datetime -from functools import lru_cache -from pathlib import Path - -from fastapi import APIRouter -from sqlmodel import select - -from murfey.server.murfey_db import murfey_db -from murfey.util.config import get_machine_config -from murfey.util.db import Session as MurfeySession - -# Create APIRouter class object -router = APIRouter(tags=["Workflows: crYOLO Models"]) - - -@lru_cache(maxsize=5) -def _cryolo_model_path(visit: str, instrument_name: str) -> Path: - machine_config = get_machine_config(instrument_name=instrument_name)[ - instrument_name - ] - if machine_config.model_search_directory: - visit_directory = ( - machine_config.rsync_basepath / str(datetime.now().year) / visit - ) - possible_models = list( - (visit_directory / machine_config.model_search_directory).glob("*.h5") - ) - if possible_models: - return sorted(possible_models, key=lambda x: x.stat().st_ctime)[-1] - return machine_config.default_model - - -@router.get("/sessions/{session_id}/cryolo_model") -def get_cryolo_model_path(session_id: int, db=murfey_db): - session = db.exec(select(MurfeySession).where(MurfeySession.id == session_id)).one() - return {"model_path": _cryolo_model_path(session.visit, session.instrment_name)} diff --git a/src/murfey/util/route_manifest.yaml b/src/murfey/util/route_manifest.yaml index 3775c6b0e..ae1b3dadc 100644 --- a/src/murfey/util/route_manifest.yaml +++ b/src/murfey/util/route_manifest.yaml @@ -980,14 +980,6 @@ murfey.server.api.session_info.tomo_router: type: str methods: - GET -murfey.server.api.spa.router: - - path: /sessions/{session_id}/cryolo_model - function: get_cryolo_model_path - path_params: - - name: session_id - type: int - methods: - - GET murfey.server.api.websocket.ws: - path: /ws/test/{client_id} function: websocket_endpoint From 05845f8c3ad76147a61e8eca183090e7a16dcffe Mon Sep 17 00:00:00 2001 From: yxd92326 Date: Thu, 29 May 2025 15:27:05 +0100 Subject: [PATCH 5/5] Remove api.spa from main --- src/murfey/server/main.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/murfey/server/main.py b/src/murfey/server/main.py index f567d0e9b..fb4b595ea 100644 --- a/src/murfey/server/main.py +++ b/src/murfey/server/main.py @@ -22,7 +22,6 @@ import murfey.server.api.prometheus import murfey.server.api.session_control import murfey.server.api.session_info -import murfey.server.api.spa import murfey.server.api.websocket import murfey.server.api.workflow from murfey.server import template_files @@ -90,7 +89,6 @@ class Settings(BaseSettings): app.include_router(murfey.server.api.workflow.correlative_router) app.include_router(murfey.server.api.workflow.spa_router) app.include_router(murfey.server.api.workflow.tomo_router) -app.include_router(murfey.server.api.spa.router) app.include_router(murfey.server.api.clem.router) app.include_router(murfey.server.api.prometheus.router)