hatmanstack commited on
Commit
9c1e305
·
1 Parent(s): 4b6b3ad

added bucket for image caching

Browse files
Files changed (1) hide show
  1. generate.py +46 -6
generate.py CHANGED
@@ -4,6 +4,7 @@ import boto3
4
  import json
5
  import logging
6
  import io
 
7
  from dotenv import load_dotenv
8
  from PIL import Image
9
  from functools import wraps
@@ -45,6 +46,8 @@ config = ImageConfig()
45
  model_id = 'amazon.nova-canvas-v1:0'
46
  aws_id = os.getenv('AWS_ID')
47
  aws_secret = os.getenv('AWS_SECRET')
 
 
48
 
49
  class ImageProcessor:
50
  def __init__(self, image):
@@ -108,15 +111,45 @@ class ImageProcessor:
108
  # Function to generate an image using Amazon Nova Canvas model
109
  class BedrockClient:
110
 
111
- def __init__(self, aws_id, aws_secret, model_id, region='us-east-1', timeout=300):
112
  self.model_id = model_id
113
- self.client = boto3.client(
114
  service_name='bedrock-runtime',
115
  aws_access_key_id=aws_id,
116
  aws_secret_access_key=aws_secret,
117
- region_name=region,
118
  config=Config(read_timeout=timeout)
119
  )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
120
 
121
  def _handle_error(self, err):
122
  """Handle client errors"""
@@ -125,20 +158,27 @@ class BedrockClient:
125
  def generate_image(self, body):
126
  """Generate image using Bedrock service."""
127
  try:
128
- response = self.client.invoke_model(
129
  body=body,
130
  modelId=self.model_id,
131
  accept="application/json",
132
  contentType="application/json"
133
  )
134
- return self._process_response(response)
 
 
 
 
 
 
 
135
  except ClientError as err:
136
  self._handle_error(err)
137
 
138
  @handle_bedrock_errors
139
  def generate_prompt(self, body):
140
  try:
141
- response = self.client.converse(
142
  modelId=self.model_id,
143
  messages=body
144
  )
 
4
  import json
5
  import logging
6
  import io
7
+ from datetime import datetime
8
  from dotenv import load_dotenv
9
  from PIL import Image
10
  from functools import wraps
 
46
  model_id = 'amazon.nova-canvas-v1:0'
47
  aws_id = os.getenv('AWS_ID')
48
  aws_secret = os.getenv('AWS_SECRET')
49
+ nova_image_bucket='nova-image-data'
50
+ bucket_region='us-west-2'
51
 
52
  class ImageProcessor:
53
  def __init__(self, image):
 
111
  # Function to generate an image using Amazon Nova Canvas model
112
  class BedrockClient:
113
 
114
+ def __init__(self, aws_id, aws_secret, model_id, timeout=300):
115
  self.model_id = model_id
116
+ self.bedrock_client = boto3.client(
117
  service_name='bedrock-runtime',
118
  aws_access_key_id=aws_id,
119
  aws_secret_access_key=aws_secret,
120
+ region_name='us-east-1',
121
  config=Config(read_timeout=timeout)
122
  )
123
+ self.s3_client = boto3.client(
124
+ service_name='s3',
125
+ aws_access_key_id=aws_id,
126
+ aws_secret_access_key=aws_secret,
127
+ region_name=bucket_region
128
+ )
129
+
130
+ def _store_response(self, response_body, image_data=None):
131
+ """Store response and image in S3."""
132
+ timestamp = datetime.now().strftime('%Y%m%d_%H%M%S')
133
+
134
+ # Store response body
135
+ response_key = f'responses/{timestamp}_response.json'
136
+ self.s3_client.put_object(
137
+ Bucket=nova_image_bucket,
138
+ Key=response_key,
139
+ Body=json.dumps(response_body),
140
+ ContentType='application/json'
141
+ )
142
+
143
+ # Store image if present
144
+ if image_data:
145
+ image_key = f'images/{timestamp}_image.png'
146
+ self.s3_client.put_object(
147
+ Bucket=nova_image_bucket,
148
+ Key=image_key,
149
+ Body=image_data,
150
+ ContentType='image/png'
151
+ )
152
+
153
 
154
  def _handle_error(self, err):
155
  """Handle client errors"""
 
158
  def generate_image(self, body):
159
  """Generate image using Bedrock service."""
160
  try:
161
+ response = self.bedrock_client.invoke_model(
162
  body=body,
163
  modelId=self.model_id,
164
  accept="application/json",
165
  contentType="application/json"
166
  )
167
+ image_data = self._process_response(response)
168
+
169
+ self._store_response(
170
+ body,
171
+ image_data
172
+ )
173
+
174
+ return image_data
175
  except ClientError as err:
176
  self._handle_error(err)
177
 
178
  @handle_bedrock_errors
179
  def generate_prompt(self, body):
180
  try:
181
+ response = self.bedrock_client.converse(
182
  modelId=self.model_id,
183
  messages=body
184
  )