InferBench / api /aws.py
davidberenstein1957's picture
refactor: improve code formatting and organization across multiple API and benchmark files
34046e2
raw
history blame
2.32 kB
import base64
import json
import os
import time
from pathlib import Path
import boto3
from dotenv import load_dotenv
from api.flux import FluxAPI
class AWSBedrockAPI(FluxAPI):
def __init__(self):
load_dotenv()
# AWS credentials should be set via environment variables
# AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, and AWS_SESSION_TOKEN
os.environ["AWS_ACCESS_KEY_ID"] = ""
os.environ["AWS_SECRET_ACCESS_KEY"] = ""
os.environ["AWS_SESSION_TOKEN"] = ""
os.environ["AWS_REGION"] = "us-east-1"
self._client = boto3.client("bedrock-runtime")
self._model_id = "amazon.nova-canvas-v1:0"
@property
def name(self) -> str:
return "aws_nova_canvas"
def generate_image(self, prompt: str, save_path: Path) -> float:
start_time = time.time()
# Format the request payload
native_request = {
"taskType": "TEXT_IMAGE",
"textToImageParams": {"text": prompt},
"imageGenerationConfig": {
"seed": 0,
"quality": "standard",
"height": 1024,
"width": 1024,
"numberOfImages": 1,
},
}
try:
# Convert request to JSON and invoke the model
request = json.dumps(native_request)
response = self._client.invoke_model(modelId=self._model_id, body=request)
# Process the response
model_response = json.loads(response["body"].read())
if not model_response.get("images"):
raise Exception("No images returned from AWS Bedrock API")
# Save the image
base64_image_data = model_response["images"][0]
self._save_image_from_base64(base64_image_data, save_path)
except Exception as e:
raise Exception(f"Error generating image with AWS Bedrock: {str(e)}")
end_time = time.time()
return end_time - start_time
def _save_image_from_base64(self, base64_data: str, save_path: Path):
"""Save a base64 encoded image to the specified path."""
save_path.parent.mkdir(parents=True, exist_ok=True)
image_data = base64.b64decode(base64_data)
with open(save_path, "wb") as f:
f.write(image_data)