mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-06-30 13:10:47 +00:00
begin boto3 chagne
This commit is contained in:
commit
5cf29db634
5 changed files with 23 additions and 23 deletions
|
|
@ -50,6 +50,10 @@ jobs:
|
||||||
- name: Setup Docker
|
- name: Setup Docker
|
||||||
uses: docker/setup-buildx-action@v1
|
uses: docker/setup-buildx-action@v1
|
||||||
|
|
||||||
|
- name: Login to ECR
|
||||||
|
run: |
|
||||||
|
aws ecr get-login-password --region eu-west-2 | docker login --username AWS --password-stdin ${{ steps.set_ecr_credentials.outputs.ecr_uri }}
|
||||||
|
|
||||||
# Building and pushing Docker image with caching
|
# Building and pushing Docker image with caching
|
||||||
- name: Build and push Docker image
|
- name: Build and push Docker image
|
||||||
uses: docker/build-push-action@v4
|
uses: docker/build-push-action@v4
|
||||||
|
|
@ -60,6 +64,7 @@ jobs:
|
||||||
tags: ${{ steps.set_ecr_credentials.outputs.ecr_uri }}:${{ github.sha }}
|
tags: ${{ steps.set_ecr_credentials.outputs.ecr_uri }}:${{ github.sha }}
|
||||||
cache-from: type=gha
|
cache-from: type=gha
|
||||||
cache-to: type=gha,mode=max
|
cache-to: type=gha,mode=max
|
||||||
|
platform: linux/amd64
|
||||||
|
|
||||||
- name: Deploy to AWS Lambda via Serverless
|
- name: Deploy to AWS Lambda via Serverless
|
||||||
env:
|
env:
|
||||||
|
|
|
||||||
|
|
@ -72,7 +72,9 @@ class LocalDataLoader:
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def load(filepath: str, index_col: str | None = None) -> pd.DataFrame:
|
def load(
|
||||||
|
client: BotoClient, filepath: str, index_col: str | None = None
|
||||||
|
) -> pd.DataFrame:
|
||||||
|
|
||||||
if not os.path.exists(filepath):
|
if not os.path.exists(filepath):
|
||||||
raise FileNotFoundError(f"File not found: {filepath}")
|
raise FileNotFoundError(f"File not found: {filepath}")
|
||||||
|
|
|
||||||
|
|
@ -13,35 +13,25 @@ def handler(event, context):
|
||||||
# Assuming a file in a bucket landing for now?
|
# Assuming a file in a bucket landing for now?
|
||||||
# Assuming we have a model to use
|
# 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"]
|
payload = event["body"]
|
||||||
data_path = payload["file_location"]
|
data_path = payload["file_location"]
|
||||||
property_id = payload["property_id"]
|
property_id = payload["property_id"]
|
||||||
portfolio_id = payload["portfolio_id"]
|
portfolio_id = payload["portfolio_id"]
|
||||||
created_at = payload["created_at"]
|
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:
|
try:
|
||||||
outputs = prediction(model_path=model_path, data_path=data_path)
|
# We could fix the model path but for the moment, we just take the best model path based on the registry
|
||||||
|
outputs = prediction(model_path=None, data_path=data_path)
|
||||||
# Store into s3, with key of {portfolio_id}-{property_id}
|
# 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):
|
storage_filepath = f"s3://retrofit-sap-predictions-{RUNTIME_ENVIRONMENT}/{portfolio_id}/{property_id}/" \
|
||||||
|
f"{created_at}.csv"
|
||||||
|
outputs.to_csv(storage_filepath)
|
||||||
|
return storage_filepath
|
||||||
|
|
||||||
|
except (Exception, KeyError, ValueError) as e:
|
||||||
print("Prediction failed")
|
print("Prediction failed")
|
||||||
|
print(e)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,7 @@ RUNTIME_ENVIRONMENT = os.environ.get("RUNTIME_ENVIRONMENT", "local-mock")
|
||||||
|
|
||||||
CLIENT = S3FSClient(runtime_environment=RUNTIME_ENVIRONMENT)
|
CLIENT = S3FSClient(runtime_environment=RUNTIME_ENVIRONMENT)
|
||||||
|
|
||||||
|
|
||||||
# FOR TESTING
|
# FOR TESTING
|
||||||
# For now just loading data first and then passing into function (i.e. as if we receive json data and convert to
|
# For now just loading data first and then passing into function (i.e. as if we receive json data and convert to
|
||||||
# DataFrame)
|
# DataFrame)
|
||||||
|
|
@ -156,7 +157,8 @@ def prediction(
|
||||||
|
|
||||||
logger.info("--- Generating Predictions ---")
|
logger.info("--- Generating Predictions ---")
|
||||||
prediction = model.generate_predictions(data=data)
|
prediction = model.generate_predictions(data=data)
|
||||||
return pd.concat([data["id"], prediction], axis=1)
|
|
||||||
|
return pd.concat([pd.Series(data.index, name="id"), prediction], axis=1)
|
||||||
|
|
||||||
# Save prediction some where?
|
# Save prediction some where?
|
||||||
# prediction.to_csv("s3?")
|
# prediction.to_csv("s3?")
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
|
boto3
|
||||||
autogluon==0.8.2
|
autogluon==0.8.2
|
||||||
pandas==1.5.3
|
pandas==1.5.3
|
||||||
s3fs==2023.6.0
|
s3fs
|
||||||
seaborn==0.12.2
|
seaborn==0.12.2
|
||||||
matplotlib==3.7.2
|
matplotlib==3.7.2
|
||||||
Loading…
Add table
Reference in a new issue