def SendFeedback(): feedback = extract_message() if debug: print("SELDON DEBUGGING") print("Feedback received: ") print(feedback) datadef_request = feedback.get("request", {}).get("data", {}) features = rest_datadef_to_array(datadef_request) datadef_truth = feedback.get("truth", {}).get("data", {}) truth = rest_datadef_to_array(datadef_truth) reward = feedback.get("reward") try: routing = feedback.get("response").get("meta").get("routing").get( PRED_UNIT_ID) except AttributeError: raise SeldonMicroserviceException( "Router feedback must contain a routing dictionary in the response metadata" ) send_feedback(user_router, features, datadef_request.get("names"), routing, reward, truth) return jsonify({})
def SendFeedback(): feedback = extract_message() datadef_request = feedback.get("request").get("data") features = rest_datadef_to_array(datadef) truth = rest_datadef_to_array(feedback.get("truth")) reward = feedback.get("reward") send_feedback(user_model,features,datadef_request.get("names"),truth,reward) return jsonify({})
def SendFeedback(): feedback = extract_message() datadef_request = feedback.get("request").get("data") features = rest_datadef_to_array(datadef) truth = rest_datadef_to_array(feedback.get("truth")) reward = feedback.get("reward") routing = feedback.get("response").get("meta").get("routing").get(PRED_UNIT_ID) send_feedback(user_router,features,datadef_request.get("names"),routing,reward,truth) return jsonify({})
def Route(): request = extract_message() if debug: print("SELDON DEBUGGING") print("Request received: ") print(request) sanity_check_request(request) datadef = request.get("data") features = rest_datadef_to_array(datadef) routing = np.array( [[route(user_router, features, datadef.get("names"))]]) # TODO: check that predictions is 2 dimensional class_names = [] data = array_to_rest_datadef(routing, class_names, datadef) response = {"data": data, "meta": {}} tags = get_custom_tags(user_router) if tags: response["meta"]["tags"] = tags metrics = get_custom_metrics(user_router) if metrics: response["meta"]["metrics"] = metrics return jsonify(response)
def test_json_tftensor_to_array(): names = ["a", "b"] array = np.array([[1, 2], [3, 4]]) datadef = prediction_pb2.DefaultData(names=names, tftensor=tf.make_tensor_proto(array)) jStr = json_format.MessageToJson(datadef) j = json.loads(jStr) array2 = rest_datadef_to_array(j) assert np.array_equal(array, array2)
def Predict(): request = extract_message() sanity_check_request(request) datadef = request.get("data") features = rest_datadef_to_array(datadef) predictions = np.array(predict(user_model,features,datadef.get("names"))) # TODO: check that predictions is 2 dimensional class_names = get_class_names(user_model, predictions.shape[1]) data = array_to_rest_datadef(predictions, class_names, datadef) return jsonify({"data":data})
def TransformInput(): request = extract_message() sanity_check_request(request) datadef = request.get("data") features = rest_datadef_to_array(datadef) outlier_scores = score(user_model,features,datadef.get("names")) # TODO: check that predictions is 2 dimensional request["meta"].setdefault("tags",{}) request["meta"]["tags"]["outlierScore"] = list(outlier_scores) return jsonify(request)
def TransformOutput(): request = extract_message() sanity_check_request(request) datadef = request.get("data") features = rest_datadef_to_array(datadef) transformed = np.array(transform_output(user_model,features,datadef.get("names"))) # TODO: check that predictions is 2 dimensional new_class_names = get_class_names(user_model, datadef.get("names")) data = array_to_rest_datadef(transformed, new_class_names, datadef) return jsonify({"data":data})
def Route(): request = extract_message() sanity_check_request(request) datadef = request.get("data") features = rest_datadef_to_array(datadef) routing = np.array([[route(user_router,features,datadef.get("names"))]]) # TODO: check that predictions is 2 dimensional class_names = [] data = array_to_rest_datadef(routing, class_names, datadef) return jsonify({"data":data})
def Predict(): request = extract_message() sanity_check_request(request) datadef = request.get("data") features = rest_datadef_to_array(datadef) predictions = np.array( predict(user_model, features, datadef.get("names"))) if len(predictions.shape) > 1: class_names = get_class_names(user_model, predictions.shape[1]) else: class_names = [] data = array_to_rest_datadef(predictions, class_names, datadef) return jsonify({"data": data})
def Predict(): request = extract_message() sanity_check_request(request) datadef = request.get("data") features = rest_datadef_to_array(datadef) predictions = np.array(predict(user_model,features,datadef.get("names"))) if len(predictions.shape)>1: class_names = get_class_names(user_model, predictions.shape[1]) else: class_names = [] data = array_to_rest_datadef(predictions, class_names, datadef) response = {"data":data,"meta":{}} tags = get_custom_tags(user_model) if tags: response["meta"]["tags"] = tags metrics = get_custom_metrics(user_model) if metrics: response["meta"]["metrics"] = metrics return jsonify(response)