sentiment-analyzer3 / models.py
entropy25's picture
Upload 10 files
3670fc5 verified
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