import torch import logging from transformers import BertTokenizer, BertForSequenceClassification logger = logging.getLogger(__name__) class ModelManager: """Lazy loading model manager""" _instance = None _model = None _tokenizer = None _device = None def __new__(cls): if cls._instance is None: cls._instance = super().__new__(cls) return cls._instance @property def model(self): if self._model is None: self._load_model() return self._model @property def tokenizer(self): if self._tokenizer is None: self._load_model() return self._tokenizer @property def device(self): if self._device is None: self._device = torch.device("cuda" if torch.cuda.is_available() else "cpu") return self._device def _load_model(self): """Load model and tokenizer""" try: self._device = torch.device("cuda" if torch.cuda.is_available() else "cpu") self._tokenizer = BertTokenizer.from_pretrained("entropy25/sentimentanalysis") self._model = BertForSequenceClassification.from_pretrained("entropy25/sentimentanalysis") self._model.to(self._device) logger.info(f"Model loaded on {self._device}") except Exception as e: logger.error(f"Model loading failed: {e}") raise