16 #include "tensorflow_serving/servables/tensorflow/get_model_metadata_impl.h"
24 #include "tensorflow/cc/saved_model/loader.h"
25 #include "tensorflow/core/lib/core/errors.h"
26 #include "tensorflow_serving/core/servable_handle.h"
28 namespace tensorflow {
33 Status ValidateGetModelMetadataRequest(
const GetModelMetadataRequest& request) {
34 if (request.metadata_field_size() == 0) {
35 return tensorflow::Status(
36 static_cast<absl::StatusCode
>(absl::StatusCode::kInvalidArgument),
37 "GetModelMetadataRequest must specify at least one metadata_field");
39 for (
const auto& metadata_field : request.metadata_field()) {
40 if (metadata_field != GetModelMetadataImpl::kSignatureDef) {
41 return tensorflow::errors::InvalidArgument(
42 "Metadata field ", metadata_field,
" is not supported");
45 return absl::OkStatus();
48 Status SavedModelGetSignatureDef(ServerCore* core,
const ModelSpec& model_spec,
49 const GetModelMetadataRequest& request,
50 GetModelMetadataResponse* response) {
51 ServableHandle<SavedModelBundle> bundle;
52 TF_RETURN_IF_ERROR(core->GetServableHandle(model_spec, &bundle));
53 SignatureDefMap signature_def_map;
54 for (
const auto& signature : bundle->meta_graph_def.signature_def()) {
55 (*signature_def_map.mutable_signature_def())[signature.first] =
58 auto response_model_spec = response->mutable_model_spec();
59 response_model_spec->set_name(bundle.id().name);
60 response_model_spec->mutable_version()->set_value(bundle.id().version);
62 (*response->mutable_metadata())[GetModelMetadataImpl::kSignatureDef].PackFrom(
64 return absl::OkStatus();
69 constexpr
const char GetModelMetadataImpl::kSignatureDef[];
71 Status GetModelMetadataImpl::GetModelMetadata(
72 ServerCore* core,
const GetModelMetadataRequest& request,
73 GetModelMetadataResponse* response) {
74 if (!request.has_model_spec()) {
75 return tensorflow::Status(
76 static_cast<absl::StatusCode
>(absl::StatusCode::kInvalidArgument),
79 return GetModelMetadataWithModelSpec(core, request.model_spec(), request,
83 Status GetModelMetadataImpl::GetModelMetadataWithModelSpec(
84 ServerCore* core,
const ModelSpec& model_spec,
85 const GetModelMetadataRequest& request,
86 GetModelMetadataResponse* response) {
87 TF_RETURN_IF_ERROR(ValidateGetModelMetadataRequest(request));
88 for (
const auto& metadata_field : request.metadata_field()) {
89 if (metadata_field == kSignatureDef) {
91 SavedModelGetSignatureDef(core, model_spec, request, response));
93 return tensorflow::errors::InvalidArgument(
94 "MetadataField ", metadata_field,
" is not supported");
97 return absl::OkStatus();