def test_model_template_app_grpc_tags(tracing): with start_microservice( join(dirname(__file__), "model-template-app"), tracing=tracing, grpc=True ): data = np.array([[1, 2]]) datadef = prediction_pb2.DefaultData( tensor=prediction_pb2.Tensor(shape=data.shape, values=data.flatten()) ) meta = prediction_pb2.Meta() json_format.ParseDict({"tags": {"foo": "bar"}}, meta) request = prediction_pb2.SeldonMessage(data=datadef, meta=meta) channel = grpc.insecure_channel("0.0.0.0:5000") stub = prediction_pb2_grpc.ModelStub(channel) response = stub.Predict(request=request) assert response.data.tensor.shape[0] == 1 assert response.data.tensor.shape[1] == 2 assert response.data.tensor.values[0] == 1 assert response.data.tensor.values[1] == 2 assert response.meta.tags["foo"].string_value == "bar"
def test_model_template_app_grpc(tracing): with start_microservice(join(dirname(__file__), "model-template-app"), tracing=tracing, grpc=True): data = np.array([[1, 2]]) datadef = prediction_pb2.DefaultData(tensor=prediction_pb2.Tensor( shape=data.shape, values=data.flatten())) request = prediction_pb2.SeldonMessage(data=datadef) channel = grpc.insecure_channel("0.0.0.0:5000") stub = prediction_pb2_grpc.ModelStub(channel) response = stub.Predict(request=request) assert response.data.tensor.shape[0] == 1 assert response.data.tensor.shape[1] == 2 assert response.data.tensor.values[0] == 1 assert response.data.tensor.values[1] == 2 arr = np.array([1, 2]) datadef = prediction_pb2.DefaultData( tensor=prediction_pb2.Tensor(shape=(2, 1), values=arr)) request = prediction_pb2.SeldonMessage(data=datadef) feedback = prediction_pb2.Feedback(request=request, reward=1.0) response = stub.SendFeedback(request=request)
def test_model_template_app_grpc_metrics(microservice): data = np.array([[1, 2]]) datadef = prediction_pb2.DefaultData( tensor=prediction_pb2.Tensor(shape=data.shape, values=data.flatten()) ) meta = prediction_pb2.Meta() json_format.ParseDict( {"metrics": [{"key": "mygauge", "type": "GAUGE", "value": 100}]}, meta ) request = prediction_pb2.SeldonMessage(data=datadef, meta=meta) channel = grpc.insecure_channel("0.0.0.0:5000") stub = prediction_pb2_grpc.ModelStub(channel) response = retry_method(stub.Predict, kwargs=dict(request=request)) assert response.data.tensor.shape[0] == 1 assert response.data.tensor.shape[1] == 2 assert response.data.tensor.values[0] == 1 assert response.data.tensor.values[1] == 2 assert response.meta.metrics[0].key == "mygauge" assert response.meta.metrics[0].value == 100
def run_predict(args): contract = json.load(open(args.contract, 'r')) contract = unfold_contract(contract) feature_names = [feature["name"] for feature in contract["features"]] REST_url = "http://" + args.host + ":" + str(args.port) + "/predict" for i in range(args.n_requests): batch = generate_batch(contract, args.batch_size, 'features') if args.prnt: print('-' * 40) print("SENDING NEW REQUEST:") if not args.grpc and not args.fbs: REST_request = gen_REST_request(batch, features=feature_names, tensor=args.tensor) if args.prnt: print(REST_request) t1 = time() response = requests.post(REST_url, data={ "json": json.dumps(REST_request), "isDefault": True }) t2 = time() jresp = response.json() if args.prnt: print("RECEIVED RESPONSE:") print(jresp) print() print("Time " + str(t2 - t1)) elif args.grpc: GRPC_request = gen_GRPC_request(batch, features=feature_names, tensor=args.tensor) if args.prnt: print(GRPC_request) channel = grpc.insecure_channel('{}:{}'.format( args.host, args.port)) stub = prediction_pb2_grpc.ModelStub(channel) response = stub.Predict(GRPC_request) if args.prnt: print("RECEIVED RESPONSE:") print(response) print() elif args.fbs: import socket import struct from seldon_core.tester_flatbuffers import NumpyArrayToSeldonRPC, SeldonRPCToNumpyArray data = NumpyArrayToSeldonRPC(batch, feature_names) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect((args.host, args.port)) totalsent = 0 MSGLEN = len(data) print("Will send", MSGLEN, "bytes") while totalsent < MSGLEN: sent = s.send(data[totalsent:]) if sent == 0: raise RuntimeError("socket connection broken") totalsent = totalsent + sent data = s.recv(4) obj = struct.unpack('<i', data) len_msg = obj[0] data = s.recv(len_msg) arr = SeldonRPCToNumpyArray(data) print(arr)
def run_send_feedback(args): contract = json.load(open(args.contract, 'r')) contract = unfold_contract(contract) feature_names = [feature["name"] for feature in contract["features"]] response_names = [feature["name"] for feature in contract["targets"]] REST_url = "http://" + args.host + ":" + str(args.port) + "/send-feedback" for i in range(args.n_requests): batch = generate_batch(contract, args.batch_size, 'features') response = generate_batch(contract, args.batch_size, 'targets') if args.prnt: print('-' * 40) print("SENDING NEW REQUEST:") if not args.grpc and not args.fbs: REST_request = gen_REST_request(batch, features=feature_names, tensor=args.tensor) REST_response = gen_REST_request(response, features=response_names, tensor=args.tensor) reward = 1.0 REST_feedback = { "request": REST_request, "response": REST_response, "reward": reward } if args.prnt: print(REST_feedback) t1 = time() response = requests.post(REST_url, data={"json": json.dumps(REST_feedback)}) t2 = time() if args.prnt: print("Time " + str(t2 - t1)) print(response) elif args.grpc: GRPC_request = gen_GRPC_request(batch, features=feature_names, tensor=args.tensor) GRPC_response = gen_GRPC_request(response, features=response_names, tensor=args.tensor) reward = 1.0 GRPC_feedback = prediction_pb2.Feedback(request=GRPC_request, response=GRPC_response, reward=reward) if args.prnt: print(GRPC_feedback) channel = grpc.insecure_channel('{}:{}'.format( args.host, args.port)) stub = prediction_pb2_grpc.ModelStub(channel) response = stub.SendFeedback(GRPC_feedback) if args.prnt: print("RECEIVED RESPONSE:") print()