import pickle import datetime from config.types import Config from typing import Optional import os import warnings from training.types import PipelineOutcome def save_models(pipeline_outcome: PipelineOutcome, config: Config) -> None: dict_for_pickle = dict() dict_for_pickle["config"] = config dict_for_pickle["pipeline_outcome"] = pipeline_outcome date_string = datetime.datetime.now().strftime("%Y-%m-%d-%H-%M") if not os.path.exists("output/models"): os.makedirs("output/models") pickle.dump(dict_for_pickle, open("output/models/{}.p".format(date_string), "wb")) def load_models(file_name: Optional[str]) -> tuple[PipelineOutcome, Config]: if file_name is None: warnings.warn( "No file name provided, will load latest models and configurations." ) files_in_directory: list = os.listdir("output/models") assert len(files_in_directory) > 0, "No models found in output/models." file_name = sorted(files_in_directory)[-1] packacked_dict = pickle.load(open("output/models/{}".format(file_name), "rb")) config = packacked_dict.pop("config", None) pipeline_outcome = packacked_dict.pop("pipeline_outcome", None) return pipeline_outcome, config