in src/lambda.d/inference/func/inferenceApi.py [0:0]
def handler(event, context):
logger.info('Endpoint name: {}'.format(ENDPOINT_NAME))
logger.info(f'Receive event: {event}')
G_s_t = dt.now()
trans_dict, identity_dict, target_id, transaction_value_cols, union_li_cols = load_data_from_event(event, transactions_id_cols, transactions_cat_cols, dummied_col)
G_e_t = dt.now()
logger.info(f'load_data_from_event used {(G_e_t - G_s_t).total_seconds()} seconds. ')
G_new_s_t = G_e_t
graph_input = GraphModelClient(endpoints)
graph_input.insert_new_transaction_vertex_and_edge(trans_dict, identity_dict , target_id, vertex_type = 'Transaction')
G_e_t = dt.now()
logger.info(f'insert_new_transaction_vertex_and_edge used {(G_e_t - G_new_s_t).total_seconds()} seconds. Total test cost {(G_e_t - G_s_t).total_seconds()} seconds.')
G_new_s_t = G_e_t
subgraph_dict, transaction_embed_value_dict = graph_input.query_target_subgraph(target_id, trans_dict, transaction_value_cols, union_li_cols, dummied_col)
G_e_t = dt.now()
logger.info(f'query_target_subgraph used {(G_e_t - G_new_s_t).total_seconds()} seconds. Total test cost {(G_e_t - G_s_t).total_seconds()} seconds.')
G_new_s_t = G_e_t
transaction_id = int(target_id[(target_id.find('-')+1):])
pred_prob = invoke_endpoint_with_idx(endpointname = ENDPOINT_NAME, target_id = transaction_id, subgraph_dict = subgraph_dict, n_feats = transaction_embed_value_dict)
e_t = dt.now()
logger.info(f'invoke_endpoint_with_idx used {(G_e_t - G_new_s_t).total_seconds()} seconds. Total test cost {(G_e_t - G_s_t).total_seconds()} seconds.')
G_new_s_t = G_e_t
data_output = {
'timestamp': int(time.time()),
'isFraud': pred_prob > MODEL_BTW,
'id': transaction_id, #event['transaction_data'][0]['TransactionID'],
'amount': event['transaction_data'][0]['TransactionAmt'],
'productCD': event['transaction_data'][0]['ProductCD'],
'card1': event['transaction_data'][0]['card1'],
'card2': event['transaction_data'][0]['card2'],
'card3': event['transaction_data'][0]['card3'],
'card4': event['transaction_data'][0]['card4'],
'card5': event['transaction_data'][0]['card5'],
'card6': event['transaction_data'][0]['card6'],
'addr1': event['transaction_data'][0]['addr1'],
'addr2': event['transaction_data'][0]['addr2'],
'dist1': event['transaction_data'][0]['dist1'],
'dist2': event['transaction_data'][0]['dist2'],
'pEmaildomain': event['transaction_data'][0]['P_emaildomain'],
'rEmaildomain': event['transaction_data'][0]['R_emaildomain'],
}
logger.debug(f'Send transaction {data_output} to queue.')
response = sqs.send_message(
QueueUrl=QUEUE_URL,
DelaySeconds=0,
MessageBody=json.dumps(data_output),
MessageGroupId=context.aws_request_id,
)
function_res = {
'id': event['transaction_data'][0]['TransactionID'],
'flag': pred_prob > MODEL_BTW,
'pred_prob': pred_prob,
'time': (G_e_t - G_s_t).total_seconds()
}
logger.info(f'Return function_res {function_res}.')
return function_res