def TransformOutput(): request = extract_message() logger.debug("Request: %s", request) sanity_check_request(request) if hasattr(user_model, "transform_output_rest"): return jsonify(user_model.transform_output_rest(request)) else: features = get_data_from_json(request) names = request.get("data", {}).get("names") meta = get_meta_from_json(request) transformed = transform_output(user_model, features, names, meta=meta) logger.debug("Transformed: %s", transformed) if isinstance(transformed, np.ndarray) or "data" in request: new_class_names = get_class_names(user_model, names) data = array_to_rest_datadef(transformed, new_class_names, request.get("data", {})) response = {"data": data, "meta": {}} else: response = {"binData": transformed, "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)
def TransformInput(): request = extract_message() logger.debug("Request: %s", request) sanity_check_request(request) if hasattr(user_model, "transform_input_rest"): return jsonify(user_model.transform_input_rest(request)) else: features = get_data_from_json(request) names = request.get("data", {}).get("names") transformed = transform_input(user_model, features, names) logger.debug("Transformed: %s", transformed) # If predictions is an numpy array or we used the default data then return as numpy array if isinstance(transformed, np.ndarray) or "data" in request: new_feature_names = get_feature_names(user_model, names) transformed = np.array(transformed) data = array_to_rest_datadef(transformed, new_feature_names, request.get("data", {})) response = {"data": data, "meta": {}} else: response = {"binData": transformed, "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)
def SendFeedback(): feedback = extract_message() logger.debug("Feedback received: %s", feedback) if hasattr(user_router, "send_feedback_rest"): return jsonify(user_router.send_feedback_rest(feedback)) else: 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 Route(): request = extract_message() logger.debug("Request: %s", request) sanity_check_request(request) if hasattr(user_router, "route_rest"): return jsonify(user_router.route_rest(request)) else: 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 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 SendFeedback(): feedback = extract_message() logger.debug("Feedback received: %s", feedback) if hasattr(user_model, "send_feedback_rest"): return jsonify(user_model.send_feedback_rest(feedback)) else: 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") send_feedback(user_model, features, datadef_request.get("names"), reward, truth) return jsonify({})
def Aggregate(): request = extract_message() logger.debug("Request: %s", request) sanity_check_seldon_message_list(request) if hasattr(user_model, "aggregate_rest"): return jsonify(user_model.aggregate_rest(request)) else: features_list = [] names_list = [] for msg in request["seldonMessages"]: features = get_data_from_json(msg) names = msg.get("data", {}).get("names") features_list.append(features) names_list.append(names) aggregated = aggregate(user_model, features_list, names_list) logger.debug("Aggregated: %s", aggregated) # If predictions is a numpy array or we used the default data then return as numpy array if isinstance( aggregated, np.ndarray) or "data" in request["seldonMessages"][0]: new_feature_names = get_feature_names(user_model, names_list[0]) aggregated = np.array(aggregated) data = array_to_rest_datadef( aggregated, new_feature_names, request["seldonMessages"][0].get("data", {})) response = {"data": data, "meta": {}} else: response = {"binData": aggregated, "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)
def Predict(): request = extract_message() logger.debug("Request: %s", request) sanity_check_request(request) if hasattr(user_model, "predict_rest"): return jsonify(user_model.predict_rest(request)) else: features = get_data_from_json(request) names = request.get("data", {}).get("names") meta = get_meta_from_json(request) predictions = predict(user_model, features, names, meta=meta) logger.debug("Predictions: %s", predictions) # If predictions is an numpy array or we used the default data then return as numpy array if isinstance(predictions, np.ndarray) or "data" in request: predictions = np.array(predictions) 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, request.get("data", {})) response = {"data": data, "meta": {}} else: response = {"binData": predictions, "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)