# Copyright 2021 Huawei Technologies Co., Ltd # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # ============================================================================ """client example of add""" import json import requests import numpy as np from mindspore_serving.client import Client def check_result(result, y_data_list): """check grpc output result""" assert len(result) == len(y_data_list) for result_item, y_data in zip(result, y_data_list): assert (result_item["y"] == y_data).all() def run_add_common(): """invoke servable add method add_common""" client = Client("localhost", 5500, "add", "add_common") instances = [] instance_count = 3 y_data_list = [] for i in range(instance_count): x1 = np.asarray([[1.1, 2.2], [3.3, 4.4]]).astype(np.float32) * (i + 1) x2 = np.asarray([[5.5, 6.6], [7.7, 8.8]]).astype(np.float32) * (i + 1) y_data_list.append(x1 + x2) instances.append({"x1": x1, "x2": x2}) result = client.infer(instances) print(result) check_result(result, y_data_list) def run_add_cast(): """invoke servable add method add_cast""" client = Client("localhost", 5500, "add", "add_cast") instances = [] y_data_list = [] x1 = np.ones((2, 2), np.int32) x2 = np.ones((2, 2), np.int32) instances.append({"x1": x1, "x2": x2}) y_data_list.append((x1 + x2).astype(np.float32)) result = client.infer(instances) print(result) check_result(result, y_data_list) def post_restful(ip, restful_port, servable_name, method_name, json_instances, version_number=None): """construct post restful request""" instances_map = {"instances": json_instances} post_payload = json.dumps(instances_map) print("request:", post_payload[:200]) if version_number is not None: request_url = f"http://{ip}:{restful_port}/model/{servable_name}/version/{version_number}:{method_name}" result = requests.post(request_url, data=post_payload) else: request_url = f"http://{ip}:{restful_port}/model/{servable_name}:{method_name}" result = requests.post(request_url, data=post_payload) print("result", result.text[:200]) result = json.loads(result.text) return result def check_number_result(result, y_data_list, output_name="y"): """check restful output result""" result = result["instances"] assert len(result) == len(y_data_list) for result_item, expected_item in zip(result, y_data_list): result_item = np.array(result_item[output_name]) print("result", result_item) print("expect:", expected_item) assert result_item.shape == expected_item.shape assert (np.abs(result_item - expected_item) < 0.001).all() def run_add_restful(): """run restful request: invoke servable add method add_common""" # Client print("begin to run add restful.") y_data_list = [] instances = [] x1 = np.asarray([[1.1, 2.2], [3.3, 4.4]]).astype(np.float32) x2 = np.asarray([[5.5, 6.6], [7.7, 8.8]]).astype(np.float32) y_data_list.append((x1 + x2).astype(np.float32)) instances.append({"x1": x1.tolist(), "x2": x2.tolist()}) result = post_restful("localhost", 15500, "add", "add_common", instances) check_number_result(result, y_data_list) if __name__ == '__main__': run_add_common() run_add_cast() run_add_restful()