def Predict(self, **kwargs): return prediction_pb2.SeldonMessage(strData="predict")
def predict_grpc(self, request): arr = np.array([9, 9]) datadef = prediction_pb2.DefaultData( tensor=prediction_pb2.Tensor(shape=(2, 1), values=arr)) request = prediction_pb2.SeldonMessage(data=datadef) return request
def Route(selfself, **kwargs): return prediction_pb2.SeldonMessage(strData="route")
def mocked_requests_post_success(url, *args, **kwargs): data = np.random.rand(1, 1) datadef = array_to_grpc_datadef("tensor", data) request = prediction_pb2.SeldonMessage(data=datadef) json = seldon_message_to_json(request) return MockResponse(json, 200, text="{}")
def TransformOutput(selfself, **kwargs): return prediction_pb2.SeldonMessage(strData="transform-output")
def construct_response( user_model: SeldonComponent, is_request: bool, client_request: prediction_pb2.SeldonMessage, client_raw_response: Union[np.ndarray, str, bytes, dict] ) -> prediction_pb2.SeldonMessage: """ Parameters ---------- user_model Client user class is_request Whether this is part of the request flow as opposed to the response flow client_request The request received client_raw_response The raw client response from their model Returns ------- A SeldonMessage proto response """ data_type = client_request.WhichOneof("data_oneof") meta = prediction_pb2.Meta() meta_json: Dict = {} tags = client_custom_tags(user_model) if tags: meta_json["tags"] = tags metrics = client_custom_metrics(user_model) if metrics: meta_json["metrics"] = metrics if client_request.meta: if client_request.meta.puid: meta_json["puid"] = client_request.meta.puid json_format.ParseDict(meta_json, meta) if isinstance(client_raw_response, np.ndarray) or isinstance( client_raw_response, list): client_raw_response = np.array(client_raw_response) if is_request: names = client_feature_names(user_model, client_request.data.names) else: names = client_class_names(user_model, client_raw_response) if data_type == "data": # If request is using defaultdata then return what was sent if is numeric response else ndarray if np.issubdtype(client_raw_response.dtype, np.number): default_data_type = client_request.data.WhichOneof( "data_oneof") else: default_data_type = "ndarray" else: # If numeric response return as tensor else return as ndarray if np.issubdtype(client_raw_response.dtype, np.number): default_data_type = "tensor" else: default_data_type = "ndarray" data = array_to_grpc_datadef(default_data_type, client_raw_response, names) return prediction_pb2.SeldonMessage(data=data, meta=meta) elif isinstance(client_raw_response, str): return prediction_pb2.SeldonMessage(strData=client_raw_response, meta=meta) elif isinstance(client_raw_response, dict): jsonDataResponse = ParseDict(client_raw_response, prediction_pb2.SeldonMessage().jsonData) return prediction_pb2.SeldonMessage(jsonData=jsonDataResponse, meta=meta) elif isinstance(client_raw_response, (bytes, bytearray)): return prediction_pb2.SeldonMessage(binData=client_raw_response, meta=meta) else: raise SeldonMicroserviceException( "Unknown data type returned as payload:" + client_raw_response)
def route_raw(self, request): arr = np.array([1]) datadef = prediction_pb2.DefaultData( tensor=prediction_pb2.Tensor(shape=(1, 1), values=arr)) request = prediction_pb2.SeldonMessage(data=datadef) return request
def test_proto_seldon_metrics_endpoint(cls, client_gets_metrics): def _match_label(line): _data, value = line.split() name, labels = _data.split()[0].split("{") labels = labels[:-1] return name, value, eval(f"dict({labels})") def _iterate_metrics(text): for line in text.split("\n"): if not line or line[0] == "#": continue yield _match_label(line) user_object = cls() seldon_metrics = SeldonMetrics() app = SeldonModelGRPC(user_object, seldon_metrics) datadef = prediction_pb2.DefaultData( tensor=prediction_pb2.Tensor(shape=(2, 1), values=np.array([1, 2]))) request = prediction_pb2.SeldonMessage(data=datadef) metrics_app = get_metrics_microservice(seldon_metrics) metrics_client = metrics_app.test_client() rv = metrics_client.get("/metrics") assert rv.status_code == 200 assert rv.data.decode() == "" resp = app.Predict(request, None) j = json.loads(json_format.MessageToJson(resp)) assert j["data"] == { "names": ["t:0"], "tensor": { "shape": [2, 1], "values": [1.0, 2.0] }, } assert j["meta"]["tags"] == EXPECTED_TAGS assert ("metrics" in j["meta"]) == client_gets_metrics rv = metrics_client.get("/metrics") text = rv.data.decode() timer_present = False for name, value, labels in _iterate_metrics(text): if name == "mytimer_bucket": timer_present = True if name == "mycounter_total": assert value == "1.0" assert labels["worker_id"] == str(os.getpid()) if name == "mygauge": assert value == "100.0" assert labels["worker_id"] == str(os.getpid()) if name == "customtag": assert value == "200.0" assert labels["mytag"] == "mytagvalue" assert timer_present
def transform_output_raw(self, X): arr = np.array([9, 9]) datadef = prediction_pb2.DefaultData( tensor=prediction_pb2.Tensor(shape=(2, 1), values=arr)) request = prediction_pb2.SeldonMessage(data=datadef) return request