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) | |