Deploy Bot
Add complete Django backend with SciANN model loader and API endpoints
ed85fe4
Raw
History Blame Contribute Delete
1.93 kB
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