# Necessary imports import os import sys from dotenv import load_dotenv from typing import Any import torch from transformers import AutoModel, AutoTokenizer, AutoProcessor # Local imports from src.logger import logging from src.exception import CustomExceptionHandling # Load the Environment Variables from .env file load_dotenv() # Access token for using the model access_token = os.environ.get("ACCESS_TOKEN") def load_model_tokenizer_and_processor(model_name: str, device: str) -> Any: """ Load the model, tokenizer and processor. Args: - model_name (str): The name of the model to load. - device (str): The device to load the model onto. Returns: - model: The loaded model. - tokenizer: The loaded tokenizer. - processor: The loaded processor. """ # try: # Load the model, tokenizer and processor model = AutoModel.from_pretrained( model_name, # device_map = 'auto', trust_remote_code=True, attn_implementation="sdpa", torch_dtype=torch.bfloat16, # init_vision=True, # init_audio=False, # init_tts=False, # token=access_token ).to('cuda') # model = model tokenizer = AutoTokenizer.from_pretrained( model_name, trust_remote_code=True, # token=access_token ) processor = AutoProcessor.from_pretrained( model_name, trust_remote_code=True, # token=access_token ) # Log the successful loading of the model, tokenizer and processor logging.info("Model, tokenizer and processor loaded successfully.") # Return the model, tokenizer and processor return model, tokenizer, processor # Handle exceptions that may occur during model, tokenizer and processor loading # except Exception as e: # Custom exception handling # raise CustomExceptionHandling(e, sys) from e