/** * Copyright 2020 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. */ #ifndef MINDSPORE_SERVING_INSTANCE_H #define MINDSPORE_SERVING_INSTANCE_H #include #include #include #include #include #include "common/serving_common.h" #include "common/servable.h" namespace mindspore::serving { using InstanceData = std::vector; using TensorsData = std::vector; struct Instance; using InstancePtr = std::shared_ptr; struct WorkerUserContext { RequestSpec request_spec; MethodSignature method_def; }; enum InstancePhase { kInstancePhaseNone, kInstancePhasePreprocess, kInstancePhasePredict, kInstancePhasePostprocess, kInstancePhaseDone, }; struct InstanceContext { uint64_t user_id = 0; uint32_t instance_index = 0; std::promise promise; std::shared_ptr user_context = nullptr; bool operator==(const InstanceContext &other) const { return user_id == other.user_id && instance_index == other.instance_index; } }; struct Instance { InstanceData data; // for inputs of preprocess, predict, postprocess or output InstanceData input_data; // input data InstanceData preprocess_data; // preprocess result InstanceData predict_data; // predict result InstanceData postprocess_data; // postprocess result InstanceContext context; InstancePhase phase = kInstancePhaseNone; Status error_msg = SUCCESS; }; struct ResultInstance { InstanceData data; Status error_msg = SUCCESS; }; } // namespace mindspore::serving #endif // MINDSPORE_SERVING_INSTANCE_H