| from src.entity.config_entity import TRANSFORMER_OBJECT_FILE_NAME | |
| from src.entity.config_entity import MODEL_FILE_NAME | |
| from src.entity.config_entity import TARGET_ENCODER_OBJECT_FILE_NAME | |
| from src.exception import FertilizerException | |
| from src.logger import logging | |
| import os | |
| import sys | |
| from glob import glob | |
| from typing import Optional | |
| class ModelResolver: | |
| def __init__( | |
| self, | |
| model_registry: str = 'saved_models', | |
| transformer_dir_name = 'transformer', | |
| target_encoder_dir_name = 'target_encoder', | |
| model_dir_name = 'model' | |
| ): | |
| self.model_registry = model_registry | |
| os.makedirs(self.model_registry, exist_ok=True) | |
| self.transformer_dir_name = transformer_dir_name | |
| self.target_encoder_dir_name = target_encoder_dir_name | |
| self.model_dir_name = model_dir_name | |
| def get_latest_dir_path(self) ->Optional[str]: | |
| try: | |
| dir_names = os.listdir(self.model_registry) | |
| if len(dir_names) == 0: | |
| return None | |
| dir_names = list(map(int, dir_names)) | |
| latest_dir_name = max(dir_names) | |
| return os.path.join(self.model_registry, f"{latest_dir_name}") | |
| except Exception as e: | |
| raise FertilizerException(e, sys) | |
| def get_latest_model_path(self): | |
| try: | |
| latest_dir = self.get_latest_dir_path() | |
| if latest_dir is None: | |
| raise Exception(f"Model is not available") | |
| return os.path.join(latest_dir, self.model_dir_name, MODEL_FILE_NAME) | |
| except Exception as e: | |
| raise FertilizerException(e, sys) | |
| def get_latest_transformer_path(self): | |
| try: | |
| latest_dir = self.get_latest_dir_path() | |
| if latest_dir is None: | |
| raise Exception(f"Transformer is not available") | |
| return os.path.join(latest_dir, self.transformer_dir_name, TRANSFORMER_OBJECT_FILE_NAME) | |
| except Exception as e: | |
| raise FertilizerException(e, sys) | |
| def get_latest_target_encoder_path(self): | |
| try: | |
| latest_dir = self.get_latest_dir_path() | |
| if latest_dir is None: | |
| raise Exception(f"Target Encoder is not available") | |
| return os.path.join(latest_dir, self.target_encoder_dir_name, TARGET_ENCODER_OBJECT_FILE_NAME) | |
| except Exception as e: | |
| raise FertilizerException(e, sys) | |
| def get_latest_save_dir_path(self): | |
| try: | |
| latest_dir = self.get_latest_dir_path() | |
| if latest_dir is None: | |
| return os.path.join(self.model_registry, f"{0}") | |
| latest_dir_num = int(os.path.basename(self.get_latest_dir_path())) | |
| return os.path.join(self.model_registry, f"{latest_dir_num + 1}") | |
| except Exception as e: | |
| raise FertilizerException(e, sys) | |
| def get_latest_save_model_path(self): | |
| try: | |
| latest_dir = self.get_latest_save_dir_path() | |
| return os.path.join(latest_dir, self.model_dir_name, MODEL_FILE_NAME) | |
| except Exception as e: | |
| raise FertilizerException(e, sys) | |
| def get_latest_save_transformer_path(self): | |
| try: | |
| latest_dir = self.get_latest_save_dir_path() | |
| return os.path.join(latest_dir, self.transformer_dir_name, TRANSFORMER_OBJECT_FILE_NAME) | |
| except Exception as e: | |
| raise FertilizerException(e, sys) | |
| def get_latest_save_target_encoder_path(self): | |
| try: | |
| latest_dir = self.get_latest_save_dir_path() | |
| return os.path.join(latest_dir, self.target_encoder_dir_name, TARGET_ENCODER_OBJECT_FILE_NAME) | |
| except Exception as e: | |
| raise FertilizerException(e, sys) | |