Spaces:
Sleeping
Sleeping
| import torch | |
| from transformers import AutoModelForCausalLM, AutoTokenizer | |
| from utils.config import Config | |
| from utils.logger import Logger | |
| logger = Logger.get_logger(__name__) | |
| class ModelGenerator: | |
| """ | |
| Singleton class responsible for generating text using a specified language model. | |
| This class initializes a language model and tokenizer, and provides methods | |
| to generate text and extract code blocks from generated text. | |
| Attributes: | |
| device (torch.device): Device to run the model on (CPU or GPU). | |
| model (AutoModelForCausalLM): Language model for text generation. | |
| tokenizer (AutoTokenizer): Tokenizer corresponding to the language model. | |
| Methods: | |
| acceptTextGenerator(self, visitor, *args, **kwargs): | |
| Accepts a visitor to generates text based on the input provided with the model generator. | |
| acceptExtractCodeBlock(self, visitor, *args, **kwargs): | |
| Accepts a visitor to extract code blocks from the output text. | |
| """ | |
| _instance = None | |
| _format_data_time = "%Y-%m-%d %H:%M:%S" | |
| def __new__(cls, model_name=Config.read('app', 'model')): | |
| if cls._instance is None: | |
| cls._instance = super(ModelGenerator, cls).__new__(cls) | |
| cls._instance._initialize(model_name) | |
| return cls._instance | |
| def _initialize(self, model_name): | |
| self.device = torch.device( | |
| "cuda" if torch.cuda.is_available() else "cpu") | |
| self.model = AutoModelForCausalLM.from_pretrained( | |
| model_name).to(self.device) | |
| self.tokenizer = AutoTokenizer.from_pretrained(model_name) | |
| def acceptTextGenerator(self, visitor, *args, **kwargs): | |
| return visitor.visit(self, *args, **kwargs) | |
| def acceptExtractCodeBlock(self, visitor, *args, **kwargs): | |
| return visitor.visit(self, *args, **kwargs) | |