import os import urllib.parse from predictions import prediction RUNTIME_ENVIRONMENT = os.environ.get("RUNTIME_ENVIRONMENT", "dev") def handler(event, context): """ Take in event and trigger the prediction pipeline """ # Assuming a file in a bucket landing for now? # Assuming we have a model to use # bucket = event["Records"][0]["s3"]["bucket"]["name"] # key = urllib.parse.unquote_plus( # event["Records"][0]["s3"]["bucket"]["key"], encoding="utf-8" # ) payload = event["body"] data_path = payload["file_location"] property_id = payload["property_id"] portfolio_id = payload["portfolio_id"] created_at = payload["created_at"] # prediction_file = bucket + "/" + key # TODO: put a model into s3, both locally and in aws # model_path = os.environ.get("MODEL_PATH", "http://minio:9000/data/model_directory/") model_path = os.environ.get( "MODEL_PATH", f"s3://retrofit-model-directory-{RUNTIME_ENVIRONMENT}/RDSAP_CHANGE/autogluon/rdsap_change-medium_quality-30" "-2023-08-30_11-43-41/deployment/", ) try: outputs = prediction(model_path=model_path, data_path=data_path) # Store into s3, with key of {portfolio_id}-{property_id} outputs.to_csv( f"s3://retrofit-sap-prediction-{RUNTIME_ENVIRONMENT}/{portfolio_id}/{property_id}/{created_at}.csv" ) except (Exception, KeyError, ValueError): print("Prediction failed") if __name__ == "__main__": handler()