Spaces:
Sleeping
Sleeping
| import os | |
| import glob | |
| import importlib.util | |
| from typing import Optional | |
| PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..')) | |
| _MODEL = None | |
| def _import_model_definition(path: str): | |
| try: | |
| spec = importlib.util.spec_from_file_location('model_definition', path) | |
| mod = importlib.util.module_from_spec(spec) | |
| spec.loader.exec_module(mod) | |
| return mod | |
| except Exception: | |
| return None | |
| def _find_weights() -> Optional[str]: | |
| candidates = glob.glob(os.path.join(PROJECT_ROOT, 'models', '**', '*.h5'), recursive=True) | |
| candidates += glob.glob(os.path.join(PROJECT_ROOT, 'models', '**', '*.hdf5'), recursive=True) | |
| return candidates[0] if candidates else None | |
| def _try_load_sciann_model(): | |
| try: | |
| import sciann as sn | |
| except Exception: | |
| return None | |
| model_def_path = os.path.join(PROJECT_ROOT, 'model_definition.py') | |
| if os.path.exists(model_def_path): | |
| mod = _import_model_definition(model_def_path) | |
| if mod and hasattr(mod, 'create_model'): | |
| try: | |
| return mod.create_model() | |
| except Exception: | |
| pass | |
| loader_path = os.path.join(PROJECT_ROOT, 'models', 'load_model.py') | |
| if os.path.exists(loader_path): | |
| mod = _import_model_definition(loader_path) | |
| if mod and hasattr(mod, 'load_model'): | |
| try: | |
| return mod.load_model(PROJECT_ROOT) | |
| except Exception: | |
| pass | |
| return None | |
| def get_model(): | |
| global _MODEL | |
| if _MODEL is not None: | |
| return _MODEL | |
| model = _try_load_sciann_model() | |
| if model is None: | |
| _MODEL = None | |
| return None | |
| weights = _find_weights() | |
| if weights: | |
| try: | |
| if hasattr(model, 'load_weights'): | |
| model.load_weights(weights) | |
| except Exception: | |
| pass | |
| _MODEL = model | |
| return _MODEL | |