def put_best_model_in_production(model_metrics, db_name): """ Función para poner el mejor modelo en producción. Args: model_metrics (dict): Info del modelo. db_name (str): Nombre de la base de datos. """ # conexión a la base de datos elegida db = client.get_database(db_name) # consulta para traer el documento con la info del modelo en producción query = Query(db, selector={'status': {'$eq': 'in_production'}}) res = query()['docs'] # id del modelo en producción best_model_id = model_metrics['_id'] # en caso de que SÍ haya un modelo en producción if len(res) != 0: # se realiza una comparación entre el modelo entrenado y el modelo en producción best_model_id, worse_model_id = get_best_model(model_metrics, res[0]) # se marca el peor modelo (entre ambos) como "NO en producción" worse_model_doc = db[worse_model_id] worse_model_doc['status'] = 'none' # se actualiza el marcado en la BDD worse_model_doc.save() else: # primer modelo entrenado va a automáticamente a producción print('------> FIRST model going in production') # se marca el mejor modelo como "SÍ en producción" best_model_doc = db[best_model_id] best_model_doc['status'] = 'in_production' # se actualiza el marcado en la BDD best_model_doc.save()
def load_model_config(db_name): """ Función para cargar la info del modelo desde IBM Cloudant. Args: db_name (str): Nombre de la base de datos. Returns: dict. Documento con la configuración del modelo. """ db = client.get_database(db_name) query = Query(db, selector={'_id': {'$eq': 'model_config'}}) return query()['docs'][0]
def save_model_info(db_name, metrics_dict): """ Función para guardar la info del modelo en IBM Cloudant Args: db_name (str): Nombre de la base de datos. metrics_dict (dict): Info del modelo. Returns: boolean. Comprobación de si el documento se ha creado. """ db = client.get_database(db_name) client.create_document(db, metrics_dict) return metrics_dict['_id'] in db
def get_best_model_info(db_name): """ Función para cargar la info del modelo de IBM Cloudant Args: db_name (str): base de datos a usar. Kwargs: bucket_name (str): depósito de IBM COS a usar. Returns: dict. Info del modelo. """ db = client.get_database(db_name) query = Query(db, selector={'status': {'$eq': 'in_production'}}) return query()['docs'][0]
def load_data_config(db_name): """ Función para cargar la info del modelo desde IBM Cloudant. Args: db_name (str): Nombre de la base de datos. Returns: dict. Documento con la configuración del modelo. """ db = client.get_database(db_name) query = Query(db, selector={'_id': {'$eq': 'data_config'}}) return query()['docs'][0] # class CustomUnpickler(pickle.Unpickler): # # def find_class(self, module, name): # if name == 'Scaler': # from app.src.data.pipeline_fn import Scaler # return Scaler # elif name == 'HogFeaturesExtraction': # from app.src.data.pipeline_fn import HogFeaturesExtraction # return HogFeaturesExtraction # return super().find_class(module, name)