def predict_raw(self, request): print("Predict raw") default_data_type = request.data.WhichOneof("data_oneof") print(default_data_type) if default_data_type == "tftensor" and self.grpc: tfrequest = predict_pb2.PredictRequest() tfrequest.model_spec.name = self.model_name tfrequest.model_spec.signature_name = self.signature_name tfrequest.inputs[self.model_input].CopyFrom(request.data.tftensor) result = self.stub.Predict(tfrequest) print(result) datadef = prediction_pb2.DefaultData( tftensor=result.outputs[self.model_output]) return prediction_pb2.SeldonMessage(data=datadef) elif default_data_type == "jsonData": predictions = self.predict(request.jsonData, features_names=[]) return prediction_pb2.SeldonMessage(jsonData=predictions) else: features = get_data_from_proto(request) datadef = request.data data_type = request.WhichOneof("data_oneof") predictions = self.predict(features, datadef.names) predictions = np.array(predictions) if data_type == "data": default_data_type = request.data.WhichOneof("data_oneof") else: default_data_type = "tensor" class_names = [] data = array_to_grpc_datadef(predictions, class_names, default_data_type) return prediction_pb2.SeldonMessage(data=data)
def test_get_data_from_proto_tftensor(): arr = np.array([[1], [2]]) datadef = prediction_pb2.DefaultData(tftensor=tf.make_tensor_proto(arr)) request = prediction_pb2.SeldonMessage(data=datadef) arr: np.ndarray = scu.get_data_from_proto(request) assert arr.shape == (2, 1) assert arr[0][0] == 1 assert arr[1][0] == 2
def test_get_data_from_proto_ndarray(): arr = np.array([[1], [2]]) lv = scu.array_to_list_value(arr) datadef = prediction_pb2.DefaultData(ndarray=lv) request = prediction_pb2.SeldonMessage(data=datadef) arr: np.ndarray = scu.get_data_from_proto(request) assert arr.shape == (2, 1) assert arr[0][0] == 1 assert arr[1][0] == 2
def test_get_data_from_proto_tensor(): arr = np.array([1, 2]) datadef = prediction_pb2.DefaultData( tensor=prediction_pb2.Tensor(shape=(2, 1), values=arr)) request = prediction_pb2.SeldonMessage(data=datadef) arr: np.ndarray = scu.get_data_from_proto(request) assert arr.shape == (2, 1) assert arr[0][0] == 1 assert arr[1][0] == 2
def predict_raw(self, request): log.debug("Predict raw") request_data_type = request.WhichOneof("data_oneof") default_data_type = request.data.WhichOneof("data_oneof") log.debug(str(request_data_type), str(default_data_type)) if default_data_type == "tftensor" and self.grpc: tfrequest = predict_pb2.PredictRequest() tfrequest.model_spec.name = self.model_name tfrequest.model_spec.signature_name = self.signature_name tfrequest.inputs[self.model_input].CopyFrom(request.data.tftensor) result = self.stub.Predict(tfrequest) log.debug(result) datadef = prediction_pb2.DefaultData( tftensor=result.outputs[self.model_output]) return prediction_pb2.SeldonMessage(data=datadef) elif request_data_type == "jsonData": features = get_data_from_proto(request) predictions = self.predict(features, features_names=[]) try: sm = json_to_seldon_message({"jsonData": predictions}) except ParseError as e: sm = prediction_pb2.SeldonMessage(strData=predictions) return sm else: features = get_data_from_proto(request) datadef = request.data predictions = self.predict(features, datadef.names) predictions = np.array(predictions) if request_data_type is not "data": default_data_type = "tensor" class_names = [] data = array_to_grpc_datadef(predictions, class_names, default_data_type) return prediction_pb2.SeldonMessage(data=data)