from sentence_transformers import SentenceTransformer from transformers import pipeline import torch class MLModels: _instance = None def __new__(cls): if cls._instance is None: cls._instance = super(MLModels, cls).__new__(cls) cls._instance.device = 'cuda' if torch.cuda.is_available() else 'cpu' print(f"Loading models on {cls._instance.device}...") # Load Sentence Transformer cls._instance.st_model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2', device=cls._instance.device) # Load FinBERT for sentiment cls._instance.finbert = pipeline("text-classification", model="yiyanghkust/finbert-tone", device=0 if cls._instance.device == 'cuda' else -1) # Load ClimateBERT for ESG sentiment (optional, can be heavy) # cls._instance.climatebert = pipeline("text-classification", model="climatebert/distilroberta-base-climate-sentiment", device=0 if cls._instance.device == 'cuda' else -1) print("Models loaded successfully.") return cls._instance ml_models = MLModels()