in decisionai_plugin/common/plugin_service.py [0:0]
def inference(self, request, model_id):
request_body = json.loads(request.data)
instance_id = request_body['instance']['instanceId']
subscription = request.headers.get('apim-subscription-id', 'Official')
request_body[INSTANCE_ID_KEY] = subscription
if self.trainable:
meta = get_meta(self.config, subscription, model_id)
if meta is None:
return make_response(jsonify(dict(instanceId=instance_id, modelId=model_id, taskId='', result=STATUS_FAIL, message='Model is not found!', modelState=ModelState.Deleted.name)), 400)
if meta['state'] != ModelState.Ready.name:
return make_response(jsonify(dict(instanceId=instance_id, modelId=model_id, taskId='', result=STATUS_FAIL, message='Cannot do inference right now, status is ' + meta['state'], modelState=meta['state'])), 400)
try:
series_set = json.loads(meta['series_set'])
except:
series_set = json.loads(zlib.decompress(base64.b64decode(meta['series_set'].encode("ascii"))).decode('utf-8'))
para = json.loads(meta['para'])
current_set = json.dumps(series_set, sort_keys=True)
current_params = json.dumps(para, sort_keys=True)
new_set = json.dumps(request_body['seriesSets'], sort_keys=True)
new_params = json.dumps(request_body['instance']['params'], sort_keys=True)
if current_set != new_set or current_params != new_params:
if self.need_retrain(series_set, para, request_body['seriesSets'], request_body['instance']['params'], Context(subscription, model_id, '')):
return make_response(jsonify(dict(instanceId=instance_id, modelId=model_id, taskId='', result=STATUS_FAIL, message='Inconsistent series sets or params!', modelState=meta['state'])), 400)
log.info('Create inference task')
task_id = str(uuid.uuid1())
job = JobRecord(task_id, JobRecord.MODE_INFERENCE, self.__class__.__name__, model_id, subscription, request_body)
send_message(self.inference_topic, dict(job))
log.count("inference_task_throughput_in", 1, topic_name=self.inference_topic, model_id=model_id, endpoint=request_body['apiEndpoint'], group_id=request_body['groupId'], group_name=request_body['groupName'].replace(' ', '_'), instance_id=request_body['instance']['instanceId'], instance_name=request_body['instance']['instanceName'].replace(' ', '_'))
return make_response(jsonify(dict(instanceId=instance_id, modelId=model_id, taskId=task_id, result=STATUS_SUCCESS, message='Inference task created', modelState=ModelState.Ready.name)), 201)