Yuanshi's picture
Create log.py
2045dce verified
import boto3
import uuid
import time
import os
from PIL import Image
from io import BytesIO
MAX_PIXELS = 2048
AWS_BUCKET_NAME = os.environ.get("AWS_BUCKET_NAME", "")
AWS_INFERENCE_LOG_TABLE = os.environ.get("AWS_INFERENCE_LOG_TABLE", "")
AWS_FEEDBACK_LOG_TABLE = os.environ.get("AWS_FEEDBACK_LOG_TABLE", "")
AWS_REGION = os.environ.get("AWS_REGION", "")
AWS_ACCESS_ID = os.environ.get("AWS_ACCESS_ID", "")
AWS_ACCESS_KEY = os.environ.get("AWS_ACCESS_KEY", "")
aws_cfg = {
"aws_access_key_id": AWS_ACCESS_ID,
"aws_secret_access_key": AWS_ACCESS_KEY,
"region_name": AWS_REGION,
}
s3_client = boto3.client("s3", **aws_cfg)
dynamodb = boto3.resource("dynamodb", **aws_cfg)
inference_log = dynamodb.Table(AWS_INFERENCE_LOG_TABLE)
feedback_log = dynamodb.Table(AWS_FEEDBACK_LOG_TABLE)
def get_metadata():
return {
"_id": uuid.uuid4().hex,
"created_at": time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()),
}
def insert_log(table_type: str, data: dict):
assert table_type in ["inference", "feedback"], "Invalid table type"
table = inference_log if table_type == "inference" else feedback_log
metadata = get_metadata()
response = table.put_item(
Item={
**data,
**metadata,
}
)
return response, metadata["_id"]
# Example usage:
# insert_log("inference", {"data": "test"})
# insert_log("feedback", {"data": "test"})
def get_image_obj(image: Image) -> BytesIO:
image.thumbnail((MAX_PIXELS, MAX_PIXELS))
image_obj = BytesIO()
image.save(image_obj, format="WEBP")
image_obj.seek(0)
return image_obj
def log_image(image: Image) -> str:
metadata = get_metadata()
image_obj = get_image_obj(image)
s3_key = f"images/{metadata['_id']}.webp"
s3_client.upload_fileobj(image_obj, AWS_BUCKET_NAME, s3_key)
return metadata["_id"]
# Example usage:
# image = Image.open("examples/doge.jpg")
# log_image(image)