in backend/training-pipeline/functions/api/infer.py [0:0]
def post(event, context):
if event['body'] is not None:
body = json.loads(event['body'])
params = body['input']
# The last range parameter
range = body['range']
start = range['start']
end = range['end']
step = range['step']
endpoint_name = body['modelName']
else:
return create_response_obj(400, {
'error': 'invalid message body'
})
logger.info('params: {}'.format(params))
params = [float(i) for i in params]
all_data = []
xaxis = []
# Build CSV with these values
# Input#1, Input#2, .....#Input 19, Input#20
# 1, 2, 3..., 19, 1.1
# 1, 2, 3..., 19, 1.2
# 1, 2, 3..., 19, 1.3
# ....
# 1, 2, 3..., 19, 2.8
# 1, 2, 3..., 19, 2.9
# 1, 2, 3..., 19, 3.0
for i in np.arange(start, end, step):
all_data.append(params + [i])
xaxis.append(str(i))
logger.info('xaxis: {}'.format(xaxis))
logger.info('all_data[0]: {}'.format(all_data[0]))
logger.info(f'all_data: {all_data}')
df = pd.DataFrame(np.array(all_data))
test_file = io.StringIO()
logger.info(df.head())
df.to_csv(test_file, header=None, index=None)
try:
client = boto3.client('sagemaker-runtime')
response = client.invoke_endpoint(
EndpointName=endpoint_name,
Body=test_file.getvalue(),
ContentType='text/csv',
Accept='Accept'
)
preds_string = response['Body'].read().decode('ascii').split()
preds = list(map(lambda x: float(x), preds_string))
return create_response_obj(200, {
'x_axis': xaxis,
'predictions': preds,
})
except client.exceptions.ModelError as e:
logger.error(repr(e))
return create_response_obj(502, {
'error': repr(e),
})