Repository: kubeflow/katib (language: python)

Issue:
Replace the tool of code generator for the gRPC API
/kind feature

**Describe the solution you'd like**
[A clear and concise description of what you want to happen.]
Currently, we are generating codes for the gRPC API from the protocol buffers definition with [`znly/protoc`](https://hub.docker.com/r/znly/protoc/).

However, the image doesn't seem to be maintained since the latest image was published 4 years ago.

So, we should replace the toll with another one.

follow-up: #2140 

**Anything else you would like to add:**
[Miscellaneous information that will assist in solving the issue.]

---

<!-- Don't delete this message to encourage users to support your issue! -->

Love this feature? Give it a 👍 We prioritize the features with the most 👍



Discussion / hints:
cc: @andreyvelich @johnugeorge 

Maybe, we can migrate the tool to the [`Buf`](https://buf.build/).

Agree. We should try it out
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.
/lifecycle frozen
/good-first-issue
@andreyvelich: 
	This request has been marked as suitable for new contributors.

Please ensure the request meets the requirements listed [here](https://git.k8s.io/community/contributors/guide/help-wanted.md#good-first-issue).

If this request no longer meets these requirements, the label can be removed
by commenting with the `/remove-good-first-issue` command.


<details>

In response to [this](https://github.com/kubeflow/katib/issues/2141):

>/good-first-issue


Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository.
</details>
From the description provided in this issue, I understand that the existing code generation tool 'znly/protoc' is not maintained properly, and there's a need to migrate to another tool, which has been mentioned in this conversation as Buf. As this issue is marked as a good first issue and aligns with my skill level, I'm keen to contribute to resolving it. 

I'm seeking any guidance or recommendations to get started on this task. Your assistance and response are invaluable to me. Looking forward to your input!
/assign
> From the description provided in this issue, I understand that the existing code generation tool 'znly/protoc' is not maintained properly, and there's a need to migrate to another tool, which has been mentioned in this conversation as Buf. As this issue is marked as a good first issue and aligns with my skill level, I'm keen to contribute to resolving it. 
> 
> 
> 
> I'm seeking any guidance or recommendations to get started on this task. Your assistance and response are invaluable to me. Looking forward to your input!

@shivas1516 Your understanding is correct.
Feel free to open a PR. We’d be happy to review it.

Fix patch:
diff --git a/Makefile b/Makefile
index c07cca120d0..296aa057064 100755
--- a/Makefile
+++ b/Makefile
@@ -10,10 +10,8 @@ CPU_ARCH ?= linux/amd64,linux/arm64
 ENVTEST_K8S_VERSION ?= 1.29
 MOCKGEN_VERSION ?= $(shell grep 'go.uber.org/mock' go.mod | cut -d ' ' -f 2)
 GO_VERSION=$(shell grep '^go' go.mod | cut -d ' ' -f 2)
+GOPATH ?= $(shell go env GOPATH)
 
-# for pytest
-PYTHONPATH := $(PYTHONPATH):$(CURDIR)/pkg/apis/manager/v1beta1/python:$(CURDIR)/pkg/apis/manager/health/python
-PYTHONPATH := $(PYTHONPATH):$(CURDIR)/pkg/metricscollector/v1beta1/common:$(CURDIR)/pkg/metricscollector/v1beta1/tfevent-metricscollector
 TEST_TENSORFLOW_EVENT_FILE_PATH ?= $(CURDIR)/test/unit/v1beta1/metricscollector/testdata/tfevent-metricscollector/logs
 
 # Run tests
@@ -93,17 +91,13 @@ controller-gen:
 # 4. Generate gRPC manager APIs (pkg/apis/manager/v1beta1/build.sh and pkg/apis/manager/health/build.sh)
 # 5. Generate Go mock codes
 generate: controller-gen
-ifndef GOPATH
-	$(error GOPATH not defined, please define GOPATH. Run "go help gopath" to learn more about GOPATH)
-endif
 ifndef HAS_MOCKGEN
 	go install go.uber.org/mock/mockgen@$(MOCKGEN_VERSION)
 	$(info "mockgen has been installed")
 endif
 	go generate ./pkg/... ./cmd/...
 	hack/gen-python-sdk/gen-sdk.sh
-	pkg/apis/manager/v1beta1/build.sh
-	pkg/apis/manager/health/build.sh
+	hack/update-proto.sh
 	hack/update-mockgen.sh
 
 # Build images for the Katib v1beta1 components.
@@ -175,9 +169,9 @@ ifeq ("$(wildcard $(TEST_TENSORFLOW_EVENT_FILE_PATH))", "")
 endif
 
 pytest: prepare-pytest prepare-pytest-testdata
-	PYTHONPATH=$(PYTHONPATH) pytest ./test/unit/v1beta1/suggestion --ignore=./test/unit/v1beta1/suggestion/test_skopt_service.py
-	PYTHONPATH=$(PYTHONPATH) pytest ./test/unit/v1beta1/earlystopping
-	PYTHONPATH=$(PYTHONPATH) pytest ./test/unit/v1beta1/metricscollector
+	pytest ./test/unit/v1beta1/suggestion --ignore=./test/unit/v1beta1/suggestion/test_skopt_service.py
+	pytest ./test/unit/v1beta1/earlystopping
+	pytest ./test/unit/v1beta1/metricscollector
 
 # The skopt service doesn't work appropriately with Python 3.11.
 # So, we need to run the test with Python 3.9.
@@ -187,4 +181,4 @@ pytest-skopt:
 	pip install six
 	pip install --prefer-binary -r test/unit/v1beta1/requirements.txt
 	pip install --prefer-binary -r cmd/suggestion/skopt/v1beta1/requirements.txt
-	PYTHONPATH=$(PYTHONPATH) pytest ./test/unit/v1beta1/suggestion/test_skopt_service.py
+	pytest ./test/unit/v1beta1/suggestion/test_skopt_service.py
diff --git a/cmd/metricscollector/v1beta1/tfevent-metricscollector/main.py b/cmd/metricscollector/v1beta1/tfevent-metricscollector/main.py
index 29c95849bff..853166f4409 100644
--- a/cmd/metricscollector/v1beta1/tfevent-metricscollector/main.py
+++ b/cmd/metricscollector/v1beta1/tfevent-metricscollector/main.py
@@ -15,6 +15,7 @@
 import grpc
 import argparse
 import api_pb2
+import api_pb2_grpc
 from pns import WaitMainProcesses
 import const
 from tfevent_loader import MetricsCollector
@@ -55,25 +56,28 @@ def parse_options():
     wait_all_processes = opt.wait_all_processes.lower() == "true"
     db_manager_server = opt.db_manager_server_addr.split(':')
     if len(db_manager_server) != 2:
-        raise Exception("Invalid Katib DB manager service address: %s" %
-                        opt.db_manager_server_addr)
+        raise Exception(
+            f"Invalid Katib DB manager service address: {opt.db_manager_server_addr}"
+        )
 
     WaitMainProcesses(
         pool_interval=opt.poll_interval,
         timout=opt.timeout,
         wait_all=wait_all_processes,
-        completed_marked_dir=opt.metrics_file_dir)
+        completed_marked_dir=opt.metrics_file_dir,
+    )
 
-    mc = MetricsCollector(opt.metric_names.split(';'))
+    mc = MetricsCollector(opt.metric_names.split(";"))
     observation_log = mc.parse_file(opt.metrics_file_dir)
 
-    channel = grpc.beta.implementations.insecure_channel(
-        db_manager_server[0], int(db_manager_server[1]))
-
-    with api_pb2.beta_create_DBManager_stub(channel) as client:
-        logger.info("In " + opt.trial_name + " " +
-                    str(len(observation_log.metric_logs)) + " metrics will be reported.")
-        client.ReportObservationLog(api_pb2.ReportObservationLogRequest(
-            trial_name=opt.trial_name,
-            observation_log=observation_log
-        ), timeout=timeout_in_seconds)
+    with grpc.insecure_channel(opt.db_manager_server_addr) as channel:
+        stub = api_pb2_grpc.DBManagerStub(channel)
+        logger.info(
+            f"In {opt.trial_name} {str(len(observation_log.metric_logs))} metrics will be reported."
+        )
+        stub.ReportObservationLog(
+            api_pb2.ReportObservationLogRequest(
+                trial_name=opt.trial_name, observation_log=observation_log
+            ),
+            timeout=timeout_in_seconds,
+        )
diff --git a/go.mod b/go.mod
index f9e4e94fd48..08a9dc038ae 100644
--- a/go.mod
+++ b/go.mod
@@ -7,7 +7,6 @@ require (
 	github.com/awalterschulze/gographviz v2.0.3+incompatible
 	github.com/c-bata/goptuna v0.8.0
 	github.com/go-sql-driver/mysql v1.5.0
-	github.com/golang/protobuf v1.5.4
 	github.com/google/go-cmp v0.6.0
 	github.com/google/go-containerregistry v0.15.2
 	github.com/google/go-containerregistry/pkg/authn/k8schain v0.0.0-20230517160804-b7ad3f13a62c
@@ -22,8 +21,8 @@ require (
 	github.com/spf13/viper v1.9.0
 	github.com/tidwall/gjson v1.14.1
 	go.uber.org/mock v0.4.0
-	golang.org/x/net v0.23.0
 	google.golang.org/grpc v1.58.3
+	google.golang.org/protobuf v1.33.0
 	k8s.io/api v0.29.3
 	k8s.io/apimachinery v0.29.3
 	k8s.io/client-go v0.29.3
@@ -85,6 +84,7 @@ require (
 	github.com/gogo/protobuf v1.3.2 // indirect
 	github.com/golang-jwt/jwt/v4 v4.5.0 // indirect
 	github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
+	github.com/golang/protobuf v1.5.4 // indirect
 	github.com/google/gnostic-models v0.6.8 // indirect
 	github.com/google/go-containerregistry/pkg/authn/kubernetes v0.0.0-20230516205744-dbecb1de8cfa // indirect
 	github.com/google/gofuzz v1.2.0 // indirect
@@ -130,6 +130,7 @@ require (
 	golang.org/x/crypto v0.21.0 // indirect
 	golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e // indirect
 	golang.org/x/mod v0.14.0 // indirect
+	golang.org/x/net v0.23.0 // indirect
 	golang.org/x/oauth2 v0.12.0 // indirect
 	golang.org/x/sync v0.5.0 // indirect
 	golang.org/x/sys v0.18.0 // indirect
@@ -141,7 +142,6 @@ require (
 	gonum.org/v1/gonum v0.8.2 // indirect
 	google.golang.org/appengine v1.6.7 // indirect
 	google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
-	google.golang.org/protobuf v1.33.0 // indirect
 	gopkg.in/fsnotify/fsnotify.v1 v1.4.7 // indirect
 	gopkg.in/inf.v0 v0.9.1 // indirect
 	gopkg.in/ini.v1 v1.63.2 // indirect
diff --git a/hack/update-proto.sh b/hack/update-proto.sh
new file mode 100755
index 00000000000..89fc99cb789
--- /dev/null
+++ b/hack/update-proto.sh
@@ -0,0 +1,40 @@
+#!/usr/bin/env bash
+
+# Copyright 2024 The Kubeflow Authors.
+#
+# 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.
+
+set -e
+
+SOURCE="${BASH_SOURCE[0]}"
+while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink
+  DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )"
+  SOURCE="$(readlink "$SOURCE")"
+  [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located
+done
+ROOT_DIR="$( cd -P "$( dirname "$SOURCE" )/.." && pwd )"
+
+mkdir -p "${ROOT_DIR}/bin"
+export GOBIN=$ROOT_DIR/bin
+
+if [ ! -f "${GOBIN}/buf" ]; then
+  go install github.com/bufbuild/buf/cmd/buf@v1.32.2
+fi
+
+pushd "${ROOT_DIR}/pkg/apis/manager/health"
+  "${GOBIN}/buf" generate
+popd
+
+pushd "${ROOT_DIR}/pkg/apis/manager/v1beta1"
+  "${GOBIN}/buf" generate
+popd
diff --git a/pkg/apis/manager/health/buf.gen.yaml b/pkg/apis/manager/health/buf.gen.yaml
new file mode 100644
index 00000000000..12d9120718f
--- /dev/null
+++ b/pkg/apis/manager/health/buf.gen.yaml
@@ -0,0 +1,21 @@
+version: v2
+plugins:
+- remote: buf.build/protocolbuffers/go:v1.33.0
+  out: .
+  opt: module=github.com/kubeflow/katib/pkg/apis/manager/health
+
+- remote: buf.build/grpc/go:v1.3.0
+  out: .
+  opt: module=github.com/kubeflow/katib/pkg/apis/manager/health,require_unimplemented_servers=false
+
+- remote: buf.build/protocolbuffers/python:v26.1
+  out: python
+
+- remote: buf.build/protocolbuffers/pyi:v26.1
+  out: python
+
+- remote: buf.build/grpc/python:v1.64.1
+  out: python
+
+inputs:
+- directory: .
diff --git a/pkg/apis/manager/health/build.sh b/pkg/apis/manager/health/build.sh
deleted file mode 100755
index a12a86887ff..00000000000
--- a/pkg/apis/manager/health/build.sh
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/usr/bin/env bash
-
-# Copyright 2022 The Kubeflow Authors.
-#
-# 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.
-
-set -x
-set -e
-
-cd "$(dirname "$0")"
-
-proto="health.proto"
-docker run -i --rm -v "$PWD:$PWD" -w "$PWD" znly/protoc --python_out=plugins=grpc:./python --go_out=plugins=grpc:. -I. $proto
-docker run -i --rm -v "$PWD:$PWD" -w "$PWD" znly/protoc --plugin=protoc-gen-grpc=/usr/bin/grpc_python_plugin --python_out=./python --grpc_out=./python -I. $proto
diff --git a/pkg/apis/manager/health/health.pb.go b/pkg/apis/manager/health/health.pb.go
index 1f598c1ea49..bff4e566097 100644
--- a/pkg/apis/manager/health/health.pb.go
+++ b/pkg/apis/manager/health/health.pb.go
@@ -1,37 +1,24 @@
 // Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.33.0
+// 	protoc        (unknown)
 // source: health.proto
 
-/*
-Package grpc_health_v1 is a generated protocol buffer package.
-
-It is generated from these files:
-	health.proto
-
-It has these top-level messages:
-	HealthCheckRequest
-	HealthCheckResponse
-*/
 package grpc_health_v1
 
-import proto "github.com/golang/protobuf/proto"
-import fmt "fmt"
-import math "math"
-
 import (
-	context "golang.org/x/net/context"
-	grpc "google.golang.org/grpc"
+	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	reflect "reflect"
+	sync "sync"
 )
 
-// Reference imports to suppress errors if they are not otherwise used.
-var _ = proto.Marshal
-var _ = fmt.Errorf
-var _ = math.Inf
-
-// This is a compile-time assertion to ensure that this generated file
-// is compatible with the proto package it is being compiled against.
-// A compilation error at this line likely means your copy of the
-// proto package needs to be updated.
-const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
+const (
+	// Verify that this generated code is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+	// Verify that runtime/protoimpl is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
 
 type HealthCheckResponse_ServingStatus int32
 
@@ -41,149 +28,250 @@ const (
 	HealthCheckResponse_NOT_SERVING HealthCheckResponse_ServingStatus = 2
 )
 
-var HealthCheckResponse_ServingStatus_name = map[int32]string{
-	0: "UNKNOWN",
-	1: "SERVING",
-	2: "NOT_SERVING",
-}
-var HealthCheckResponse_ServingStatus_value = map[string]int32{
-	"UNKNOWN":     0,
-	"SERVING":     1,
-	"NOT_SERVING": 2,
+// Enum value maps for HealthCheckResponse_ServingStatus.
+var (
+	HealthCheckResponse_ServingStatus_name = map[int32]string{
+		0: "UNKNOWN",
+		1: "SERVING",
+		2: "NOT_SERVING",
+	}
+	HealthCheckResponse_ServingStatus_value = map[string]int32{
+		"UNKNOWN":     0,
+		"SERVING":     1,
+		"NOT_SERVING": 2,
+	}
+)
+
+func (x HealthCheckResponse_ServingStatus) Enum() *HealthCheckResponse_ServingStatus {
+	p := new(HealthCheckResponse_ServingStatus)
+	*p = x
+	return p
 }
 
 func (x HealthCheckResponse_ServingStatus) String() string {
-	return proto.EnumName(HealthCheckResponse_ServingStatus_name, int32(x))
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
 }
+
+func (HealthCheckResponse_ServingStatus) Descriptor() protoreflect.EnumDescriptor {
+	return file_health_proto_enumTypes[0].Descriptor()
+}
+
+func (HealthCheckResponse_ServingStatus) Type() protoreflect.EnumType {
+	return &file_health_proto_enumTypes[0]
+}
+
+func (x HealthCheckResponse_ServingStatus) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use HealthCheckResponse_ServingStatus.Descriptor instead.
 func (HealthCheckResponse_ServingStatus) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor0, []int{1, 0}
+	return file_health_proto_rawDescGZIP(), []int{1, 0}
 }
 
 type HealthCheckRequest struct {
-	Service string `protobuf:"bytes,1,opt,name=service" json:"service,omitempty"`
-}
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
 
-func (m *HealthCheckRequest) Reset()                    { *m = HealthCheckRequest{} }
-func (m *HealthCheckRequest) String() string            { return proto.CompactTextString(m) }
-func (*HealthCheckRequest) ProtoMessage()               {}
-func (*HealthCheckRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
+	Service string `protobuf:"bytes,1,opt,name=service,proto3" json:"service,omitempty"`
+}
 
-func (m *HealthCheckRequest) GetService() string {
-	if m != nil {
-		return m.Service
+func (x *HealthCheckRequest) Reset() {
+	*x = HealthCheckRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_health_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
 	}
-	return ""
 }
 
-type HealthCheckResponse struct {
-	Status HealthCheckResponse_ServingStatus `protobuf:"varint,1,opt,name=status,enum=grpc.health.v1.HealthCheckResponse_ServingStatus" json:"status,omitempty"`
+func (x *HealthCheckRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
 }
 
-func (m *HealthCheckResponse) Reset()                    { *m = HealthCheckResponse{} }
-func (m *HealthCheckResponse) String() string            { return proto.CompactTextString(m) }
-func (*HealthCheckResponse) ProtoMessage()               {}
-func (*HealthCheckResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
+func (*HealthCheckRequest) ProtoMessage() {}
 
-func (m *HealthCheckResponse) GetStatus() HealthCheckResponse_ServingStatus {
-	if m != nil {
-		return m.Status
+func (x *HealthCheckRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_health_proto_msgTypes[0]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
 	}
-	return HealthCheckResponse_UNKNOWN
+	return mi.MessageOf(x)
 }
 
-func init() {
-	proto.RegisterType((*HealthCheckRequest)(nil), "grpc.health.v1.HealthCheckRequest")
-	proto.RegisterType((*HealthCheckResponse)(nil), "grpc.health.v1.HealthCheckResponse")
-	proto.RegisterEnum("grpc.health.v1.HealthCheckResponse_ServingStatus", HealthCheckResponse_ServingStatus_name, HealthCheckResponse_ServingStatus_value)
+// Deprecated: Use HealthCheckRequest.ProtoReflect.Descriptor instead.
+func (*HealthCheckRequest) Descriptor() ([]byte, []int) {
+	return file_health_proto_rawDescGZIP(), []int{0}
 }
 
-// Reference imports to suppress errors if they are not otherwise used.
-var _ context.Context
-var _ grpc.ClientConn
+func (x *HealthCheckRequest) GetService() string {
+	if x != nil {
+		return x.Service
+	}
+	return ""
+}
 
-// This is a compile-time assertion to ensure that this generated file
-// is compatible with the grpc package it is being compiled against.
-const _ = grpc.SupportPackageIsVersion4
+type HealthCheckResponse struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
 
-// Client API for Health service
+	Status HealthCheckResponse_ServingStatus `protobuf:"varint,1,opt,name=status,proto3,enum=grpc.health.v1.HealthCheckResponse_ServingStatus" json:"status,omitempty"`
+}
 
-type HealthClient interface {
-	Check(ctx context.Context, in *HealthCheckRequest, opts ...grpc.CallOption) (*HealthCheckResponse, error)
+func (x *HealthCheckResponse) Reset() {
+	*x = HealthCheckResponse{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_health_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
-type healthClient struct {
-	cc *grpc.ClientConn
+func (x *HealthCheckResponse) String() string {
+	return protoimpl.X.MessageStringOf(x)
 }
 
-func NewHealthClient(cc *grpc.ClientConn) HealthClient {
-	return &healthClient{cc}
+func (*HealthCheckResponse) ProtoMessage() {}
+
+func (x *HealthCheckResponse) ProtoReflect() protoreflect.Message {
+	mi := &file_health_proto_msgTypes[1]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
 }
 
-func (c *healthClient) Check(ctx context.Context, in *HealthCheckRequest, opts ...grpc.CallOption) (*HealthCheckResponse, error) {
-	out := new(HealthCheckResponse)
-	err := grpc.Invoke(ctx, "/grpc.health.v1.Health/Check", in, out, c.cc, opts...)
-	if err != nil {
-		return nil, err
+// Deprecated: Use HealthCheckResponse.ProtoReflect.Descriptor instead.
+func (*HealthCheckResponse) Descriptor() ([]byte, []int) {
+	return file_health_proto_rawDescGZIP(), []int{1}
+}
+
+func (x *HealthCheckResponse) GetStatus() HealthCheckResponse_ServingStatus {
+	if x != nil {
+		return x.Status
 	}
-	return out, nil
+	return HealthCheckResponse_UNKNOWN
 }
 
-// Server API for Health service
+var File_health_proto protoreflect.FileDescriptor
+
+var file_health_proto_rawDesc = []byte{
+	0x0a, 0x0c, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0e,
+	0x67, 0x72, 0x70, 0x63, 0x2e, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x22, 0x2e,
+	0x0a, 0x12, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x22, 0x9c,
+	0x01, 0x0a, 0x13, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65,
+	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x68, 0x65,
+	0x61, 0x6c, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68,
+	0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76,
+	0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75,
+	0x73, 0x22, 0x3a, 0x0a, 0x0d, 0x53, 0x65, 0x72, 0x76, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x61, 0x74,
+	0x75, 0x73, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12,
+	0x0b, 0x0a, 0x07, 0x53, 0x45, 0x52, 0x56, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b,
+	0x4e, 0x4f, 0x54, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x32, 0x5a, 0x0a,
+	0x06, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x50, 0x0a, 0x05, 0x43, 0x68, 0x65, 0x63, 0x6b,
+	0x12, 0x22, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2e, 0x76,
+	0x31, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71,
+	0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x67, 0x72, 0x70, 0x63, 0x2e, 0x68, 0x65, 0x61, 0x6c,
+	0x74, 0x68, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63,
+	0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x42, 0x5a, 0x40, 0x67, 0x69, 0x74,
+	0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x75, 0x62, 0x65, 0x66, 0x6c, 0x6f, 0x77,
+	0x2f, 0x6b, 0x61, 0x74, 0x69, 0x62, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, 0x69, 0x73, 0x2f,
+	0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x3b, 0x67,
+	0x72, 0x70, 0x63, 0x5f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x5f, 0x76, 0x31, 0x62, 0x06, 0x70,
+	0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+	file_health_proto_rawDescOnce sync.Once
+	file_health_proto_rawDescData = file_health_proto_rawDesc
+)
 
-type HealthServer interface {
-	Check(context.Context, *HealthCheckRequest) (*HealthCheckResponse, error)
+func file_health_proto_rawDescGZIP() []byte {
+	file_health_proto_rawDescOnce.Do(func() {
+		file_health_proto_rawDescData = protoimpl.X.CompressGZIP(file_health_proto_rawDescData)
+	})
+	return file_health_proto_rawDescData
 }
 
-func RegisterHealthServer(s *grpc.Server, srv HealthServer) {
-	s.RegisterService(&_Health_serviceDesc, srv)
+var file_health_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
+var file_health_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
+var file_health_proto_goTypes = []interface{}{
+	(HealthCheckResponse_ServingStatus)(0), // 0: grpc.health.v1.HealthCheckResponse.ServingStatus
+	(*HealthCheckRequest)(nil),             // 1: grpc.health.v1.HealthCheckRequest
+	(*HealthCheckResponse)(nil),            // 2: grpc.health.v1.HealthCheckResponse
+}
+var file_health_proto_depIdxs = []int32{
+	0, // 0: grpc.health.v1.HealthCheckResponse.status:type_name -> grpc.health.v1.HealthCheckResponse.ServingStatus
+	1, // 1: grpc.health.v1.Health.Check:input_type -> grpc.health.v1.HealthCheckRequest
+	2, // 2: grpc.health.v1.Health.Check:output_type -> grpc.health.v1.HealthCheckResponse
+	2, // [2:3] is the sub-list for method output_type
+	1, // [1:2] is the sub-list for method input_type
+	1, // [1:1] is the sub-list for extension type_name
+	1, // [1:1] is the sub-list for extension extendee
+	0, // [0:1] is the sub-list for field type_name
 }
 
-func _Health_Check_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
-	in := new(HealthCheckRequest)
-	if err := dec(in); err != nil {
-		return nil, err
-	}
-	if interceptor == nil {
-		return srv.(HealthServer).Check(ctx, in)
-	}
-	info := &grpc.UnaryServerInfo{
-		Server:     srv,
-		FullMethod: "/grpc.health.v1.Health/Check",
+func init() { file_health_proto_init() }
+func file_health_proto_init() {
+	if File_health_proto != nil {
+		return
 	}
-	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
-		return srv.(HealthServer).Check(ctx, req.(*HealthCheckRequest))
+	if !protoimpl.UnsafeEnabled {
+		file_health_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*HealthCheckRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_health_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*HealthCheckResponse); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
 	}
-	return interceptor(ctx, in, info, handler)
-}
-
-var _Health_serviceDesc = grpc.ServiceDesc{
-	ServiceName: "grpc.health.v1.Health",
-	HandlerType: (*HealthServer)(nil),
-	Methods: []grpc.MethodDesc{
-		{
-			MethodName: "Check",
-			Handler:    _Health_Check_Handler,
+	type x struct{}
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+			RawDescriptor: file_health_proto_rawDesc,
+			NumEnums:      1,
+			NumMessages:   2,
+			NumExtensions: 0,
+			NumServices:   1,
 		},
-	},
-	Streams:  []grpc.StreamDesc{},
-	Metadata: "health.proto",
-}
-
-func init() { proto.RegisterFile("health.proto", fileDescriptor0) }
-
-var fileDescriptor0 = []byte{
-	// 204 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0xe2, 0xc9, 0x48, 0x4d, 0xcc,
-	0x29, 0xc9, 0xd0, 0x2b, 0x28, 0xca, 0x2f, 0xc9, 0x17, 0xe2, 0x4b, 0x2f, 0x2a, 0x48, 0xd6, 0x83,
-	0x0a, 0x95, 0x19, 0x2a, 0xe9, 0x71, 0x09, 0x79, 0x80, 0x39, 0xce, 0x19, 0xa9, 0xc9, 0xd9, 0x41,
-	0xa9, 0x85, 0xa5, 0xa9, 0xc5, 0x25, 0x42, 0x12, 0x5c, 0xec, 0xc5, 0xa9, 0x45, 0x65, 0x99, 0xc9,
-	0xa9, 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0x9c, 0x41, 0x30, 0xae, 0xd2, 0x1c, 0x46, 0x2e, 0x61, 0x14,
-	0x0d, 0xc5, 0x05, 0xf9, 0x79, 0xc5, 0xa9, 0x42, 0x9e, 0x5c, 0x6c, 0xc5, 0x25, 0x89, 0x25, 0xa5,
-	0xc5, 0x60, 0x0d, 0x7c, 0x46, 0x86, 0x7a, 0xa8, 0x16, 0xe9, 0x61, 0xd1, 0xa4, 0x17, 0x0c, 0x32,
-	0x34, 0x2f, 0x3d, 0x18, 0xac, 0x31, 0x08, 0x6a, 0x80, 0x92, 0x15, 0x17, 0x2f, 0x8a, 0x84, 0x10,
-	0x37, 0x17, 0x7b, 0xa8, 0x9f, 0xb7, 0x9f, 0x7f, 0xb8, 0x9f, 0x00, 0x03, 0x88, 0x13, 0xec, 0x1a,
-	0x14, 0xe6, 0xe9, 0xe7, 0x2e, 0xc0, 0x28, 0xc4, 0xcf, 0xc5, 0xed, 0xe7, 0x1f, 0x12, 0x0f, 0x13,
-	0x60, 0x32, 0x8a, 0xe2, 0x62, 0x83, 0x58, 0x24, 0x14, 0xc0, 0xc5, 0x0a, 0xb6, 0x4c, 0x48, 0x09,
-	0xaf, 0x4b, 0xc0, 0xfe, 0x95, 0x52, 0x26, 0xc2, 0xb5, 0x49, 0x6c, 0xe0, 0x10, 0x34, 0x06, 0x04,
-	0x00, 0x00, 0xff, 0xff, 0xac, 0x56, 0x2a, 0xcb, 0x51, 0x01, 0x00, 0x00,
+		GoTypes:           file_health_proto_goTypes,
+		DependencyIndexes: file_health_proto_depIdxs,
+		EnumInfos:         file_health_proto_enumTypes,
+		MessageInfos:      file_health_proto_msgTypes,
+	}.Build()
+	File_health_proto = out.File
+	file_health_proto_rawDesc = nil
+	file_health_proto_goTypes = nil
+	file_health_proto_depIdxs = nil
 }
diff --git a/pkg/apis/manager/health/health.proto b/pkg/apis/manager/health/health.proto
index 97d08baf9b5..50f13e8b75a 100644
--- a/pkg/apis/manager/health/health.proto
+++ b/pkg/apis/manager/health/health.proto
@@ -2,6 +2,8 @@ syntax = "proto3";
 
 package grpc.health.v1;
 
+option go_package = "github.com/kubeflow/katib/pkg/apis/manager/health;grpc_health_v1";
+
 service Health {
     rpc Check(HealthCheckRequest) returns (HealthCheckResponse);
 }
diff --git a/pkg/apis/manager/health/health_grpc.pb.go b/pkg/apis/manager/health/health_grpc.pb.go
new file mode 100644
index 00000000000..003ef50b9ee
--- /dev/null
+++ b/pkg/apis/manager/health/health_grpc.pb.go
@@ -0,0 +1,107 @@
+// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
+// versions:
+// - protoc-gen-go-grpc v1.3.0
+// - protoc             (unknown)
+// source: health.proto
+
+package grpc_health_v1
+
+import (
+	context "context"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+// Requires gRPC-Go v1.32.0 or later.
+const _ = grpc.SupportPackageIsVersion7
+
+const (
+	Health_Check_FullMethodName = "/grpc.health.v1.Health/Check"
+)
+
+// HealthClient is the client API for Health service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
+type HealthClient interface {
+	Check(ctx context.Context, in *HealthCheckRequest, opts ...grpc.CallOption) (*HealthCheckResponse, error)
+}
+
+type healthClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewHealthClient(cc grpc.ClientConnInterface) HealthClient {
+	return &healthClient{cc}
+}
+
+func (c *healthClient) Check(ctx context.Context, in *HealthCheckRequest, opts ...grpc.CallOption) (*HealthCheckResponse, error) {
+	out := new(HealthCheckResponse)
+	err := c.cc.Invoke(ctx, Health_Check_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// HealthServer is the server API for Health service.
+// All implementations should embed UnimplementedHealthServer
+// for forward compatibility
+type HealthServer interface {
+	Check(context.Context, *HealthCheckRequest) (*HealthCheckResponse, error)
+}
+
+// UnimplementedHealthServer should be embedded to have forward compatible implementations.
+type UnimplementedHealthServer struct {
+}
+
+func (UnimplementedHealthServer) Check(context.Context, *HealthCheckRequest) (*HealthCheckResponse, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method Check not implemented")
+}
+
+// UnsafeHealthServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to HealthServer will
+// result in compilation errors.
+type UnsafeHealthServer interface {
+	mustEmbedUnimplementedHealthServer()
+}
+
+func RegisterHealthServer(s grpc.ServiceRegistrar, srv HealthServer) {
+	s.RegisterService(&Health_ServiceDesc, srv)
+}
+
+func _Health_Check_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(HealthCheckRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(HealthServer).Check(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Health_Check_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(HealthServer).Check(ctx, req.(*HealthCheckRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+// Health_ServiceDesc is the grpc.ServiceDesc for Health service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var Health_ServiceDesc = grpc.ServiceDesc{
+	ServiceName: "grpc.health.v1.Health",
+	HandlerType: (*HealthServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "Check",
+			Handler:    _Health_Check_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "health.proto",
+}
diff --git a/pkg/apis/manager/health/python/health_pb2.py b/pkg/apis/manager/health/python/health_pb2.py
index ef49555776d..95ecb9330d5 100644
--- a/pkg/apis/manager/health/python/health_pb2.py
+++ b/pkg/apis/manager/health/python/health_pb2.py
@@ -1,13 +1,12 @@
+# -*- coding: utf-8 -*-
 # Generated by the protocol buffer compiler.  DO NOT EDIT!
 # source: health.proto
-
-import sys
-_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+# Protobuf Python Version: 5.26.1
+"""Generated protocol buffer code."""
 from google.protobuf import descriptor as _descriptor
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
+from google.protobuf import descriptor_pool as _descriptor_pool
 from google.protobuf import symbol_database as _symbol_database
-from google.protobuf import descriptor_pb2
+from google.protobuf.internal import builder as _builder
 # @@protoc_insertion_point(imports)
 
 _sym_db = _symbol_database.Default()
@@ -15,266 +14,20 @@
 
 
 
-DESCRIPTOR = _descriptor.FileDescriptor(
-  name='health.proto',
-  package='grpc.health.v1',
-  syntax='proto3',
-  serialized_pb=_b('\n\x0chealth.proto\x12\x0egrpc.health.v1\"%\n\x12HealthCheckRequest\x12\x0f\n\x07service\x18\x01 \x01(\t\"\x94\x01\n\x13HealthCheckResponse\x12\x41\n\x06status\x18\x01 \x01(\x0e\x32\x31.grpc.health.v1.HealthCheckResponse.ServingStatus\":\n\rServingStatus\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x0b\n\x07SERVING\x10\x01\x12\x0f\n\x0bNOT_SERVING\x10\x02\x32Z\n\x06Health\x12P\n\x05\x43heck\x12\".grpc.health.v1.HealthCheckRequest\x1a#.grpc.health.v1.HealthCheckResponseb\x06proto3')
-)
-
-
-
-_HEALTHCHECKRESPONSE_SERVINGSTATUS = _descriptor.EnumDescriptor(
-  name='ServingStatus',
-  full_name='grpc.health.v1.HealthCheckResponse.ServingStatus',
-  filename=None,
-  file=DESCRIPTOR,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='UNKNOWN', index=0, number=0,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='SERVING', index=1, number=1,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='NOT_SERVING', index=2, number=2,
-      options=None,
-      type=None),
-  ],
-  containing_type=None,
-  options=None,
-  serialized_start=162,
-  serialized_end=220,
-)
-_sym_db.RegisterEnumDescriptor(_HEALTHCHECKRESPONSE_SERVINGSTATUS)
-
-
-_HEALTHCHECKREQUEST = _descriptor.Descriptor(
-  name='HealthCheckRequest',
-  full_name='grpc.health.v1.HealthCheckRequest',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='service', full_name='grpc.health.v1.HealthCheckRequest.service', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=32,
-  serialized_end=69,
-)
-
-
-_HEALTHCHECKRESPONSE = _descriptor.Descriptor(
-  name='HealthCheckResponse',
-  full_name='grpc.health.v1.HealthCheckResponse',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='status', full_name='grpc.health.v1.HealthCheckResponse.status', index=0,
-      number=1, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-    _HEALTHCHECKRESPONSE_SERVINGSTATUS,
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=72,
-  serialized_end=220,
-)
-
-_HEALTHCHECKRESPONSE.fields_by_name['status'].enum_type = _HEALTHCHECKRESPONSE_SERVINGSTATUS
-_HEALTHCHECKRESPONSE_SERVINGSTATUS.containing_type = _HEALTHCHECKRESPONSE
-DESCRIPTOR.message_types_by_name['HealthCheckRequest'] = _HEALTHCHECKREQUEST
-DESCRIPTOR.message_types_by_name['HealthCheckResponse'] = _HEALTHCHECKRESPONSE
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-HealthCheckRequest = _reflection.GeneratedProtocolMessageType('HealthCheckRequest', (_message.Message,), dict(
-  DESCRIPTOR = _HEALTHCHECKREQUEST,
-  __module__ = 'health_pb2'
-  # @@protoc_insertion_point(class_scope:grpc.health.v1.HealthCheckRequest)
-  ))
-_sym_db.RegisterMessage(HealthCheckRequest)
-
-HealthCheckResponse = _reflection.GeneratedProtocolMessageType('HealthCheckResponse', (_message.Message,), dict(
-  DESCRIPTOR = _HEALTHCHECKRESPONSE,
-  __module__ = 'health_pb2'
-  # @@protoc_insertion_point(class_scope:grpc.health.v1.HealthCheckResponse)
-  ))
-_sym_db.RegisterMessage(HealthCheckResponse)
-
-
-
-_HEALTH = _descriptor.ServiceDescriptor(
-  name='Health',
-  full_name='grpc.health.v1.Health',
-  file=DESCRIPTOR,
-  index=0,
-  options=None,
-  serialized_start=222,
-  serialized_end=312,
-  methods=[
-  _descriptor.MethodDescriptor(
-    name='Check',
-    full_name='grpc.health.v1.Health.Check',
-    index=0,
-    containing_service=None,
-    input_type=_HEALTHCHECKREQUEST,
-    output_type=_HEALTHCHECKRESPONSE,
-    options=None,
-  ),
-])
-_sym_db.RegisterServiceDescriptor(_HEALTH)
-
-DESCRIPTOR.services_by_name['Health'] = _HEALTH
-
-try:
-  # THESE ELEMENTS WILL BE DEPRECATED.
-  # Please use the generated *_pb2_grpc.py files instead.
-  import grpc
-  from grpc.beta import implementations as beta_implementations
-  from grpc.beta import interfaces as beta_interfaces
-  from grpc.framework.common import cardinality
-  from grpc.framework.interfaces.face import utilities as face_utilities
-
-
-  class HealthStub(object):
-    # missing associated documentation comment in .proto file
-    pass
-
-    def __init__(self, channel):
-      """Constructor.
-
-      Args:
-        channel: A grpc.Channel.
-      """
-      self.Check = channel.unary_unary(
-          '/grpc.health.v1.Health/Check',
-          request_serializer=HealthCheckRequest.SerializeToString,
-          response_deserializer=HealthCheckResponse.FromString,
-          )
-
-
-  class HealthServicer(object):
-    # missing associated documentation comment in .proto file
-    pass
-
-    def Check(self, request, context):
-      # missing associated documentation comment in .proto file
-      pass
-      context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-      context.set_details('Method not implemented!')
-      raise NotImplementedError('Method not implemented!')
-
-
-  def add_HealthServicer_to_server(servicer, server):
-    rpc_method_handlers = {
-        'Check': grpc.unary_unary_rpc_method_handler(
-            servicer.Check,
-            request_deserializer=HealthCheckRequest.FromString,
-            response_serializer=HealthCheckResponse.SerializeToString,
-        ),
-    }
-    generic_handler = grpc.method_handlers_generic_handler(
-        'grpc.health.v1.Health', rpc_method_handlers)
-    server.add_generic_rpc_handlers((generic_handler,))
-
-
-  class BetaHealthServicer(object):
-    """The Beta API is deprecated for 0.15.0 and later.
-
-    It is recommended to use the GA API (classes and functions in this
-    file not marked beta) for all further purposes. This class was generated
-    only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0."""
-    # missing associated documentation comment in .proto file
-    pass
-    def Check(self, request, context):
-      # missing associated documentation comment in .proto file
-      pass
-      context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
-
-
-  class BetaHealthStub(object):
-    """The Beta API is deprecated for 0.15.0 and later.
-
-    It is recommended to use the GA API (classes and functions in this
-    file not marked beta) for all further purposes. This class was generated
-    only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0."""
-    # missing associated documentation comment in .proto file
-    pass
-    def Check(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
-      # missing associated documentation comment in .proto file
-      pass
-      raise NotImplementedError()
-    Check.future = None
-
-
-  def beta_create_Health_server(servicer, pool=None, pool_size=None, default_timeout=None, maximum_timeout=None):
-    """The Beta API is deprecated for 0.15.0 and later.
-
-    It is recommended to use the GA API (classes and functions in this
-    file not marked beta) for all further purposes. This function was
-    generated only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0"""
-    request_deserializers = {
-      ('grpc.health.v1.Health', 'Check'): HealthCheckRequest.FromString,
-    }
-    response_serializers = {
-      ('grpc.health.v1.Health', 'Check'): HealthCheckResponse.SerializeToString,
-    }
-    method_implementations = {
-      ('grpc.health.v1.Health', 'Check'): face_utilities.unary_unary_inline(servicer.Check),
-    }
-    server_options = beta_implementations.server_options(request_deserializers=request_deserializers, response_serializers=response_serializers, thread_pool=pool, thread_pool_size=pool_size, default_timeout=default_timeout, maximum_timeout=maximum_timeout)
-    return beta_implementations.server(method_implementations, options=server_options)
-
-
-  def beta_create_Health_stub(channel, host=None, metadata_transformer=None, pool=None, pool_size=None):
-    """The Beta API is deprecated for 0.15.0 and later.
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0chealth.proto\x12\x0egrpc.health.v1\".\n\x12HealthCheckRequest\x12\x18\n\x07service\x18\x01 \x01(\tR\x07service\"\x9c\x01\n\x13HealthCheckResponse\x12I\n\x06status\x18\x01 \x01(\x0e\x32\x31.grpc.health.v1.HealthCheckResponse.ServingStatusR\x06status\":\n\rServingStatus\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x0b\n\x07SERVING\x10\x01\x12\x0f\n\x0bNOT_SERVING\x10\x02\x32Z\n\x06Health\x12P\n\x05\x43heck\x12\".grpc.health.v1.HealthCheckRequest\x1a#.grpc.health.v1.HealthCheckResponseBBZ@github.com/kubeflow/katib/pkg/apis/manager/health;grpc_health_v1b\x06proto3')
 
-    It is recommended to use the GA API (classes and functions in this
-    file not marked beta) for all further purposes. This function was
-    generated only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0"""
-    request_serializers = {
-      ('grpc.health.v1.Health', 'Check'): HealthCheckRequest.SerializeToString,
-    }
-    response_deserializers = {
-      ('grpc.health.v1.Health', 'Check'): HealthCheckResponse.FromString,
-    }
-    cardinalities = {
-      'Check': cardinality.Cardinality.UNARY_UNARY,
-    }
-    stub_options = beta_implementations.stub_options(host=host, metadata_transformer=metadata_transformer, request_serializers=request_serializers, response_deserializers=response_deserializers, thread_pool=pool, thread_pool_size=pool_size)
-    return beta_implementations.dynamic_stub(channel, 'grpc.health.v1.Health', cardinalities, options=stub_options)
-except ImportError:
-  pass
+_globals = globals()
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'health_pb2', _globals)
+if not _descriptor._USE_C_DESCRIPTORS:
+  _globals['DESCRIPTOR']._loaded_options = None
+  _globals['DESCRIPTOR']._serialized_options = b'Z@github.com/kubeflow/katib/pkg/apis/manager/health;grpc_health_v1'
+  _globals['_HEALTHCHECKREQUEST']._serialized_start=32
+  _globals['_HEALTHCHECKREQUEST']._serialized_end=78
+  _globals['_HEALTHCHECKRESPONSE']._serialized_start=81
+  _globals['_HEALTHCHECKRESPONSE']._serialized_end=237
+  _globals['_HEALTHCHECKRESPONSE_SERVINGSTATUS']._serialized_start=179
+  _globals['_HEALTHCHECKRESPONSE_SERVINGSTATUS']._serialized_end=237
+  _globals['_HEALTH']._serialized_start=239
+  _globals['_HEALTH']._serialized_end=329
 # @@protoc_insertion_point(module_scope)
diff --git a/pkg/apis/manager/health/python/health_pb2.pyi b/pkg/apis/manager/health/python/health_pb2.pyi
new file mode 100644
index 00000000000..0a624f983b1
--- /dev/null
+++ b/pkg/apis/manager/health/python/health_pb2.pyi
@@ -0,0 +1,26 @@
+from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from typing import ClassVar as _ClassVar, Optional as _Optional, Union as _Union
+
+DESCRIPTOR: _descriptor.FileDescriptor
+
+class HealthCheckRequest(_message.Message):
+    __slots__ = ("service",)
+    SERVICE_FIELD_NUMBER: _ClassVar[int]
+    service: str
+    def __init__(self, service: _Optional[str] = ...) -> None: ...
+
+class HealthCheckResponse(_message.Message):
+    __slots__ = ("status",)
+    class ServingStatus(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+        __slots__ = ()
+        UNKNOWN: _ClassVar[HealthCheckResponse.ServingStatus]
+        SERVING: _ClassVar[HealthCheckResponse.ServingStatus]
+        NOT_SERVING: _ClassVar[HealthCheckResponse.ServingStatus]
+    UNKNOWN: HealthCheckResponse.ServingStatus
+    SERVING: HealthCheckResponse.ServingStatus
+    NOT_SERVING: HealthCheckResponse.ServingStatus
+    STATUS_FIELD_NUMBER: _ClassVar[int]
+    status: HealthCheckResponse.ServingStatus
+    def __init__(self, status: _Optional[_Union[HealthCheckResponse.ServingStatus, str]] = ...) -> None: ...
diff --git a/pkg/apis/manager/health/python/health_pb2_grpc.py b/pkg/apis/manager/health/python/health_pb2_grpc.py
index cdaeac5ffe2..be4f69ac5f9 100644
--- a/pkg/apis/manager/health/python/health_pb2_grpc.py
+++ b/pkg/apis/manager/health/python/health_pb2_grpc.py
@@ -1,46 +1,77 @@
 # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+"""Client and server classes corresponding to protobuf-defined services."""
 import grpc
 
 import health_pb2 as health__pb2
 
 
 class HealthStub(object):
-  # missing associated documentation comment in .proto file
-  pass
+    """Missing associated documentation comment in .proto file."""
 
-  def __init__(self, channel):
-    """Constructor.
+    def __init__(self, channel):
+        """Constructor.
 
-    Args:
-      channel: A grpc.Channel.
-    """
-    self.Check = channel.unary_unary(
-        '/grpc.health.v1.Health/Check',
-        request_serializer=health__pb2.HealthCheckRequest.SerializeToString,
-        response_deserializer=health__pb2.HealthCheckResponse.FromString,
-        )
+        Args:
+            channel: A grpc.Channel.
+        """
+        self.Check = channel.unary_unary(
+                '/grpc.health.v1.Health/Check',
+                request_serializer=health__pb2.HealthCheckRequest.SerializeToString,
+                response_deserializer=health__pb2.HealthCheckResponse.FromString,
+                _registered_method=True)
 
 
 class HealthServicer(object):
-  # missing associated documentation comment in .proto file
-  pass
+    """Missing associated documentation comment in .proto file."""
 
-  def Check(self, request, context):
-    # missing associated documentation comment in .proto file
-    pass
-    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-    context.set_details('Method not implemented!')
-    raise NotImplementedError('Method not implemented!')
+    def Check(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
 
 
 def add_HealthServicer_to_server(servicer, server):
-  rpc_method_handlers = {
-      'Check': grpc.unary_unary_rpc_method_handler(
-          servicer.Check,
-          request_deserializer=health__pb2.HealthCheckRequest.FromString,
-          response_serializer=health__pb2.HealthCheckResponse.SerializeToString,
-      ),
-  }
-  generic_handler = grpc.method_handlers_generic_handler(
-      'grpc.health.v1.Health', rpc_method_handlers)
-  server.add_generic_rpc_handlers((generic_handler,))
+    rpc_method_handlers = {
+            'Check': grpc.unary_unary_rpc_method_handler(
+                    servicer.Check,
+                    request_deserializer=health__pb2.HealthCheckRequest.FromString,
+                    response_serializer=health__pb2.HealthCheckResponse.SerializeToString,
+            ),
+    }
+    generic_handler = grpc.method_handlers_generic_handler(
+            'grpc.health.v1.Health', rpc_method_handlers)
+    server.add_generic_rpc_handlers((generic_handler,))
+    server.add_registered_method_handlers('grpc.health.v1.Health', rpc_method_handlers)
+
+
+ # This class is part of an EXPERIMENTAL API.
+class Health(object):
+    """Missing associated documentation comment in .proto file."""
+
+    @staticmethod
+    def Check(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(
+            request,
+            target,
+            '/grpc.health.v1.Health/Check',
+            health__pb2.HealthCheckRequest.SerializeToString,
+            health__pb2.HealthCheckResponse.FromString,
+            options,
+            channel_credentials,
+            insecure,
+            call_credentials,
+            compression,
+            wait_for_ready,
+            timeout,
+            metadata,
+            _registered_method=True)
diff --git a/pkg/apis/manager/v1beta1/api.pb.go b/pkg/apis/manager/v1beta1/api.pb.go
index b73f354974f..3648082644a 100644
--- a/pkg/apis/manager/v1beta1/api.pb.go
+++ b/pkg/apis/manager/v1beta1/api.pb.go
@@ -1,157 +1,187 @@
+//*
+// Katib GRPC API v1beta1
+
 // Code generated by protoc-gen-go. DO NOT EDIT.
+// versions:
+// 	protoc-gen-go v1.33.0
+// 	protoc        (unknown)
 // source: api.proto
 
-/*
-Package api_v1_beta1 is a generated protocol buffer package.
-
-It is generated from these files:
-	api.proto
-
-It has these top-level messages:
-	Experiment
-	ExperimentSpec
-	ParameterSpec
-	FeasibleSpace
-	ObjectiveSpec
-	AlgorithmSpec
-	AlgorithmSetting
-	EarlyStoppingSpec
-	EarlyStoppingSetting
-	NasConfig
-	GraphConfig
-	Operation
-	Trial
-	TrialSpec
-	ParameterAssignment
-	TrialStatus
-	Observation
-	Metric
-	ReportObservationLogRequest
-	ReportObservationLogReply
-	ObservationLog
-	MetricLog
-	GetObservationLogRequest
-	GetObservationLogReply
-	DeleteObservationLogRequest
-	DeleteObservationLogReply
-	GetSuggestionsRequest
-	GetSuggestionsReply
-	ValidateAlgorithmSettingsRequest
-	ValidateAlgorithmSettingsReply
-	GetEarlyStoppingRulesRequest
-	GetEarlyStoppingRulesReply
-	EarlyStoppingRule
-	ValidateEarlyStoppingSettingsRequest
-	ValidateEarlyStoppingSettingsReply
-	SetTrialStatusRequest
-	SetTrialStatusReply
-*/
 package api_v1_beta1
 
-import proto "github.com/golang/protobuf/proto"
-import fmt "fmt"
-import math "math"
-
 import (
-	context "golang.org/x/net/context"
-	grpc "google.golang.org/grpc"
+	protoreflect "google.golang.org/protobuf/reflect/protoreflect"
+	protoimpl "google.golang.org/protobuf/runtime/protoimpl"
+	reflect "reflect"
+	sync "sync"
 )
 
-// Reference imports to suppress errors if they are not otherwise used.
-var _ = proto.Marshal
-var _ = fmt.Errorf
-var _ = math.Inf
-
-// This is a compile-time assertion to ensure that this generated file
-// is compatible with the proto package it is being compiled against.
-// A compilation error at this line likely means your copy of the
-// proto package needs to be updated.
-const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package
+const (
+	// Verify that this generated code is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
+	// Verify that runtime/protoimpl is sufficiently up-to-date.
+	_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
+)
 
 // *
 // Types of value for HyperParameter.
 type ParameterType int32
 
 const (
-	ParameterType_UNKNOWN_TYPE ParameterType = 0
-	ParameterType_DOUBLE       ParameterType = 1
-	ParameterType_INT          ParameterType = 2
-	ParameterType_DISCRETE     ParameterType = 3
-	ParameterType_CATEGORICAL  ParameterType = 4
+	ParameterType_UNKNOWN_TYPE ParameterType = 0 /// Undefined type and not used.
+	ParameterType_DOUBLE       ParameterType = 1 /// Double float type. Use "Max/Min".
+	ParameterType_INT          ParameterType = 2 /// Int type. Use "Max/Min".
+	ParameterType_DISCRETE     ParameterType = 3 /// Discrete number type. Use "List" as float.
+	ParameterType_CATEGORICAL  ParameterType = 4 /// Categorical type. Use "List" as string.
 )
 
-var ParameterType_name = map[int32]string{
-	0: "UNKNOWN_TYPE",
-	1: "DOUBLE",
-	2: "INT",
-	3: "DISCRETE",
-	4: "CATEGORICAL",
-}
-var ParameterType_value = map[string]int32{
-	"UNKNOWN_TYPE": 0,
-	"DOUBLE":       1,
-	"INT":          2,
-	"DISCRETE":     3,
-	"CATEGORICAL":  4,
+// Enum value maps for ParameterType.
+var (
+	ParameterType_name = map[int32]string{
+		0: "UNKNOWN_TYPE",
+		1: "DOUBLE",
+		2: "INT",
+		3: "DISCRETE",
+		4: "CATEGORICAL",
+	}
+	ParameterType_value = map[string]int32{
+		"UNKNOWN_TYPE": 0,
+		"DOUBLE":       1,
+		"INT":          2,
+		"DISCRETE":     3,
+		"CATEGORICAL":  4,
+	}
+)
+
+func (x ParameterType) Enum() *ParameterType {
+	p := new(ParameterType)
+	*p = x
+	return p
 }
 
 func (x ParameterType) String() string {
-	return proto.EnumName(ParameterType_name, int32(x))
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (ParameterType) Descriptor() protoreflect.EnumDescriptor {
+	return file_api_proto_enumTypes[0].Descriptor()
+}
+
+func (ParameterType) Type() protoreflect.EnumType {
+	return &file_api_proto_enumTypes[0]
+}
+
+func (x ParameterType) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use ParameterType.Descriptor instead.
+func (ParameterType) EnumDescriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{0}
 }
-func (ParameterType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
 
 // *
 // Direction of optimization. Minimize or Maximize.
 type ObjectiveType int32
 
 const (
-	ObjectiveType_UNKNOWN  ObjectiveType = 0
-	ObjectiveType_MINIMIZE ObjectiveType = 1
-	ObjectiveType_MAXIMIZE ObjectiveType = 2
+	ObjectiveType_UNKNOWN  ObjectiveType = 0 /// Undefined type and not used.
+	ObjectiveType_MINIMIZE ObjectiveType = 1 /// Minimize
+	ObjectiveType_MAXIMIZE ObjectiveType = 2 /// Maximize
 )
 
-var ObjectiveType_name = map[int32]string{
-	0: "UNKNOWN",
-	1: "MINIMIZE",
-	2: "MAXIMIZE",
-}
-var ObjectiveType_value = map[string]int32{
-	"UNKNOWN":  0,
-	"MINIMIZE": 1,
-	"MAXIMIZE": 2,
+// Enum value maps for ObjectiveType.
+var (
+	ObjectiveType_name = map[int32]string{
+		0: "UNKNOWN",
+		1: "MINIMIZE",
+		2: "MAXIMIZE",
+	}
+	ObjectiveType_value = map[string]int32{
+		"UNKNOWN":  0,
+		"MINIMIZE": 1,
+		"MAXIMIZE": 2,
+	}
+)
+
+func (x ObjectiveType) Enum() *ObjectiveType {
+	p := new(ObjectiveType)
+	*p = x
+	return p
 }
 
 func (x ObjectiveType) String() string {
-	return proto.EnumName(ObjectiveType_name, int32(x))
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (ObjectiveType) Descriptor() protoreflect.EnumDescriptor {
+	return file_api_proto_enumTypes[1].Descriptor()
+}
+
+func (ObjectiveType) Type() protoreflect.EnumType {
+	return &file_api_proto_enumTypes[1]
+}
+
+func (x ObjectiveType) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use ObjectiveType.Descriptor instead.
+func (ObjectiveType) EnumDescriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{1}
 }
-func (ObjectiveType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
 
 type ComparisonType int32
 
 const (
-	ComparisonType_UNKNOWN_COMPARISON ComparisonType = 0
-	ComparisonType_EQUAL              ComparisonType = 1
-	ComparisonType_LESS               ComparisonType = 2
-	ComparisonType_GREATER            ComparisonType = 3
+	ComparisonType_UNKNOWN_COMPARISON ComparisonType = 0 // Unknown comparison, not used
+	ComparisonType_EQUAL              ComparisonType = 1 // Equal comparison, e.g. accuracy = 0.7
+	ComparisonType_LESS               ComparisonType = 2 // Less comparison, e.g. accuracy < 0.7
+	ComparisonType_GREATER            ComparisonType = 3 // Greater comparison, e.g. accuracy > 0.7
 )
 
-var ComparisonType_name = map[int32]string{
-	0: "UNKNOWN_COMPARISON",
-	1: "EQUAL",
-	2: "LESS",
-	3: "GREATER",
-}
-var ComparisonType_value = map[string]int32{
-	"UNKNOWN_COMPARISON": 0,
-	"EQUAL":              1,
-	"LESS":               2,
-	"GREATER":            3,
+// Enum value maps for ComparisonType.
+var (
+	ComparisonType_name = map[int32]string{
+		0: "UNKNOWN_COMPARISON",
+		1: "EQUAL",
+		2: "LESS",
+		3: "GREATER",
+	}
+	ComparisonType_value = map[string]int32{
+		"UNKNOWN_COMPARISON": 0,
+		"EQUAL":              1,
+		"LESS":               2,
+		"GREATER":            3,
+	}
+)
+
+func (x ComparisonType) Enum() *ComparisonType {
+	p := new(ComparisonType)
+	*p = x
+	return p
 }
 
 func (x ComparisonType) String() string {
-	return proto.EnumName(ComparisonType_name, int32(x))
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (ComparisonType) Descriptor() protoreflect.EnumDescriptor {
+	return file_api_proto_enumTypes[2].Descriptor()
+}
+
+func (ComparisonType) Type() protoreflect.EnumType {
+	return &file_api_proto_enumTypes[2]
+}
+
+func (x ComparisonType) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use ComparisonType.Descriptor instead.
+func (ComparisonType) EnumDescriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{2}
 }
-func (ComparisonType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
 
 // Trial can be in one of 8 conditions.
 // TODO (andreyvelich): Remove unused conditions.
@@ -168,56 +198,110 @@ const (
 	TrialStatus_UNKNOWN            TrialStatus_TrialConditionType = 7
 )
 
-var TrialStatus_TrialConditionType_name = map[int32]string{
-	0: "CREATED",
-	1: "RUNNING",
-	2: "SUCCEEDED",
-	3: "KILLED",
-	4: "FAILED",
-	5: "METRICSUNAVAILABLE",
-	6: "EARLYSTOPPED",
-	7: "UNKNOWN",
-}
-var TrialStatus_TrialConditionType_value = map[string]int32{
-	"CREATED":            0,
-	"RUNNING":            1,
-	"SUCCEEDED":          2,
-	"KILLED":             3,
-	"FAILED":             4,
-	"METRICSUNAVAILABLE": 5,
-	"EARLYSTOPPED":       6,
-	"UNKNOWN":            7,
+// Enum value maps for TrialStatus_TrialConditionType.
+var (
+	TrialStatus_TrialConditionType_name = map[int32]string{
+		0: "CREATED",
+		1: "RUNNING",
+		2: "SUCCEEDED",
+		3: "KILLED",
+		4: "FAILED",
+		5: "METRICSUNAVAILABLE",
+		6: "EARLYSTOPPED",
+		7: "UNKNOWN",
+	}
+	TrialStatus_TrialConditionType_value = map[string]int32{
+		"CREATED":            0,
+		"RUNNING":            1,
+		"SUCCEEDED":          2,
+		"KILLED":             3,
+		"FAILED":             4,
+		"METRICSUNAVAILABLE": 5,
+		"EARLYSTOPPED":       6,
+		"UNKNOWN":            7,
+	}
+)
+
+func (x TrialStatus_TrialConditionType) Enum() *TrialStatus_TrialConditionType {
+	p := new(TrialStatus_TrialConditionType)
+	*p = x
+	return p
 }
 
 func (x TrialStatus_TrialConditionType) String() string {
-	return proto.EnumName(TrialStatus_TrialConditionType_name, int32(x))
+	return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (TrialStatus_TrialConditionType) Descriptor() protoreflect.EnumDescriptor {
+	return file_api_proto_enumTypes[3].Descriptor()
 }
+
+func (TrialStatus_TrialConditionType) Type() protoreflect.EnumType {
+	return &file_api_proto_enumTypes[3]
+}
+
+func (x TrialStatus_TrialConditionType) Number() protoreflect.EnumNumber {
+	return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Use TrialStatus_TrialConditionType.Descriptor instead.
 func (TrialStatus_TrialConditionType) EnumDescriptor() ([]byte, []int) {
-	return fileDescriptor0, []int{15, 0}
+	return file_api_proto_rawDescGZIP(), []int{15, 0}
 }
 
 // *
 // Structure for a single Experiment.
 type Experiment struct {
-	Name string          `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
-	Spec *ExperimentSpec `protobuf:"bytes,2,opt,name=spec" json:"spec,omitempty"`
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Name string          `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Name for the Experiment.
+	Spec *ExperimentSpec `protobuf:"bytes,2,opt,name=spec,proto3" json:"spec,omitempty"` // Experiment specification.
+}
+
+func (x *Experiment) Reset() {
+	*x = Experiment{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[0]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *Experiment) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Experiment) ProtoMessage() {}
+
+func (x *Experiment) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[0]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
 }
 
-func (m *Experiment) Reset()                    { *m = Experiment{} }
-func (m *Experiment) String() string            { return proto.CompactTextString(m) }
-func (*Experiment) ProtoMessage()               {}
-func (*Experiment) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} }
+// Deprecated: Use Experiment.ProtoReflect.Descriptor instead.
+func (*Experiment) Descriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{0}
+}
 
-func (m *Experiment) GetName() string {
-	if m != nil {
-		return m.Name
+func (x *Experiment) GetName() string {
+	if x != nil {
+		return x.Name
 	}
 	return ""
 }
 
-func (m *Experiment) GetSpec() *ExperimentSpec {
-	if m != nil {
-		return m.Spec
+func (x *Experiment) GetSpec() *ExperimentSpec {
+	if x != nil {
+		return x.Spec
 	}
 	return nil
 }
@@ -227,120 +311,162 @@ func (m *Experiment) GetSpec() *ExperimentSpec {
 // Each Experiment contains a configuration describing the feasible space, as well as a set of Trials.
 // It is assumed that objective function f(x) does not change in the course of an Experiment.
 type ExperimentSpec struct {
-	ParameterSpecs     *ExperimentSpec_ParameterSpecs `protobuf:"bytes,1,opt,name=parameter_specs,json=parameterSpecs" json:"parameter_specs,omitempty"`
-	Objective          *ObjectiveSpec                 `protobuf:"bytes,2,opt,name=objective" json:"objective,omitempty"`
-	Algorithm          *AlgorithmSpec                 `protobuf:"bytes,3,opt,name=algorithm" json:"algorithm,omitempty"`
-	EarlyStopping      *EarlyStoppingSpec             `protobuf:"bytes,4,opt,name=early_stopping,json=earlyStopping" json:"early_stopping,omitempty"`
-	ParallelTrialCount int32                          `protobuf:"varint,5,opt,name=parallel_trial_count,json=parallelTrialCount" json:"parallel_trial_count,omitempty"`
-	MaxTrialCount      int32                          `protobuf:"varint,6,opt,name=max_trial_count,json=maxTrialCount" json:"max_trial_count,omitempty"`
-	NasConfig          *NasConfig                     `protobuf:"bytes,7,opt,name=nas_config,json=nasConfig" json:"nas_config,omitempty"`
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ParameterSpecs     *ExperimentSpec_ParameterSpecs `protobuf:"bytes,1,opt,name=parameter_specs,json=parameterSpecs,proto3" json:"parameter_specs,omitempty"`
+	Objective          *ObjectiveSpec                 `protobuf:"bytes,2,opt,name=objective,proto3" json:"objective,omitempty"`                                                // Objective specification for the Experiment.
+	Algorithm          *AlgorithmSpec                 `protobuf:"bytes,3,opt,name=algorithm,proto3" json:"algorithm,omitempty"`                                                // HP or NAS algorithm specification for the Experiment.
+	EarlyStopping      *EarlyStoppingSpec             `protobuf:"bytes,4,opt,name=early_stopping,json=earlyStopping,proto3" json:"early_stopping,omitempty"`                   // Early stopping specification for the Experiment.
+	ParallelTrialCount int32                          `protobuf:"varint,5,opt,name=parallel_trial_count,json=parallelTrialCount,proto3" json:"parallel_trial_count,omitempty"` // How many Trials can be processed in parallel.
+	MaxTrialCount      int32                          `protobuf:"varint,6,opt,name=max_trial_count,json=maxTrialCount,proto3" json:"max_trial_count,omitempty"`                // Max completed Trials to mark Experiment as succeeded.
+	NasConfig          *NasConfig                     `protobuf:"bytes,7,opt,name=nas_config,json=nasConfig,proto3" json:"nas_config,omitempty"`                               // NAS configuration for the Experiment.
+}
+
+func (x *ExperimentSpec) Reset() {
+	*x = ExperimentSpec{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[1]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ExperimentSpec) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ExperimentSpec) ProtoMessage() {}
+
+func (x *ExperimentSpec) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[1]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
 }
 
-func (m *ExperimentSpec) Reset()                    { *m = ExperimentSpec{} }
-func (m *ExperimentSpec) String() string            { return proto.CompactTextString(m) }
-func (*ExperimentSpec) ProtoMessage()               {}
-func (*ExperimentSpec) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} }
+// Deprecated: Use ExperimentSpec.ProtoReflect.Descriptor instead.
+func (*ExperimentSpec) Descriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{1}
+}
 
-func (m *ExperimentSpec) GetParameterSpecs() *ExperimentSpec_ParameterSpecs {
-	if m != nil {
-		return m.ParameterSpecs
+func (x *ExperimentSpec) GetParameterSpecs() *ExperimentSpec_ParameterSpecs {
+	if x != nil {
+		return x.ParameterSpecs
 	}
 	return nil
 }
 
-func (m *ExperimentSpec) GetObjective() *ObjectiveSpec {
-	if m != nil {
-		return m.Objective
+func (x *ExperimentSpec) GetObjective() *ObjectiveSpec {
+	if x != nil {
+		return x.Objective
 	}
 	return nil
 }
 
-func (m *ExperimentSpec) GetAlgorithm() *AlgorithmSpec {
-	if m != nil {
-		return m.Algorithm
+func (x *ExperimentSpec) GetAlgorithm() *AlgorithmSpec {
+	if x != nil {
+		return x.Algorithm
 	}
 	return nil
 }
 
-func (m *ExperimentSpec) GetEarlyStopping() *EarlyStoppingSpec {
-	if m != nil {
-		return m.EarlyStopping
+func (x *ExperimentSpec) GetEarlyStopping() *EarlyStoppingSpec {
+	if x != nil {
+		return x.EarlyStopping
 	}
 	return nil
 }
 
-func (m *ExperimentSpec) GetParallelTrialCount() int32 {
-	if m != nil {
-		return m.ParallelTrialCount
+func (x *ExperimentSpec) GetParallelTrialCount() int32 {
+	if x != nil {
+		return x.ParallelTrialCount
 	}
 	return 0
 }
 
-func (m *ExperimentSpec) GetMaxTrialCount() int32 {
-	if m != nil {
-		return m.MaxTrialCount
+func (x *ExperimentSpec) GetMaxTrialCount() int32 {
+	if x != nil {
+		return x.MaxTrialCount
 	}
 	return 0
 }
 
-func (m *ExperimentSpec) GetNasConfig() *NasConfig {
-	if m != nil {
-		return m.NasConfig
+func (x *ExperimentSpec) GetNasConfig() *NasConfig {
+	if x != nil {
+		return x.NasConfig
 	}
 	return nil
 }
 
 // *
-// List of ParameterSpec.
-type ExperimentSpec_ParameterSpecs struct {
-	Parameters []*ParameterSpec `protobuf:"bytes,1,rep,name=parameters" json:"parameters,omitempty"`
-}
+// Config for a hyperparameter.
+// Katib will create each Hyper parameter from this config.
+type ParameterSpec struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
 
-func (m *ExperimentSpec_ParameterSpecs) Reset()         { *m = ExperimentSpec_ParameterSpecs{} }
-func (m *ExperimentSpec_ParameterSpecs) String() string { return proto.CompactTextString(m) }
-func (*ExperimentSpec_ParameterSpecs) ProtoMessage()    {}
-func (*ExperimentSpec_ParameterSpecs) Descriptor() ([]byte, []int) {
-	return fileDescriptor0, []int{1, 0}
+	Name          string         `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`                                                                         /// Name of the parameter.
+	ParameterType ParameterType  `protobuf:"varint,2,opt,name=parameter_type,json=parameterType,proto3,enum=api.v1.beta1.ParameterType" json:"parameter_type,omitempty"` /// Type of the parameter.
+	FeasibleSpace *FeasibleSpace `protobuf:"bytes,3,opt,name=feasible_space,json=feasibleSpace,proto3" json:"feasible_space,omitempty"`                                  /// FeasibleSpace for the parameter.
 }
 
-func (m *ExperimentSpec_ParameterSpecs) GetParameters() []*ParameterSpec {
-	if m != nil {
-		return m.Parameters
+func (x *ParameterSpec) Reset() {
+	*x = ParameterSpec{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[2]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
 	}
-	return nil
 }
 
-// *
-// Config for a hyperparameter.
-// Katib will create each Hyper parameter from this config.
-type ParameterSpec struct {
-	Name          string         `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
-	ParameterType ParameterType  `protobuf:"varint,2,opt,name=parameter_type,json=parameterType,enum=api.v1.beta1.ParameterType" json:"parameter_type,omitempty"`
-	FeasibleSpace *FeasibleSpace `protobuf:"bytes,3,opt,name=feasible_space,json=feasibleSpace" json:"feasible_space,omitempty"`
+func (x *ParameterSpec) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ParameterSpec) ProtoMessage() {}
+
+func (x *ParameterSpec) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[2]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
 }
 
-func (m *ParameterSpec) Reset()                    { *m = ParameterSpec{} }
-func (m *ParameterSpec) String() string            { return proto.CompactTextString(m) }
-func (*ParameterSpec) ProtoMessage()               {}
-func (*ParameterSpec) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} }
+// Deprecated: Use ParameterSpec.ProtoReflect.Descriptor instead.
+func (*ParameterSpec) Descriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{2}
+}
 
-func (m *ParameterSpec) GetName() string {
-	if m != nil {
-		return m.Name
+func (x *ParameterSpec) GetName() string {
+	if x != nil {
+		return x.Name
 	}
 	return ""
 }
 
-func (m *ParameterSpec) GetParameterType() ParameterType {
-	if m != nil {
-		return m.ParameterType
+func (x *ParameterSpec) GetParameterType() ParameterType {
+	if x != nil {
+		return x.ParameterType
 	}
 	return ParameterType_UNKNOWN_TYPE
 }
 
-func (m *ParameterSpec) GetFeasibleSpace() *FeasibleSpace {
-	if m != nil {
-		return m.FeasibleSpace
+func (x *ParameterSpec) GetFeasibleSpace() *FeasibleSpace {
+	if x != nil {
+		return x.FeasibleSpace
 	}
 	return nil
 }
@@ -350,41 +476,72 @@ func (m *ParameterSpec) GetFeasibleSpace() *FeasibleSpace {
 // Int and Double type use Max/Min.
 // Discrete and Categorical type use List.
 type FeasibleSpace struct {
-	Max  string   `protobuf:"bytes,1,opt,name=max" json:"max,omitempty"`
-	Min  string   `protobuf:"bytes,2,opt,name=min" json:"min,omitempty"`
-	List []string `protobuf:"bytes,3,rep,name=list" json:"list,omitempty"`
-	Step string   `protobuf:"bytes,4,opt,name=step" json:"step,omitempty"`
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Max  string   `protobuf:"bytes,1,opt,name=max,proto3" json:"max,omitempty"`   /// Max Value
+	Min  string   `protobuf:"bytes,2,opt,name=min,proto3" json:"min,omitempty"`   /// Minimum Value
+	List []string `protobuf:"bytes,3,rep,name=list,proto3" json:"list,omitempty"` /// List of Values.
+	Step string   `protobuf:"bytes,4,opt,name=step,proto3" json:"step,omitempty"` /// Step for double or int parameter
+}
+
+func (x *FeasibleSpace) Reset() {
+	*x = FeasibleSpace{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[3]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
-func (m *FeasibleSpace) Reset()                    { *m = FeasibleSpace{} }
-func (m *FeasibleSpace) String() string            { return proto.CompactTextString(m) }
-func (*FeasibleSpace) ProtoMessage()               {}
-func (*FeasibleSpace) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} }
+func (x *FeasibleSpace) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*FeasibleSpace) ProtoMessage() {}
+
+func (x *FeasibleSpace) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[3]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use FeasibleSpace.ProtoReflect.Descriptor instead.
+func (*FeasibleSpace) Descriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{3}
+}
 
-func (m *FeasibleSpace) GetMax() string {
-	if m != nil {
-		return m.Max
+func (x *FeasibleSpace) GetMax() string {
+	if x != nil {
+		return x.Max
 	}
 	return ""
 }
 
-func (m *FeasibleSpace) GetMin() string {
-	if m != nil {
-		return m.Min
+func (x *FeasibleSpace) GetMin() string {
+	if x != nil {
+		return x.Min
 	}
 	return ""
 }
 
-func (m *FeasibleSpace) GetList() []string {
-	if m != nil {
-		return m.List
+func (x *FeasibleSpace) GetList() []string {
+	if x != nil {
+		return x.List
 	}
 	return nil
 }
 
-func (m *FeasibleSpace) GetStep() string {
-	if m != nil {
-		return m.Step
+func (x *FeasibleSpace) GetStep() string {
+	if x != nil {
+		return x.Step
 	}
 	return ""
 }
@@ -392,43 +549,74 @@ func (m *FeasibleSpace) GetStep() string {
 // *
 // Objective specification.
 type ObjectiveSpec struct {
-	Type                ObjectiveType `protobuf:"varint,1,opt,name=type,enum=api.v1.beta1.ObjectiveType" json:"type,omitempty"`
-	Goal                float64       `protobuf:"fixed64,2,opt,name=goal" json:"goal,omitempty"`
-	ObjectiveMetricName string        `protobuf:"bytes,3,opt,name=objective_metric_name,json=objectiveMetricName" json:"objective_metric_name,omitempty"`
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Type                ObjectiveType `protobuf:"varint,1,opt,name=type,proto3,enum=api.v1.beta1.ObjectiveType" json:"type,omitempty"`                           // Type of optimization.
+	Goal                float64       `protobuf:"fixed64,2,opt,name=goal,proto3" json:"goal,omitempty"`                                                          // Goal of optimization, can be empty.
+	ObjectiveMetricName string        `protobuf:"bytes,3,opt,name=objective_metric_name,json=objectiveMetricName,proto3" json:"objective_metric_name,omitempty"` // Primary metric name for the optimization.
 	// List of additional metrics to record from Trial.
 	// This can be empty if we only care about the objective metric.
-	AdditionalMetricNames []string `protobuf:"bytes,4,rep,name=additional_metric_names,json=additionalMetricNames" json:"additional_metric_names,omitempty"`
+	AdditionalMetricNames []string `protobuf:"bytes,4,rep,name=additional_metric_names,json=additionalMetricNames,proto3" json:"additional_metric_names,omitempty"`
+}
+
+func (x *ObjectiveSpec) Reset() {
+	*x = ObjectiveSpec{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[4]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ObjectiveSpec) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ObjectiveSpec) ProtoMessage() {}
+
+func (x *ObjectiveSpec) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[4]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
 }
 
-func (m *ObjectiveSpec) Reset()                    { *m = ObjectiveSpec{} }
-func (m *ObjectiveSpec) String() string            { return proto.CompactTextString(m) }
-func (*ObjectiveSpec) ProtoMessage()               {}
-func (*ObjectiveSpec) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} }
+// Deprecated: Use ObjectiveSpec.ProtoReflect.Descriptor instead.
+func (*ObjectiveSpec) Descriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{4}
+}
 
-func (m *ObjectiveSpec) GetType() ObjectiveType {
-	if m != nil {
-		return m.Type
+func (x *ObjectiveSpec) GetType() ObjectiveType {
+	if x != nil {
+		return x.Type
 	}
 	return ObjectiveType_UNKNOWN
 }
 
-func (m *ObjectiveSpec) GetGoal() float64 {
-	if m != nil {
-		return m.Goal
+func (x *ObjectiveSpec) GetGoal() float64 {
+	if x != nil {
+		return x.Goal
 	}
 	return 0
 }
 
-func (m *ObjectiveSpec) GetObjectiveMetricName() string {
-	if m != nil {
-		return m.ObjectiveMetricName
+func (x *ObjectiveSpec) GetObjectiveMetricName() string {
+	if x != nil {
+		return x.ObjectiveMetricName
 	}
 	return ""
 }
 
-func (m *ObjectiveSpec) GetAdditionalMetricNames() []string {
-	if m != nil {
-		return m.AdditionalMetricNames
+func (x *ObjectiveSpec) GetAdditionalMetricNames() []string {
+	if x != nil {
+		return x.AdditionalMetricNames
 	}
 	return nil
 }
@@ -436,25 +624,56 @@ func (m *ObjectiveSpec) GetAdditionalMetricNames() []string {
 // *
 // HP or NAS algorithm specification.
 type AlgorithmSpec struct {
-	AlgorithmName     string              `protobuf:"bytes,1,opt,name=algorithm_name,json=algorithmName" json:"algorithm_name,omitempty"`
-	AlgorithmSettings []*AlgorithmSetting `protobuf:"bytes,2,rep,name=algorithm_settings,json=algorithmSettings" json:"algorithm_settings,omitempty"`
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	AlgorithmName     string              `protobuf:"bytes,1,opt,name=algorithm_name,json=algorithmName,proto3" json:"algorithm_name,omitempty"`
+	AlgorithmSettings []*AlgorithmSetting `protobuf:"bytes,2,rep,name=algorithm_settings,json=algorithmSettings,proto3" json:"algorithm_settings,omitempty"`
+}
+
+func (x *AlgorithmSpec) Reset() {
+	*x = AlgorithmSpec{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[5]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AlgorithmSpec) String() string {
+	return protoimpl.X.MessageStringOf(x)
 }
 
-func (m *AlgorithmSpec) Reset()                    { *m = AlgorithmSpec{} }
-func (m *AlgorithmSpec) String() string            { return proto.CompactTextString(m) }
-func (*AlgorithmSpec) ProtoMessage()               {}
-func (*AlgorithmSpec) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} }
+func (*AlgorithmSpec) ProtoMessage() {}
 
-func (m *AlgorithmSpec) GetAlgorithmName() string {
-	if m != nil {
-		return m.AlgorithmName
+func (x *AlgorithmSpec) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[5]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use AlgorithmSpec.ProtoReflect.Descriptor instead.
+func (*AlgorithmSpec) Descriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{5}
+}
+
+func (x *AlgorithmSpec) GetAlgorithmName() string {
+	if x != nil {
+		return x.AlgorithmName
 	}
 	return ""
 }
 
-func (m *AlgorithmSpec) GetAlgorithmSettings() []*AlgorithmSetting {
-	if m != nil {
-		return m.AlgorithmSettings
+func (x *AlgorithmSpec) GetAlgorithmSettings() []*AlgorithmSetting {
+	if x != nil {
+		return x.AlgorithmSettings
 	}
 	return nil
 }
@@ -462,25 +681,56 @@ func (m *AlgorithmSpec) GetAlgorithmSettings() []*AlgorithmSetting {
 // *
 // HP or NAS algorithm settings.
 type AlgorithmSetting struct {
-	Name  string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
-	Value string `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"`
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Name  string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
+}
+
+func (x *AlgorithmSetting) Reset() {
+	*x = AlgorithmSetting{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[6]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *AlgorithmSetting) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*AlgorithmSetting) ProtoMessage() {}
+
+func (x *AlgorithmSetting) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[6]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
 }
 
-func (m *AlgorithmSetting) Reset()                    { *m = AlgorithmSetting{} }
-func (m *AlgorithmSetting) String() string            { return proto.CompactTextString(m) }
-func (*AlgorithmSetting) ProtoMessage()               {}
-func (*AlgorithmSetting) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} }
+// Deprecated: Use AlgorithmSetting.ProtoReflect.Descriptor instead.
+func (*AlgorithmSetting) Descriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{6}
+}
 
-func (m *AlgorithmSetting) GetName() string {
-	if m != nil {
-		return m.Name
+func (x *AlgorithmSetting) GetName() string {
+	if x != nil {
+		return x.Name
 	}
 	return ""
 }
 
-func (m *AlgorithmSetting) GetValue() string {
-	if m != nil {
-		return m.Value
+func (x *AlgorithmSetting) GetValue() string {
+	if x != nil {
+		return x.Value
 	}
 	return ""
 }
@@ -488,25 +738,56 @@ func (m *AlgorithmSetting) GetValue() string {
 // *
 // Early stopping algorithm specification.
 type EarlyStoppingSpec struct {
-	AlgorithmName     string                  `protobuf:"bytes,1,opt,name=algorithm_name,json=algorithmName" json:"algorithm_name,omitempty"`
-	AlgorithmSettings []*EarlyStoppingSetting `protobuf:"bytes,2,rep,name=algorithm_settings,json=algorithmSettings" json:"algorithm_settings,omitempty"`
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	AlgorithmName     string                  `protobuf:"bytes,1,opt,name=algorithm_name,json=algorithmName,proto3" json:"algorithm_name,omitempty"`
+	AlgorithmSettings []*EarlyStoppingSetting `protobuf:"bytes,2,rep,name=algorithm_settings,json=algorithmSettings,proto3" json:"algorithm_settings,omitempty"`
+}
+
+func (x *EarlyStoppingSpec) Reset() {
+	*x = EarlyStoppingSpec{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[7]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *EarlyStoppingSpec) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*EarlyStoppingSpec) ProtoMessage() {}
+
+func (x *EarlyStoppingSpec) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[7]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
 }
 
-func (m *EarlyStoppingSpec) Reset()                    { *m = EarlyStoppingSpec{} }
-func (m *EarlyStoppingSpec) String() string            { return proto.CompactTextString(m) }
-func (*EarlyStoppingSpec) ProtoMessage()               {}
-func (*EarlyStoppingSpec) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} }
+// Deprecated: Use EarlyStoppingSpec.ProtoReflect.Descriptor instead.
+func (*EarlyStoppingSpec) Descriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{7}
+}
 
-func (m *EarlyStoppingSpec) GetAlgorithmName() string {
-	if m != nil {
-		return m.AlgorithmName
+func (x *EarlyStoppingSpec) GetAlgorithmName() string {
+	if x != nil {
+		return x.AlgorithmName
 	}
 	return ""
 }
 
-func (m *EarlyStoppingSpec) GetAlgorithmSettings() []*EarlyStoppingSetting {
-	if m != nil {
-		return m.AlgorithmSettings
+func (x *EarlyStoppingSpec) GetAlgorithmSettings() []*EarlyStoppingSetting {
+	if x != nil {
+		return x.AlgorithmSettings
 	}
 	return nil
 }
@@ -514,25 +795,56 @@ func (m *EarlyStoppingSpec) GetAlgorithmSettings() []*EarlyStoppingSetting {
 // *
 // Early stopping algorithm settings.
 type EarlyStoppingSetting struct {
-	Name  string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
-	Value string `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"`
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Name  string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
+}
+
+func (x *EarlyStoppingSetting) Reset() {
+	*x = EarlyStoppingSetting{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[8]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *EarlyStoppingSetting) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*EarlyStoppingSetting) ProtoMessage() {}
+
+func (x *EarlyStoppingSetting) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[8]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
 }
 
-func (m *EarlyStoppingSetting) Reset()                    { *m = EarlyStoppingSetting{} }
-func (m *EarlyStoppingSetting) String() string            { return proto.CompactTextString(m) }
-func (*EarlyStoppingSetting) ProtoMessage()               {}
-func (*EarlyStoppingSetting) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} }
+// Deprecated: Use EarlyStoppingSetting.ProtoReflect.Descriptor instead.
+func (*EarlyStoppingSetting) Descriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{8}
+}
 
-func (m *EarlyStoppingSetting) GetName() string {
-	if m != nil {
-		return m.Name
+func (x *EarlyStoppingSetting) GetName() string {
+	if x != nil {
+		return x.Name
 	}
 	return ""
 }
 
-func (m *EarlyStoppingSetting) GetValue() string {
-	if m != nil {
-		return m.Value
+func (x *EarlyStoppingSetting) GetValue() string {
+	if x != nil {
+		return x.Value
 	}
 	return ""
 }
@@ -540,41 +852,56 @@ func (m *EarlyStoppingSetting) GetValue() string {
 // *
 // NasConfig contains a config of NAS job
 type NasConfig struct {
-	GraphConfig *GraphConfig          `protobuf:"bytes,1,opt,name=graph_config,json=graphConfig" json:"graph_config,omitempty"`
-	Operations  *NasConfig_Operations `protobuf:"bytes,2,opt,name=operations" json:"operations,omitempty"`
-}
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
 
-func (m *NasConfig) Reset()                    { *m = NasConfig{} }
-func (m *NasConfig) String() string            { return proto.CompactTextString(m) }
-func (*NasConfig) ProtoMessage()               {}
-func (*NasConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} }
+	GraphConfig *GraphConfig          `protobuf:"bytes,1,opt,name=graph_config,json=graphConfig,proto3" json:"graph_config,omitempty"` /// Config of DAG
+	Operations  *NasConfig_Operations `protobuf:"bytes,2,opt,name=operations,proto3" json:"operations,omitempty"`                      /// List of Operation
+}
 
-func (m *NasConfig) GetGraphConfig() *GraphConfig {
-	if m != nil {
-		return m.GraphConfig
+func (x *NasConfig) Reset() {
+	*x = NasConfig{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[9]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
 	}
-	return nil
 }
 
-func (m *NasConfig) GetOperations() *NasConfig_Operations {
-	if m != nil {
-		return m.Operations
+func (x *NasConfig) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*NasConfig) ProtoMessage() {}
+
+func (x *NasConfig) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[9]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
 	}
-	return nil
+	return mi.MessageOf(x)
 }
 
-type NasConfig_Operations struct {
-	Operation []*Operation `protobuf:"bytes,1,rep,name=operation" json:"operation,omitempty"`
+// Deprecated: Use NasConfig.ProtoReflect.Descriptor instead.
+func (*NasConfig) Descriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{9}
 }
 
-func (m *NasConfig_Operations) Reset()                    { *m = NasConfig_Operations{} }
-func (m *NasConfig_Operations) String() string            { return proto.CompactTextString(m) }
-func (*NasConfig_Operations) ProtoMessage()               {}
-func (*NasConfig_Operations) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9, 0} }
+func (x *NasConfig) GetGraphConfig() *GraphConfig {
+	if x != nil {
+		return x.GraphConfig
+	}
+	return nil
+}
 
-func (m *NasConfig_Operations) GetOperation() []*Operation {
-	if m != nil {
-		return m.Operation
+func (x *NasConfig) GetOperations() *NasConfig_Operations {
+	if x != nil {
+		return x.Operations
 	}
 	return nil
 }
@@ -582,33 +909,64 @@ func (m *NasConfig_Operations) GetOperation() []*Operation {
 // *
 // GraphConfig contains a config of DAG
 type GraphConfig struct {
-	NumLayers   int32   `protobuf:"varint,1,opt,name=num_layers,json=numLayers" json:"num_layers,omitempty"`
-	InputSizes  []int32 `protobuf:"varint,2,rep,packed,name=input_sizes,json=inputSizes" json:"input_sizes,omitempty"`
-	OutputSizes []int32 `protobuf:"varint,3,rep,packed,name=output_sizes,json=outputSizes" json:"output_sizes,omitempty"`
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	NumLayers   int32   `protobuf:"varint,1,opt,name=num_layers,json=numLayers,proto3" json:"num_layers,omitempty"`              /// Number of layers
+	InputSizes  []int32 `protobuf:"varint,2,rep,packed,name=input_sizes,json=inputSizes,proto3" json:"input_sizes,omitempty"`    /// Dimensions of input size
+	OutputSizes []int32 `protobuf:"varint,3,rep,packed,name=output_sizes,json=outputSizes,proto3" json:"output_sizes,omitempty"` /// Dimensions of output size
+}
+
+func (x *GraphConfig) Reset() {
+	*x = GraphConfig{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[10]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GraphConfig) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GraphConfig) ProtoMessage() {}
+
+func (x *GraphConfig) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[10]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
 }
 
-func (m *GraphConfig) Reset()                    { *m = GraphConfig{} }
-func (m *GraphConfig) String() string            { return proto.CompactTextString(m) }
-func (*GraphConfig) ProtoMessage()               {}
-func (*GraphConfig) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} }
+// Deprecated: Use GraphConfig.ProtoReflect.Descriptor instead.
+func (*GraphConfig) Descriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{10}
+}
 
-func (m *GraphConfig) GetNumLayers() int32 {
-	if m != nil {
-		return m.NumLayers
+func (x *GraphConfig) GetNumLayers() int32 {
+	if x != nil {
+		return x.NumLayers
 	}
 	return 0
 }
 
-func (m *GraphConfig) GetInputSizes() []int32 {
-	if m != nil {
-		return m.InputSizes
+func (x *GraphConfig) GetInputSizes() []int32 {
+	if x != nil {
+		return x.InputSizes
 	}
 	return nil
 }
 
-func (m *GraphConfig) GetOutputSizes() []int32 {
-	if m != nil {
-		return m.OutputSizes
+func (x *GraphConfig) GetOutputSizes() []int32 {
+	if x != nil {
+		return x.OutputSizes
 	}
 	return nil
 }
@@ -616,43 +974,56 @@ func (m *GraphConfig) GetOutputSizes() []int32 {
 // *
 // Config for operations in DAG
 type Operation struct {
-	OperationType  string                    `protobuf:"bytes,1,opt,name=operation_type,json=operationType" json:"operation_type,omitempty"`
-	ParameterSpecs *Operation_ParameterSpecs `protobuf:"bytes,2,opt,name=parameter_specs,json=parameterSpecs" json:"parameter_specs,omitempty"`
-}
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
 
-func (m *Operation) Reset()                    { *m = Operation{} }
-func (m *Operation) String() string            { return proto.CompactTextString(m) }
-func (*Operation) ProtoMessage()               {}
-func (*Operation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} }
+	OperationType  string                    `protobuf:"bytes,1,opt,name=operation_type,json=operationType,proto3" json:"operation_type,omitempty"` /// Type of operation in DAG
+	ParameterSpecs *Operation_ParameterSpecs `protobuf:"bytes,2,opt,name=parameter_specs,json=parameterSpecs,proto3" json:"parameter_specs,omitempty"`
+}
 
-func (m *Operation) GetOperationType() string {
-	if m != nil {
-		return m.OperationType
+func (x *Operation) Reset() {
+	*x = Operation{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[11]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
 	}
-	return ""
 }
 
-func (m *Operation) GetParameterSpecs() *Operation_ParameterSpecs {
-	if m != nil {
-		return m.ParameterSpecs
+func (x *Operation) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Operation) ProtoMessage() {}
+
+func (x *Operation) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[11]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
 	}
-	return nil
+	return mi.MessageOf(x)
 }
 
-// *
-// List of ParameterSpec
-type Operation_ParameterSpecs struct {
-	Parameters []*ParameterSpec `protobuf:"bytes,1,rep,name=parameters" json:"parameters,omitempty"`
+// Deprecated: Use Operation.ProtoReflect.Descriptor instead.
+func (*Operation) Descriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{11}
 }
 
-func (m *Operation_ParameterSpecs) Reset()                    { *m = Operation_ParameterSpecs{} }
-func (m *Operation_ParameterSpecs) String() string            { return proto.CompactTextString(m) }
-func (*Operation_ParameterSpecs) ProtoMessage()               {}
-func (*Operation_ParameterSpecs) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11, 0} }
+func (x *Operation) GetOperationType() string {
+	if x != nil {
+		return x.OperationType
+	}
+	return ""
+}
 
-func (m *Operation_ParameterSpecs) GetParameters() []*ParameterSpec {
-	if m != nil {
-		return m.Parameters
+func (x *Operation) GetParameterSpecs() *Operation_ParameterSpecs {
+	if x != nil {
+		return x.ParameterSpecs
 	}
 	return nil
 }
@@ -660,33 +1031,64 @@ func (m *Operation_ParameterSpecs) GetParameters() []*ParameterSpec {
 // *
 // Structure for a single Trial.
 type Trial struct {
-	Name   string       `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
-	Spec   *TrialSpec   `protobuf:"bytes,2,opt,name=spec" json:"spec,omitempty"`
-	Status *TrialStatus `protobuf:"bytes,3,opt,name=status" json:"status,omitempty"`
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Name   string       `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`     // Name for the Trial.
+	Spec   *TrialSpec   `protobuf:"bytes,2,opt,name=spec,proto3" json:"spec,omitempty"`     // Trial specification.
+	Status *TrialStatus `protobuf:"bytes,3,opt,name=status,proto3" json:"status,omitempty"` // Trial status.
+}
+
+func (x *Trial) Reset() {
+	*x = Trial{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[12]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *Trial) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*Trial) ProtoMessage() {}
+
+func (x *Trial) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[12]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
 }
 
-func (m *Trial) Reset()                    { *m = Trial{} }
-func (m *Trial) String() string            { return proto.CompactTextString(m) }
-func (*Trial) ProtoMessage()               {}
-func (*Trial) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} }
+// Deprecated: Use Trial.ProtoReflect.Descriptor instead.
+func (*Trial) Descriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{12}
+}
 
-func (m *Trial) GetName() string {
-	if m != nil {
-		return m.Name
+func (x *Trial) GetName() string {
+	if x != nil {
+		return x.Name
 	}
 	return ""
 }
 
-func (m *Trial) GetSpec() *TrialSpec {
-	if m != nil {
-		return m.Spec
+func (x *Trial) GetSpec() *TrialSpec {
+	if x != nil {
+		return x.Spec
 	}
 	return nil
 }
 
-func (m *Trial) GetStatus() *TrialStatus {
-	if m != nil {
-		return m.Status
+func (x *Trial) GetStatus() *TrialStatus {
+	if x != nil {
+		return x.Status
 	}
 	return nil
 }
@@ -694,77 +1096,119 @@ func (m *Trial) GetStatus() *TrialStatus {
 // *
 // Specification of a Trial. It represents Trial's parameter assignments and objective.
 type TrialSpec struct {
-	Objective            *ObjectiveSpec                  `protobuf:"bytes,2,opt,name=objective" json:"objective,omitempty"`
-	ParameterAssignments *TrialSpec_ParameterAssignments `protobuf:"bytes,3,opt,name=parameter_assignments,json=parameterAssignments" json:"parameter_assignments,omitempty"`
-	Labels               map[string]string               `protobuf:"bytes,4,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Objective            *ObjectiveSpec                  `protobuf:"bytes,2,opt,name=objective,proto3" json:"objective,omitempty"`                                                                                   // Objective specification for the Trial.
+	ParameterAssignments *TrialSpec_ParameterAssignments `protobuf:"bytes,3,opt,name=parameter_assignments,json=parameterAssignments,proto3" json:"parameter_assignments,omitempty"`                                 // List of assignments generated for the Trial.
+	Labels               map[string]string               `protobuf:"bytes,4,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` // Map of labels assigned to the Trial
+}
+
+func (x *TrialSpec) Reset() {
+	*x = TrialSpec{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[13]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
-func (m *TrialSpec) Reset()                    { *m = TrialSpec{} }
-func (m *TrialSpec) String() string            { return proto.CompactTextString(m) }
-func (*TrialSpec) ProtoMessage()               {}
-func (*TrialSpec) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} }
+func (x *TrialSpec) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*TrialSpec) ProtoMessage() {}
 
-func (m *TrialSpec) GetObjective() *ObjectiveSpec {
-	if m != nil {
-		return m.Objective
+func (x *TrialSpec) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[13]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
 	}
-	return nil
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use TrialSpec.ProtoReflect.Descriptor instead.
+func (*TrialSpec) Descriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{13}
 }
 
-func (m *TrialSpec) GetParameterAssignments() *TrialSpec_ParameterAssignments {
-	if m != nil {
-		return m.ParameterAssignments
+func (x *TrialSpec) GetObjective() *ObjectiveSpec {
+	if x != nil {
+		return x.Objective
 	}
 	return nil
 }
 
-func (m *TrialSpec) GetLabels() map[string]string {
-	if m != nil {
-		return m.Labels
+func (x *TrialSpec) GetParameterAssignments() *TrialSpec_ParameterAssignments {
+	if x != nil {
+		return x.ParameterAssignments
 	}
 	return nil
 }
 
-// *
-// List of ParameterAssignment
-type TrialSpec_ParameterAssignments struct {
-	Assignments []*ParameterAssignment `protobuf:"bytes,1,rep,name=assignments" json:"assignments,omitempty"`
+func (x *TrialSpec) GetLabels() map[string]string {
+	if x != nil {
+		return x.Labels
+	}
+	return nil
 }
 
-func (m *TrialSpec_ParameterAssignments) Reset()         { *m = TrialSpec_ParameterAssignments{} }
-func (m *TrialSpec_ParameterAssignments) String() string { return proto.CompactTextString(m) }
-func (*TrialSpec_ParameterAssignments) ProtoMessage()    {}
-func (*TrialSpec_ParameterAssignments) Descriptor() ([]byte, []int) {
-	return fileDescriptor0, []int{13, 0}
+type ParameterAssignment struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Name  string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
 }
 
-func (m *TrialSpec_ParameterAssignments) GetAssignments() []*ParameterAssignment {
-	if m != nil {
-		return m.Assignments
+func (x *ParameterAssignment) Reset() {
+	*x = ParameterAssignment{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[14]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
 	}
-	return nil
 }
 
-type ParameterAssignment struct {
-	Name  string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
-	Value string `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"`
+func (x *ParameterAssignment) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ParameterAssignment) ProtoMessage() {}
+
+func (x *ParameterAssignment) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[14]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
 }
 
-func (m *ParameterAssignment) Reset()                    { *m = ParameterAssignment{} }
-func (m *ParameterAssignment) String() string            { return proto.CompactTextString(m) }
-func (*ParameterAssignment) ProtoMessage()               {}
-func (*ParameterAssignment) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} }
+// Deprecated: Use ParameterAssignment.ProtoReflect.Descriptor instead.
+func (*ParameterAssignment) Descriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{14}
+}
 
-func (m *ParameterAssignment) GetName() string {
-	if m != nil {
-		return m.Name
+func (x *ParameterAssignment) GetName() string {
+	if x != nil {
+		return x.Name
 	}
 	return ""
 }
 
-func (m *ParameterAssignment) GetValue() string {
-	if m != nil {
-		return m.Value
+func (x *ParameterAssignment) GetValue() string {
+	if x != nil {
+		return x.Value
 	}
 	return ""
 }
@@ -772,363 +1216,755 @@ func (m *ParameterAssignment) GetValue() string {
 // *
 // Current Trial status. It contains Trial's latest condition, start time, completion time, observation.
 type TrialStatus struct {
-	StartTime      string                         `protobuf:"bytes,1,opt,name=start_time,json=startTime" json:"start_time,omitempty"`
-	CompletionTime string                         `protobuf:"bytes,2,opt,name=completion_time,json=completionTime" json:"completion_time,omitempty"`
-	Condition      TrialStatus_TrialConditionType `protobuf:"varint,3,opt,name=condition,enum=api.v1.beta1.TrialStatus_TrialConditionType" json:"condition,omitempty"`
-	Observation    *Observation                   `protobuf:"bytes,4,opt,name=observation" json:"observation,omitempty"`
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	StartTime      string                         `protobuf:"bytes,1,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"`                                  // Trial start time in RFC3339 format
+	CompletionTime string                         `protobuf:"bytes,2,opt,name=completion_time,json=completionTime,proto3" json:"completion_time,omitempty"`                   // Trial completion time in RFC3339 format
+	Condition      TrialStatus_TrialConditionType `protobuf:"varint,3,opt,name=condition,proto3,enum=api.v1.beta1.TrialStatus_TrialConditionType" json:"condition,omitempty"` // Trial current condition. It is equal to the latest Trial CR condition.
+	Observation    *Observation                   `protobuf:"bytes,4,opt,name=observation,proto3" json:"observation,omitempty"`                                               // The best Trial observation in logs.
+}
+
+func (x *TrialStatus) Reset() {
+	*x = TrialStatus{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[15]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
-func (m *TrialStatus) Reset()                    { *m = TrialStatus{} }
-func (m *TrialStatus) String() string            { return proto.CompactTextString(m) }
-func (*TrialStatus) ProtoMessage()               {}
-func (*TrialStatus) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} }
+func (x *TrialStatus) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*TrialStatus) ProtoMessage() {}
+
+func (x *TrialStatus) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[15]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use TrialStatus.ProtoReflect.Descriptor instead.
+func (*TrialStatus) Descriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{15}
+}
 
-func (m *TrialStatus) GetStartTime() string {
-	if m != nil {
-		return m.StartTime
+func (x *TrialStatus) GetStartTime() string {
+	if x != nil {
+		return x.StartTime
 	}
 	return ""
 }
 
-func (m *TrialStatus) GetCompletionTime() string {
-	if m != nil {
-		return m.CompletionTime
+func (x *TrialStatus) GetCompletionTime() string {
+	if x != nil {
+		return x.CompletionTime
 	}
 	return ""
 }
 
-func (m *TrialStatus) GetCondition() TrialStatus_TrialConditionType {
-	if m != nil {
-		return m.Condition
+func (x *TrialStatus) GetCondition() TrialStatus_TrialConditionType {
+	if x != nil {
+		return x.Condition
 	}
 	return TrialStatus_CREATED
 }
 
-func (m *TrialStatus) GetObservation() *Observation {
-	if m != nil {
-		return m.Observation
+func (x *TrialStatus) GetObservation() *Observation {
+	if x != nil {
+		return x.Observation
 	}
 	return nil
 }
 
 type Observation struct {
-	Metrics []*Metric `protobuf:"bytes,1,rep,name=metrics" json:"metrics,omitempty"`
-}
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
 
-func (m *Observation) Reset()                    { *m = Observation{} }
-func (m *Observation) String() string            { return proto.CompactTextString(m) }
-func (*Observation) ProtoMessage()               {}
-func (*Observation) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} }
+	Metrics []*Metric `protobuf:"bytes,1,rep,name=metrics,proto3" json:"metrics,omitempty"`
+}
 
-func (m *Observation) GetMetrics() []*Metric {
-	if m != nil {
-		return m.Metrics
+func (x *Observation) Reset() {
+	*x = Observation{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[16]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
 	}
-	return nil
 }
 
-type Metric struct {
-	Name  string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
-	Value string `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"`
+func (x *Observation) String() string {
+	return protoimpl.X.MessageStringOf(x)
 }
 
-func (m *Metric) Reset()                    { *m = Metric{} }
-func (m *Metric) String() string            { return proto.CompactTextString(m) }
-func (*Metric) ProtoMessage()               {}
-func (*Metric) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} }
+func (*Observation) ProtoMessage() {}
 
-func (m *Metric) GetName() string {
-	if m != nil {
-		return m.Name
+func (x *Observation) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[16]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
 	}
-	return ""
+	return mi.MessageOf(x)
 }
 
-func (m *Metric) GetValue() string {
-	if m != nil {
-		return m.Value
-	}
-	return ""
+// Deprecated: Use Observation.ProtoReflect.Descriptor instead.
+func (*Observation) Descriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{16}
 }
 
-type ReportObservationLogRequest struct {
-	TrialName      string          `protobuf:"bytes,1,opt,name=trial_name,json=trialName" json:"trial_name,omitempty"`
-	ObservationLog *ObservationLog `protobuf:"bytes,2,opt,name=observation_log,json=observationLog" json:"observation_log,omitempty"`
+func (x *Observation) GetMetrics() []*Metric {
+	if x != nil {
+		return x.Metrics
+	}
+	return nil
 }
 
-func (m *ReportObservationLogRequest) Reset()                    { *m = ReportObservationLogRequest{} }
-func (m *ReportObservationLogRequest) String() string            { return proto.CompactTextString(m) }
-func (*ReportObservationLogRequest) ProtoMessage()               {}
-func (*ReportObservationLogRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} }
+type Metric struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
 
-func (m *ReportObservationLogRequest) GetTrialName() string {
-	if m != nil {
-		return m.TrialName
-	}
-	return ""
+	Name  string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
+	Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
 }
 
-func (m *ReportObservationLogRequest) GetObservationLog() *ObservationLog {
-	if m != nil {
-		return m.ObservationLog
+func (x *Metric) Reset() {
+	*x = Metric{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[17]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
 	}
-	return nil
 }
 
-type ReportObservationLogReply struct {
+func (x *Metric) String() string {
+	return protoimpl.X.MessageStringOf(x)
 }
 
-func (m *ReportObservationLogReply) Reset()                    { *m = ReportObservationLogReply{} }
-func (m *ReportObservationLogReply) String() string            { return proto.CompactTextString(m) }
-func (*ReportObservationLogReply) ProtoMessage()               {}
-func (*ReportObservationLogReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} }
+func (*Metric) ProtoMessage() {}
 
-type ObservationLog struct {
-	MetricLogs []*MetricLog `protobuf:"bytes,1,rep,name=metric_logs,json=metricLogs" json:"metric_logs,omitempty"`
+func (x *Metric) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[17]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
 }
 
-func (m *ObservationLog) Reset()                    { *m = ObservationLog{} }
-func (m *ObservationLog) String() string            { return proto.CompactTextString(m) }
-func (*ObservationLog) ProtoMessage()               {}
-func (*ObservationLog) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} }
+// Deprecated: Use Metric.ProtoReflect.Descriptor instead.
+func (*Metric) Descriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{17}
+}
+
+func (x *Metric) GetName() string {
+	if x != nil {
+		return x.Name
+	}
+	return ""
+}
+
+func (x *Metric) GetValue() string {
+	if x != nil {
+		return x.Value
+	}
+	return ""
+}
+
+type ReportObservationLogRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	TrialName      string          `protobuf:"bytes,1,opt,name=trial_name,json=trialName,proto3" json:"trial_name,omitempty"`
+	ObservationLog *ObservationLog `protobuf:"bytes,2,opt,name=observation_log,json=observationLog,proto3" json:"observation_log,omitempty"`
+}
+
+func (x *ReportObservationLogRequest) Reset() {
+	*x = ReportObservationLogRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[18]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ReportObservationLogRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ReportObservationLogRequest) ProtoMessage() {}
+
+func (x *ReportObservationLogRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[18]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ReportObservationLogRequest.ProtoReflect.Descriptor instead.
+func (*ReportObservationLogRequest) Descriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{18}
+}
+
+func (x *ReportObservationLogRequest) GetTrialName() string {
+	if x != nil {
+		return x.TrialName
+	}
+	return ""
+}
 
-func (m *ObservationLog) GetMetricLogs() []*MetricLog {
-	if m != nil {
-		return m.MetricLogs
+func (x *ReportObservationLogRequest) GetObservationLog() *ObservationLog {
+	if x != nil {
+		return x.ObservationLog
+	}
+	return nil
+}
+
+type ReportObservationLogReply struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *ReportObservationLogReply) Reset() {
+	*x = ReportObservationLogReply{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[19]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ReportObservationLogReply) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ReportObservationLogReply) ProtoMessage() {}
+
+func (x *ReportObservationLogReply) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[19]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ReportObservationLogReply.ProtoReflect.Descriptor instead.
+func (*ReportObservationLogReply) Descriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{19}
+}
+
+type ObservationLog struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	MetricLogs []*MetricLog `protobuf:"bytes,1,rep,name=metric_logs,json=metricLogs,proto3" json:"metric_logs,omitempty"`
+}
+
+func (x *ObservationLog) Reset() {
+	*x = ObservationLog{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[20]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ObservationLog) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ObservationLog) ProtoMessage() {}
+
+func (x *ObservationLog) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[20]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ObservationLog.ProtoReflect.Descriptor instead.
+func (*ObservationLog) Descriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{20}
+}
+
+func (x *ObservationLog) GetMetricLogs() []*MetricLog {
+	if x != nil {
+		return x.MetricLogs
 	}
 	return nil
 }
 
 type MetricLog struct {
-	TimeStamp string  `protobuf:"bytes,1,opt,name=time_stamp,json=timeStamp" json:"time_stamp,omitempty"`
-	Metric    *Metric `protobuf:"bytes,2,opt,name=metric" json:"metric,omitempty"`
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	TimeStamp string  `protobuf:"bytes,1,opt,name=time_stamp,json=timeStamp,proto3" json:"time_stamp,omitempty"` /// RFC3339 format
+	Metric    *Metric `protobuf:"bytes,2,opt,name=metric,proto3" json:"metric,omitempty"`
+}
+
+func (x *MetricLog) Reset() {
+	*x = MetricLog{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[21]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
-func (m *MetricLog) Reset()                    { *m = MetricLog{} }
-func (m *MetricLog) String() string            { return proto.CompactTextString(m) }
-func (*MetricLog) ProtoMessage()               {}
-func (*MetricLog) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} }
+func (x *MetricLog) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*MetricLog) ProtoMessage() {}
 
-func (m *MetricLog) GetTimeStamp() string {
-	if m != nil {
-		return m.TimeStamp
+func (x *MetricLog) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[21]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use MetricLog.ProtoReflect.Descriptor instead.
+func (*MetricLog) Descriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{21}
+}
+
+func (x *MetricLog) GetTimeStamp() string {
+	if x != nil {
+		return x.TimeStamp
 	}
 	return ""
 }
 
-func (m *MetricLog) GetMetric() *Metric {
-	if m != nil {
-		return m.Metric
+func (x *MetricLog) GetMetric() *Metric {
+	if x != nil {
+		return x.Metric
 	}
 	return nil
 }
 
 type GetObservationLogRequest struct {
-	TrialName  string `protobuf:"bytes,1,opt,name=trial_name,json=trialName" json:"trial_name,omitempty"`
-	MetricName string `protobuf:"bytes,2,opt,name=metric_name,json=metricName" json:"metric_name,omitempty"`
-	StartTime  string `protobuf:"bytes,3,opt,name=start_time,json=startTime" json:"start_time,omitempty"`
-	EndTime    string `protobuf:"bytes,4,opt,name=end_time,json=endTime" json:"end_time,omitempty"`
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	TrialName  string `protobuf:"bytes,1,opt,name=trial_name,json=trialName,proto3" json:"trial_name,omitempty"`
+	MetricName string `protobuf:"bytes,2,opt,name=metric_name,json=metricName,proto3" json:"metric_name,omitempty"`
+	StartTime  string `protobuf:"bytes,3,opt,name=start_time,json=startTime,proto3" json:"start_time,omitempty"` ///The start of the time range. RFC3339 format
+	EndTime    string `protobuf:"bytes,4,opt,name=end_time,json=endTime,proto3" json:"end_time,omitempty"`       ///The end of the time range. RFC3339 format
 }
 
-func (m *GetObservationLogRequest) Reset()                    { *m = GetObservationLogRequest{} }
-func (m *GetObservationLogRequest) String() string            { return proto.CompactTextString(m) }
-func (*GetObservationLogRequest) ProtoMessage()               {}
-func (*GetObservationLogRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} }
+func (x *GetObservationLogRequest) Reset() {
+	*x = GetObservationLogRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[22]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
 
-func (m *GetObservationLogRequest) GetTrialName() string {
-	if m != nil {
-		return m.TrialName
+func (x *GetObservationLogRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetObservationLogRequest) ProtoMessage() {}
+
+func (x *GetObservationLogRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[22]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetObservationLogRequest.ProtoReflect.Descriptor instead.
+func (*GetObservationLogRequest) Descriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{22}
+}
+
+func (x *GetObservationLogRequest) GetTrialName() string {
+	if x != nil {
+		return x.TrialName
 	}
 	return ""
 }
 
-func (m *GetObservationLogRequest) GetMetricName() string {
-	if m != nil {
-		return m.MetricName
+func (x *GetObservationLogRequest) GetMetricName() string {
+	if x != nil {
+		return x.MetricName
 	}
 	return ""
 }
 
-func (m *GetObservationLogRequest) GetStartTime() string {
-	if m != nil {
-		return m.StartTime
+func (x *GetObservationLogRequest) GetStartTime() string {
+	if x != nil {
+		return x.StartTime
 	}
 	return ""
 }
 
-func (m *GetObservationLogRequest) GetEndTime() string {
-	if m != nil {
-		return m.EndTime
+func (x *GetObservationLogRequest) GetEndTime() string {
+	if x != nil {
+		return x.EndTime
 	}
 	return ""
 }
 
 type GetObservationLogReply struct {
-	ObservationLog *ObservationLog `protobuf:"bytes,1,opt,name=observation_log,json=observationLog" json:"observation_log,omitempty"`
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	ObservationLog *ObservationLog `protobuf:"bytes,1,opt,name=observation_log,json=observationLog,proto3" json:"observation_log,omitempty"`
+}
+
+func (x *GetObservationLogReply) Reset() {
+	*x = GetObservationLogReply{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[23]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GetObservationLogReply) String() string {
+	return protoimpl.X.MessageStringOf(x)
 }
 
-func (m *GetObservationLogReply) Reset()                    { *m = GetObservationLogReply{} }
-func (m *GetObservationLogReply) String() string            { return proto.CompactTextString(m) }
-func (*GetObservationLogReply) ProtoMessage()               {}
-func (*GetObservationLogReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{23} }
+func (*GetObservationLogReply) ProtoMessage() {}
 
-func (m *GetObservationLogReply) GetObservationLog() *ObservationLog {
-	if m != nil {
-		return m.ObservationLog
+func (x *GetObservationLogReply) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[23]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetObservationLogReply.ProtoReflect.Descriptor instead.
+func (*GetObservationLogReply) Descriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{23}
+}
+
+func (x *GetObservationLogReply) GetObservationLog() *ObservationLog {
+	if x != nil {
+		return x.ObservationLog
 	}
 	return nil
 }
 
 type DeleteObservationLogRequest struct {
-	TrialName string `protobuf:"bytes,1,opt,name=trial_name,json=trialName" json:"trial_name,omitempty"`
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	TrialName string `protobuf:"bytes,1,opt,name=trial_name,json=trialName,proto3" json:"trial_name,omitempty"`
 }
 
-func (m *DeleteObservationLogRequest) Reset()                    { *m = DeleteObservationLogRequest{} }
-func (m *DeleteObservationLogRequest) String() string            { return proto.CompactTextString(m) }
-func (*DeleteObservationLogRequest) ProtoMessage()               {}
-func (*DeleteObservationLogRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{24} }
+func (x *DeleteObservationLogRequest) Reset() {
+	*x = DeleteObservationLogRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[24]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *DeleteObservationLogRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
 
-func (m *DeleteObservationLogRequest) GetTrialName() string {
-	if m != nil {
-		return m.TrialName
+func (*DeleteObservationLogRequest) ProtoMessage() {}
+
+func (x *DeleteObservationLogRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[24]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use DeleteObservationLogRequest.ProtoReflect.Descriptor instead.
+func (*DeleteObservationLogRequest) Descriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{24}
+}
+
+func (x *DeleteObservationLogRequest) GetTrialName() string {
+	if x != nil {
+		return x.TrialName
 	}
 	return ""
 }
 
 type DeleteObservationLogReply struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
 }
 
-func (m *DeleteObservationLogReply) Reset()                    { *m = DeleteObservationLogReply{} }
-func (m *DeleteObservationLogReply) String() string            { return proto.CompactTextString(m) }
-func (*DeleteObservationLogReply) ProtoMessage()               {}
-func (*DeleteObservationLogReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{25} }
+func (x *DeleteObservationLogReply) Reset() {
+	*x = DeleteObservationLogReply{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[25]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *DeleteObservationLogReply) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*DeleteObservationLogReply) ProtoMessage() {}
+
+func (x *DeleteObservationLogReply) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[25]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use DeleteObservationLogReply.ProtoReflect.Descriptor instead.
+func (*DeleteObservationLogReply) Descriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{25}
+}
 
 type GetSuggestionsRequest struct {
-	Experiment *Experiment `protobuf:"bytes,1,opt,name=experiment" json:"experiment,omitempty"`
-	Trials     []*Trial    `protobuf:"bytes,2,rep,name=trials" json:"trials,omitempty"`
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Experiment *Experiment `protobuf:"bytes,1,opt,name=experiment,proto3" json:"experiment,omitempty"`
+	Trials     []*Trial    `protobuf:"bytes,2,rep,name=trials,proto3" json:"trials,omitempty"` // All completed trials owned by the experiment.
 	// The number of Suggestions requested at one time.
 	// When you set 3 to current_request_number, you get three Suggestions at one time.
-	CurrentRequestNumber int32 `protobuf:"varint,4,opt,name=current_request_number,json=currentRequestNumber" json:"current_request_number,omitempty"`
-	TotalRequestNumber   int32 `protobuf:"varint,5,opt,name=total_request_number,json=totalRequestNumber" json:"total_request_number,omitempty"`
+	CurrentRequestNumber int32 `protobuf:"varint,4,opt,name=current_request_number,json=currentRequestNumber,proto3" json:"current_request_number,omitempty"`
+	TotalRequestNumber   int32 `protobuf:"varint,5,opt,name=total_request_number,json=totalRequestNumber,proto3" json:"total_request_number,omitempty"` // The number of Suggestions requested till now.
+}
+
+func (x *GetSuggestionsRequest) Reset() {
+	*x = GetSuggestionsRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[26]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GetSuggestionsRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetSuggestionsRequest) ProtoMessage() {}
+
+func (x *GetSuggestionsRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[26]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
 }
 
-func (m *GetSuggestionsRequest) Reset()                    { *m = GetSuggestionsRequest{} }
-func (m *GetSuggestionsRequest) String() string            { return proto.CompactTextString(m) }
-func (*GetSuggestionsRequest) ProtoMessage()               {}
-func (*GetSuggestionsRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{26} }
+// Deprecated: Use GetSuggestionsRequest.ProtoReflect.Descriptor instead.
+func (*GetSuggestionsRequest) Descriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{26}
+}
 
-func (m *GetSuggestionsRequest) GetExperiment() *Experiment {
-	if m != nil {
-		return m.Experiment
+func (x *GetSuggestionsRequest) GetExperiment() *Experiment {
+	if x != nil {
+		return x.Experiment
 	}
 	return nil
 }
 
-func (m *GetSuggestionsRequest) GetTrials() []*Trial {
-	if m != nil {
-		return m.Trials
+func (x *GetSuggestionsRequest) GetTrials() []*Trial {
+	if x != nil {
+		return x.Trials
 	}
 	return nil
 }
 
-func (m *GetSuggestionsRequest) GetCurrentRequestNumber() int32 {
-	if m != nil {
-		return m.CurrentRequestNumber
+func (x *GetSuggestionsRequest) GetCurrentRequestNumber() int32 {
+	if x != nil {
+		return x.CurrentRequestNumber
 	}
 	return 0
 }
 
-func (m *GetSuggestionsRequest) GetTotalRequestNumber() int32 {
-	if m != nil {
-		return m.TotalRequestNumber
+func (x *GetSuggestionsRequest) GetTotalRequestNumber() int32 {
+	if x != nil {
+		return x.TotalRequestNumber
 	}
 	return 0
 }
 
 type GetSuggestionsReply struct {
-	ParameterAssignments []*GetSuggestionsReply_ParameterAssignments `protobuf:"bytes,1,rep,name=parameter_assignments,json=parameterAssignments" json:"parameter_assignments,omitempty"`
-	Algorithm            *AlgorithmSpec                              `protobuf:"bytes,2,opt,name=algorithm" json:"algorithm,omitempty"`
-	EarlyStoppingRules   []*EarlyStoppingRule                        `protobuf:"bytes,3,rep,name=early_stopping_rules,json=earlyStoppingRules" json:"early_stopping_rules,omitempty"`
-}
-
-func (m *GetSuggestionsReply) Reset()                    { *m = GetSuggestionsReply{} }
-func (m *GetSuggestionsReply) String() string            { return proto.CompactTextString(m) }
-func (*GetSuggestionsReply) ProtoMessage()               {}
-func (*GetSuggestionsReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{27} }
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
 
-func (m *GetSuggestionsReply) GetParameterAssignments() []*GetSuggestionsReply_ParameterAssignments {
-	if m != nil {
-		return m.ParameterAssignments
-	}
-	return nil
+	ParameterAssignments []*GetSuggestionsReply_ParameterAssignments `protobuf:"bytes,1,rep,name=parameter_assignments,json=parameterAssignments,proto3" json:"parameter_assignments,omitempty"`
+	Algorithm            *AlgorithmSpec                              `protobuf:"bytes,2,opt,name=algorithm,proto3" json:"algorithm,omitempty"`
+	EarlyStoppingRules   []*EarlyStoppingRule                        `protobuf:"bytes,3,rep,name=early_stopping_rules,json=earlyStoppingRules,proto3" json:"early_stopping_rules,omitempty"`
 }
 
-func (m *GetSuggestionsReply) GetAlgorithm() *AlgorithmSpec {
-	if m != nil {
-		return m.Algorithm
+func (x *GetSuggestionsReply) Reset() {
+	*x = GetSuggestionsReply{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[27]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
 	}
-	return nil
 }
 
-func (m *GetSuggestionsReply) GetEarlyStoppingRules() []*EarlyStoppingRule {
-	if m != nil {
-		return m.EarlyStoppingRules
-	}
-	return nil
+func (x *GetSuggestionsReply) String() string {
+	return protoimpl.X.MessageStringOf(x)
 }
 
-type GetSuggestionsReply_ParameterAssignments struct {
-	Assignments []*ParameterAssignment `protobuf:"bytes,1,rep,name=assignments" json:"assignments,omitempty"`
-	// Optional field to override the trial name
-	TrialName string `protobuf:"bytes,2,opt,name=trial_name,json=trialName" json:"trial_name,omitempty"`
-	// Optional field to add labels to the generated Trials
-	Labels map[string]string `protobuf:"bytes,3,rep,name=labels" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"`
-}
+func (*GetSuggestionsReply) ProtoMessage() {}
 
-func (m *GetSuggestionsReply_ParameterAssignments) Reset() {
-	*m = GetSuggestionsReply_ParameterAssignments{}
+func (x *GetSuggestionsReply) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[27]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
 }
-func (m *GetSuggestionsReply_ParameterAssignments) String() string { return proto.CompactTextString(m) }
-func (*GetSuggestionsReply_ParameterAssignments) ProtoMessage()    {}
-func (*GetSuggestionsReply_ParameterAssignments) Descriptor() ([]byte, []int) {
-	return fileDescriptor0, []int{27, 0}
+
+// Deprecated: Use GetSuggestionsReply.ProtoReflect.Descriptor instead.
+func (*GetSuggestionsReply) Descriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{27}
 }
 
-func (m *GetSuggestionsReply_ParameterAssignments) GetAssignments() []*ParameterAssignment {
-	if m != nil {
-		return m.Assignments
+func (x *GetSuggestionsReply) GetParameterAssignments() []*GetSuggestionsReply_ParameterAssignments {
+	if x != nil {
+		return x.ParameterAssignments
 	}
 	return nil
 }
 
-func (m *GetSuggestionsReply_ParameterAssignments) GetTrialName() string {
-	if m != nil {
-		return m.TrialName
+func (x *GetSuggestionsReply) GetAlgorithm() *AlgorithmSpec {
+	if x != nil {
+		return x.Algorithm
 	}
-	return ""
+	return nil
 }
 
-func (m *GetSuggestionsReply_ParameterAssignments) GetLabels() map[string]string {
-	if m != nil {
-		return m.Labels
+func (x *GetSuggestionsReply) GetEarlyStoppingRules() []*EarlyStoppingRule {
+	if x != nil {
+		return x.EarlyStoppingRules
 	}
 	return nil
 }
 
 type ValidateAlgorithmSettingsRequest struct {
-	Experiment *Experiment `protobuf:"bytes,1,opt,name=experiment" json:"experiment,omitempty"`
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Experiment *Experiment `protobuf:"bytes,1,opt,name=experiment,proto3" json:"experiment,omitempty"`
+}
+
+func (x *ValidateAlgorithmSettingsRequest) Reset() {
+	*x = ValidateAlgorithmSettingsRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[28]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ValidateAlgorithmSettingsRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
 }
 
-func (m *ValidateAlgorithmSettingsRequest) Reset()         { *m = ValidateAlgorithmSettingsRequest{} }
-func (m *ValidateAlgorithmSettingsRequest) String() string { return proto.CompactTextString(m) }
-func (*ValidateAlgorithmSettingsRequest) ProtoMessage()    {}
+func (*ValidateAlgorithmSettingsRequest) ProtoMessage() {}
+
+func (x *ValidateAlgorithmSettingsRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[28]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ValidateAlgorithmSettingsRequest.ProtoReflect.Descriptor instead.
 func (*ValidateAlgorithmSettingsRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor0, []int{28}
+	return file_api_proto_rawDescGZIP(), []int{28}
 }
 
-func (m *ValidateAlgorithmSettingsRequest) GetExperiment() *Experiment {
-	if m != nil {
-		return m.Experiment
+func (x *ValidateAlgorithmSettingsRequest) GetExperiment() *Experiment {
+	if x != nil {
+		return x.Experiment
 	}
 	return nil
 }
@@ -1136,57 +1972,149 @@ func (m *ValidateAlgorithmSettingsRequest) GetExperiment() *Experiment {
 // *
 // Return INVALID_ARGUMENT Error if Algorithm Settings are not Valid
 type ValidateAlgorithmSettingsReply struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *ValidateAlgorithmSettingsReply) Reset() {
+	*x = ValidateAlgorithmSettingsReply{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[29]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ValidateAlgorithmSettingsReply) String() string {
+	return protoimpl.X.MessageStringOf(x)
 }
 
-func (m *ValidateAlgorithmSettingsReply) Reset()                    { *m = ValidateAlgorithmSettingsReply{} }
-func (m *ValidateAlgorithmSettingsReply) String() string            { return proto.CompactTextString(m) }
-func (*ValidateAlgorithmSettingsReply) ProtoMessage()               {}
-func (*ValidateAlgorithmSettingsReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{29} }
+func (*ValidateAlgorithmSettingsReply) ProtoMessage() {}
+
+func (x *ValidateAlgorithmSettingsReply) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[29]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ValidateAlgorithmSettingsReply.ProtoReflect.Descriptor instead.
+func (*ValidateAlgorithmSettingsReply) Descriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{29}
+}
 
 type GetEarlyStoppingRulesRequest struct {
-	Experiment       *Experiment `protobuf:"bytes,1,opt,name=experiment" json:"experiment,omitempty"`
-	Trials           []*Trial    `protobuf:"bytes,2,rep,name=trials" json:"trials,omitempty"`
-	DbManagerAddress string      `protobuf:"bytes,3,opt,name=db_manager_address,json=dbManagerAddress" json:"db_manager_address,omitempty"`
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Experiment       *Experiment `protobuf:"bytes,1,opt,name=experiment,proto3" json:"experiment,omitempty"`
+	Trials           []*Trial    `protobuf:"bytes,2,rep,name=trials,proto3" json:"trials,omitempty"`
+	DbManagerAddress string      `protobuf:"bytes,3,opt,name=db_manager_address,json=dbManagerAddress,proto3" json:"db_manager_address,omitempty"`
+}
+
+func (x *GetEarlyStoppingRulesRequest) Reset() {
+	*x = GetEarlyStoppingRulesRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[30]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *GetEarlyStoppingRulesRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetEarlyStoppingRulesRequest) ProtoMessage() {}
+
+func (x *GetEarlyStoppingRulesRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[30]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
 }
 
-func (m *GetEarlyStoppingRulesRequest) Reset()                    { *m = GetEarlyStoppingRulesRequest{} }
-func (m *GetEarlyStoppingRulesRequest) String() string            { return proto.CompactTextString(m) }
-func (*GetEarlyStoppingRulesRequest) ProtoMessage()               {}
-func (*GetEarlyStoppingRulesRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{30} }
+// Deprecated: Use GetEarlyStoppingRulesRequest.ProtoReflect.Descriptor instead.
+func (*GetEarlyStoppingRulesRequest) Descriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{30}
+}
 
-func (m *GetEarlyStoppingRulesRequest) GetExperiment() *Experiment {
-	if m != nil {
-		return m.Experiment
+func (x *GetEarlyStoppingRulesRequest) GetExperiment() *Experiment {
+	if x != nil {
+		return x.Experiment
 	}
 	return nil
 }
 
-func (m *GetEarlyStoppingRulesRequest) GetTrials() []*Trial {
-	if m != nil {
-		return m.Trials
+func (x *GetEarlyStoppingRulesRequest) GetTrials() []*Trial {
+	if x != nil {
+		return x.Trials
 	}
 	return nil
 }
 
-func (m *GetEarlyStoppingRulesRequest) GetDbManagerAddress() string {
-	if m != nil {
-		return m.DbManagerAddress
+func (x *GetEarlyStoppingRulesRequest) GetDbManagerAddress() string {
+	if x != nil {
+		return x.DbManagerAddress
 	}
 	return ""
 }
 
 type GetEarlyStoppingRulesReply struct {
-	EarlyStoppingRules []*EarlyStoppingRule `protobuf:"bytes,1,rep,name=early_stopping_rules,json=earlyStoppingRules" json:"early_stopping_rules,omitempty"`
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	EarlyStoppingRules []*EarlyStoppingRule `protobuf:"bytes,1,rep,name=early_stopping_rules,json=earlyStoppingRules,proto3" json:"early_stopping_rules,omitempty"`
+}
+
+func (x *GetEarlyStoppingRulesReply) Reset() {
+	*x = GetEarlyStoppingRulesReply{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[31]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
-func (m *GetEarlyStoppingRulesReply) Reset()                    { *m = GetEarlyStoppingRulesReply{} }
-func (m *GetEarlyStoppingRulesReply) String() string            { return proto.CompactTextString(m) }
-func (*GetEarlyStoppingRulesReply) ProtoMessage()               {}
-func (*GetEarlyStoppingRulesReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{31} }
+func (x *GetEarlyStoppingRulesReply) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetEarlyStoppingRulesReply) ProtoMessage() {}
+
+func (x *GetEarlyStoppingRulesReply) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[31]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
 
-func (m *GetEarlyStoppingRulesReply) GetEarlyStoppingRules() []*EarlyStoppingRule {
-	if m != nil {
-		return m.EarlyStoppingRules
+// Deprecated: Use GetEarlyStoppingRulesReply.ProtoReflect.Descriptor instead.
+func (*GetEarlyStoppingRulesReply) Descriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{31}
+}
+
+func (x *GetEarlyStoppingRulesReply) GetEarlyStoppingRules() []*EarlyStoppingRule {
+	if x != nil {
+		return x.EarlyStoppingRules
 	}
 	return nil
 }
@@ -1194,61 +2122,121 @@ func (m *GetEarlyStoppingRulesReply) GetEarlyStoppingRules() []*EarlyStoppingRul
 // *
 // EarlyStoppingRule represents single early stopping rule.
 type EarlyStoppingRule struct {
-	Name       string         `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"`
-	Value      string         `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"`
-	Comparison ComparisonType `protobuf:"varint,3,opt,name=comparison,enum=api.v1.beta1.ComparisonType" json:"comparison,omitempty"`
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Name       string         `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`                                               // Name of the rule. Usually, metric name.
+	Value      string         `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`                                             // Value of the metric.
+	Comparison ComparisonType `protobuf:"varint,3,opt,name=comparison,proto3,enum=api.v1.beta1.ComparisonType" json:"comparison,omitempty"` // Correlation between name and value, one of equal, less or greater
 	// Defines quantity of intermediate results that should be received before applying the rule.
 	// If start step is empty, rule is applied from the first recorded metric.
-	StartStep int32 `protobuf:"varint,4,opt,name=start_step,json=startStep" json:"start_step,omitempty"`
+	StartStep int32 `protobuf:"varint,4,opt,name=start_step,json=startStep,proto3" json:"start_step,omitempty"`
+}
+
+func (x *EarlyStoppingRule) Reset() {
+	*x = EarlyStoppingRule{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[32]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *EarlyStoppingRule) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*EarlyStoppingRule) ProtoMessage() {}
+
+func (x *EarlyStoppingRule) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[32]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
 }
 
-func (m *EarlyStoppingRule) Reset()                    { *m = EarlyStoppingRule{} }
-func (m *EarlyStoppingRule) String() string            { return proto.CompactTextString(m) }
-func (*EarlyStoppingRule) ProtoMessage()               {}
-func (*EarlyStoppingRule) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{32} }
+// Deprecated: Use EarlyStoppingRule.ProtoReflect.Descriptor instead.
+func (*EarlyStoppingRule) Descriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{32}
+}
 
-func (m *EarlyStoppingRule) GetName() string {
-	if m != nil {
-		return m.Name
+func (x *EarlyStoppingRule) GetName() string {
+	if x != nil {
+		return x.Name
 	}
 	return ""
 }
 
-func (m *EarlyStoppingRule) GetValue() string {
-	if m != nil {
-		return m.Value
+func (x *EarlyStoppingRule) GetValue() string {
+	if x != nil {
+		return x.Value
 	}
 	return ""
 }
 
-func (m *EarlyStoppingRule) GetComparison() ComparisonType {
-	if m != nil {
-		return m.Comparison
+func (x *EarlyStoppingRule) GetComparison() ComparisonType {
+	if x != nil {
+		return x.Comparison
 	}
 	return ComparisonType_UNKNOWN_COMPARISON
 }
 
-func (m *EarlyStoppingRule) GetStartStep() int32 {
-	if m != nil {
-		return m.StartStep
+func (x *EarlyStoppingRule) GetStartStep() int32 {
+	if x != nil {
+		return x.StartStep
 	}
 	return 0
 }
 
 type ValidateEarlyStoppingSettingsRequest struct {
-	EarlyStopping *EarlyStoppingSpec `protobuf:"bytes,1,opt,name=early_stopping,json=earlyStopping" json:"early_stopping,omitempty"`
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	EarlyStopping *EarlyStoppingSpec `protobuf:"bytes,1,opt,name=early_stopping,json=earlyStopping,proto3" json:"early_stopping,omitempty"`
 }
 
-func (m *ValidateEarlyStoppingSettingsRequest) Reset()         { *m = ValidateEarlyStoppingSettingsRequest{} }
-func (m *ValidateEarlyStoppingSettingsRequest) String() string { return proto.CompactTextString(m) }
-func (*ValidateEarlyStoppingSettingsRequest) ProtoMessage()    {}
+func (x *ValidateEarlyStoppingSettingsRequest) Reset() {
+	*x = ValidateEarlyStoppingSettingsRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[33]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
+}
+
+func (x *ValidateEarlyStoppingSettingsRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*ValidateEarlyStoppingSettingsRequest) ProtoMessage() {}
+
+func (x *ValidateEarlyStoppingSettingsRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[33]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use ValidateEarlyStoppingSettingsRequest.ProtoReflect.Descriptor instead.
 func (*ValidateEarlyStoppingSettingsRequest) Descriptor() ([]byte, []int) {
-	return fileDescriptor0, []int{33}
+	return file_api_proto_rawDescGZIP(), []int{33}
 }
 
-func (m *ValidateEarlyStoppingSettingsRequest) GetEarlyStopping() *EarlyStoppingSpec {
-	if m != nil {
-		return m.EarlyStopping
+func (x *ValidateEarlyStoppingSettingsRequest) GetEarlyStopping() *EarlyStoppingSpec {
+	if x != nil {
+		return x.EarlyStopping
 	}
 	return nil
 }
@@ -1256,596 +2244,1462 @@ func (m *ValidateEarlyStoppingSettingsRequest) GetEarlyStopping() *EarlyStopping
 // *
 // Return INVALID_ARGUMENT Error if Early Stopping Settings are not Valid
 type ValidateEarlyStoppingSettingsReply struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
 }
 
-func (m *ValidateEarlyStoppingSettingsReply) Reset()         { *m = ValidateEarlyStoppingSettingsReply{} }
-func (m *ValidateEarlyStoppingSettingsReply) String() string { return proto.CompactTextString(m) }
-func (*ValidateEarlyStoppingSettingsReply) ProtoMessage()    {}
-func (*ValidateEarlyStoppingSettingsReply) Descriptor() ([]byte, []int) {
-	return fileDescriptor0, []int{34}
+func (x *ValidateEarlyStoppingSettingsReply) Reset() {
+	*x = ValidateEarlyStoppingSettingsReply{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[34]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
+	}
 }
 
-type SetTrialStatusRequest struct {
-	TrialName string `protobuf:"bytes,1,opt,name=trial_name,json=trialName" json:"trial_name,omitempty"`
+func (x *ValidateEarlyStoppingSettingsReply) String() string {
+	return protoimpl.X.MessageStringOf(x)
 }
 
-func (m *SetTrialStatusRequest) Reset()                    { *m = SetTrialStatusRequest{} }
-func (m *SetTrialStatusRequest) String() string            { return proto.CompactTextString(m) }
-func (*SetTrialStatusRequest) ProtoMessage()               {}
-func (*SetTrialStatusRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{35} }
+func (*ValidateEarlyStoppingSettingsReply) ProtoMessage() {}
 
-func (m *SetTrialStatusRequest) GetTrialName() string {
-	if m != nil {
-		return m.TrialName
+func (x *ValidateEarlyStoppingSettingsReply) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[34]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
 	}
-	return ""
+	return mi.MessageOf(x)
 }
 
-type SetTrialStatusReply struct {
+// Deprecated: Use ValidateEarlyStoppingSettingsReply.ProtoReflect.Descriptor instead.
+func (*ValidateEarlyStoppingSettingsReply) Descriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{34}
 }
 
-func (m *SetTrialStatusReply) Reset()                    { *m = SetTrialStatusReply{} }
-func (m *SetTrialStatusReply) String() string            { return proto.CompactTextString(m) }
-func (*SetTrialStatusReply) ProtoMessage()               {}
-func (*SetTrialStatusReply) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{36} }
-
-func init() {
-	proto.RegisterType((*Experiment)(nil), "api.v1.beta1.Experiment")
-	proto.RegisterType((*ExperimentSpec)(nil), "api.v1.beta1.ExperimentSpec")
-	proto.RegisterType((*ExperimentSpec_ParameterSpecs)(nil), "api.v1.beta1.ExperimentSpec.ParameterSpecs")
-	proto.RegisterType((*ParameterSpec)(nil), "api.v1.beta1.ParameterSpec")
-	proto.RegisterType((*FeasibleSpace)(nil), "api.v1.beta1.FeasibleSpace")
-	proto.RegisterType((*ObjectiveSpec)(nil), "api.v1.beta1.ObjectiveSpec")
-	proto.RegisterType((*AlgorithmSpec)(nil), "api.v1.beta1.AlgorithmSpec")
-	proto.RegisterType((*AlgorithmSetting)(nil), "api.v1.beta1.AlgorithmSetting")
-	proto.RegisterType((*EarlyStoppingSpec)(nil), "api.v1.beta1.EarlyStoppingSpec")
-	proto.RegisterType((*EarlyStoppingSetting)(nil), "api.v1.beta1.EarlyStoppingSetting")
-	proto.RegisterType((*NasConfig)(nil), "api.v1.beta1.NasConfig")
-	proto.RegisterType((*NasConfig_Operations)(nil), "api.v1.beta1.NasConfig.Operations")
-	proto.RegisterType((*GraphConfig)(nil), "api.v1.beta1.GraphConfig")
-	proto.RegisterType((*Operation)(nil), "api.v1.beta1.Operation")
-	proto.RegisterType((*Operation_ParameterSpecs)(nil), "api.v1.beta1.Operation.ParameterSpecs")
-	proto.RegisterType((*Trial)(nil), "api.v1.beta1.Trial")
-	proto.RegisterType((*TrialSpec)(nil), "api.v1.beta1.TrialSpec")
-	proto.RegisterType((*TrialSpec_ParameterAssignments)(nil), "api.v1.beta1.TrialSpec.ParameterAssignments")
-	proto.RegisterType((*ParameterAssignment)(nil), "api.v1.beta1.ParameterAssignment")
-	proto.RegisterType((*TrialStatus)(nil), "api.v1.beta1.TrialStatus")
-	proto.RegisterType((*Observation)(nil), "api.v1.beta1.Observation")
-	proto.RegisterType((*Metric)(nil), "api.v1.beta1.Metric")
-	proto.RegisterType((*ReportObservationLogRequest)(nil), "api.v1.beta1.ReportObservationLogRequest")
-	proto.RegisterType((*ReportObservationLogReply)(nil), "api.v1.beta1.ReportObservationLogReply")
-	proto.RegisterType((*ObservationLog)(nil), "api.v1.beta1.ObservationLog")
-	proto.RegisterType((*MetricLog)(nil), "api.v1.beta1.MetricLog")
-	proto.RegisterType((*GetObservationLogRequest)(nil), "api.v1.beta1.GetObservationLogRequest")
-	proto.RegisterType((*GetObservationLogReply)(nil), "api.v1.beta1.GetObservationLogReply")
-	proto.RegisterType((*DeleteObservationLogRequest)(nil), "api.v1.beta1.DeleteObservationLogRequest")
-	proto.RegisterType((*DeleteObservationLogReply)(nil), "api.v1.beta1.DeleteObservationLogReply")
-	proto.RegisterType((*GetSuggestionsRequest)(nil), "api.v1.beta1.GetSuggestionsRequest")
-	proto.RegisterType((*GetSuggestionsReply)(nil), "api.v1.beta1.GetSuggestionsReply")
-	proto.RegisterType((*GetSuggestionsReply_ParameterAssignments)(nil), "api.v1.beta1.GetSuggestionsReply.ParameterAssignments")
-	proto.RegisterType((*ValidateAlgorithmSettingsRequest)(nil), "api.v1.beta1.ValidateAlgorithmSettingsRequest")
-	proto.RegisterType((*ValidateAlgorithmSettingsReply)(nil), "api.v1.beta1.ValidateAlgorithmSettingsReply")
-	proto.RegisterType((*GetEarlyStoppingRulesRequest)(nil), "api.v1.beta1.GetEarlyStoppingRulesRequest")
-	proto.RegisterType((*GetEarlyStoppingRulesReply)(nil), "api.v1.beta1.GetEarlyStoppingRulesReply")
-	proto.RegisterType((*EarlyStoppingRule)(nil), "api.v1.beta1.EarlyStoppingRule")
-	proto.RegisterType((*ValidateEarlyStoppingSettingsRequest)(nil), "api.v1.beta1.ValidateEarlyStoppingSettingsRequest")
-	proto.RegisterType((*ValidateEarlyStoppingSettingsReply)(nil), "api.v1.beta1.ValidateEarlyStoppingSettingsReply")
-	proto.RegisterType((*SetTrialStatusRequest)(nil), "api.v1.beta1.SetTrialStatusRequest")
-	proto.RegisterType((*SetTrialStatusReply)(nil), "api.v1.beta1.SetTrialStatusReply")
-	proto.RegisterEnum("api.v1.beta1.ParameterType", ParameterType_name, ParameterType_value)
-	proto.RegisterEnum("api.v1.beta1.ObjectiveType", ObjectiveType_name, ObjectiveType_value)
-	proto.RegisterEnum("api.v1.beta1.ComparisonType", ComparisonType_name, ComparisonType_value)
-	proto.RegisterEnum("api.v1.beta1.TrialStatus_TrialConditionType", TrialStatus_TrialConditionType_name, TrialStatus_TrialConditionType_value)
-}
-
-// Reference imports to suppress errors if they are not otherwise used.
-var _ context.Context
-var _ grpc.ClientConn
-
-// This is a compile-time assertion to ensure that this generated file
-// is compatible with the grpc package it is being compiled against.
-const _ = grpc.SupportPackageIsVersion4
-
-// Client API for DBManager service
-
-type DBManagerClient interface {
-	// *
-	// Report a log of Observations for a Trial.
-	// The log consists of timestamp and value of metric.
-	// Katib store every log of metrics.
-	// You can see accuracy curve or other metric logs on UI.
-	ReportObservationLog(ctx context.Context, in *ReportObservationLogRequest, opts ...grpc.CallOption) (*ReportObservationLogReply, error)
-	// *
-	// Get all log of Observations for a Trial.
-	GetObservationLog(ctx context.Context, in *GetObservationLogRequest, opts ...grpc.CallOption) (*GetObservationLogReply, error)
-	// *
-	// Delete all log of Observations for a Trial.
-	DeleteObservationLog(ctx context.Context, in *DeleteObservationLogRequest, opts ...grpc.CallOption) (*DeleteObservationLogReply, error)
-}
-
-type dBManagerClient struct {
-	cc *grpc.ClientConn
-}
-
-func NewDBManagerClient(cc *grpc.ClientConn) DBManagerClient {
-	return &dBManagerClient{cc}
-}
-
-func (c *dBManagerClient) ReportObservationLog(ctx context.Context, in *ReportObservationLogRequest, opts ...grpc.CallOption) (*ReportObservationLogReply, error) {
-	out := new(ReportObservationLogReply)
-	err := grpc.Invoke(ctx, "/api.v1.beta1.DBManager/ReportObservationLog", in, out, c.cc, opts...)
-	if err != nil {
-		return nil, err
-	}
-	return out, nil
-}
-
-func (c *dBManagerClient) GetObservationLog(ctx context.Context, in *GetObservationLogRequest, opts ...grpc.CallOption) (*GetObservationLogReply, error) {
-	out := new(GetObservationLogReply)
-	err := grpc.Invoke(ctx, "/api.v1.beta1.DBManager/GetObservationLog", in, out, c.cc, opts...)
-	if err != nil {
-		return nil, err
-	}
-	return out, nil
-}
-
-func (c *dBManagerClient) DeleteObservationLog(ctx context.Context, in *DeleteObservationLogRequest, opts ...grpc.CallOption) (*DeleteObservationLogReply, error) {
-	out := new(DeleteObservationLogReply)
-	err := grpc.Invoke(ctx, "/api.v1.beta1.DBManager/DeleteObservationLog", in, out, c.cc, opts...)
-	if err != nil {
-		return nil, err
-	}
-	return out, nil
-}
-
-// Server API for DBManager service
-
-type DBManagerServer interface {
-	// *
-	// Report a log of Observations for a Trial.
-	// The log consists of timestamp and value of metric.
-	// Katib store every log of metrics.
-	// You can see accuracy curve or other metric logs on UI.
-	ReportObservationLog(context.Context, *ReportObservationLogRequest) (*ReportObservationLogReply, error)
-	// *
-	// Get all log of Observations for a Trial.
-	GetObservationLog(context.Context, *GetObservationLogRequest) (*GetObservationLogReply, error)
-	// *
-	// Delete all log of Observations for a Trial.
-	DeleteObservationLog(context.Context, *DeleteObservationLogRequest) (*DeleteObservationLogReply, error)
-}
+type SetTrialStatusRequest struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
 
-func RegisterDBManagerServer(s *grpc.Server, srv DBManagerServer) {
-	s.RegisterService(&_DBManager_serviceDesc, srv)
+	TrialName string `protobuf:"bytes,1,opt,name=trial_name,json=trialName,proto3" json:"trial_name,omitempty"`
 }
 
-func _DBManager_ReportObservationLog_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
-	in := new(ReportObservationLogRequest)
-	if err := dec(in); err != nil {
-		return nil, err
-	}
-	if interceptor == nil {
-		return srv.(DBManagerServer).ReportObservationLog(ctx, in)
-	}
-	info := &grpc.UnaryServerInfo{
-		Server:     srv,
-		FullMethod: "/api.v1.beta1.DBManager/ReportObservationLog",
+func (x *SetTrialStatusRequest) Reset() {
+	*x = SetTrialStatusRequest{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[35]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
 	}
-	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
-		return srv.(DBManagerServer).ReportObservationLog(ctx, req.(*ReportObservationLogRequest))
-	}
-	return interceptor(ctx, in, info, handler)
 }
 
-func _DBManager_GetObservationLog_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
-	in := new(GetObservationLogRequest)
-	if err := dec(in); err != nil {
-		return nil, err
-	}
-	if interceptor == nil {
-		return srv.(DBManagerServer).GetObservationLog(ctx, in)
-	}
-	info := &grpc.UnaryServerInfo{
-		Server:     srv,
-		FullMethod: "/api.v1.beta1.DBManager/GetObservationLog",
-	}
-	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
-		return srv.(DBManagerServer).GetObservationLog(ctx, req.(*GetObservationLogRequest))
-	}
-	return interceptor(ctx, in, info, handler)
+func (x *SetTrialStatusRequest) String() string {
+	return protoimpl.X.MessageStringOf(x)
 }
 
-func _DBManager_DeleteObservationLog_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
-	in := new(DeleteObservationLogRequest)
-	if err := dec(in); err != nil {
-		return nil, err
-	}
-	if interceptor == nil {
-		return srv.(DBManagerServer).DeleteObservationLog(ctx, in)
+func (*SetTrialStatusRequest) ProtoMessage() {}
+
+func (x *SetTrialStatusRequest) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[35]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
 	}
-	info := &grpc.UnaryServerInfo{
-		Server:     srv,
-		FullMethod: "/api.v1.beta1.DBManager/DeleteObservationLog",
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use SetTrialStatusRequest.ProtoReflect.Descriptor instead.
+func (*SetTrialStatusRequest) Descriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{35}
+}
+
+func (x *SetTrialStatusRequest) GetTrialName() string {
+	if x != nil {
+		return x.TrialName
 	}
-	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
-		return srv.(DBManagerServer).DeleteObservationLog(ctx, req.(*DeleteObservationLogRequest))
+	return ""
+}
+
+type SetTrialStatusReply struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+}
+
+func (x *SetTrialStatusReply) Reset() {
+	*x = SetTrialStatusReply{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[36]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
 	}
-	return interceptor(ctx, in, info, handler)
 }
 
-var _DBManager_serviceDesc = grpc.ServiceDesc{
-	ServiceName: "api.v1.beta1.DBManager",
-	HandlerType: (*DBManagerServer)(nil),
-	Methods: []grpc.MethodDesc{
-		{
-			MethodName: "ReportObservationLog",
-			Handler:    _DBManager_ReportObservationLog_Handler,
-		},
-		{
-			MethodName: "GetObservationLog",
-			Handler:    _DBManager_GetObservationLog_Handler,
-		},
-		{
-			MethodName: "DeleteObservationLog",
-			Handler:    _DBManager_DeleteObservationLog_Handler,
-		},
-	},
-	Streams:  []grpc.StreamDesc{},
-	Metadata: "api.proto",
+func (x *SetTrialStatusReply) String() string {
+	return protoimpl.X.MessageStringOf(x)
 }
 
-// Client API for Suggestion service
+func (*SetTrialStatusReply) ProtoMessage() {}
 
-type SuggestionClient interface {
-	GetSuggestions(ctx context.Context, in *GetSuggestionsRequest, opts ...grpc.CallOption) (*GetSuggestionsReply, error)
-	ValidateAlgorithmSettings(ctx context.Context, in *ValidateAlgorithmSettingsRequest, opts ...grpc.CallOption) (*ValidateAlgorithmSettingsReply, error)
+func (x *SetTrialStatusReply) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[36]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
 }
 
-type suggestionClient struct {
-	cc *grpc.ClientConn
+// Deprecated: Use SetTrialStatusReply.ProtoReflect.Descriptor instead.
+func (*SetTrialStatusReply) Descriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{36}
 }
 
-func NewSuggestionClient(cc *grpc.ClientConn) SuggestionClient {
-	return &suggestionClient{cc}
+// *
+// List of ParameterSpec.
+type ExperimentSpec_ParameterSpecs struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Parameters []*ParameterSpec `protobuf:"bytes,1,rep,name=parameters,proto3" json:"parameters,omitempty"`
 }
 
-func (c *suggestionClient) GetSuggestions(ctx context.Context, in *GetSuggestionsRequest, opts ...grpc.CallOption) (*GetSuggestionsReply, error) {
-	out := new(GetSuggestionsReply)
-	err := grpc.Invoke(ctx, "/api.v1.beta1.Suggestion/GetSuggestions", in, out, c.cc, opts...)
-	if err != nil {
-		return nil, err
+func (x *ExperimentSpec_ParameterSpecs) Reset() {
+	*x = ExperimentSpec_ParameterSpecs{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[37]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
 	}
-	return out, nil
 }
 
-func (c *suggestionClient) ValidateAlgorithmSettings(ctx context.Context, in *ValidateAlgorithmSettingsRequest, opts ...grpc.CallOption) (*ValidateAlgorithmSettingsReply, error) {
-	out := new(ValidateAlgorithmSettingsReply)
-	err := grpc.Invoke(ctx, "/api.v1.beta1.Suggestion/ValidateAlgorithmSettings", in, out, c.cc, opts...)
-	if err != nil {
-		return nil, err
-	}
-	return out, nil
+func (x *ExperimentSpec_ParameterSpecs) String() string {
+	return protoimpl.X.MessageStringOf(x)
 }
 
-// Server API for Suggestion service
+func (*ExperimentSpec_ParameterSpecs) ProtoMessage() {}
 
-type SuggestionServer interface {
-	GetSuggestions(context.Context, *GetSuggestionsRequest) (*GetSuggestionsReply, error)
-	ValidateAlgorithmSettings(context.Context, *ValidateAlgorithmSettingsRequest) (*ValidateAlgorithmSettingsReply, error)
+func (x *ExperimentSpec_ParameterSpecs) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[37]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
 }
 
-func RegisterSuggestionServer(s *grpc.Server, srv SuggestionServer) {
-	s.RegisterService(&_Suggestion_serviceDesc, srv)
+// Deprecated: Use ExperimentSpec_ParameterSpecs.ProtoReflect.Descriptor instead.
+func (*ExperimentSpec_ParameterSpecs) Descriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{1, 0}
 }
 
-func _Suggestion_GetSuggestions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
-	in := new(GetSuggestionsRequest)
-	if err := dec(in); err != nil {
-		return nil, err
-	}
-	if interceptor == nil {
-		return srv.(SuggestionServer).GetSuggestions(ctx, in)
-	}
-	info := &grpc.UnaryServerInfo{
-		Server:     srv,
-		FullMethod: "/api.v1.beta1.Suggestion/GetSuggestions",
-	}
-	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
-		return srv.(SuggestionServer).GetSuggestions(ctx, req.(*GetSuggestionsRequest))
+func (x *ExperimentSpec_ParameterSpecs) GetParameters() []*ParameterSpec {
+	if x != nil {
+		return x.Parameters
 	}
-	return interceptor(ctx, in, info, handler)
+	return nil
 }
 
-func _Suggestion_ValidateAlgorithmSettings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
-	in := new(ValidateAlgorithmSettingsRequest)
-	if err := dec(in); err != nil {
-		return nil, err
-	}
-	if interceptor == nil {
-		return srv.(SuggestionServer).ValidateAlgorithmSettings(ctx, in)
-	}
-	info := &grpc.UnaryServerInfo{
-		Server:     srv,
-		FullMethod: "/api.v1.beta1.Suggestion/ValidateAlgorithmSettings",
-	}
-	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
-		return srv.(SuggestionServer).ValidateAlgorithmSettings(ctx, req.(*ValidateAlgorithmSettingsRequest))
+type NasConfig_Operations struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Operation []*Operation `protobuf:"bytes,1,rep,name=operation,proto3" json:"operation,omitempty"`
+}
+
+func (x *NasConfig_Operations) Reset() {
+	*x = NasConfig_Operations{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[38]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
 	}
-	return interceptor(ctx, in, info, handler)
 }
 
-var _Suggestion_serviceDesc = grpc.ServiceDesc{
-	ServiceName: "api.v1.beta1.Suggestion",
-	HandlerType: (*SuggestionServer)(nil),
-	Methods: []grpc.MethodDesc{
-		{
-			MethodName: "GetSuggestions",
-			Handler:    _Suggestion_GetSuggestions_Handler,
-		},
-		{
-			MethodName: "ValidateAlgorithmSettings",
-			Handler:    _Suggestion_ValidateAlgorithmSettings_Handler,
-		},
-	},
-	Streams:  []grpc.StreamDesc{},
-	Metadata: "api.proto",
+func (x *NasConfig_Operations) String() string {
+	return protoimpl.X.MessageStringOf(x)
 }
 
-// Client API for EarlyStopping service
+func (*NasConfig_Operations) ProtoMessage() {}
 
-type EarlyStoppingClient interface {
-	GetEarlyStoppingRules(ctx context.Context, in *GetEarlyStoppingRulesRequest, opts ...grpc.CallOption) (*GetEarlyStoppingRulesReply, error)
-	SetTrialStatus(ctx context.Context, in *SetTrialStatusRequest, opts ...grpc.CallOption) (*SetTrialStatusReply, error)
-	ValidateEarlyStoppingSettings(ctx context.Context, in *ValidateEarlyStoppingSettingsRequest, opts ...grpc.CallOption) (*ValidateEarlyStoppingSettingsReply, error)
+func (x *NasConfig_Operations) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[38]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
 }
 
-type earlyStoppingClient struct {
-	cc *grpc.ClientConn
+// Deprecated: Use NasConfig_Operations.ProtoReflect.Descriptor instead.
+func (*NasConfig_Operations) Descriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{9, 0}
 }
 
-func NewEarlyStoppingClient(cc *grpc.ClientConn) EarlyStoppingClient {
-	return &earlyStoppingClient{cc}
+func (x *NasConfig_Operations) GetOperation() []*Operation {
+	if x != nil {
+		return x.Operation
+	}
+	return nil
 }
 
-func (c *earlyStoppingClient) GetEarlyStoppingRules(ctx context.Context, in *GetEarlyStoppingRulesRequest, opts ...grpc.CallOption) (*GetEarlyStoppingRulesReply, error) {
-	out := new(GetEarlyStoppingRulesReply)
-	err := grpc.Invoke(ctx, "/api.v1.beta1.EarlyStopping/GetEarlyStoppingRules", in, out, c.cc, opts...)
-	if err != nil {
-		return nil, err
-	}
-	return out, nil
+// *
+// List of ParameterSpec
+type Operation_ParameterSpecs struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Parameters []*ParameterSpec `protobuf:"bytes,1,rep,name=parameters,proto3" json:"parameters,omitempty"`
 }
 
-func (c *earlyStoppingClient) SetTrialStatus(ctx context.Context, in *SetTrialStatusRequest, opts ...grpc.CallOption) (*SetTrialStatusReply, error) {
-	out := new(SetTrialStatusReply)
-	err := grpc.Invoke(ctx, "/api.v1.beta1.EarlyStopping/SetTrialStatus", in, out, c.cc, opts...)
-	if err != nil {
-		return nil, err
+func (x *Operation_ParameterSpecs) Reset() {
+	*x = Operation_ParameterSpecs{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[39]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
 	}
-	return out, nil
 }
 
-func (c *earlyStoppingClient) ValidateEarlyStoppingSettings(ctx context.Context, in *ValidateEarlyStoppingSettingsRequest, opts ...grpc.CallOption) (*ValidateEarlyStoppingSettingsReply, error) {
-	out := new(ValidateEarlyStoppingSettingsReply)
-	err := grpc.Invoke(ctx, "/api.v1.beta1.EarlyStopping/ValidateEarlyStoppingSettings", in, out, c.cc, opts...)
-	if err != nil {
-		return nil, err
-	}
-	return out, nil
+func (x *Operation_ParameterSpecs) String() string {
+	return protoimpl.X.MessageStringOf(x)
 }
 
-// Server API for EarlyStopping service
+func (*Operation_ParameterSpecs) ProtoMessage() {}
 
-type EarlyStoppingServer interface {
-	GetEarlyStoppingRules(context.Context, *GetEarlyStoppingRulesRequest) (*GetEarlyStoppingRulesReply, error)
-	SetTrialStatus(context.Context, *SetTrialStatusRequest) (*SetTrialStatusReply, error)
-	ValidateEarlyStoppingSettings(context.Context, *ValidateEarlyStoppingSettingsRequest) (*ValidateEarlyStoppingSettingsReply, error)
+func (x *Operation_ParameterSpecs) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[39]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
+	}
+	return mi.MessageOf(x)
 }
 
-func RegisterEarlyStoppingServer(s *grpc.Server, srv EarlyStoppingServer) {
-	s.RegisterService(&_EarlyStopping_serviceDesc, srv)
+// Deprecated: Use Operation_ParameterSpecs.ProtoReflect.Descriptor instead.
+func (*Operation_ParameterSpecs) Descriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{11, 0}
 }
 
-func _EarlyStopping_GetEarlyStoppingRules_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
-	in := new(GetEarlyStoppingRulesRequest)
-	if err := dec(in); err != nil {
-		return nil, err
+func (x *Operation_ParameterSpecs) GetParameters() []*ParameterSpec {
+	if x != nil {
+		return x.Parameters
 	}
-	if interceptor == nil {
-		return srv.(EarlyStoppingServer).GetEarlyStoppingRules(ctx, in)
-	}
-	info := &grpc.UnaryServerInfo{
-		Server:     srv,
-		FullMethod: "/api.v1.beta1.EarlyStopping/GetEarlyStoppingRules",
-	}
-	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
-		return srv.(EarlyStoppingServer).GetEarlyStoppingRules(ctx, req.(*GetEarlyStoppingRulesRequest))
-	}
-	return interceptor(ctx, in, info, handler)
+	return nil
+}
+
+// *
+// List of ParameterAssignment
+type TrialSpec_ParameterAssignments struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Assignments []*ParameterAssignment `protobuf:"bytes,1,rep,name=assignments,proto3" json:"assignments,omitempty"`
 }
 
-func _EarlyStopping_SetTrialStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
-	in := new(SetTrialStatusRequest)
-	if err := dec(in); err != nil {
-		return nil, err
+func (x *TrialSpec_ParameterAssignments) Reset() {
+	*x = TrialSpec_ParameterAssignments{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[40]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
 	}
-	if interceptor == nil {
-		return srv.(EarlyStoppingServer).SetTrialStatus(ctx, in)
+}
+
+func (x *TrialSpec_ParameterAssignments) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*TrialSpec_ParameterAssignments) ProtoMessage() {}
+
+func (x *TrialSpec_ParameterAssignments) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[40]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
 	}
-	info := &grpc.UnaryServerInfo{
-		Server:     srv,
-		FullMethod: "/api.v1.beta1.EarlyStopping/SetTrialStatus",
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use TrialSpec_ParameterAssignments.ProtoReflect.Descriptor instead.
+func (*TrialSpec_ParameterAssignments) Descriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{13, 0}
+}
+
+func (x *TrialSpec_ParameterAssignments) GetAssignments() []*ParameterAssignment {
+	if x != nil {
+		return x.Assignments
 	}
-	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
-		return srv.(EarlyStoppingServer).SetTrialStatus(ctx, req.(*SetTrialStatusRequest))
+	return nil
+}
+
+type GetSuggestionsReply_ParameterAssignments struct {
+	state         protoimpl.MessageState
+	sizeCache     protoimpl.SizeCache
+	unknownFields protoimpl.UnknownFields
+
+	Assignments []*ParameterAssignment `protobuf:"bytes,1,rep,name=assignments,proto3" json:"assignments,omitempty"`
+	// Optional field to override the trial name
+	TrialName string `protobuf:"bytes,2,opt,name=trial_name,json=trialName,proto3" json:"trial_name,omitempty"`
+	// Optional field to add labels to the generated Trials
+	Labels map[string]string `protobuf:"bytes,3,rep,name=labels,proto3" json:"labels,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+}
+
+func (x *GetSuggestionsReply_ParameterAssignments) Reset() {
+	*x = GetSuggestionsReply_ParameterAssignments{}
+	if protoimpl.UnsafeEnabled {
+		mi := &file_api_proto_msgTypes[42]
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		ms.StoreMessageInfo(mi)
 	}
-	return interceptor(ctx, in, info, handler)
 }
 
-func _EarlyStopping_ValidateEarlyStoppingSettings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
-	in := new(ValidateEarlyStoppingSettingsRequest)
-	if err := dec(in); err != nil {
-		return nil, err
+func (x *GetSuggestionsReply_ParameterAssignments) String() string {
+	return protoimpl.X.MessageStringOf(x)
+}
+
+func (*GetSuggestionsReply_ParameterAssignments) ProtoMessage() {}
+
+func (x *GetSuggestionsReply_ParameterAssignments) ProtoReflect() protoreflect.Message {
+	mi := &file_api_proto_msgTypes[42]
+	if protoimpl.UnsafeEnabled && x != nil {
+		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
+		if ms.LoadMessageInfo() == nil {
+			ms.StoreMessageInfo(mi)
+		}
+		return ms
 	}
-	if interceptor == nil {
-		return srv.(EarlyStoppingServer).ValidateEarlyStoppingSettings(ctx, in)
+	return mi.MessageOf(x)
+}
+
+// Deprecated: Use GetSuggestionsReply_ParameterAssignments.ProtoReflect.Descriptor instead.
+func (*GetSuggestionsReply_ParameterAssignments) Descriptor() ([]byte, []int) {
+	return file_api_proto_rawDescGZIP(), []int{27, 0}
+}
+
+func (x *GetSuggestionsReply_ParameterAssignments) GetAssignments() []*ParameterAssignment {
+	if x != nil {
+		return x.Assignments
 	}
-	info := &grpc.UnaryServerInfo{
-		Server:     srv,
-		FullMethod: "/api.v1.beta1.EarlyStopping/ValidateEarlyStoppingSettings",
+	return nil
+}
+
+func (x *GetSuggestionsReply_ParameterAssignments) GetTrialName() string {
+	if x != nil {
+		return x.TrialName
 	}
-	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
-		return srv.(EarlyStoppingServer).ValidateEarlyStoppingSettings(ctx, req.(*ValidateEarlyStoppingSettingsRequest))
+	return ""
+}
+
+func (x *GetSuggestionsReply_ParameterAssignments) GetLabels() map[string]string {
+	if x != nil {
+		return x.Labels
 	}
-	return interceptor(ctx, in, info, handler)
+	return nil
 }
 
-var _EarlyStopping_serviceDesc = grpc.ServiceDesc{
-	ServiceName: "api.v1.beta1.EarlyStopping",
-	HandlerType: (*EarlyStoppingServer)(nil),
-	Methods: []grpc.MethodDesc{
-		{
-			MethodName: "GetEarlyStoppingRules",
-			Handler:    _EarlyStopping_GetEarlyStoppingRules_Handler,
-		},
-		{
-			MethodName: "SetTrialStatus",
-			Handler:    _EarlyStopping_SetTrialStatus_Handler,
-		},
-		{
-			MethodName: "ValidateEarlyStoppingSettings",
-			Handler:    _EarlyStopping_ValidateEarlyStoppingSettings_Handler,
+var File_api_proto protoreflect.FileDescriptor
+
+var file_api_proto_rawDesc = []byte{
+	0x0a, 0x09, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0c, 0x61, 0x70, 0x69,
+	0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61, 0x31, 0x22, 0x52, 0x0a, 0x0a, 0x45, 0x78, 0x70,
+	0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x04, 0x73,
+	0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e,
+	0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d,
+	0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0x85, 0x04,
+	0x0a, 0x0e, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x63,
+	0x12, 0x54, 0x0a, 0x0f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x70,
+	0x65, 0x63, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x61, 0x70, 0x69, 0x2e,
+	0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d,
+	0x65, 0x6e, 0x74, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65,
+	0x72, 0x53, 0x70, 0x65, 0x63, 0x73, 0x52, 0x0e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65,
+	0x72, 0x53, 0x70, 0x65, 0x63, 0x73, 0x12, 0x39, 0x0a, 0x09, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74,
+	0x69, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e,
+	0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x69,
+	0x76, 0x65, 0x53, 0x70, 0x65, 0x63, 0x52, 0x09, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76,
+	0x65, 0x12, 0x39, 0x0a, 0x09, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x18, 0x03,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65,
+	0x74, 0x61, 0x31, 0x2e, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x53, 0x70, 0x65,
+	0x63, 0x52, 0x09, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x46, 0x0a, 0x0e,
+	0x65, 0x61, 0x72, 0x6c, 0x79, 0x5f, 0x73, 0x74, 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x04,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65,
+	0x74, 0x61, 0x31, 0x2e, 0x45, 0x61, 0x72, 0x6c, 0x79, 0x53, 0x74, 0x6f, 0x70, 0x70, 0x69, 0x6e,
+	0x67, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0d, 0x65, 0x61, 0x72, 0x6c, 0x79, 0x53, 0x74, 0x6f, 0x70,
+	0x70, 0x69, 0x6e, 0x67, 0x12, 0x30, 0x0a, 0x14, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c,
+	0x5f, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01,
+	0x28, 0x05, 0x52, 0x12, 0x70, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x54, 0x72, 0x69, 0x61,
+	0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0f, 0x6d, 0x61, 0x78, 0x5f, 0x74, 0x72,
+	0x69, 0x61, 0x6c, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52,
+	0x0d, 0x6d, 0x61, 0x78, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x36,
+	0x0a, 0x0a, 0x6e, 0x61, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x07, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61,
+	0x31, 0x2e, 0x4e, 0x61, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x09, 0x6e, 0x61, 0x73,
+	0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x4d, 0x0a, 0x0e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65,
+	0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x73, 0x12, 0x3b, 0x0a, 0x0a, 0x70, 0x61, 0x72, 0x61,
+	0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61,
+	0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x61,
+	0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d,
+	0x65, 0x74, 0x65, 0x72, 0x73, 0x22, 0xab, 0x01, 0x0a, 0x0d, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65,
+	0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18,
+	0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x0e, 0x70,
+	0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74,
+	0x61, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65,
+	0x52, 0x0d, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12,
+	0x42, 0x0a, 0x0e, 0x66, 0x65, 0x61, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x70, 0x61, 0x63,
+	0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31,
+	0x2e, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x46, 0x65, 0x61, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x53,
+	0x70, 0x61, 0x63, 0x65, 0x52, 0x0d, 0x66, 0x65, 0x61, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x53, 0x70,
+	0x61, 0x63, 0x65, 0x22, 0x5b, 0x0a, 0x0d, 0x46, 0x65, 0x61, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x53,
+	0x70, 0x61, 0x63, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x61, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28,
+	0x09, 0x52, 0x03, 0x6d, 0x61, 0x78, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x69, 0x6e, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x69, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74,
+	0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04,
+	0x73, 0x74, 0x65, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x73, 0x74, 0x65, 0x70,
+	0x22, 0xc0, 0x01, 0x0a, 0x0d, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x53, 0x70,
+	0x65, 0x63, 0x12, 0x2f, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e,
+	0x32, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e,
+	0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74,
+	0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x67, 0x6f, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x01, 0x52, 0x04, 0x67, 0x6f, 0x61, 0x6c, 0x12, 0x32, 0x0a, 0x15, 0x6f, 0x62, 0x6a, 0x65, 0x63,
+	0x74, 0x69, 0x76, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65,
+	0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76,
+	0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x17, 0x61,
+	0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63,
+	0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x15, 0x61, 0x64,
+	0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4e, 0x61,
+	0x6d, 0x65, 0x73, 0x22, 0x85, 0x01, 0x0a, 0x0d, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68,
+	0x6d, 0x53, 0x70, 0x65, 0x63, 0x12, 0x25, 0x0a, 0x0e, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74,
+	0x68, 0x6d, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61,
+	0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x4d, 0x0a, 0x12,
+	0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e,
+	0x67, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76,
+	0x31, 0x2e, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68,
+	0x6d, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x11, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69,
+	0x74, 0x68, 0x6d, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0x3c, 0x0a, 0x10, 0x41,
+	0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12,
+	0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e,
+	0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x8d, 0x01, 0x0a, 0x11, 0x45, 0x61,
+	0x72, 0x6c, 0x79, 0x53, 0x74, 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x70, 0x65, 0x63, 0x12,
+	0x25, 0x0a, 0x0e, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x5f, 0x6e, 0x61, 0x6d,
+	0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74,
+	0x68, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x51, 0x0a, 0x12, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69,
+	0x74, 0x68, 0x6d, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03,
+	0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61,
+	0x31, 0x2e, 0x45, 0x61, 0x72, 0x6c, 0x79, 0x53, 0x74, 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x53,
+	0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x11, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68,
+	0x6d, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x22, 0x40, 0x0a, 0x14, 0x45, 0x61, 0x72,
+	0x6c, 0x79, 0x53, 0x74, 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e,
+	0x67, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xd2, 0x01, 0x0a, 0x09,
+	0x4e, 0x61, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3c, 0x0a, 0x0c, 0x67, 0x72, 0x61,
+	0x70, 0x68, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47,
+	0x72, 0x61, 0x70, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x67, 0x72, 0x61, 0x70,
+	0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x42, 0x0a, 0x0a, 0x6f, 0x70, 0x65, 0x72, 0x61,
+	0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x61, 0x70,
+	0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4e, 0x61, 0x73, 0x43, 0x6f,
+	0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52,
+	0x0a, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x43, 0x0a, 0x0a, 0x4f,
+	0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x35, 0x0a, 0x09, 0x6f, 0x70, 0x65,
+	0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61,
+	0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x72,
+	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x22, 0x70, 0x0a, 0x0b, 0x47, 0x72, 0x61, 0x70, 0x68, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12,
+	0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x05, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x1f,
+	0x0a, 0x0b, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x73, 0x18, 0x02, 0x20,
+	0x03, 0x28, 0x05, 0x52, 0x0a, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x73, 0x12,
+	0x21, 0x0a, 0x0c, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x73, 0x18,
+	0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x53, 0x69, 0x7a,
+	0x65, 0x73, 0x22, 0xd2, 0x01, 0x0a, 0x09, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x12, 0x25, 0x0a, 0x0e, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x79,
+	0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74,
+	0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x4f, 0x0a, 0x0f, 0x70, 0x61, 0x72, 0x61, 0x6d,
+	0x65, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
+	0x32, 0x26, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e,
+	0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65,
+	0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x73, 0x52, 0x0e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65,
+	0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x73, 0x1a, 0x4d, 0x0a, 0x0e, 0x50, 0x61, 0x72, 0x61,
+	0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x73, 0x12, 0x3b, 0x0a, 0x0a, 0x70, 0x61,
+	0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b,
+	0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61,
+	0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0a, 0x70, 0x61, 0x72,
+	0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x22, 0x7b, 0x0a, 0x05, 0x54, 0x72, 0x69, 0x61, 0x6c,
+	0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
+	0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2b, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61,
+	0x31, 0x2e, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65,
+	0x63, 0x12, 0x31, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61, 0x31,
+	0x2e, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74,
+	0x61, 0x74, 0x75, 0x73, 0x22, 0xfe, 0x02, 0x0a, 0x09, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x70,
+	0x65, 0x63, 0x12, 0x39, 0x0a, 0x09, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62,
+	0x65, 0x74, 0x61, 0x31, 0x2e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x53, 0x70,
+	0x65, 0x63, 0x52, 0x09, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x61, 0x0a,
+	0x15, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x61, 0x73, 0x73, 0x69, 0x67,
+	0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x61,
+	0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x69, 0x61,
+	0x6c, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x41,
+	0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x14, 0x70, 0x61, 0x72, 0x61,
+	0x6d, 0x65, 0x74, 0x65, 0x72, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73,
+	0x12, 0x3b, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b,
+	0x32, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e,
+	0x54, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x70, 0x65, 0x63, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73,
+	0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x5b, 0x0a,
+	0x14, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e,
+	0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x43, 0x0a, 0x0b, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d,
+	0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x61, 0x70, 0x69,
+	0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65,
+	0x74, 0x65, 0x72, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0b, 0x61,
+	0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61,
+	0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76,
+	0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
+	0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3f, 0x0a, 0x13, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74,
+	0x65, 0x72, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04,
+	0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65,
+	0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
+	0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xed, 0x02, 0x0a, 0x0b, 0x54, 0x72, 0x69, 0x61, 0x6c,
+	0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f,
+	0x74, 0x69, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72,
+	0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74,
+	0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e,
+	0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x4a,
+	0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28,
+	0x0e, 0x32, 0x2c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61, 0x31,
+	0x2e, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x54, 0x72, 0x69,
+	0x61, 0x6c, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52,
+	0x09, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x3b, 0x0a, 0x0b, 0x6f, 0x62,
+	0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32,
+	0x19, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4f,
+	0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x6f, 0x62, 0x73, 0x65,
+	0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x8c, 0x01, 0x0a, 0x12, 0x54, 0x72, 0x69, 0x61,
+	0x6c, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b,
+	0x0a, 0x07, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x52,
+	0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x55, 0x43, 0x43,
+	0x45, 0x45, 0x44, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x4b, 0x49, 0x4c, 0x4c, 0x45,
+	0x44, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x04, 0x12,
+	0x16, 0x0a, 0x12, 0x4d, 0x45, 0x54, 0x52, 0x49, 0x43, 0x53, 0x55, 0x4e, 0x41, 0x56, 0x41, 0x49,
+	0x4c, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x05, 0x12, 0x10, 0x0a, 0x0c, 0x45, 0x41, 0x52, 0x4c, 0x59,
+	0x53, 0x54, 0x4f, 0x50, 0x50, 0x45, 0x44, 0x10, 0x06, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b,
+	0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x07, 0x22, 0x3d, 0x0a, 0x0b, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76,
+	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x07, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x73,
+	0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e,
+	0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x07, 0x6d, 0x65,
+	0x74, 0x72, 0x69, 0x63, 0x73, 0x22, 0x32, 0x0a, 0x06, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x12,
+	0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e,
+	0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,
+	0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x83, 0x01, 0x0a, 0x1b, 0x52, 0x65,
+	0x70, 0x6f, 0x72, 0x74, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c,
+	0x6f, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x72, 0x69,
+	0x61, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74,
+	0x72, 0x69, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x45, 0x0a, 0x0f, 0x6f, 0x62, 0x73, 0x65,
+	0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28,
+	0x0b, 0x32, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61, 0x31,
+	0x2e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x67, 0x52,
+	0x0e, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x67, 0x22,
+	0x1b, 0x0a, 0x19, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61,
+	0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x4a, 0x0a, 0x0e,
+	0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x67, 0x12, 0x38,
+	0x0a, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x01, 0x20,
+	0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74,
+	0x61, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4c, 0x6f, 0x67, 0x52, 0x0a, 0x6d, 0x65,
+	0x74, 0x72, 0x69, 0x63, 0x4c, 0x6f, 0x67, 0x73, 0x22, 0x58, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x72,
+	0x69, 0x63, 0x4c, 0x6f, 0x67, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x74,
+	0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x53,
+	0x74, 0x61, 0x6d, 0x70, 0x12, 0x2c, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x02,
+	0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65,
+	0x74, 0x61, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x72,
+	0x69, 0x63, 0x22, 0x94, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76,
+	0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+	0x1d, 0x0a, 0x0a, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f,
+	0x0a, 0x0b, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x0a, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x12,
+	0x1d, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x19,
+	0x0a, 0x08, 0x65, 0x6e, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x07, 0x65, 0x6e, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x5f, 0x0a, 0x16, 0x47, 0x65, 0x74,
+	0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x67, 0x52, 0x65,
+	0x70, 0x6c, 0x79, 0x12, 0x45, 0x0a, 0x0f, 0x6f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x61,
+	0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4f, 0x62, 0x73, 0x65,
+	0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x67, 0x52, 0x0e, 0x6f, 0x62, 0x73, 0x65,
+	0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x67, 0x22, 0x3c, 0x0a, 0x1b, 0x44, 0x65,
+	0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c,
+	0x6f, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x72, 0x69,
+	0x61, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74,
+	0x72, 0x69, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x1b, 0x0a, 0x19, 0x44, 0x65, 0x6c, 0x65,
+	0x74, 0x65, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x67,
+	0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0xe6, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x53, 0x75, 0x67,
+	0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
+	0x38, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20,
+	0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74,
+	0x61, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x65,
+	0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x2b, 0x0a, 0x06, 0x74, 0x72, 0x69,
+	0x61, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e,
+	0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x52, 0x06,
+	0x74, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e,
+	0x74, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72,
+	0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x30, 0x0a, 0x14,
+	0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x6e, 0x75,
+	0x6d, 0x62, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x74, 0x6f, 0x74, 0x61,
+	0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0xa4,
+	0x04, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e,
+	0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x6b, 0x0a, 0x15, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65,
+	0x74, 0x65, 0x72, 0x5f, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18,
+	0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62,
+	0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69,
+	0x6f, 0x6e, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74,
+	0x65, 0x72, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x14, 0x70,
+	0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65,
+	0x6e, 0x74, 0x73, 0x12, 0x39, 0x0a, 0x09, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d,
+	0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e,
+	0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x53,
+	0x70, 0x65, 0x63, 0x52, 0x09, 0x61, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x12, 0x51,
+	0x0a, 0x14, 0x65, 0x61, 0x72, 0x6c, 0x79, 0x5f, 0x73, 0x74, 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67,
+	0x5f, 0x72, 0x75, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61,
+	0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x45, 0x61, 0x72, 0x6c,
+	0x79, 0x53, 0x74, 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x12, 0x65,
+	0x61, 0x72, 0x6c, 0x79, 0x53, 0x74, 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65,
+	0x73, 0x1a, 0x91, 0x02, 0x0a, 0x14, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x41,
+	0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x43, 0x0a, 0x0b, 0x61, 0x73,
+	0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32,
+	0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50,
+	0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65,
+	0x6e, 0x74, 0x52, 0x0b, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12,
+	0x1d, 0x0a, 0x0a, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20,
+	0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x5a,
+	0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42,
+	0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65,
+	0x74, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x70, 0x6c,
+	0x79, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x41, 0x73, 0x73, 0x69, 0x67,
+	0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74,
+	0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61,
+	0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
+	0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76,
+	0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
+	0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x5c, 0x0a, 0x20, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74,
+	0x65, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e,
+	0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x65, 0x78, 0x70,
+	0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e,
+	0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x45, 0x78, 0x70,
+	0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d,
+	0x65, 0x6e, 0x74, 0x22, 0x20, 0x0a, 0x1e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x41,
+	0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73,
+	0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0xb3, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x45, 0x61, 0x72,
+	0x6c, 0x79, 0x53, 0x74, 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52,
+	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x38, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69,
+	0x6d, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x61, 0x70, 0x69,
+	0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x65, 0x72, 0x69,
+	0x6d, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x65, 0x78, 0x70, 0x65, 0x72, 0x69, 0x6d, 0x65, 0x6e, 0x74,
+	0x12, 0x2b, 0x0a, 0x06, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b,
+	0x32, 0x13, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e,
+	0x54, 0x72, 0x69, 0x61, 0x6c, 0x52, 0x06, 0x74, 0x72, 0x69, 0x61, 0x6c, 0x73, 0x12, 0x2c, 0x0a,
+	0x12, 0x64, 0x62, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72,
+	0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x64, 0x62, 0x4d, 0x61, 0x6e,
+	0x61, 0x67, 0x65, 0x72, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x6f, 0x0a, 0x1a, 0x47,
+	0x65, 0x74, 0x45, 0x61, 0x72, 0x6c, 0x79, 0x53, 0x74, 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52,
+	0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x51, 0x0a, 0x14, 0x65, 0x61, 0x72,
+	0x6c, 0x79, 0x5f, 0x73, 0x74, 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x75, 0x6c, 0x65,
+	0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31,
+	0x2e, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x45, 0x61, 0x72, 0x6c, 0x79, 0x53, 0x74, 0x6f, 0x70,
+	0x70, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x52, 0x12, 0x65, 0x61, 0x72, 0x6c, 0x79, 0x53,
+	0x74, 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x22, 0x9a, 0x01, 0x0a,
+	0x11, 0x45, 0x61, 0x72, 0x6c, 0x79, 0x53, 0x74, 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x75,
+	0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+	0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
+	0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3c, 0x0a, 0x0a,
+	0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e,
+	0x32, 0x1c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e,
+	0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a,
+	0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x74,
+	0x61, 0x72, 0x74, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09,
+	0x73, 0x74, 0x61, 0x72, 0x74, 0x53, 0x74, 0x65, 0x70, 0x22, 0x6e, 0x0a, 0x24, 0x56, 0x61, 0x6c,
+	0x69, 0x64, 0x61, 0x74, 0x65, 0x45, 0x61, 0x72, 0x6c, 0x79, 0x53, 0x74, 0x6f, 0x70, 0x70, 0x69,
+	0x6e, 0x67, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
+	0x74, 0x12, 0x46, 0x0a, 0x0e, 0x65, 0x61, 0x72, 0x6c, 0x79, 0x5f, 0x73, 0x74, 0x6f, 0x70, 0x70,
+	0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x61, 0x70, 0x69, 0x2e,
+	0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x45, 0x61, 0x72, 0x6c, 0x79, 0x53, 0x74,
+	0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0d, 0x65, 0x61, 0x72, 0x6c,
+	0x79, 0x53, 0x74, 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x22, 0x24, 0x0a, 0x22, 0x56, 0x61, 0x6c,
+	0x69, 0x64, 0x61, 0x74, 0x65, 0x45, 0x61, 0x72, 0x6c, 0x79, 0x53, 0x74, 0x6f, 0x70, 0x70, 0x69,
+	0x6e, 0x67, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22,
+	0x36, 0x0a, 0x15, 0x53, 0x65, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75,
+	0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x72, 0x69, 0x61,
+	0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x72,
+	0x69, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x54, 0x72,
+	0x69, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x2a, 0x55,
+	0x0a, 0x0d, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12,
+	0x10, 0x0a, 0x0c, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10,
+	0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x4f, 0x55, 0x42, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x07, 0x0a,
+	0x03, 0x49, 0x4e, 0x54, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x49, 0x53, 0x43, 0x52, 0x45,
+	0x54, 0x45, 0x10, 0x03, 0x12, 0x0f, 0x0a, 0x0b, 0x43, 0x41, 0x54, 0x45, 0x47, 0x4f, 0x52, 0x49,
+	0x43, 0x41, 0x4c, 0x10, 0x04, 0x2a, 0x38, 0x0a, 0x0d, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x69,
+	0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57,
+	0x4e, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x4d, 0x49, 0x4e, 0x49, 0x4d, 0x49, 0x5a, 0x45, 0x10,
+	0x01, 0x12, 0x0c, 0x0a, 0x08, 0x4d, 0x41, 0x58, 0x49, 0x4d, 0x49, 0x5a, 0x45, 0x10, 0x02, 0x2a,
+	0x4a, 0x0a, 0x0e, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x54, 0x79, 0x70,
+	0x65, 0x12, 0x16, 0x0a, 0x12, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x43, 0x4f, 0x4d,
+	0x50, 0x41, 0x52, 0x49, 0x53, 0x4f, 0x4e, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x51, 0x55,
+	0x41, 0x4c, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x45, 0x53, 0x53, 0x10, 0x02, 0x12, 0x0b,
+	0x0a, 0x07, 0x47, 0x52, 0x45, 0x41, 0x54, 0x45, 0x52, 0x10, 0x03, 0x32, 0xc6, 0x02, 0x0a, 0x09,
+	0x44, 0x42, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x12, 0x6a, 0x0a, 0x14, 0x52, 0x65, 0x70,
+	0x6f, 0x72, 0x74, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f,
+	0x67, 0x12, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61, 0x31,
+	0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69,
+	0x6f, 0x6e, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x61,
+	0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x6f,
+	0x72, 0x74, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x67,
+	0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x61, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x73, 0x65,
+	0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x67, 0x12, 0x26, 0x2e, 0x61, 0x70, 0x69,
+	0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x73,
+	0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65,
+	0x73, 0x74, 0x1a, 0x24, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61,
+	0x31, 0x2e, 0x47, 0x65, 0x74, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e,
+	0x4c, 0x6f, 0x67, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x6a, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65,
+	0x74, 0x65, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x67,
+	0x12, 0x29, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e,
+	0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f,
+	0x6e, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x61, 0x70,
+	0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74,
+	0x65, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x6f, 0x67, 0x52,
+	0x65, 0x70, 0x6c, 0x79, 0x32, 0xe1, 0x01, 0x0a, 0x0a, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74,
+	0x69, 0x6f, 0x6e, 0x12, 0x58, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73,
+	0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x23, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62,
+	0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x67, 0x67, 0x65, 0x73, 0x74, 0x69,
+	0x6f, 0x6e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x61, 0x70, 0x69,
+	0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x75, 0x67,
+	0x67, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x79, 0x0a,
+	0x19, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74,
+	0x68, 0x6d, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x2e, 0x2e, 0x61, 0x70, 0x69,
+	0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61,
+	0x74, 0x65, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x53, 0x65, 0x74, 0x74, 0x69,
+	0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x61, 0x70, 0x69,
+	0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61,
+	0x74, 0x65, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x53, 0x65, 0x74, 0x74, 0x69,
+	0x6e, 0x67, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x32, 0xe0, 0x02, 0x0a, 0x0d, 0x45, 0x61, 0x72,
+	0x6c, 0x79, 0x53, 0x74, 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x6d, 0x0a, 0x15, 0x47, 0x65,
+	0x74, 0x45, 0x61, 0x72, 0x6c, 0x79, 0x53, 0x74, 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52, 0x75,
+	0x6c, 0x65, 0x73, 0x12, 0x2a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74,
+	0x61, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x45, 0x61, 0x72, 0x6c, 0x79, 0x53, 0x74, 0x6f, 0x70, 0x70,
+	0x69, 0x6e, 0x67, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
+	0x28, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x47,
+	0x65, 0x74, 0x45, 0x61, 0x72, 0x6c, 0x79, 0x53, 0x74, 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x52,
+	0x75, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x58, 0x0a, 0x0e, 0x53, 0x65, 0x74,
+	0x54, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x23, 0x2e, 0x61, 0x70,
+	0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x54, 0x72,
+	0x69, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
+	0x1a, 0x21, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e,
+	0x53, 0x65, 0x74, 0x54, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65,
+	0x70, 0x6c, 0x79, 0x12, 0x85, 0x01, 0x0a, 0x1d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65,
+	0x45, 0x61, 0x72, 0x6c, 0x79, 0x53, 0x74, 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x74,
+	0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x32, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x76, 0x31, 0x2e, 0x62,
+	0x65, 0x74, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x45, 0x61, 0x72,
+	0x6c, 0x79, 0x53, 0x74, 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e,
+	0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x61, 0x70, 0x69, 0x2e,
+	0x76, 0x31, 0x2e, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74,
+	0x65, 0x45, 0x61, 0x72, 0x6c, 0x79, 0x53, 0x74, 0x6f, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x53, 0x65,
+	0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x42, 0x41, 0x5a, 0x3f, 0x67,
+	0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6b, 0x75, 0x62, 0x65, 0x66, 0x6c,
+	0x6f, 0x77, 0x2f, 0x6b, 0x61, 0x74, 0x69, 0x62, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x61, 0x70, 0x69,
+	0x73, 0x2f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61,
+	0x31, 0x3b, 0x61, 0x70, 0x69, 0x5f, 0x76, 0x31, 0x5f, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06,
+	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
+}
+
+var (
+	file_api_proto_rawDescOnce sync.Once
+	file_api_proto_rawDescData = file_api_proto_rawDesc
+)
+
+func file_api_proto_rawDescGZIP() []byte {
+	file_api_proto_rawDescOnce.Do(func() {
+		file_api_proto_rawDescData = protoimpl.X.CompressGZIP(file_api_proto_rawDescData)
+	})
+	return file_api_proto_rawDescData
+}
+
+var file_api_proto_enumTypes = make([]protoimpl.EnumInfo, 4)
+var file_api_proto_msgTypes = make([]protoimpl.MessageInfo, 44)
+var file_api_proto_goTypes = []interface{}{
+	(ParameterType)(0),                               // 0: api.v1.beta1.ParameterType
+	(ObjectiveType)(0),                               // 1: api.v1.beta1.ObjectiveType
+	(ComparisonType)(0),                              // 2: api.v1.beta1.ComparisonType
+	(TrialStatus_TrialConditionType)(0),              // 3: api.v1.beta1.TrialStatus.TrialConditionType
+	(*Experiment)(nil),                               // 4: api.v1.beta1.Experiment
+	(*ExperimentSpec)(nil),                           // 5: api.v1.beta1.ExperimentSpec
+	(*ParameterSpec)(nil),                            // 6: api.v1.beta1.ParameterSpec
+	(*FeasibleSpace)(nil),                            // 7: api.v1.beta1.FeasibleSpace
+	(*ObjectiveSpec)(nil),                            // 8: api.v1.beta1.ObjectiveSpec
+	(*AlgorithmSpec)(nil),                            // 9: api.v1.beta1.AlgorithmSpec
+	(*AlgorithmSetting)(nil),                         // 10: api.v1.beta1.AlgorithmSetting
+	(*EarlyStoppingSpec)(nil),                        // 11: api.v1.beta1.EarlyStoppingSpec
+	(*EarlyStoppingSetting)(nil),                     // 12: api.v1.beta1.EarlyStoppingSetting
+	(*NasConfig)(nil),                                // 13: api.v1.beta1.NasConfig
+	(*GraphConfig)(nil),                              // 14: api.v1.beta1.GraphConfig
+	(*Operation)(nil),                                // 15: api.v1.beta1.Operation
+	(*Trial)(nil),                                    // 16: api.v1.beta1.Trial
+	(*TrialSpec)(nil),                                // 17: api.v1.beta1.TrialSpec
+	(*ParameterAssignment)(nil),                      // 18: api.v1.beta1.ParameterAssignment
+	(*TrialStatus)(nil),                              // 19: api.v1.beta1.TrialStatus
+	(*Observation)(nil),                              // 20: api.v1.beta1.Observation
+	(*Metric)(nil),                                   // 21: api.v1.beta1.Metric
+	(*ReportObservationLogRequest)(nil),              // 22: api.v1.beta1.ReportObservationLogRequest
+	(*ReportObservationLogReply)(nil),                // 23: api.v1.beta1.ReportObservationLogReply
+	(*ObservationLog)(nil),                           // 24: api.v1.beta1.ObservationLog
+	(*MetricLog)(nil),                                // 25: api.v1.beta1.MetricLog
+	(*GetObservationLogRequest)(nil),                 // 26: api.v1.beta1.GetObservationLogRequest
+	(*GetObservationLogReply)(nil),                   // 27: api.v1.beta1.GetObservationLogReply
+	(*DeleteObservationLogRequest)(nil),              // 28: api.v1.beta1.DeleteObservationLogRequest
+	(*DeleteObservationLogReply)(nil),                // 29: api.v1.beta1.DeleteObservationLogReply
+	(*GetSuggestionsRequest)(nil),                    // 30: api.v1.beta1.GetSuggestionsRequest
+	(*GetSuggestionsReply)(nil),                      // 31: api.v1.beta1.GetSuggestionsReply
+	(*ValidateAlgorithmSettingsRequest)(nil),         // 32: api.v1.beta1.ValidateAlgorithmSettingsRequest
+	(*ValidateAlgorithmSettingsReply)(nil),           // 33: api.v1.beta1.ValidateAlgorithmSettingsReply
+	(*GetEarlyStoppingRulesRequest)(nil),             // 34: api.v1.beta1.GetEarlyStoppingRulesRequest
+	(*GetEarlyStoppingRulesReply)(nil),               // 35: api.v1.beta1.GetEarlyStoppingRulesReply
+	(*EarlyStoppingRule)(nil),                        // 36: api.v1.beta1.EarlyStoppingRule
+	(*ValidateEarlyStoppingSettingsRequest)(nil),     // 37: api.v1.beta1.ValidateEarlyStoppingSettingsRequest
+	(*ValidateEarlyStoppingSettingsReply)(nil),       // 38: api.v1.beta1.ValidateEarlyStoppingSettingsReply
+	(*SetTrialStatusRequest)(nil),                    // 39: api.v1.beta1.SetTrialStatusRequest
+	(*SetTrialStatusReply)(nil),                      // 40: api.v1.beta1.SetTrialStatusReply
+	(*ExperimentSpec_ParameterSpecs)(nil),            // 41: api.v1.beta1.ExperimentSpec.ParameterSpecs
+	(*NasConfig_Operations)(nil),                     // 42: api.v1.beta1.NasConfig.Operations
+	(*Operation_ParameterSpecs)(nil),                 // 43: api.v1.beta1.Operation.ParameterSpecs
+	(*TrialSpec_ParameterAssignments)(nil),           // 44: api.v1.beta1.TrialSpec.ParameterAssignments
+	nil,                                              // 45: api.v1.beta1.TrialSpec.LabelsEntry
+	(*GetSuggestionsReply_ParameterAssignments)(nil), // 46: api.v1.beta1.GetSuggestionsReply.ParameterAssignments
+	nil, // 47: api.v1.beta1.GetSuggestionsReply.ParameterAssignments.LabelsEntry
+}
+var file_api_proto_depIdxs = []int32{
+	5,  // 0: api.v1.beta1.Experiment.spec:type_name -> api.v1.beta1.ExperimentSpec
+	41, // 1: api.v1.beta1.ExperimentSpec.parameter_specs:type_name -> api.v1.beta1.ExperimentSpec.ParameterSpecs
+	8,  // 2: api.v1.beta1.ExperimentSpec.objective:type_name -> api.v1.beta1.ObjectiveSpec
+	9,  // 3: api.v1.beta1.ExperimentSpec.algorithm:type_name -> api.v1.beta1.AlgorithmSpec
+	11, // 4: api.v1.beta1.ExperimentSpec.early_stopping:type_name -> api.v1.beta1.EarlyStoppingSpec
+	13, // 5: api.v1.beta1.ExperimentSpec.nas_config:type_name -> api.v1.beta1.NasConfig
+	0,  // 6: api.v1.beta1.ParameterSpec.parameter_type:type_name -> api.v1.beta1.ParameterType
+	7,  // 7: api.v1.beta1.ParameterSpec.feasible_space:type_name -> api.v1.beta1.FeasibleSpace
+	1,  // 8: api.v1.beta1.ObjectiveSpec.type:type_name -> api.v1.beta1.ObjectiveType
+	10, // 9: api.v1.beta1.AlgorithmSpec.algorithm_settings:type_name -> api.v1.beta1.AlgorithmSetting
+	12, // 10: api.v1.beta1.EarlyStoppingSpec.algorithm_settings:type_name -> api.v1.beta1.EarlyStoppingSetting
+	14, // 11: api.v1.beta1.NasConfig.graph_config:type_name -> api.v1.beta1.GraphConfig
+	42, // 12: api.v1.beta1.NasConfig.operations:type_name -> api.v1.beta1.NasConfig.Operations
+	43, // 13: api.v1.beta1.Operation.parameter_specs:type_name -> api.v1.beta1.Operation.ParameterSpecs
+	17, // 14: api.v1.beta1.Trial.spec:type_name -> api.v1.beta1.TrialSpec
+	19, // 15: api.v1.beta1.Trial.status:type_name -> api.v1.beta1.TrialStatus
+	8,  // 16: api.v1.beta1.TrialSpec.objective:type_name -> api.v1.beta1.ObjectiveSpec
+	44, // 17: api.v1.beta1.TrialSpec.parameter_assignments:type_name -> api.v1.beta1.TrialSpec.ParameterAssignments
+	45, // 18: api.v1.beta1.TrialSpec.labels:type_name -> api.v1.beta1.TrialSpec.LabelsEntry
+	3,  // 19: api.v1.beta1.TrialStatus.condition:type_name -> api.v1.beta1.TrialStatus.TrialConditionType
+	20, // 20: api.v1.beta1.TrialStatus.observation:type_name -> api.v1.beta1.Observation
+	21, // 21: api.v1.beta1.Observation.metrics:type_name -> api.v1.beta1.Metric
+	24, // 22: api.v1.beta1.ReportObservationLogRequest.observation_log:type_name -> api.v1.beta1.ObservationLog
+	25, // 23: api.v1.beta1.ObservationLog.metric_logs:type_name -> api.v1.beta1.MetricLog
+	21, // 24: api.v1.beta1.MetricLog.metric:type_name -> api.v1.beta1.Metric
+	24, // 25: api.v1.beta1.GetObservationLogReply.observation_log:type_name -> api.v1.beta1.ObservationLog
+	4,  // 26: api.v1.beta1.GetSuggestionsRequest.experiment:type_name -> api.v1.beta1.Experiment
+	16, // 27: api.v1.beta1.GetSuggestionsRequest.trials:type_name -> api.v1.beta1.Trial
+	46, // 28: api.v1.beta1.GetSuggestionsReply.parameter_assignments:type_name -> api.v1.beta1.GetSuggestionsReply.ParameterAssignments
+	9,  // 29: api.v1.beta1.GetSuggestionsReply.algorithm:type_name -> api.v1.beta1.AlgorithmSpec
+	36, // 30: api.v1.beta1.GetSuggestionsReply.early_stopping_rules:type_name -> api.v1.beta1.EarlyStoppingRule
+	4,  // 31: api.v1.beta1.ValidateAlgorithmSettingsRequest.experiment:type_name -> api.v1.beta1.Experiment
+	4,  // 32: api.v1.beta1.GetEarlyStoppingRulesRequest.experiment:type_name -> api.v1.beta1.Experiment
+	16, // 33: api.v1.beta1.GetEarlyStoppingRulesRequest.trials:type_name -> api.v1.beta1.Trial
+	36, // 34: api.v1.beta1.GetEarlyStoppingRulesReply.early_stopping_rules:type_name -> api.v1.beta1.EarlyStoppingRule
+	2,  // 35: api.v1.beta1.EarlyStoppingRule.comparison:type_name -> api.v1.beta1.ComparisonType
+	11, // 36: api.v1.beta1.ValidateEarlyStoppingSettingsRequest.early_stopping:type_name -> api.v1.beta1.EarlyStoppingSpec
+	6,  // 37: api.v1.beta1.ExperimentSpec.ParameterSpecs.parameters:type_name -> api.v1.beta1.ParameterSpec
+	15, // 38: api.v1.beta1.NasConfig.Operations.operation:type_name -> api.v1.beta1.Operation
+	6,  // 39: api.v1.beta1.Operation.ParameterSpecs.parameters:type_name -> api.v1.beta1.ParameterSpec
+	18, // 40: api.v1.beta1.TrialSpec.ParameterAssignments.assignments:type_name -> api.v1.beta1.ParameterAssignment
+	18, // 41: api.v1.beta1.GetSuggestionsReply.ParameterAssignments.assignments:type_name -> api.v1.beta1.ParameterAssignment
+	47, // 42: api.v1.beta1.GetSuggestionsReply.ParameterAssignments.labels:type_name -> api.v1.beta1.GetSuggestionsReply.ParameterAssignments.LabelsEntry
+	22, // 43: api.v1.beta1.DBManager.ReportObservationLog:input_type -> api.v1.beta1.ReportObservationLogRequest
+	26, // 44: api.v1.beta1.DBManager.GetObservationLog:input_type -> api.v1.beta1.GetObservationLogRequest
+	28, // 45: api.v1.beta1.DBManager.DeleteObservationLog:input_type -> api.v1.beta1.DeleteObservationLogRequest
+	30, // 46: api.v1.beta1.Suggestion.GetSuggestions:input_type -> api.v1.beta1.GetSuggestionsRequest
+	32, // 47: api.v1.beta1.Suggestion.ValidateAlgorithmSettings:input_type -> api.v1.beta1.ValidateAlgorithmSettingsRequest
+	34, // 48: api.v1.beta1.EarlyStopping.GetEarlyStoppingRules:input_type -> api.v1.beta1.GetEarlyStoppingRulesRequest
+	39, // 49: api.v1.beta1.EarlyStopping.SetTrialStatus:input_type -> api.v1.beta1.SetTrialStatusRequest
+	37, // 50: api.v1.beta1.EarlyStopping.ValidateEarlyStoppingSettings:input_type -> api.v1.beta1.ValidateEarlyStoppingSettingsRequest
+	23, // 51: api.v1.beta1.DBManager.ReportObservationLog:output_type -> api.v1.beta1.ReportObservationLogReply
+	27, // 52: api.v1.beta1.DBManager.GetObservationLog:output_type -> api.v1.beta1.GetObservationLogReply
+	29, // 53: api.v1.beta1.DBManager.DeleteObservationLog:output_type -> api.v1.beta1.DeleteObservationLogReply
+	31, // 54: api.v1.beta1.Suggestion.GetSuggestions:output_type -> api.v1.beta1.GetSuggestionsReply
+	33, // 55: api.v1.beta1.Suggestion.ValidateAlgorithmSettings:output_type -> api.v1.beta1.ValidateAlgorithmSettingsReply
+	35, // 56: api.v1.beta1.EarlyStopping.GetEarlyStoppingRules:output_type -> api.v1.beta1.GetEarlyStoppingRulesReply
+	40, // 57: api.v1.beta1.EarlyStopping.SetTrialStatus:output_type -> api.v1.beta1.SetTrialStatusReply
+	38, // 58: api.v1.beta1.EarlyStopping.ValidateEarlyStoppingSettings:output_type -> api.v1.beta1.ValidateEarlyStoppingSettingsReply
+	51, // [51:59] is the sub-list for method output_type
+	43, // [43:51] is the sub-list for method input_type
+	43, // [43:43] is the sub-list for extension type_name
+	43, // [43:43] is the sub-list for extension extendee
+	0,  // [0:43] is the sub-list for field type_name
+}
+
+func init() { file_api_proto_init() }
+func file_api_proto_init() {
+	if File_api_proto != nil {
+		return
+	}
+	if !protoimpl.UnsafeEnabled {
+		file_api_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Experiment); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_api_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ExperimentSpec); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_api_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ParameterSpec); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_api_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*FeasibleSpace); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_api_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ObjectiveSpec); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_api_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*AlgorithmSpec); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_api_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*AlgorithmSetting); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_api_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*EarlyStoppingSpec); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_api_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*EarlyStoppingSetting); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_api_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*NasConfig); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_api_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*GraphConfig); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_api_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Operation); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_api_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Trial); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_api_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*TrialSpec); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_api_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ParameterAssignment); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_api_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*TrialStatus); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_api_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Observation); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_api_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Metric); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_api_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ReportObservationLogRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_api_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ReportObservationLogReply); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_api_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ObservationLog); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_api_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*MetricLog); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_api_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*GetObservationLogRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_api_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*GetObservationLogReply); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_api_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*DeleteObservationLogRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_api_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*DeleteObservationLogReply); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_api_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*GetSuggestionsRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_api_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*GetSuggestionsReply); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_api_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ValidateAlgorithmSettingsRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_api_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ValidateAlgorithmSettingsReply); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_api_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*GetEarlyStoppingRulesRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_api_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*GetEarlyStoppingRulesReply); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_api_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*EarlyStoppingRule); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_api_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ValidateEarlyStoppingSettingsRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_api_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ValidateEarlyStoppingSettingsReply); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_api_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SetTrialStatusRequest); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_api_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*SetTrialStatusReply); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_api_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*ExperimentSpec_ParameterSpecs); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_api_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*NasConfig_Operations); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_api_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*Operation_ParameterSpecs); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_api_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*TrialSpec_ParameterAssignments); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+		file_api_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} {
+			switch v := v.(*GetSuggestionsReply_ParameterAssignments); i {
+			case 0:
+				return &v.state
+			case 1:
+				return &v.sizeCache
+			case 2:
+				return &v.unknownFields
+			default:
+				return nil
+			}
+		}
+	}
+	type x struct{}
+	out := protoimpl.TypeBuilder{
+		File: protoimpl.DescBuilder{
+			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
+			RawDescriptor: file_api_proto_rawDesc,
+			NumEnums:      4,
+			NumMessages:   44,
+			NumExtensions: 0,
+			NumServices:   3,
 		},
-	},
-	Streams:  []grpc.StreamDesc{},
-	Metadata: "api.proto",
-}
-
-func init() { proto.RegisterFile("api.proto", fileDescriptor0) }
-
-var fileDescriptor0 = []byte{
-	// 1953 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0x4f, 0x73, 0x1b, 0x49,
-	0x15, 0xcf, 0x48, 0xb2, 0x1d, 0x3d, 0x59, 0xf2, 0xa4, 0x2d, 0x67, 0x65, 0x65, 0x77, 0xe3, 0xcc,
-	0x86, 0x6c, 0x48, 0x52, 0x26, 0x31, 0x90, 0xca, 0x92, 0x50, 0x20, 0xcb, 0x13, 0x97, 0xb2, 0xb2,
-	0xe4, 0xb4, 0xe4, 0x25, 0xbb, 0x4b, 0xd5, 0x54, 0x4b, 0xea, 0x28, 0x93, 0xcc, 0x3f, 0x66, 0x5a,
-	0xa9, 0x08, 0x8e, 0x54, 0x6e, 0x70, 0xa0, 0x8a, 0x13, 0x67, 0x6e, 0x1c, 0xf9, 0x02, 0x9c, 0xf8,
-	0x00, 0x7c, 0x02, 0xb8, 0x70, 0xe3, 0x2b, 0x50, 0x54, 0xf7, 0x8c, 0xe6, 0x9f, 0x46, 0xf2, 0x9f,
-	0x00, 0xb7, 0xe9, 0xf7, 0x7e, 0xef, 0xf5, 0x7b, 0xfd, 0xfa, 0xfd, 0x69, 0x09, 0x8a, 0xc4, 0xd1,
-	0x77, 0x1d, 0xd7, 0x66, 0x36, 0x5a, 0xe7, 0x9f, 0x6f, 0x1f, 0xec, 0x0e, 0x28, 0x23, 0x0f, 0x14,
-	0x0c, 0xa0, 0xbe, 0x73, 0xa8, 0xab, 0x9b, 0xd4, 0x62, 0x08, 0x41, 0xc1, 0x22, 0x26, 0xad, 0x49,
-	0x3b, 0xd2, 0xed, 0x22, 0x16, 0xdf, 0xe8, 0x3e, 0x14, 0x3c, 0x87, 0x0e, 0x6b, 0xb9, 0x1d, 0xe9,
-	0x76, 0x69, 0xef, 0xe3, 0xdd, 0xb8, 0xf8, 0x6e, 0x24, 0xdb, 0x73, 0xe8, 0x10, 0x0b, 0xa4, 0xf2,
-	0xbe, 0x00, 0x95, 0x24, 0x03, 0xf5, 0x61, 0xc3, 0x21, 0x2e, 0x31, 0x29, 0xa3, 0xae, 0xc6, 0x41,
-	0x9e, 0xd8, 0xa3, 0xb4, 0x77, 0x77, 0x99, 0xbe, 0xdd, 0xe3, 0x99, 0x0c, 0x5f, 0x79, 0xb8, 0xe2,
-	0x24, 0xd6, 0xe8, 0x0b, 0x28, 0xda, 0x83, 0xd7, 0x74, 0xc8, 0xf4, 0xb7, 0x34, 0xb0, 0xef, 0x5a,
-	0x52, 0x5f, 0x77, 0xc6, 0x16, 0xe6, 0x45, 0x68, 0x2e, 0x4a, 0x8c, 0xb1, 0xed, 0xea, 0xec, 0x95,
-	0x59, 0xcb, 0x67, 0x89, 0x36, 0x66, 0x6c, 0x5f, 0x34, 0x44, 0xa3, 0xa7, 0x50, 0xa1, 0xc4, 0x35,
-	0xa6, 0x9a, 0xc7, 0x6c, 0xc7, 0xd1, 0xad, 0x71, 0xad, 0x20, 0xe4, 0xaf, 0xa7, 0x5c, 0xe1, 0x98,
-	0x5e, 0x00, 0x11, 0x3a, 0xca, 0x34, 0x4e, 0x42, 0xf7, 0xa1, 0xca, 0xfd, 0x31, 0x0c, 0x6a, 0x68,
-	0xcc, 0xd5, 0x89, 0xa1, 0x0d, 0xed, 0x89, 0xc5, 0x6a, 0x2b, 0x3b, 0xd2, 0xed, 0x15, 0x8c, 0x66,
-	0xbc, 0x3e, 0x67, 0x35, 0x39, 0x07, 0xdd, 0x82, 0x0d, 0x93, 0xbc, 0x4b, 0x80, 0x57, 0x05, 0xb8,
-	0x6c, 0x92, 0x77, 0x31, 0xdc, 0x43, 0x00, 0x8b, 0x78, 0xda, 0xd0, 0xb6, 0x5e, 0xea, 0xe3, 0xda,
-	0x9a, 0xb0, 0xee, 0xa3, 0xa4, 0x75, 0x1d, 0xe2, 0x35, 0x05, 0x1b, 0x17, 0xad, 0xd9, 0x67, 0xfd,
-	0x08, 0x2a, 0xc9, 0x13, 0x47, 0x8f, 0x01, 0xc2, 0x33, 0xe7, 0x21, 0xcb, 0xcf, 0x9f, 0x53, 0x42,
-	0x02, 0xc7, 0xe0, 0xca, 0x9f, 0x24, 0x28, 0x27, 0xb8, 0x99, 0xf7, 0x6b, 0x1f, 0xa2, 0xb0, 0x6a,
-	0x6c, 0xea, 0xf8, 0x91, 0xac, 0x2c, 0xdc, 0xa6, 0x3f, 0x75, 0x28, 0x2e, 0x3b, 0xf1, 0x25, 0xd7,
-	0xf1, 0x92, 0x12, 0x4f, 0x1f, 0x18, 0x54, 0xf3, 0x1c, 0x32, 0xa4, 0xd9, 0x21, 0x7d, 0x1a, 0x60,
-	0x7a, 0x1c, 0x82, 0xcb, 0x2f, 0xe3, 0x4b, 0xe5, 0x5b, 0x28, 0x27, 0xf8, 0x48, 0x86, 0xbc, 0x49,
-	0xde, 0x05, 0xb6, 0xf2, 0x4f, 0x41, 0xd1, 0x2d, 0x61, 0x1f, 0xa7, 0xe8, 0x16, 0x77, 0xc8, 0xd0,
-	0x3d, 0x56, 0xcb, 0xef, 0xe4, 0xb9, 0x43, 0xfc, 0x9b, 0xd3, 0x3c, 0x46, 0x1d, 0x71, 0x2b, 0x8a,
-	0x58, 0x7c, 0x2b, 0x7f, 0x91, 0xa0, 0x9c, 0xb8, 0x8b, 0xe8, 0x7b, 0x50, 0x10, 0xce, 0x4a, 0x59,
-	0xce, 0x86, 0x50, 0xe1, 0xac, 0x00, 0x72, 0xb5, 0x63, 0x9b, 0x18, 0x62, 0x77, 0x09, 0x8b, 0x6f,
-	0xb4, 0x07, 0x5b, 0xe1, 0x95, 0xd6, 0x4c, 0xca, 0x5c, 0x7d, 0xa8, 0x89, 0x03, 0xce, 0x8b, 0xbd,
-	0x37, 0x43, 0xe6, 0x91, 0xe0, 0x75, 0xf8, 0x79, 0x3f, 0x84, 0x8f, 0xc8, 0x68, 0xa4, 0x33, 0xdd,
-	0xb6, 0x88, 0x11, 0x17, 0xf2, 0x6a, 0x05, 0xe1, 0xc5, 0x56, 0xc4, 0x8e, 0xc4, 0x3c, 0xe5, 0xbd,
-	0x04, 0xe5, 0x44, 0x4e, 0xa0, 0xef, 0x40, 0x25, 0xcc, 0x0a, 0x2d, 0x16, 0xd7, 0x72, 0x48, 0x15,
-	0x1b, 0x1e, 0x01, 0x8a, 0x60, 0x1e, 0x65, 0x4c, 0xb7, 0xc6, 0x5e, 0x2d, 0x27, 0xee, 0xd2, 0xa7,
-	0x8b, 0x72, 0xce, 0x87, 0xe1, 0x2b, 0x24, 0x45, 0xf1, 0x94, 0x27, 0x20, 0xa7, 0x61, 0x99, 0xf7,
-	0xaa, 0x0a, 0x2b, 0x6f, 0x89, 0x31, 0xa1, 0x41, 0xb8, 0xfc, 0x85, 0xf2, 0x5b, 0x09, 0xae, 0xcc,
-	0x65, 0xe6, 0x59, 0x3d, 0x79, 0xbe, 0xc4, 0x13, 0x65, 0x59, 0xf6, 0x2f, 0xf6, 0xe6, 0xa7, 0x50,
-	0xcd, 0x82, 0x9e, 0xc3, 0xa3, 0xbf, 0x49, 0x50, 0x0c, 0xb3, 0x19, 0x3d, 0x81, 0xf5, 0xb1, 0x4b,
-	0x9c, 0x57, 0xb3, 0xe4, 0xf7, 0xab, 0xec, 0x76, 0xd2, 0xb8, 0x43, 0x8e, 0x08, 0xd2, 0xbf, 0x34,
-	0x8e, 0x16, 0x68, 0x1f, 0xc0, 0x76, 0xa8, 0x4b, 0x78, 0xf4, 0xbd, 0xa0, 0xa2, 0x2a, 0x0b, 0x0a,
-	0xc7, 0x6e, 0x37, 0x44, 0xe2, 0x98, 0x54, 0xbd, 0x09, 0x10, 0x71, 0xd0, 0x0f, 0xa1, 0x18, 0xf2,
-	0x82, 0xfa, 0x91, 0xaa, 0x44, 0x21, 0x18, 0x47, 0x48, 0xc5, 0x81, 0x52, 0xcc, 0x48, 0xf4, 0x09,
-	0x80, 0x35, 0x31, 0x35, 0x83, 0x4c, 0xfd, 0x32, 0xc4, 0x6b, 0x5e, 0xd1, 0x9a, 0x98, 0x6d, 0x41,
-	0x40, 0xd7, 0xa1, 0xa4, 0x5b, 0xce, 0x84, 0x69, 0x9e, 0xfe, 0x4b, 0xea, 0x07, 0x64, 0x05, 0x83,
-	0x20, 0xf5, 0x38, 0x05, 0xdd, 0x80, 0x75, 0x7b, 0xc2, 0x22, 0x44, 0x5e, 0x20, 0x4a, 0x3e, 0x4d,
-	0x40, 0xc4, 0x31, 0x86, 0xa6, 0xf0, 0x0b, 0x11, 0x1a, 0xa3, 0x85, 0x79, 0x5a, 0xc4, 0xe5, 0x90,
-	0x2a, 0xea, 0x4e, 0x77, 0xbe, 0xad, 0xf9, 0x87, 0x76, 0x6b, 0x81, 0x8f, 0xa7, 0x74, 0xb4, 0xff,
-	0x76, 0x05, 0xfe, 0x15, 0xac, 0x88, 0xb6, 0x90, 0x79, 0x9d, 0xee, 0x26, 0x1a, 0x7b, 0x2a, 0x2a,
-	0x42, 0x2c, 0xea, 0xe9, 0xe8, 0x01, 0xac, 0x7a, 0x8c, 0xb0, 0x89, 0x17, 0x54, 0xd6, 0xed, 0x2c,
-	0xb8, 0x00, 0xe0, 0x00, 0xa8, 0xfc, 0x3b, 0x07, 0xc5, 0x50, 0xcd, 0x87, 0xf4, 0x6a, 0x02, 0x5b,
-	0xd1, 0x29, 0x13, 0xcf, 0xd3, 0xc7, 0x16, 0x9f, 0x10, 0x66, 0xa6, 0xdc, 0x5b, 0x60, 0x79, 0x74,
-	0x2e, 0x8d, 0x48, 0x06, 0x57, 0x9d, 0x0c, 0x2a, 0x7a, 0x0c, 0xab, 0x06, 0x19, 0x50, 0xc3, 0xaf,
-	0x81, 0xa5, 0xbd, 0xcf, 0x16, 0xe9, 0x6c, 0x0b, 0x94, 0x6a, 0x31, 0x77, 0x8a, 0x03, 0x91, 0xfa,
-	0xb7, 0x50, 0xcd, 0xda, 0x0a, 0x35, 0xa1, 0x14, 0xb7, 0xd6, 0x8f, 0xdd, 0x8d, 0x05, 0xb1, 0x8b,
-	0x04, 0x71, 0x5c, 0xaa, 0xfe, 0x05, 0x94, 0x62, 0x7b, 0xf2, 0x16, 0xf4, 0x86, 0x4e, 0x67, 0x4d,
-	0xe9, 0x0d, 0x9d, 0x66, 0x57, 0x85, 0x1f, 0xe5, 0x1e, 0x49, 0xca, 0x4f, 0x60, 0x33, 0x43, 0xfd,
-	0x39, 0x4a, 0xcb, 0xbf, 0x72, 0x50, 0x8a, 0x45, 0x96, 0xa7, 0xa1, 0xc7, 0x88, 0xcb, 0x34, 0xa6,
-	0x87, 0xf2, 0x45, 0x41, 0xe9, 0xeb, 0x26, 0x45, 0x9f, 0xc3, 0xc6, 0xd0, 0x36, 0x1d, 0x83, 0xfa,
-	0x59, 0xc3, 0x31, 0xbe, 0xba, 0x4a, 0x44, 0x16, 0xc0, 0x67, 0x50, 0x1c, 0xda, 0x96, 0xdf, 0x64,
-	0x44, 0x10, 0x2b, 0xd9, 0x41, 0x14, 0xbb, 0xee, 0x06, 0x83, 0x4d, 0x80, 0x17, 0x1d, 0x31, 0x12,
-	0x47, 0x8f, 0xa1, 0x64, 0x0f, 0x3c, 0xea, 0xbe, 0xf5, 0x4b, 0x4c, 0x21, 0xeb, 0x76, 0x76, 0x23,
-	0x00, 0x8e, 0xa3, 0x95, 0xdf, 0x48, 0x80, 0xe6, 0xd5, 0xa3, 0x12, 0xac, 0x35, 0xb1, 0xda, 0xe8,
-	0xab, 0x07, 0xf2, 0x25, 0xbe, 0xc0, 0x27, 0x9d, 0x4e, 0xab, 0x73, 0x28, 0x4b, 0xa8, 0x0c, 0xc5,
-	0xde, 0x49, 0xb3, 0xa9, 0xaa, 0x07, 0xea, 0x81, 0x9c, 0x43, 0x00, 0xab, 0x5f, 0xb6, 0xda, 0x6d,
-	0xf5, 0x40, 0xce, 0xf3, 0xef, 0xa7, 0x8d, 0x16, 0xff, 0x2e, 0xa0, 0xab, 0x80, 0x8e, 0xd4, 0x3e,
-	0x6e, 0x35, 0x7b, 0x27, 0x9d, 0xc6, 0x57, 0x8d, 0x56, 0xbb, 0xb1, 0xdf, 0x56, 0xe5, 0x15, 0x24,
-	0xc3, 0xba, 0xda, 0xc0, 0xed, 0xaf, 0x7b, 0xfd, 0xee, 0xf1, 0xb1, 0x7a, 0x20, 0xaf, 0x72, 0xed,
-	0x27, 0x9d, 0x2f, 0x3b, 0xdd, 0x9f, 0x75, 0xe4, 0x35, 0xe5, 0xc7, 0x50, 0x8a, 0x99, 0x8a, 0x76,
-	0x61, 0xcd, 0x6f, 0xcf, 0xb3, 0xbb, 0x53, 0x4d, 0xba, 0xe5, 0x77, 0x67, 0x3c, 0x03, 0x29, 0x7b,
-	0xb0, 0xea, 0x93, 0xce, 0x11, 0xe2, 0x5f, 0x4b, 0x70, 0x0d, 0x53, 0xc7, 0x76, 0x59, 0x6c, 0xe7,
-	0xb6, 0x3d, 0xc6, 0xf4, 0x17, 0x13, 0xea, 0x31, 0x1e, 0x72, 0x7f, 0xdc, 0x8c, 0xe9, 0x2b, 0x0a,
-	0x8a, 0xe8, 0x88, 0x2a, 0x6c, 0xc4, 0xce, 0x53, 0x33, 0xec, 0x71, 0xf6, 0x3b, 0x21, 0xa5, 0xbc,
-	0x62, 0x27, 0xd6, 0xca, 0x35, 0xd8, 0xce, 0x36, 0xc2, 0x31, 0xa6, 0xca, 0x33, 0xa8, 0x24, 0xc9,
-	0xe8, 0x11, 0x94, 0x82, 0xb9, 0xc5, 0xb0, 0xc7, 0x5e, 0x76, 0x5b, 0xf1, 0x4f, 0x82, 0x2b, 0x01,
-	0x73, 0xf6, 0xe9, 0x29, 0x2f, 0xa0, 0x18, 0x32, 0x84, 0x6f, 0xba, 0x49, 0x35, 0x8f, 0x11, 0xd3,
-	0x09, 0x7d, 0xd3, 0x4d, 0xda, 0xe3, 0x04, 0x74, 0x0f, 0x56, 0x7d, 0xc9, 0xc0, 0xa5, 0xec, 0xd3,
-	0x0f, 0x30, 0xca, 0xef, 0x25, 0xa8, 0x1d, 0xd2, 0x8b, 0x9d, 0xe2, 0xf5, 0xd0, 0x1f, 0xc1, 0xf7,
-	0x03, 0x14, 0x98, 0x2d, 0x00, 0xc9, 0xc4, 0xcb, 0xa7, 0x13, 0x6f, 0x1b, 0x2e, 0x53, 0x6b, 0xe4,
-	0x33, 0xfd, 0xa9, 0x73, 0x8d, 0x5a, 0x23, 0xce, 0x52, 0x34, 0xb8, 0x9a, 0x61, 0x95, 0x63, 0x4c,
-	0xb3, 0x42, 0x27, 0x5d, 0x20, 0x74, 0x4f, 0xe0, 0xda, 0x01, 0x35, 0x28, 0xa3, 0x17, 0xf1, 0x9c,
-	0x07, 0x3e, 0x5b, 0x9a, 0x07, 0xfe, 0x9f, 0x12, 0x6c, 0x1d, 0x52, 0xd6, 0x9b, 0x8c, 0xc7, 0xd4,
-	0xf3, 0x07, 0x8d, 0x40, 0xeb, 0x23, 0x00, 0x1a, 0xbe, 0x14, 0x03, 0xb3, 0x6b, 0x8b, 0x5e, 0x92,
-	0x38, 0x86, 0x45, 0x77, 0x61, 0x55, 0xec, 0x3e, 0x1b, 0xdb, 0x36, 0x33, 0xea, 0x0e, 0x0e, 0x20,
-	0xe8, 0x07, 0x70, 0x75, 0x38, 0x71, 0x5d, 0x6a, 0x31, 0xcd, 0xf5, 0x77, 0xd6, 0xac, 0x89, 0x39,
-	0xa0, 0xae, 0x38, 0xe5, 0x15, 0x5c, 0x0d, 0xb8, 0x81, 0x59, 0x1d, 0xc1, 0xe3, 0xef, 0x3a, 0x66,
-	0x33, 0x62, 0xa4, 0x65, 0x82, 0x77, 0x9d, 0xe0, 0x25, 0x24, 0x94, 0x3f, 0x16, 0x60, 0x33, 0xed,
-	0x28, 0x0f, 0xd1, 0x9b, 0x45, 0x8d, 0xcf, 0xbf, 0xf1, 0x0f, 0x53, 0x53, 0xdd, 0xbc, 0x86, 0xf3,
-	0xb4, 0xc0, 0xc4, 0x8b, 0x38, 0x77, 0xae, 0x17, 0xf1, 0x73, 0xa8, 0x26, 0x5f, 0xc4, 0x9a, 0x3b,
-	0x31, 0x82, 0x31, 0x6b, 0xf9, 0xbb, 0x18, 0x4f, 0x0c, 0x8a, 0x11, 0x4d, 0x93, 0xbc, 0xfa, 0xef,
-	0x72, 0xff, 0xc3, 0xa6, 0x9a, 0xba, 0x95, 0xb9, 0x74, 0x3e, 0x7e, 0x13, 0x4e, 0x03, 0xbe, 0x07,
-	0xfb, 0x17, 0x3b, 0xe8, 0xcc, 0x61, 0xe1, 0x03, 0xfa, 0xf9, 0xcf, 0x61, 0xe7, 0x2b, 0x62, 0xe8,
-	0x23, 0xc2, 0x68, 0xfa, 0x05, 0xf4, 0xe1, 0x99, 0xa1, 0xec, 0xc0, 0xa7, 0x4b, 0xb4, 0xf3, 0x7c,
-	0xfc, 0xb3, 0x04, 0x1f, 0x1f, 0x52, 0x36, 0x17, 0xc0, 0xff, 0x77, 0x5a, 0xde, 0x03, 0x34, 0x1a,
-	0x68, 0x26, 0xb1, 0xc8, 0x98, 0xe7, 0xc5, 0x68, 0xe4, 0x52, 0xcf, 0x0b, 0xaa, 0xa2, 0x3c, 0x1a,
-	0x1c, 0xf9, 0x8c, 0x86, 0x4f, 0x57, 0x6c, 0xa8, 0x2f, 0x30, 0x9a, 0xa7, 0xd8, 0xa2, 0xab, 0x2b,
-	0x5d, 0xf8, 0xea, 0x2a, 0x7f, 0x48, 0x3f, 0x31, 0x39, 0xf9, 0xec, 0x2d, 0x19, 0x3d, 0x01, 0xe0,
-	0xf3, 0x12, 0x71, 0x75, 0x2f, 0x1c, 0x8f, 0x52, 0x35, 0xb9, 0x19, 0xf2, 0xc5, 0x38, 0x14, 0xc3,
-	0x47, 0xad, 0x22, 0xfc, 0x0d, 0x62, 0x25, 0x68, 0x15, 0x3d, 0x46, 0x1d, 0xc5, 0x82, 0x9b, 0xb3,
-	0x28, 0x67, 0xbd, 0x3b, 0xc3, 0x50, 0xce, 0xff, 0xc8, 0x25, 0x5d, 0xe4, 0x47, 0x2e, 0xe5, 0x26,
-	0x28, 0xa7, 0xec, 0xc7, 0x6f, 0xd6, 0x43, 0xd8, 0xea, 0x51, 0x16, 0x7f, 0x44, 0x9c, 0xad, 0x7d,
-	0x6c, 0xc1, 0x66, 0x5a, 0xce, 0x31, 0xa6, 0x77, 0x4e, 0x62, 0xbf, 0x3b, 0x89, 0x81, 0x4e, 0x86,
-	0xf5, 0x60, 0xca, 0xd2, 0xfa, 0x5f, 0x1f, 0xab, 0xf2, 0x25, 0x3e, 0xad, 0x1d, 0x74, 0x4f, 0xf8,
-	0x54, 0x26, 0xa1, 0x35, 0xc8, 0xb7, 0x3a, 0x7d, 0x39, 0x87, 0xd6, 0xe1, 0xf2, 0x41, 0xab, 0xd7,
-	0xc4, 0x6a, 0x5f, 0x95, 0xf3, 0x68, 0x03, 0x4a, 0xcd, 0x46, 0x5f, 0x3d, 0xec, 0xe2, 0x56, 0xb3,
-	0xd1, 0x96, 0x0b, 0x77, 0x1e, 0xc5, 0x7e, 0xc3, 0x99, 0xcd, 0x89, 0xb3, 0xe1, 0xed, 0x12, 0x17,
-	0x3e, 0x6a, 0x75, 0x5a, 0x47, 0xad, 0x6f, 0xb8, 0x4e, 0xbe, 0x6a, 0xbc, 0xf0, 0x57, 0xb9, 0x3b,
-	0xcf, 0xa0, 0x92, 0x0c, 0x19, 0x9f, 0x10, 0x67, 0x16, 0x35, 0xbb, 0x47, 0xc7, 0x0d, 0xdc, 0xea,
-	0x75, 0xb9, 0x96, 0x22, 0xac, 0xa8, 0xcf, 0x4f, 0x1a, 0x6d, 0x59, 0x42, 0x97, 0xa1, 0xd0, 0x56,
-	0x7b, 0x3d, 0x39, 0xc7, 0xf7, 0x39, 0x14, 0xf3, 0x28, 0x96, 0xf3, 0x7b, 0x7f, 0xcd, 0x41, 0xf1,
-	0x60, 0x3f, 0xb8, 0xe4, 0xe8, 0x35, 0x54, 0xb3, 0x26, 0x27, 0xf4, 0xdd, 0x64, 0x9c, 0x96, 0x8c,
-	0x78, 0xf5, 0xcf, 0xcf, 0x02, 0xe5, 0xb9, 0x42, 0xe0, 0xca, 0xdc, 0x2c, 0x81, 0x6e, 0xcd, 0xd5,
-	0xc6, 0xec, 0x5d, 0x6e, 0x9e, 0x8a, 0xe3, 0x5b, 0xbc, 0x86, 0x6a, 0xd6, 0x3c, 0x90, 0x76, 0x67,
-	0xc9, 0xc4, 0x91, 0x76, 0x67, 0xe1, 0x78, 0xb1, 0xf7, 0x0f, 0x09, 0x20, 0xaa, 0xe3, 0xe8, 0x05,
-	0x54, 0x92, 0x85, 0x1d, 0x7d, 0xb6, 0xbc, 0xec, 0xfb, 0xdb, 0xdd, 0x38, 0xb5, 0x37, 0xa0, 0x29,
-	0x6c, 0x2f, 0xac, 0xac, 0x68, 0x37, 0x29, 0x7f, 0x5a, 0x81, 0xaf, 0xdf, 0x3b, 0x33, 0x9e, 0xfb,
-	0xf8, 0xf7, 0x1c, 0x94, 0x13, 0x79, 0x87, 0x4c, 0x31, 0x53, 0xcd, 0x97, 0x43, 0x74, 0x67, 0xce,
-	0x91, 0x85, 0x85, 0xbe, 0x7e, 0xfb, 0x4c, 0x58, 0xee, 0xfb, 0x0b, 0xa8, 0x24, 0x33, 0x34, 0x7d,
-	0xaa, 0x99, 0x79, 0x9f, 0x3e, 0xd5, 0x8c, 0x24, 0x47, 0xef, 0x25, 0xf8, 0x64, 0x69, 0x69, 0x41,
-	0x7b, 0xd9, 0x47, 0xb5, 0xac, 0xee, 0xd5, 0xef, 0x9f, 0x4b, 0xc6, 0x31, 0xa6, 0x83, 0x55, 0xf1,
-	0xb7, 0xca, 0xf7, 0xff, 0x13, 0x00, 0x00, 0xff, 0xff, 0x9d, 0xa7, 0xce, 0x0c, 0x63, 0x19, 0x00,
-	0x00,
+		GoTypes:           file_api_proto_goTypes,
+		DependencyIndexes: file_api_proto_depIdxs,
+		EnumInfos:         file_api_proto_enumTypes,
+		MessageInfos:      file_api_proto_msgTypes,
+	}.Build()
+	File_api_proto = out.File
+	file_api_proto_rawDesc = nil
+	file_api_proto_goTypes = nil
+	file_api_proto_depIdxs = nil
 }
diff --git a/pkg/apis/manager/v1beta1/api.proto b/pkg/apis/manager/v1beta1/api.proto
index 8914a23c3c2..b0624c7333b 100644
--- a/pkg/apis/manager/v1beta1/api.proto
+++ b/pkg/apis/manager/v1beta1/api.proto
@@ -5,6 +5,8 @@ syntax = "proto3";
 
 package api.v1.beta1;
 
+option go_package = "github.com/kubeflow/katib/pkg/apis/manager/v1beta1;api_v1_beta1";
+
 /**
  * DBManager service defines APIs to manage Katib database.
  */
diff --git a/pkg/apis/manager/v1beta1/api_grpc.pb.go b/pkg/apis/manager/v1beta1/api_grpc.pb.go
new file mode 100644
index 00000000000..46c84db548c
--- /dev/null
+++ b/pkg/apis/manager/v1beta1/api_grpc.pb.go
@@ -0,0 +1,489 @@
+//*
+// Katib GRPC API v1beta1
+
+// Code generated by protoc-gen-go-grpc. DO NOT EDIT.
+// versions:
+// - protoc-gen-go-grpc v1.3.0
+// - protoc             (unknown)
+// source: api.proto
+
+package api_v1_beta1
+
+import (
+	context "context"
+	grpc "google.golang.org/grpc"
+	codes "google.golang.org/grpc/codes"
+	status "google.golang.org/grpc/status"
+)
+
+// This is a compile-time assertion to ensure that this generated file
+// is compatible with the grpc package it is being compiled against.
+// Requires gRPC-Go v1.32.0 or later.
+const _ = grpc.SupportPackageIsVersion7
+
+const (
+	DBManager_ReportObservationLog_FullMethodName = "/api.v1.beta1.DBManager/ReportObservationLog"
+	DBManager_GetObservationLog_FullMethodName    = "/api.v1.beta1.DBManager/GetObservationLog"
+	DBManager_DeleteObservationLog_FullMethodName = "/api.v1.beta1.DBManager/DeleteObservationLog"
+)
+
+// DBManagerClient is the client API for DBManager service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
+type DBManagerClient interface {
+	// *
+	// Report a log of Observations for a Trial.
+	// The log consists of timestamp and value of metric.
+	// Katib store every log of metrics.
+	// You can see accuracy curve or other metric logs on UI.
+	ReportObservationLog(ctx context.Context, in *ReportObservationLogRequest, opts ...grpc.CallOption) (*ReportObservationLogReply, error)
+	// *
+	// Get all log of Observations for a Trial.
+	GetObservationLog(ctx context.Context, in *GetObservationLogRequest, opts ...grpc.CallOption) (*GetObservationLogReply, error)
+	// *
+	// Delete all log of Observations for a Trial.
+	DeleteObservationLog(ctx context.Context, in *DeleteObservationLogRequest, opts ...grpc.CallOption) (*DeleteObservationLogReply, error)
+}
+
+type dBManagerClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewDBManagerClient(cc grpc.ClientConnInterface) DBManagerClient {
+	return &dBManagerClient{cc}
+}
+
+func (c *dBManagerClient) ReportObservationLog(ctx context.Context, in *ReportObservationLogRequest, opts ...grpc.CallOption) (*ReportObservationLogReply, error) {
+	out := new(ReportObservationLogReply)
+	err := c.cc.Invoke(ctx, DBManager_ReportObservationLog_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *dBManagerClient) GetObservationLog(ctx context.Context, in *GetObservationLogRequest, opts ...grpc.CallOption) (*GetObservationLogReply, error) {
+	out := new(GetObservationLogReply)
+	err := c.cc.Invoke(ctx, DBManager_GetObservationLog_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *dBManagerClient) DeleteObservationLog(ctx context.Context, in *DeleteObservationLogRequest, opts ...grpc.CallOption) (*DeleteObservationLogReply, error) {
+	out := new(DeleteObservationLogReply)
+	err := c.cc.Invoke(ctx, DBManager_DeleteObservationLog_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// DBManagerServer is the server API for DBManager service.
+// All implementations should embed UnimplementedDBManagerServer
+// for forward compatibility
+type DBManagerServer interface {
+	// *
+	// Report a log of Observations for a Trial.
+	// The log consists of timestamp and value of metric.
+	// Katib store every log of metrics.
+	// You can see accuracy curve or other metric logs on UI.
+	ReportObservationLog(context.Context, *ReportObservationLogRequest) (*ReportObservationLogReply, error)
+	// *
+	// Get all log of Observations for a Trial.
+	GetObservationLog(context.Context, *GetObservationLogRequest) (*GetObservationLogReply, error)
+	// *
+	// Delete all log of Observations for a Trial.
+	DeleteObservationLog(context.Context, *DeleteObservationLogRequest) (*DeleteObservationLogReply, error)
+}
+
+// UnimplementedDBManagerServer should be embedded to have forward compatible implementations.
+type UnimplementedDBManagerServer struct {
+}
+
+func (UnimplementedDBManagerServer) ReportObservationLog(context.Context, *ReportObservationLogRequest) (*ReportObservationLogReply, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ReportObservationLog not implemented")
+}
+func (UnimplementedDBManagerServer) GetObservationLog(context.Context, *GetObservationLogRequest) (*GetObservationLogReply, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetObservationLog not implemented")
+}
+func (UnimplementedDBManagerServer) DeleteObservationLog(context.Context, *DeleteObservationLogRequest) (*DeleteObservationLogReply, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method DeleteObservationLog not implemented")
+}
+
+// UnsafeDBManagerServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to DBManagerServer will
+// result in compilation errors.
+type UnsafeDBManagerServer interface {
+	mustEmbedUnimplementedDBManagerServer()
+}
+
+func RegisterDBManagerServer(s grpc.ServiceRegistrar, srv DBManagerServer) {
+	s.RegisterService(&DBManager_ServiceDesc, srv)
+}
+
+func _DBManager_ReportObservationLog_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ReportObservationLogRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(DBManagerServer).ReportObservationLog(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: DBManager_ReportObservationLog_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(DBManagerServer).ReportObservationLog(ctx, req.(*ReportObservationLogRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _DBManager_GetObservationLog_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetObservationLogRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(DBManagerServer).GetObservationLog(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: DBManager_GetObservationLog_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(DBManagerServer).GetObservationLog(ctx, req.(*GetObservationLogRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _DBManager_DeleteObservationLog_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(DeleteObservationLogRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(DBManagerServer).DeleteObservationLog(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: DBManager_DeleteObservationLog_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(DBManagerServer).DeleteObservationLog(ctx, req.(*DeleteObservationLogRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+// DBManager_ServiceDesc is the grpc.ServiceDesc for DBManager service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var DBManager_ServiceDesc = grpc.ServiceDesc{
+	ServiceName: "api.v1.beta1.DBManager",
+	HandlerType: (*DBManagerServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "ReportObservationLog",
+			Handler:    _DBManager_ReportObservationLog_Handler,
+		},
+		{
+			MethodName: "GetObservationLog",
+			Handler:    _DBManager_GetObservationLog_Handler,
+		},
+		{
+			MethodName: "DeleteObservationLog",
+			Handler:    _DBManager_DeleteObservationLog_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "api.proto",
+}
+
+const (
+	Suggestion_GetSuggestions_FullMethodName            = "/api.v1.beta1.Suggestion/GetSuggestions"
+	Suggestion_ValidateAlgorithmSettings_FullMethodName = "/api.v1.beta1.Suggestion/ValidateAlgorithmSettings"
+)
+
+// SuggestionClient is the client API for Suggestion service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
+type SuggestionClient interface {
+	GetSuggestions(ctx context.Context, in *GetSuggestionsRequest, opts ...grpc.CallOption) (*GetSuggestionsReply, error)
+	ValidateAlgorithmSettings(ctx context.Context, in *ValidateAlgorithmSettingsRequest, opts ...grpc.CallOption) (*ValidateAlgorithmSettingsReply, error)
+}
+
+type suggestionClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewSuggestionClient(cc grpc.ClientConnInterface) SuggestionClient {
+	return &suggestionClient{cc}
+}
+
+func (c *suggestionClient) GetSuggestions(ctx context.Context, in *GetSuggestionsRequest, opts ...grpc.CallOption) (*GetSuggestionsReply, error) {
+	out := new(GetSuggestionsReply)
+	err := c.cc.Invoke(ctx, Suggestion_GetSuggestions_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *suggestionClient) ValidateAlgorithmSettings(ctx context.Context, in *ValidateAlgorithmSettingsRequest, opts ...grpc.CallOption) (*ValidateAlgorithmSettingsReply, error) {
+	out := new(ValidateAlgorithmSettingsReply)
+	err := c.cc.Invoke(ctx, Suggestion_ValidateAlgorithmSettings_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// SuggestionServer is the server API for Suggestion service.
+// All implementations should embed UnimplementedSuggestionServer
+// for forward compatibility
+type SuggestionServer interface {
+	GetSuggestions(context.Context, *GetSuggestionsRequest) (*GetSuggestionsReply, error)
+	ValidateAlgorithmSettings(context.Context, *ValidateAlgorithmSettingsRequest) (*ValidateAlgorithmSettingsReply, error)
+}
+
+// UnimplementedSuggestionServer should be embedded to have forward compatible implementations.
+type UnimplementedSuggestionServer struct {
+}
+
+func (UnimplementedSuggestionServer) GetSuggestions(context.Context, *GetSuggestionsRequest) (*GetSuggestionsReply, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetSuggestions not implemented")
+}
+func (UnimplementedSuggestionServer) ValidateAlgorithmSettings(context.Context, *ValidateAlgorithmSettingsRequest) (*ValidateAlgorithmSettingsReply, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ValidateAlgorithmSettings not implemented")
+}
+
+// UnsafeSuggestionServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to SuggestionServer will
+// result in compilation errors.
+type UnsafeSuggestionServer interface {
+	mustEmbedUnimplementedSuggestionServer()
+}
+
+func RegisterSuggestionServer(s grpc.ServiceRegistrar, srv SuggestionServer) {
+	s.RegisterService(&Suggestion_ServiceDesc, srv)
+}
+
+func _Suggestion_GetSuggestions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetSuggestionsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(SuggestionServer).GetSuggestions(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Suggestion_GetSuggestions_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(SuggestionServer).GetSuggestions(ctx, req.(*GetSuggestionsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _Suggestion_ValidateAlgorithmSettings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ValidateAlgorithmSettingsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(SuggestionServer).ValidateAlgorithmSettings(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: Suggestion_ValidateAlgorithmSettings_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(SuggestionServer).ValidateAlgorithmSettings(ctx, req.(*ValidateAlgorithmSettingsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+// Suggestion_ServiceDesc is the grpc.ServiceDesc for Suggestion service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var Suggestion_ServiceDesc = grpc.ServiceDesc{
+	ServiceName: "api.v1.beta1.Suggestion",
+	HandlerType: (*SuggestionServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetSuggestions",
+			Handler:    _Suggestion_GetSuggestions_Handler,
+		},
+		{
+			MethodName: "ValidateAlgorithmSettings",
+			Handler:    _Suggestion_ValidateAlgorithmSettings_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "api.proto",
+}
+
+const (
+	EarlyStopping_GetEarlyStoppingRules_FullMethodName         = "/api.v1.beta1.EarlyStopping/GetEarlyStoppingRules"
+	EarlyStopping_SetTrialStatus_FullMethodName                = "/api.v1.beta1.EarlyStopping/SetTrialStatus"
+	EarlyStopping_ValidateEarlyStoppingSettings_FullMethodName = "/api.v1.beta1.EarlyStopping/ValidateEarlyStoppingSettings"
+)
+
+// EarlyStoppingClient is the client API for EarlyStopping service.
+//
+// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
+type EarlyStoppingClient interface {
+	GetEarlyStoppingRules(ctx context.Context, in *GetEarlyStoppingRulesRequest, opts ...grpc.CallOption) (*GetEarlyStoppingRulesReply, error)
+	SetTrialStatus(ctx context.Context, in *SetTrialStatusRequest, opts ...grpc.CallOption) (*SetTrialStatusReply, error)
+	ValidateEarlyStoppingSettings(ctx context.Context, in *ValidateEarlyStoppingSettingsRequest, opts ...grpc.CallOption) (*ValidateEarlyStoppingSettingsReply, error)
+}
+
+type earlyStoppingClient struct {
+	cc grpc.ClientConnInterface
+}
+
+func NewEarlyStoppingClient(cc grpc.ClientConnInterface) EarlyStoppingClient {
+	return &earlyStoppingClient{cc}
+}
+
+func (c *earlyStoppingClient) GetEarlyStoppingRules(ctx context.Context, in *GetEarlyStoppingRulesRequest, opts ...grpc.CallOption) (*GetEarlyStoppingRulesReply, error) {
+	out := new(GetEarlyStoppingRulesReply)
+	err := c.cc.Invoke(ctx, EarlyStopping_GetEarlyStoppingRules_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *earlyStoppingClient) SetTrialStatus(ctx context.Context, in *SetTrialStatusRequest, opts ...grpc.CallOption) (*SetTrialStatusReply, error) {
+	out := new(SetTrialStatusReply)
+	err := c.cc.Invoke(ctx, EarlyStopping_SetTrialStatus_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+func (c *earlyStoppingClient) ValidateEarlyStoppingSettings(ctx context.Context, in *ValidateEarlyStoppingSettingsRequest, opts ...grpc.CallOption) (*ValidateEarlyStoppingSettingsReply, error) {
+	out := new(ValidateEarlyStoppingSettingsReply)
+	err := c.cc.Invoke(ctx, EarlyStopping_ValidateEarlyStoppingSettings_FullMethodName, in, out, opts...)
+	if err != nil {
+		return nil, err
+	}
+	return out, nil
+}
+
+// EarlyStoppingServer is the server API for EarlyStopping service.
+// All implementations should embed UnimplementedEarlyStoppingServer
+// for forward compatibility
+type EarlyStoppingServer interface {
+	GetEarlyStoppingRules(context.Context, *GetEarlyStoppingRulesRequest) (*GetEarlyStoppingRulesReply, error)
+	SetTrialStatus(context.Context, *SetTrialStatusRequest) (*SetTrialStatusReply, error)
+	ValidateEarlyStoppingSettings(context.Context, *ValidateEarlyStoppingSettingsRequest) (*ValidateEarlyStoppingSettingsReply, error)
+}
+
+// UnimplementedEarlyStoppingServer should be embedded to have forward compatible implementations.
+type UnimplementedEarlyStoppingServer struct {
+}
+
+func (UnimplementedEarlyStoppingServer) GetEarlyStoppingRules(context.Context, *GetEarlyStoppingRulesRequest) (*GetEarlyStoppingRulesReply, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method GetEarlyStoppingRules not implemented")
+}
+func (UnimplementedEarlyStoppingServer) SetTrialStatus(context.Context, *SetTrialStatusRequest) (*SetTrialStatusReply, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method SetTrialStatus not implemented")
+}
+func (UnimplementedEarlyStoppingServer) ValidateEarlyStoppingSettings(context.Context, *ValidateEarlyStoppingSettingsRequest) (*ValidateEarlyStoppingSettingsReply, error) {
+	return nil, status.Errorf(codes.Unimplemented, "method ValidateEarlyStoppingSettings not implemented")
+}
+
+// UnsafeEarlyStoppingServer may be embedded to opt out of forward compatibility for this service.
+// Use of this interface is not recommended, as added methods to EarlyStoppingServer will
+// result in compilation errors.
+type UnsafeEarlyStoppingServer interface {
+	mustEmbedUnimplementedEarlyStoppingServer()
+}
+
+func RegisterEarlyStoppingServer(s grpc.ServiceRegistrar, srv EarlyStoppingServer) {
+	s.RegisterService(&EarlyStopping_ServiceDesc, srv)
+}
+
+func _EarlyStopping_GetEarlyStoppingRules_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(GetEarlyStoppingRulesRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(EarlyStoppingServer).GetEarlyStoppingRules(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: EarlyStopping_GetEarlyStoppingRules_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(EarlyStoppingServer).GetEarlyStoppingRules(ctx, req.(*GetEarlyStoppingRulesRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _EarlyStopping_SetTrialStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(SetTrialStatusRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(EarlyStoppingServer).SetTrialStatus(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: EarlyStopping_SetTrialStatus_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(EarlyStoppingServer).SetTrialStatus(ctx, req.(*SetTrialStatusRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+func _EarlyStopping_ValidateEarlyStoppingSettings_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
+	in := new(ValidateEarlyStoppingSettingsRequest)
+	if err := dec(in); err != nil {
+		return nil, err
+	}
+	if interceptor == nil {
+		return srv.(EarlyStoppingServer).ValidateEarlyStoppingSettings(ctx, in)
+	}
+	info := &grpc.UnaryServerInfo{
+		Server:     srv,
+		FullMethod: EarlyStopping_ValidateEarlyStoppingSettings_FullMethodName,
+	}
+	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
+		return srv.(EarlyStoppingServer).ValidateEarlyStoppingSettings(ctx, req.(*ValidateEarlyStoppingSettingsRequest))
+	}
+	return interceptor(ctx, in, info, handler)
+}
+
+// EarlyStopping_ServiceDesc is the grpc.ServiceDesc for EarlyStopping service.
+// It's only intended for direct use with grpc.RegisterService,
+// and not to be introspected or modified (even as a copy)
+var EarlyStopping_ServiceDesc = grpc.ServiceDesc{
+	ServiceName: "api.v1.beta1.EarlyStopping",
+	HandlerType: (*EarlyStoppingServer)(nil),
+	Methods: []grpc.MethodDesc{
+		{
+			MethodName: "GetEarlyStoppingRules",
+			Handler:    _EarlyStopping_GetEarlyStoppingRules_Handler,
+		},
+		{
+			MethodName: "SetTrialStatus",
+			Handler:    _EarlyStopping_SetTrialStatus_Handler,
+		},
+		{
+			MethodName: "ValidateEarlyStoppingSettings",
+			Handler:    _EarlyStopping_ValidateEarlyStoppingSettings_Handler,
+		},
+	},
+	Streams:  []grpc.StreamDesc{},
+	Metadata: "api.proto",
+}
diff --git a/pkg/apis/manager/v1beta1/buf.gen.yaml b/pkg/apis/manager/v1beta1/buf.gen.yaml
new file mode 100644
index 00000000000..f8a19960245
--- /dev/null
+++ b/pkg/apis/manager/v1beta1/buf.gen.yaml
@@ -0,0 +1,21 @@
+version: v2
+plugins:
+- remote: buf.build/protocolbuffers/go:v1.33.0
+  out: .
+  opt: module=github.com/kubeflow/katib/pkg/apis/manager/v1beta1
+
+- remote: buf.build/grpc/go:v1.3.0
+  out: .
+  opt: module=github.com/kubeflow/katib/pkg/apis/manager/v1beta1,require_unimplemented_servers=false
+
+- remote: buf.build/protocolbuffers/python:v26.1
+  out: python
+
+- remote: buf.build/protocolbuffers/pyi:v26.1
+  out: python
+
+- remote: buf.build/grpc/python:v1.64.1
+  out: python
+
+inputs:
+- directory: .
diff --git a/pkg/apis/manager/v1beta1/build.sh b/pkg/apis/manager/v1beta1/build.sh
deleted file mode 100755
index f0cb24e1cb7..00000000000
--- a/pkg/apis/manager/v1beta1/build.sh
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/usr/bin/env bash
-
-# Copyright 2022 The Kubeflow Authors.
-#
-# 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.
-
-set -x
-set -e
-
-cd "$(dirname "$0")"
-
-proto="api.proto"
-
-docker run -i --rm -v "$PWD:$PWD" -w "$PWD" znly/protoc --python_out=plugins=grpc:./python --go_out=plugins=grpc:. -I. $proto
-docker run -i --rm -v "$PWD:$PWD" -w "$PWD" znly/protoc --plugin=protoc-gen-grpc=/usr/bin/grpc_python_plugin --python_out=./python --grpc_out=./python -I. $proto
-
-docker build -t protoc-gen-doc gen-doc/
-docker run --rm -v "$PWD/gen-doc:/out" -v "$PWD:/apiprotos" protoc-gen-doc --doc_opt=markdown,api.md -I /protobuf -I /apiprotos $proto
-docker run --rm -v "$PWD/gen-doc:/out" -v "$PWD:/apiprotos" protoc-gen-doc --doc_opt=html,index.html -I /protobuf -I /apiprotos $proto
diff --git a/pkg/apis/manager/v1beta1/python/api_pb2.py b/pkg/apis/manager/v1beta1/python/api_pb2.py
index 25ae1931e65..8459ebaae37 100644
--- a/pkg/apis/manager/v1beta1/python/api_pb2.py
+++ b/pkg/apis/manager/v1beta1/python/api_pb2.py
@@ -1,14 +1,12 @@
+# -*- coding: utf-8 -*-
 # Generated by the protocol buffer compiler.  DO NOT EDIT!
 # source: api.proto
-
-import sys
-_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
-from google.protobuf.internal import enum_type_wrapper
+# Protobuf Python Version: 5.26.1
+"""Generated protocol buffer code."""
 from google.protobuf import descriptor as _descriptor
-from google.protobuf import message as _message
-from google.protobuf import reflection as _reflection
+from google.protobuf import descriptor_pool as _descriptor_pool
 from google.protobuf import symbol_database as _symbol_database
-from google.protobuf import descriptor_pb2
+from google.protobuf.internal import builder as _builder
 # @@protoc_insertion_point(imports)
 
 _sym_db = _symbol_database.Default()
@@ -16,2901 +14,118 @@
 
 
 
-DESCRIPTOR = _descriptor.FileDescriptor(
-  name='api.proto',
-  package='api.v1.beta1',
-  syntax='proto3',
-  serialized_pb=_b('\n\tapi.proto\x12\x0c\x61pi.v1.beta1\"F\n\nExperiment\x12\x0c\n\x04name\x18\x01 \x01(\t\x12*\n\x04spec\x18\x02 \x01(\x0b\x32\x1c.api.v1.beta1.ExperimentSpec\"\x96\x03\n\x0e\x45xperimentSpec\x12\x44\n\x0fparameter_specs\x18\x01 \x01(\x0b\x32+.api.v1.beta1.ExperimentSpec.ParameterSpecs\x12.\n\tobjective\x18\x02 \x01(\x0b\x32\x1b.api.v1.beta1.ObjectiveSpec\x12.\n\talgorithm\x18\x03 \x01(\x0b\x32\x1b.api.v1.beta1.AlgorithmSpec\x12\x37\n\x0e\x65\x61rly_stopping\x18\x04 \x01(\x0b\x32\x1f.api.v1.beta1.EarlyStoppingSpec\x12\x1c\n\x14parallel_trial_count\x18\x05 \x01(\x05\x12\x17\n\x0fmax_trial_count\x18\x06 \x01(\x05\x12+\n\nnas_config\x18\x07 \x01(\x0b\x32\x17.api.v1.beta1.NasConfig\x1a\x41\n\x0eParameterSpecs\x12/\n\nparameters\x18\x01 \x03(\x0b\x32\x1b.api.v1.beta1.ParameterSpec\"\x87\x01\n\rParameterSpec\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x33\n\x0eparameter_type\x18\x02 \x01(\x0e\x32\x1b.api.v1.beta1.ParameterType\x12\x33\n\x0e\x66\x65\x61sible_space\x18\x03 \x01(\x0b\x32\x1b.api.v1.beta1.FeasibleSpace\"E\n\rFeasibleSpace\x12\x0b\n\x03max\x18\x01 \x01(\t\x12\x0b\n\x03min\x18\x02 \x01(\t\x12\x0c\n\x04list\x18\x03 \x03(\t\x12\x0c\n\x04step\x18\x04 \x01(\t\"\x88\x01\n\rObjectiveSpec\x12)\n\x04type\x18\x01 \x01(\x0e\x32\x1b.api.v1.beta1.ObjectiveType\x12\x0c\n\x04goal\x18\x02 \x01(\x01\x12\x1d\n\x15objective_metric_name\x18\x03 \x01(\t\x12\x1f\n\x17\x61\x64\x64itional_metric_names\x18\x04 \x03(\t\"c\n\rAlgorithmSpec\x12\x16\n\x0e\x61lgorithm_name\x18\x01 \x01(\t\x12:\n\x12\x61lgorithm_settings\x18\x02 \x03(\x0b\x32\x1e.api.v1.beta1.AlgorithmSetting\"/\n\x10\x41lgorithmSetting\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"k\n\x11\x45\x61rlyStoppingSpec\x12\x16\n\x0e\x61lgorithm_name\x18\x01 \x01(\t\x12>\n\x12\x61lgorithm_settings\x18\x02 \x03(\x0b\x32\".api.v1.beta1.EarlyStoppingSetting\"3\n\x14\x45\x61rlyStoppingSetting\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\xae\x01\n\tNasConfig\x12/\n\x0cgraph_config\x18\x01 \x01(\x0b\x32\x19.api.v1.beta1.GraphConfig\x12\x36\n\noperations\x18\x02 \x01(\x0b\x32\".api.v1.beta1.NasConfig.Operations\x1a\x38\n\nOperations\x12*\n\toperation\x18\x01 \x03(\x0b\x32\x17.api.v1.beta1.Operation\"L\n\x0bGraphConfig\x12\x12\n\nnum_layers\x18\x01 \x01(\x05\x12\x13\n\x0binput_sizes\x18\x02 \x03(\x05\x12\x14\n\x0coutput_sizes\x18\x03 \x03(\x05\"\xa7\x01\n\tOperation\x12\x16\n\x0eoperation_type\x18\x01 \x01(\t\x12?\n\x0fparameter_specs\x18\x02 \x01(\x0b\x32&.api.v1.beta1.Operation.ParameterSpecs\x1a\x41\n\x0eParameterSpecs\x12/\n\nparameters\x18\x01 \x03(\x0b\x32\x1b.api.v1.beta1.ParameterSpec\"g\n\x05Trial\x12\x0c\n\x04name\x18\x01 \x01(\t\x12%\n\x04spec\x18\x02 \x01(\x0b\x32\x17.api.v1.beta1.TrialSpec\x12)\n\x06status\x18\x03 \x01(\x0b\x32\x19.api.v1.beta1.TrialStatus\"\xbc\x02\n\tTrialSpec\x12.\n\tobjective\x18\x02 \x01(\x0b\x32\x1b.api.v1.beta1.ObjectiveSpec\x12K\n\x15parameter_assignments\x18\x03 \x01(\x0b\x32,.api.v1.beta1.TrialSpec.ParameterAssignments\x12\x33\n\x06labels\x18\x04 \x03(\x0b\x32#.api.v1.beta1.TrialSpec.LabelsEntry\x1aN\n\x14ParameterAssignments\x12\x36\n\x0b\x61ssignments\x18\x01 \x03(\x0b\x32!.api.v1.beta1.ParameterAssignment\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"2\n\x13ParameterAssignment\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\xba\x02\n\x0bTrialStatus\x12\x12\n\nstart_time\x18\x01 \x01(\t\x12\x17\n\x0f\x63ompletion_time\x18\x02 \x01(\t\x12?\n\tcondition\x18\x03 \x01(\x0e\x32,.api.v1.beta1.TrialStatus.TrialConditionType\x12.\n\x0bobservation\x18\x04 \x01(\x0b\x32\x19.api.v1.beta1.Observation\"\x8c\x01\n\x12TrialConditionType\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07RUNNING\x10\x01\x12\r\n\tSUCCEEDED\x10\x02\x12\n\n\x06KILLED\x10\x03\x12\n\n\x06\x46\x41ILED\x10\x04\x12\x16\n\x12METRICSUNAVAILABLE\x10\x05\x12\x10\n\x0c\x45\x41RLYSTOPPED\x10\x06\x12\x0b\n\x07UNKNOWN\x10\x07\"4\n\x0bObservation\x12%\n\x07metrics\x18\x01 \x03(\x0b\x32\x14.api.v1.beta1.Metric\"%\n\x06Metric\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"h\n\x1bReportObservationLogRequest\x12\x12\n\ntrial_name\x18\x01 \x01(\t\x12\x35\n\x0fobservation_log\x18\x02 \x01(\x0b\x32\x1c.api.v1.beta1.ObservationLog\"\x1b\n\x19ReportObservationLogReply\">\n\x0eObservationLog\x12,\n\x0bmetric_logs\x18\x01 \x03(\x0b\x32\x17.api.v1.beta1.MetricLog\"E\n\tMetricLog\x12\x12\n\ntime_stamp\x18\x01 \x01(\t\x12$\n\x06metric\x18\x02 \x01(\x0b\x32\x14.api.v1.beta1.Metric\"i\n\x18GetObservationLogRequest\x12\x12\n\ntrial_name\x18\x01 \x01(\t\x12\x13\n\x0bmetric_name\x18\x02 \x01(\t\x12\x12\n\nstart_time\x18\x03 \x01(\t\x12\x10\n\x08\x65nd_time\x18\x04 \x01(\t\"O\n\x16GetObservationLogReply\x12\x35\n\x0fobservation_log\x18\x01 \x01(\x0b\x32\x1c.api.v1.beta1.ObservationLog\"1\n\x1b\x44\x65leteObservationLogRequest\x12\x12\n\ntrial_name\x18\x01 \x01(\t\"\x1b\n\x19\x44\x65leteObservationLogReply\"\xa8\x01\n\x15GetSuggestionsRequest\x12,\n\nexperiment\x18\x01 \x01(\x0b\x32\x18.api.v1.beta1.Experiment\x12#\n\x06trials\x18\x02 \x03(\x0b\x32\x13.api.v1.beta1.Trial\x12\x1e\n\x16\x63urrent_request_number\x18\x04 \x01(\x05\x12\x1c\n\x14total_request_number\x18\x05 \x01(\x05\"\xc3\x03\n\x13GetSuggestionsReply\x12U\n\x15parameter_assignments\x18\x01 \x03(\x0b\x32\x36.api.v1.beta1.GetSuggestionsReply.ParameterAssignments\x12.\n\talgorithm\x18\x02 \x01(\x0b\x32\x1b.api.v1.beta1.AlgorithmSpec\x12=\n\x14\x65\x61rly_stopping_rules\x18\x03 \x03(\x0b\x32\x1f.api.v1.beta1.EarlyStoppingRule\x1a\xe5\x01\n\x14ParameterAssignments\x12\x36\n\x0b\x61ssignments\x18\x01 \x03(\x0b\x32!.api.v1.beta1.ParameterAssignment\x12\x12\n\ntrial_name\x18\x02 \x01(\t\x12R\n\x06labels\x18\x03 \x03(\x0b\x32\x42.api.v1.beta1.GetSuggestionsReply.ParameterAssignments.LabelsEntry\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"P\n ValidateAlgorithmSettingsRequest\x12,\n\nexperiment\x18\x01 \x01(\x0b\x32\x18.api.v1.beta1.Experiment\" \n\x1eValidateAlgorithmSettingsReply\"\x8d\x01\n\x1cGetEarlyStoppingRulesRequest\x12,\n\nexperiment\x18\x01 \x01(\x0b\x32\x18.api.v1.beta1.Experiment\x12#\n\x06trials\x18\x02 \x03(\x0b\x32\x13.api.v1.beta1.Trial\x12\x1a\n\x12\x64\x62_manager_address\x18\x03 \x01(\t\"[\n\x1aGetEarlyStoppingRulesReply\x12=\n\x14\x65\x61rly_stopping_rules\x18\x01 \x03(\x0b\x32\x1f.api.v1.beta1.EarlyStoppingRule\"v\n\x11\x45\x61rlyStoppingRule\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\x12\x30\n\ncomparison\x18\x03 \x01(\x0e\x32\x1c.api.v1.beta1.ComparisonType\x12\x12\n\nstart_step\x18\x04 \x01(\x05\"_\n$ValidateEarlyStoppingSettingsRequest\x12\x37\n\x0e\x65\x61rly_stopping\x18\x01 \x01(\x0b\x32\x1f.api.v1.beta1.EarlyStoppingSpec\"$\n\"ValidateEarlyStoppingSettingsReply\"+\n\x15SetTrialStatusRequest\x12\x12\n\ntrial_name\x18\x01 \x01(\t\"\x15\n\x13SetTrialStatusReply*U\n\rParameterType\x12\x10\n\x0cUNKNOWN_TYPE\x10\x00\x12\n\n\x06\x44OUBLE\x10\x01\x12\x07\n\x03INT\x10\x02\x12\x0c\n\x08\x44ISCRETE\x10\x03\x12\x0f\n\x0b\x43\x41TEGORICAL\x10\x04*8\n\rObjectiveType\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x0c\n\x08MINIMIZE\x10\x01\x12\x0c\n\x08MAXIMIZE\x10\x02*J\n\x0e\x43omparisonType\x12\x16\n\x12UNKNOWN_COMPARISON\x10\x00\x12\t\n\x05\x45QUAL\x10\x01\x12\x08\n\x04LESS\x10\x02\x12\x0b\n\x07GREATER\x10\x03\x32\xc6\x02\n\tDBManager\x12j\n\x14ReportObservationLog\x12).api.v1.beta1.ReportObservationLogRequest\x1a\'.api.v1.beta1.ReportObservationLogReply\x12\x61\n\x11GetObservationLog\x12&.api.v1.beta1.GetObservationLogRequest\x1a$.api.v1.beta1.GetObservationLogReply\x12j\n\x14\x44\x65leteObservationLog\x12).api.v1.beta1.DeleteObservationLogRequest\x1a\'.api.v1.beta1.DeleteObservationLogReply2\xe1\x01\n\nSuggestion\x12X\n\x0eGetSuggestions\x12#.api.v1.beta1.GetSuggestionsRequest\x1a!.api.v1.beta1.GetSuggestionsReply\x12y\n\x19ValidateAlgorithmSettings\x12..api.v1.beta1.ValidateAlgorithmSettingsRequest\x1a,.api.v1.beta1.ValidateAlgorithmSettingsReply2\xe0\x02\n\rEarlyStopping\x12m\n\x15GetEarlyStoppingRules\x12*.api.v1.beta1.GetEarlyStoppingRulesRequest\x1a(.api.v1.beta1.GetEarlyStoppingRulesReply\x12X\n\x0eSetTrialStatus\x12#.api.v1.beta1.SetTrialStatusRequest\x1a!.api.v1.beta1.SetTrialStatusReply\x12\x85\x01\n\x1dValidateEarlyStoppingSettings\x12\x32.api.v1.beta1.ValidateEarlyStoppingSettingsRequest\x1a\x30.api.v1.beta1.ValidateEarlyStoppingSettingsReplyb\x06proto3')
-)
-
-_PARAMETERTYPE = _descriptor.EnumDescriptor(
-  name='ParameterType',
-  full_name='api.v1.beta1.ParameterType',
-  filename=None,
-  file=DESCRIPTOR,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='UNKNOWN_TYPE', index=0, number=0,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='DOUBLE', index=1, number=1,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='INT', index=2, number=2,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='DISCRETE', index=3, number=3,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='CATEGORICAL', index=4, number=4,
-      options=None,
-      type=None),
-  ],
-  containing_type=None,
-  options=None,
-  serialized_start=4318,
-  serialized_end=4403,
-)
-_sym_db.RegisterEnumDescriptor(_PARAMETERTYPE)
-
-ParameterType = enum_type_wrapper.EnumTypeWrapper(_PARAMETERTYPE)
-_OBJECTIVETYPE = _descriptor.EnumDescriptor(
-  name='ObjectiveType',
-  full_name='api.v1.beta1.ObjectiveType',
-  filename=None,
-  file=DESCRIPTOR,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='UNKNOWN', index=0, number=0,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='MINIMIZE', index=1, number=1,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='MAXIMIZE', index=2, number=2,
-      options=None,
-      type=None),
-  ],
-  containing_type=None,
-  options=None,
-  serialized_start=4405,
-  serialized_end=4461,
-)
-_sym_db.RegisterEnumDescriptor(_OBJECTIVETYPE)
-
-ObjectiveType = enum_type_wrapper.EnumTypeWrapper(_OBJECTIVETYPE)
-_COMPARISONTYPE = _descriptor.EnumDescriptor(
-  name='ComparisonType',
-  full_name='api.v1.beta1.ComparisonType',
-  filename=None,
-  file=DESCRIPTOR,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='UNKNOWN_COMPARISON', index=0, number=0,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='EQUAL', index=1, number=1,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='LESS', index=2, number=2,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='GREATER', index=3, number=3,
-      options=None,
-      type=None),
-  ],
-  containing_type=None,
-  options=None,
-  serialized_start=4463,
-  serialized_end=4537,
-)
-_sym_db.RegisterEnumDescriptor(_COMPARISONTYPE)
-
-ComparisonType = enum_type_wrapper.EnumTypeWrapper(_COMPARISONTYPE)
-UNKNOWN_TYPE = 0
-DOUBLE = 1
-INT = 2
-DISCRETE = 3
-CATEGORICAL = 4
-UNKNOWN = 0
-MINIMIZE = 1
-MAXIMIZE = 2
-UNKNOWN_COMPARISON = 0
-EQUAL = 1
-LESS = 2
-GREATER = 3
-
-
-_TRIALSTATUS_TRIALCONDITIONTYPE = _descriptor.EnumDescriptor(
-  name='TrialConditionType',
-  full_name='api.v1.beta1.TrialStatus.TrialConditionType',
-  filename=None,
-  file=DESCRIPTOR,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='CREATED', index=0, number=0,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='RUNNING', index=1, number=1,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='SUCCEEDED', index=2, number=2,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='KILLED', index=3, number=3,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='FAILED', index=4, number=4,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='METRICSUNAVAILABLE', index=5, number=5,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='EARLYSTOPPED', index=6, number=6,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='UNKNOWN', index=7, number=7,
-      options=None,
-      type=None),
-  ],
-  containing_type=None,
-  options=None,
-  serialized_start=2244,
-  serialized_end=2384,
-)
-_sym_db.RegisterEnumDescriptor(_TRIALSTATUS_TRIALCONDITIONTYPE)
-
-
-_EXPERIMENT = _descriptor.Descriptor(
-  name='Experiment',
-  full_name='api.v1.beta1.Experiment',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='name', full_name='api.v1.beta1.Experiment.name', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='spec', full_name='api.v1.beta1.Experiment.spec', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=27,
-  serialized_end=97,
-)
-
-
-_EXPERIMENTSPEC_PARAMETERSPECS = _descriptor.Descriptor(
-  name='ParameterSpecs',
-  full_name='api.v1.beta1.ExperimentSpec.ParameterSpecs',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='parameters', full_name='api.v1.beta1.ExperimentSpec.ParameterSpecs.parameters', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=441,
-  serialized_end=506,
-)
-
-_EXPERIMENTSPEC = _descriptor.Descriptor(
-  name='ExperimentSpec',
-  full_name='api.v1.beta1.ExperimentSpec',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='parameter_specs', full_name='api.v1.beta1.ExperimentSpec.parameter_specs', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='objective', full_name='api.v1.beta1.ExperimentSpec.objective', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='algorithm', full_name='api.v1.beta1.ExperimentSpec.algorithm', index=2,
-      number=3, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='early_stopping', full_name='api.v1.beta1.ExperimentSpec.early_stopping', index=3,
-      number=4, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='parallel_trial_count', full_name='api.v1.beta1.ExperimentSpec.parallel_trial_count', index=4,
-      number=5, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='max_trial_count', full_name='api.v1.beta1.ExperimentSpec.max_trial_count', index=5,
-      number=6, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='nas_config', full_name='api.v1.beta1.ExperimentSpec.nas_config', index=6,
-      number=7, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[_EXPERIMENTSPEC_PARAMETERSPECS, ],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=100,
-  serialized_end=506,
-)
-
-
-_PARAMETERSPEC = _descriptor.Descriptor(
-  name='ParameterSpec',
-  full_name='api.v1.beta1.ParameterSpec',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='name', full_name='api.v1.beta1.ParameterSpec.name', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='parameter_type', full_name='api.v1.beta1.ParameterSpec.parameter_type', index=1,
-      number=2, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='feasible_space', full_name='api.v1.beta1.ParameterSpec.feasible_space', index=2,
-      number=3, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=509,
-  serialized_end=644,
-)
-
-
-_FEASIBLESPACE = _descriptor.Descriptor(
-  name='FeasibleSpace',
-  full_name='api.v1.beta1.FeasibleSpace',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='max', full_name='api.v1.beta1.FeasibleSpace.max', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='min', full_name='api.v1.beta1.FeasibleSpace.min', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='list', full_name='api.v1.beta1.FeasibleSpace.list', index=2,
-      number=3, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='step', full_name='api.v1.beta1.FeasibleSpace.step', index=3,
-      number=4, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=646,
-  serialized_end=715,
-)
-
-
-_OBJECTIVESPEC = _descriptor.Descriptor(
-  name='ObjectiveSpec',
-  full_name='api.v1.beta1.ObjectiveSpec',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='type', full_name='api.v1.beta1.ObjectiveSpec.type', index=0,
-      number=1, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='goal', full_name='api.v1.beta1.ObjectiveSpec.goal', index=1,
-      number=2, type=1, cpp_type=5, label=1,
-      has_default_value=False, default_value=float(0),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='objective_metric_name', full_name='api.v1.beta1.ObjectiveSpec.objective_metric_name', index=2,
-      number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='additional_metric_names', full_name='api.v1.beta1.ObjectiveSpec.additional_metric_names', index=3,
-      number=4, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=718,
-  serialized_end=854,
-)
-
-
-_ALGORITHMSPEC = _descriptor.Descriptor(
-  name='AlgorithmSpec',
-  full_name='api.v1.beta1.AlgorithmSpec',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='algorithm_name', full_name='api.v1.beta1.AlgorithmSpec.algorithm_name', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='algorithm_settings', full_name='api.v1.beta1.AlgorithmSpec.algorithm_settings', index=1,
-      number=2, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=856,
-  serialized_end=955,
-)
-
-
-_ALGORITHMSETTING = _descriptor.Descriptor(
-  name='AlgorithmSetting',
-  full_name='api.v1.beta1.AlgorithmSetting',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='name', full_name='api.v1.beta1.AlgorithmSetting.name', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='value', full_name='api.v1.beta1.AlgorithmSetting.value', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=957,
-  serialized_end=1004,
-)
-
-
-_EARLYSTOPPINGSPEC = _descriptor.Descriptor(
-  name='EarlyStoppingSpec',
-  full_name='api.v1.beta1.EarlyStoppingSpec',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='algorithm_name', full_name='api.v1.beta1.EarlyStoppingSpec.algorithm_name', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='algorithm_settings', full_name='api.v1.beta1.EarlyStoppingSpec.algorithm_settings', index=1,
-      number=2, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1006,
-  serialized_end=1113,
-)
-
-
-_EARLYSTOPPINGSETTING = _descriptor.Descriptor(
-  name='EarlyStoppingSetting',
-  full_name='api.v1.beta1.EarlyStoppingSetting',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='name', full_name='api.v1.beta1.EarlyStoppingSetting.name', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='value', full_name='api.v1.beta1.EarlyStoppingSetting.value', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1115,
-  serialized_end=1166,
-)
-
-
-_NASCONFIG_OPERATIONS = _descriptor.Descriptor(
-  name='Operations',
-  full_name='api.v1.beta1.NasConfig.Operations',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='operation', full_name='api.v1.beta1.NasConfig.Operations.operation', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1287,
-  serialized_end=1343,
-)
-
-_NASCONFIG = _descriptor.Descriptor(
-  name='NasConfig',
-  full_name='api.v1.beta1.NasConfig',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='graph_config', full_name='api.v1.beta1.NasConfig.graph_config', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='operations', full_name='api.v1.beta1.NasConfig.operations', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[_NASCONFIG_OPERATIONS, ],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1169,
-  serialized_end=1343,
-)
-
-
-_GRAPHCONFIG = _descriptor.Descriptor(
-  name='GraphConfig',
-  full_name='api.v1.beta1.GraphConfig',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='num_layers', full_name='api.v1.beta1.GraphConfig.num_layers', index=0,
-      number=1, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='input_sizes', full_name='api.v1.beta1.GraphConfig.input_sizes', index=1,
-      number=2, type=5, cpp_type=1, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='output_sizes', full_name='api.v1.beta1.GraphConfig.output_sizes', index=2,
-      number=3, type=5, cpp_type=1, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1345,
-  serialized_end=1421,
-)
-
-
-_OPERATION_PARAMETERSPECS = _descriptor.Descriptor(
-  name='ParameterSpecs',
-  full_name='api.v1.beta1.Operation.ParameterSpecs',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='parameters', full_name='api.v1.beta1.Operation.ParameterSpecs.parameters', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=441,
-  serialized_end=506,
-)
-
-_OPERATION = _descriptor.Descriptor(
-  name='Operation',
-  full_name='api.v1.beta1.Operation',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='operation_type', full_name='api.v1.beta1.Operation.operation_type', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='parameter_specs', full_name='api.v1.beta1.Operation.parameter_specs', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[_OPERATION_PARAMETERSPECS, ],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1424,
-  serialized_end=1591,
-)
-
-
-_TRIAL = _descriptor.Descriptor(
-  name='Trial',
-  full_name='api.v1.beta1.Trial',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='name', full_name='api.v1.beta1.Trial.name', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='spec', full_name='api.v1.beta1.Trial.spec', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='status', full_name='api.v1.beta1.Trial.status', index=2,
-      number=3, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1593,
-  serialized_end=1696,
-)
-
-
-_TRIALSPEC_PARAMETERASSIGNMENTS = _descriptor.Descriptor(
-  name='ParameterAssignments',
-  full_name='api.v1.beta1.TrialSpec.ParameterAssignments',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='assignments', full_name='api.v1.beta1.TrialSpec.ParameterAssignments.assignments', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1890,
-  serialized_end=1968,
-)
-
-_TRIALSPEC_LABELSENTRY = _descriptor.Descriptor(
-  name='LabelsEntry',
-  full_name='api.v1.beta1.TrialSpec.LabelsEntry',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='key', full_name='api.v1.beta1.TrialSpec.LabelsEntry.key', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='value', full_name='api.v1.beta1.TrialSpec.LabelsEntry.value', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')),
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1970,
-  serialized_end=2015,
-)
-
-_TRIALSPEC = _descriptor.Descriptor(
-  name='TrialSpec',
-  full_name='api.v1.beta1.TrialSpec',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='objective', full_name='api.v1.beta1.TrialSpec.objective', index=0,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='parameter_assignments', full_name='api.v1.beta1.TrialSpec.parameter_assignments', index=1,
-      number=3, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='labels', full_name='api.v1.beta1.TrialSpec.labels', index=2,
-      number=4, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[_TRIALSPEC_PARAMETERASSIGNMENTS, _TRIALSPEC_LABELSENTRY, ],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1699,
-  serialized_end=2015,
-)
-
-
-_PARAMETERASSIGNMENT = _descriptor.Descriptor(
-  name='ParameterAssignment',
-  full_name='api.v1.beta1.ParameterAssignment',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='name', full_name='api.v1.beta1.ParameterAssignment.name', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='value', full_name='api.v1.beta1.ParameterAssignment.value', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2017,
-  serialized_end=2067,
-)
-
-
-_TRIALSTATUS = _descriptor.Descriptor(
-  name='TrialStatus',
-  full_name='api.v1.beta1.TrialStatus',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='start_time', full_name='api.v1.beta1.TrialStatus.start_time', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='completion_time', full_name='api.v1.beta1.TrialStatus.completion_time', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='condition', full_name='api.v1.beta1.TrialStatus.condition', index=2,
-      number=3, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='observation', full_name='api.v1.beta1.TrialStatus.observation', index=3,
-      number=4, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-    _TRIALSTATUS_TRIALCONDITIONTYPE,
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2070,
-  serialized_end=2384,
-)
-
-
-_OBSERVATION = _descriptor.Descriptor(
-  name='Observation',
-  full_name='api.v1.beta1.Observation',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='metrics', full_name='api.v1.beta1.Observation.metrics', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2386,
-  serialized_end=2438,
-)
-
-
-_METRIC = _descriptor.Descriptor(
-  name='Metric',
-  full_name='api.v1.beta1.Metric',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='name', full_name='api.v1.beta1.Metric.name', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='value', full_name='api.v1.beta1.Metric.value', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2440,
-  serialized_end=2477,
-)
-
-
-_REPORTOBSERVATIONLOGREQUEST = _descriptor.Descriptor(
-  name='ReportObservationLogRequest',
-  full_name='api.v1.beta1.ReportObservationLogRequest',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='trial_name', full_name='api.v1.beta1.ReportObservationLogRequest.trial_name', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='observation_log', full_name='api.v1.beta1.ReportObservationLogRequest.observation_log', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2479,
-  serialized_end=2583,
-)
-
-
-_REPORTOBSERVATIONLOGREPLY = _descriptor.Descriptor(
-  name='ReportObservationLogReply',
-  full_name='api.v1.beta1.ReportObservationLogReply',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2585,
-  serialized_end=2612,
-)
-
-
-_OBSERVATIONLOG = _descriptor.Descriptor(
-  name='ObservationLog',
-  full_name='api.v1.beta1.ObservationLog',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='metric_logs', full_name='api.v1.beta1.ObservationLog.metric_logs', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2614,
-  serialized_end=2676,
-)
-
-
-_METRICLOG = _descriptor.Descriptor(
-  name='MetricLog',
-  full_name='api.v1.beta1.MetricLog',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='time_stamp', full_name='api.v1.beta1.MetricLog.time_stamp', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='metric', full_name='api.v1.beta1.MetricLog.metric', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2678,
-  serialized_end=2747,
-)
-
-
-_GETOBSERVATIONLOGREQUEST = _descriptor.Descriptor(
-  name='GetObservationLogRequest',
-  full_name='api.v1.beta1.GetObservationLogRequest',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='trial_name', full_name='api.v1.beta1.GetObservationLogRequest.trial_name', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='metric_name', full_name='api.v1.beta1.GetObservationLogRequest.metric_name', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='start_time', full_name='api.v1.beta1.GetObservationLogRequest.start_time', index=2,
-      number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='end_time', full_name='api.v1.beta1.GetObservationLogRequest.end_time', index=3,
-      number=4, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2749,
-  serialized_end=2854,
-)
-
-
-_GETOBSERVATIONLOGREPLY = _descriptor.Descriptor(
-  name='GetObservationLogReply',
-  full_name='api.v1.beta1.GetObservationLogReply',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='observation_log', full_name='api.v1.beta1.GetObservationLogReply.observation_log', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2856,
-  serialized_end=2935,
-)
-
-
-_DELETEOBSERVATIONLOGREQUEST = _descriptor.Descriptor(
-  name='DeleteObservationLogRequest',
-  full_name='api.v1.beta1.DeleteObservationLogRequest',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='trial_name', full_name='api.v1.beta1.DeleteObservationLogRequest.trial_name', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2937,
-  serialized_end=2986,
-)
-
-
-_DELETEOBSERVATIONLOGREPLY = _descriptor.Descriptor(
-  name='DeleteObservationLogReply',
-  full_name='api.v1.beta1.DeleteObservationLogReply',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2988,
-  serialized_end=3015,
-)
-
-
-_GETSUGGESTIONSREQUEST = _descriptor.Descriptor(
-  name='GetSuggestionsRequest',
-  full_name='api.v1.beta1.GetSuggestionsRequest',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='experiment', full_name='api.v1.beta1.GetSuggestionsRequest.experiment', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='trials', full_name='api.v1.beta1.GetSuggestionsRequest.trials', index=1,
-      number=2, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='current_request_number', full_name='api.v1.beta1.GetSuggestionsRequest.current_request_number', index=2,
-      number=4, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='total_request_number', full_name='api.v1.beta1.GetSuggestionsRequest.total_request_number', index=3,
-      number=5, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3018,
-  serialized_end=3186,
-)
-
-
-_GETSUGGESTIONSREPLY_PARAMETERASSIGNMENTS_LABELSENTRY = _descriptor.Descriptor(
-  name='LabelsEntry',
-  full_name='api.v1.beta1.GetSuggestionsReply.ParameterAssignments.LabelsEntry',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='key', full_name='api.v1.beta1.GetSuggestionsReply.ParameterAssignments.LabelsEntry.key', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='value', full_name='api.v1.beta1.GetSuggestionsReply.ParameterAssignments.LabelsEntry.value', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001')),
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1970,
-  serialized_end=2015,
-)
-
-_GETSUGGESTIONSREPLY_PARAMETERASSIGNMENTS = _descriptor.Descriptor(
-  name='ParameterAssignments',
-  full_name='api.v1.beta1.GetSuggestionsReply.ParameterAssignments',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='assignments', full_name='api.v1.beta1.GetSuggestionsReply.ParameterAssignments.assignments', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='trial_name', full_name='api.v1.beta1.GetSuggestionsReply.ParameterAssignments.trial_name', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='labels', full_name='api.v1.beta1.GetSuggestionsReply.ParameterAssignments.labels', index=2,
-      number=3, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[_GETSUGGESTIONSREPLY_PARAMETERASSIGNMENTS_LABELSENTRY, ],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3411,
-  serialized_end=3640,
-)
-
-_GETSUGGESTIONSREPLY = _descriptor.Descriptor(
-  name='GetSuggestionsReply',
-  full_name='api.v1.beta1.GetSuggestionsReply',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='parameter_assignments', full_name='api.v1.beta1.GetSuggestionsReply.parameter_assignments', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='algorithm', full_name='api.v1.beta1.GetSuggestionsReply.algorithm', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='early_stopping_rules', full_name='api.v1.beta1.GetSuggestionsReply.early_stopping_rules', index=2,
-      number=3, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[_GETSUGGESTIONSREPLY_PARAMETERASSIGNMENTS, ],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3189,
-  serialized_end=3640,
-)
-
-
-_VALIDATEALGORITHMSETTINGSREQUEST = _descriptor.Descriptor(
-  name='ValidateAlgorithmSettingsRequest',
-  full_name='api.v1.beta1.ValidateAlgorithmSettingsRequest',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='experiment', full_name='api.v1.beta1.ValidateAlgorithmSettingsRequest.experiment', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3642,
-  serialized_end=3722,
-)
-
-
-_VALIDATEALGORITHMSETTINGSREPLY = _descriptor.Descriptor(
-  name='ValidateAlgorithmSettingsReply',
-  full_name='api.v1.beta1.ValidateAlgorithmSettingsReply',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3724,
-  serialized_end=3756,
-)
-
-
-_GETEARLYSTOPPINGRULESREQUEST = _descriptor.Descriptor(
-  name='GetEarlyStoppingRulesRequest',
-  full_name='api.v1.beta1.GetEarlyStoppingRulesRequest',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='experiment', full_name='api.v1.beta1.GetEarlyStoppingRulesRequest.experiment', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='trials', full_name='api.v1.beta1.GetEarlyStoppingRulesRequest.trials', index=1,
-      number=2, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='db_manager_address', full_name='api.v1.beta1.GetEarlyStoppingRulesRequest.db_manager_address', index=2,
-      number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3759,
-  serialized_end=3900,
-)
-
-
-_GETEARLYSTOPPINGRULESREPLY = _descriptor.Descriptor(
-  name='GetEarlyStoppingRulesReply',
-  full_name='api.v1.beta1.GetEarlyStoppingRulesReply',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='early_stopping_rules', full_name='api.v1.beta1.GetEarlyStoppingRulesReply.early_stopping_rules', index=0,
-      number=1, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3902,
-  serialized_end=3993,
-)
-
-
-_EARLYSTOPPINGRULE = _descriptor.Descriptor(
-  name='EarlyStoppingRule',
-  full_name='api.v1.beta1.EarlyStoppingRule',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='name', full_name='api.v1.beta1.EarlyStoppingRule.name', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='value', full_name='api.v1.beta1.EarlyStoppingRule.value', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='comparison', full_name='api.v1.beta1.EarlyStoppingRule.comparison', index=2,
-      number=3, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='start_step', full_name='api.v1.beta1.EarlyStoppingRule.start_step', index=3,
-      number=4, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3995,
-  serialized_end=4113,
-)
-
-
-_VALIDATEEARLYSTOPPINGSETTINGSREQUEST = _descriptor.Descriptor(
-  name='ValidateEarlyStoppingSettingsRequest',
-  full_name='api.v1.beta1.ValidateEarlyStoppingSettingsRequest',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='early_stopping', full_name='api.v1.beta1.ValidateEarlyStoppingSettingsRequest.early_stopping', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=4115,
-  serialized_end=4210,
-)
-
-
-_VALIDATEEARLYSTOPPINGSETTINGSREPLY = _descriptor.Descriptor(
-  name='ValidateEarlyStoppingSettingsReply',
-  full_name='api.v1.beta1.ValidateEarlyStoppingSettingsReply',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=4212,
-  serialized_end=4248,
-)
-
-
-_SETTRIALSTATUSREQUEST = _descriptor.Descriptor(
-  name='SetTrialStatusRequest',
-  full_name='api.v1.beta1.SetTrialStatusRequest',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='trial_name', full_name='api.v1.beta1.SetTrialStatusRequest.trial_name', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=4250,
-  serialized_end=4293,
-)
-
-
-_SETTRIALSTATUSREPLY = _descriptor.Descriptor(
-  name='SetTrialStatusReply',
-  full_name='api.v1.beta1.SetTrialStatusReply',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=4295,
-  serialized_end=4316,
-)
-
-_EXPERIMENT.fields_by_name['spec'].message_type = _EXPERIMENTSPEC
-_EXPERIMENTSPEC_PARAMETERSPECS.fields_by_name['parameters'].message_type = _PARAMETERSPEC
-_EXPERIMENTSPEC_PARAMETERSPECS.containing_type = _EXPERIMENTSPEC
-_EXPERIMENTSPEC.fields_by_name['parameter_specs'].message_type = _EXPERIMENTSPEC_PARAMETERSPECS
-_EXPERIMENTSPEC.fields_by_name['objective'].message_type = _OBJECTIVESPEC
-_EXPERIMENTSPEC.fields_by_name['algorithm'].message_type = _ALGORITHMSPEC
-_EXPERIMENTSPEC.fields_by_name['early_stopping'].message_type = _EARLYSTOPPINGSPEC
-_EXPERIMENTSPEC.fields_by_name['nas_config'].message_type = _NASCONFIG
-_PARAMETERSPEC.fields_by_name['parameter_type'].enum_type = _PARAMETERTYPE
-_PARAMETERSPEC.fields_by_name['feasible_space'].message_type = _FEASIBLESPACE
-_OBJECTIVESPEC.fields_by_name['type'].enum_type = _OBJECTIVETYPE
-_ALGORITHMSPEC.fields_by_name['algorithm_settings'].message_type = _ALGORITHMSETTING
-_EARLYSTOPPINGSPEC.fields_by_name['algorithm_settings'].message_type = _EARLYSTOPPINGSETTING
-_NASCONFIG_OPERATIONS.fields_by_name['operation'].message_type = _OPERATION
-_NASCONFIG_OPERATIONS.containing_type = _NASCONFIG
-_NASCONFIG.fields_by_name['graph_config'].message_type = _GRAPHCONFIG
-_NASCONFIG.fields_by_name['operations'].message_type = _NASCONFIG_OPERATIONS
-_OPERATION_PARAMETERSPECS.fields_by_name['parameters'].message_type = _PARAMETERSPEC
-_OPERATION_PARAMETERSPECS.containing_type = _OPERATION
-_OPERATION.fields_by_name['parameter_specs'].message_type = _OPERATION_PARAMETERSPECS
-_TRIAL.fields_by_name['spec'].message_type = _TRIALSPEC
-_TRIAL.fields_by_name['status'].message_type = _TRIALSTATUS
-_TRIALSPEC_PARAMETERASSIGNMENTS.fields_by_name['assignments'].message_type = _PARAMETERASSIGNMENT
-_TRIALSPEC_PARAMETERASSIGNMENTS.containing_type = _TRIALSPEC
-_TRIALSPEC_LABELSENTRY.containing_type = _TRIALSPEC
-_TRIALSPEC.fields_by_name['objective'].message_type = _OBJECTIVESPEC
-_TRIALSPEC.fields_by_name['parameter_assignments'].message_type = _TRIALSPEC_PARAMETERASSIGNMENTS
-_TRIALSPEC.fields_by_name['labels'].message_type = _TRIALSPEC_LABELSENTRY
-_TRIALSTATUS.fields_by_name['condition'].enum_type = _TRIALSTATUS_TRIALCONDITIONTYPE
-_TRIALSTATUS.fields_by_name['observation'].message_type = _OBSERVATION
-_TRIALSTATUS_TRIALCONDITIONTYPE.containing_type = _TRIALSTATUS
-_OBSERVATION.fields_by_name['metrics'].message_type = _METRIC
-_REPORTOBSERVATIONLOGREQUEST.fields_by_name['observation_log'].message_type = _OBSERVATIONLOG
-_OBSERVATIONLOG.fields_by_name['metric_logs'].message_type = _METRICLOG
-_METRICLOG.fields_by_name['metric'].message_type = _METRIC
-_GETOBSERVATIONLOGREPLY.fields_by_name['observation_log'].message_type = _OBSERVATIONLOG
-_GETSUGGESTIONSREQUEST.fields_by_name['experiment'].message_type = _EXPERIMENT
-_GETSUGGESTIONSREQUEST.fields_by_name['trials'].message_type = _TRIAL
-_GETSUGGESTIONSREPLY_PARAMETERASSIGNMENTS_LABELSENTRY.containing_type = _GETSUGGESTIONSREPLY_PARAMETERASSIGNMENTS
-_GETSUGGESTIONSREPLY_PARAMETERASSIGNMENTS.fields_by_name['assignments'].message_type = _PARAMETERASSIGNMENT
-_GETSUGGESTIONSREPLY_PARAMETERASSIGNMENTS.fields_by_name['labels'].message_type = _GETSUGGESTIONSREPLY_PARAMETERASSIGNMENTS_LABELSENTRY
-_GETSUGGESTIONSREPLY_PARAMETERASSIGNMENTS.containing_type = _GETSUGGESTIONSREPLY
-_GETSUGGESTIONSREPLY.fields_by_name['parameter_assignments'].message_type = _GETSUGGESTIONSREPLY_PARAMETERASSIGNMENTS
-_GETSUGGESTIONSREPLY.fields_by_name['algorithm'].message_type = _ALGORITHMSPEC
-_GETSUGGESTIONSREPLY.fields_by_name['early_stopping_rules'].message_type = _EARLYSTOPPINGRULE
-_VALIDATEALGORITHMSETTINGSREQUEST.fields_by_name['experiment'].message_type = _EXPERIMENT
-_GETEARLYSTOPPINGRULESREQUEST.fields_by_name['experiment'].message_type = _EXPERIMENT
-_GETEARLYSTOPPINGRULESREQUEST.fields_by_name['trials'].message_type = _TRIAL
-_GETEARLYSTOPPINGRULESREPLY.fields_by_name['early_stopping_rules'].message_type = _EARLYSTOPPINGRULE
-_EARLYSTOPPINGRULE.fields_by_name['comparison'].enum_type = _COMPARISONTYPE
-_VALIDATEEARLYSTOPPINGSETTINGSREQUEST.fields_by_name['early_stopping'].message_type = _EARLYSTOPPINGSPEC
-DESCRIPTOR.message_types_by_name['Experiment'] = _EXPERIMENT
-DESCRIPTOR.message_types_by_name['ExperimentSpec'] = _EXPERIMENTSPEC
-DESCRIPTOR.message_types_by_name['ParameterSpec'] = _PARAMETERSPEC
-DESCRIPTOR.message_types_by_name['FeasibleSpace'] = _FEASIBLESPACE
-DESCRIPTOR.message_types_by_name['ObjectiveSpec'] = _OBJECTIVESPEC
-DESCRIPTOR.message_types_by_name['AlgorithmSpec'] = _ALGORITHMSPEC
-DESCRIPTOR.message_types_by_name['AlgorithmSetting'] = _ALGORITHMSETTING
-DESCRIPTOR.message_types_by_name['EarlyStoppingSpec'] = _EARLYSTOPPINGSPEC
-DESCRIPTOR.message_types_by_name['EarlyStoppingSetting'] = _EARLYSTOPPINGSETTING
-DESCRIPTOR.message_types_by_name['NasConfig'] = _NASCONFIG
-DESCRIPTOR.message_types_by_name['GraphConfig'] = _GRAPHCONFIG
-DESCRIPTOR.message_types_by_name['Operation'] = _OPERATION
-DESCRIPTOR.message_types_by_name['Trial'] = _TRIAL
-DESCRIPTOR.message_types_by_name['TrialSpec'] = _TRIALSPEC
-DESCRIPTOR.message_types_by_name['ParameterAssignment'] = _PARAMETERASSIGNMENT
-DESCRIPTOR.message_types_by_name['TrialStatus'] = _TRIALSTATUS
-DESCRIPTOR.message_types_by_name['Observation'] = _OBSERVATION
-DESCRIPTOR.message_types_by_name['Metric'] = _METRIC
-DESCRIPTOR.message_types_by_name['ReportObservationLogRequest'] = _REPORTOBSERVATIONLOGREQUEST
-DESCRIPTOR.message_types_by_name['ReportObservationLogReply'] = _REPORTOBSERVATIONLOGREPLY
-DESCRIPTOR.message_types_by_name['ObservationLog'] = _OBSERVATIONLOG
-DESCRIPTOR.message_types_by_name['MetricLog'] = _METRICLOG
-DESCRIPTOR.message_types_by_name['GetObservationLogRequest'] = _GETOBSERVATIONLOGREQUEST
-DESCRIPTOR.message_types_by_name['GetObservationLogReply'] = _GETOBSERVATIONLOGREPLY
-DESCRIPTOR.message_types_by_name['DeleteObservationLogRequest'] = _DELETEOBSERVATIONLOGREQUEST
-DESCRIPTOR.message_types_by_name['DeleteObservationLogReply'] = _DELETEOBSERVATIONLOGREPLY
-DESCRIPTOR.message_types_by_name['GetSuggestionsRequest'] = _GETSUGGESTIONSREQUEST
-DESCRIPTOR.message_types_by_name['GetSuggestionsReply'] = _GETSUGGESTIONSREPLY
-DESCRIPTOR.message_types_by_name['ValidateAlgorithmSettingsRequest'] = _VALIDATEALGORITHMSETTINGSREQUEST
-DESCRIPTOR.message_types_by_name['ValidateAlgorithmSettingsReply'] = _VALIDATEALGORITHMSETTINGSREPLY
-DESCRIPTOR.message_types_by_name['GetEarlyStoppingRulesRequest'] = _GETEARLYSTOPPINGRULESREQUEST
-DESCRIPTOR.message_types_by_name['GetEarlyStoppingRulesReply'] = _GETEARLYSTOPPINGRULESREPLY
-DESCRIPTOR.message_types_by_name['EarlyStoppingRule'] = _EARLYSTOPPINGRULE
-DESCRIPTOR.message_types_by_name['ValidateEarlyStoppingSettingsRequest'] = _VALIDATEEARLYSTOPPINGSETTINGSREQUEST
-DESCRIPTOR.message_types_by_name['ValidateEarlyStoppingSettingsReply'] = _VALIDATEEARLYSTOPPINGSETTINGSREPLY
-DESCRIPTOR.message_types_by_name['SetTrialStatusRequest'] = _SETTRIALSTATUSREQUEST
-DESCRIPTOR.message_types_by_name['SetTrialStatusReply'] = _SETTRIALSTATUSREPLY
-DESCRIPTOR.enum_types_by_name['ParameterType'] = _PARAMETERTYPE
-DESCRIPTOR.enum_types_by_name['ObjectiveType'] = _OBJECTIVETYPE
-DESCRIPTOR.enum_types_by_name['ComparisonType'] = _COMPARISONTYPE
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-Experiment = _reflection.GeneratedProtocolMessageType('Experiment', (_message.Message,), dict(
-  DESCRIPTOR = _EXPERIMENT,
-  __module__ = 'api_pb2'
-  # @@protoc_insertion_point(class_scope:api.v1.beta1.Experiment)
-  ))
-_sym_db.RegisterMessage(Experiment)
-
-ExperimentSpec = _reflection.GeneratedProtocolMessageType('ExperimentSpec', (_message.Message,), dict(
-
-  ParameterSpecs = _reflection.GeneratedProtocolMessageType('ParameterSpecs', (_message.Message,), dict(
-    DESCRIPTOR = _EXPERIMENTSPEC_PARAMETERSPECS,
-    __module__ = 'api_pb2'
-    # @@protoc_insertion_point(class_scope:api.v1.beta1.ExperimentSpec.ParameterSpecs)
-    ))
-  ,
-  DESCRIPTOR = _EXPERIMENTSPEC,
-  __module__ = 'api_pb2'
-  # @@protoc_insertion_point(class_scope:api.v1.beta1.ExperimentSpec)
-  ))
-_sym_db.RegisterMessage(ExperimentSpec)
-_sym_db.RegisterMessage(ExperimentSpec.ParameterSpecs)
-
-ParameterSpec = _reflection.GeneratedProtocolMessageType('ParameterSpec', (_message.Message,), dict(
-  DESCRIPTOR = _PARAMETERSPEC,
-  __module__ = 'api_pb2'
-  # @@protoc_insertion_point(class_scope:api.v1.beta1.ParameterSpec)
-  ))
-_sym_db.RegisterMessage(ParameterSpec)
-
-FeasibleSpace = _reflection.GeneratedProtocolMessageType('FeasibleSpace', (_message.Message,), dict(
-  DESCRIPTOR = _FEASIBLESPACE,
-  __module__ = 'api_pb2'
-  # @@protoc_insertion_point(class_scope:api.v1.beta1.FeasibleSpace)
-  ))
-_sym_db.RegisterMessage(FeasibleSpace)
-
-ObjectiveSpec = _reflection.GeneratedProtocolMessageType('ObjectiveSpec', (_message.Message,), dict(
-  DESCRIPTOR = _OBJECTIVESPEC,
-  __module__ = 'api_pb2'
-  # @@protoc_insertion_point(class_scope:api.v1.beta1.ObjectiveSpec)
-  ))
-_sym_db.RegisterMessage(ObjectiveSpec)
-
-AlgorithmSpec = _reflection.GeneratedProtocolMessageType('AlgorithmSpec', (_message.Message,), dict(
-  DESCRIPTOR = _ALGORITHMSPEC,
-  __module__ = 'api_pb2'
-  # @@protoc_insertion_point(class_scope:api.v1.beta1.AlgorithmSpec)
-  ))
-_sym_db.RegisterMessage(AlgorithmSpec)
-
-AlgorithmSetting = _reflection.GeneratedProtocolMessageType('AlgorithmSetting', (_message.Message,), dict(
-  DESCRIPTOR = _ALGORITHMSETTING,
-  __module__ = 'api_pb2'
-  # @@protoc_insertion_point(class_scope:api.v1.beta1.AlgorithmSetting)
-  ))
-_sym_db.RegisterMessage(AlgorithmSetting)
-
-EarlyStoppingSpec = _reflection.GeneratedProtocolMessageType('EarlyStoppingSpec', (_message.Message,), dict(
-  DESCRIPTOR = _EARLYSTOPPINGSPEC,
-  __module__ = 'api_pb2'
-  # @@protoc_insertion_point(class_scope:api.v1.beta1.EarlyStoppingSpec)
-  ))
-_sym_db.RegisterMessage(EarlyStoppingSpec)
-
-EarlyStoppingSetting = _reflection.GeneratedProtocolMessageType('EarlyStoppingSetting', (_message.Message,), dict(
-  DESCRIPTOR = _EARLYSTOPPINGSETTING,
-  __module__ = 'api_pb2'
-  # @@protoc_insertion_point(class_scope:api.v1.beta1.EarlyStoppingSetting)
-  ))
-_sym_db.RegisterMessage(EarlyStoppingSetting)
-
-NasConfig = _reflection.GeneratedProtocolMessageType('NasConfig', (_message.Message,), dict(
-
-  Operations = _reflection.GeneratedProtocolMessageType('Operations', (_message.Message,), dict(
-    DESCRIPTOR = _NASCONFIG_OPERATIONS,
-    __module__ = 'api_pb2'
-    # @@protoc_insertion_point(class_scope:api.v1.beta1.NasConfig.Operations)
-    ))
-  ,
-  DESCRIPTOR = _NASCONFIG,
-  __module__ = 'api_pb2'
-  # @@protoc_insertion_point(class_scope:api.v1.beta1.NasConfig)
-  ))
-_sym_db.RegisterMessage(NasConfig)
-_sym_db.RegisterMessage(NasConfig.Operations)
-
-GraphConfig = _reflection.GeneratedProtocolMessageType('GraphConfig', (_message.Message,), dict(
-  DESCRIPTOR = _GRAPHCONFIG,
-  __module__ = 'api_pb2'
-  # @@protoc_insertion_point(class_scope:api.v1.beta1.GraphConfig)
-  ))
-_sym_db.RegisterMessage(GraphConfig)
-
-Operation = _reflection.GeneratedProtocolMessageType('Operation', (_message.Message,), dict(
-
-  ParameterSpecs = _reflection.GeneratedProtocolMessageType('ParameterSpecs', (_message.Message,), dict(
-    DESCRIPTOR = _OPERATION_PARAMETERSPECS,
-    __module__ = 'api_pb2'
-    # @@protoc_insertion_point(class_scope:api.v1.beta1.Operation.ParameterSpecs)
-    ))
-  ,
-  DESCRIPTOR = _OPERATION,
-  __module__ = 'api_pb2'
-  # @@protoc_insertion_point(class_scope:api.v1.beta1.Operation)
-  ))
-_sym_db.RegisterMessage(Operation)
-_sym_db.RegisterMessage(Operation.ParameterSpecs)
-
-Trial = _reflection.GeneratedProtocolMessageType('Trial', (_message.Message,), dict(
-  DESCRIPTOR = _TRIAL,
-  __module__ = 'api_pb2'
-  # @@protoc_insertion_point(class_scope:api.v1.beta1.Trial)
-  ))
-_sym_db.RegisterMessage(Trial)
-
-TrialSpec = _reflection.GeneratedProtocolMessageType('TrialSpec', (_message.Message,), dict(
-
-  ParameterAssignments = _reflection.GeneratedProtocolMessageType('ParameterAssignments', (_message.Message,), dict(
-    DESCRIPTOR = _TRIALSPEC_PARAMETERASSIGNMENTS,
-    __module__ = 'api_pb2'
-    # @@protoc_insertion_point(class_scope:api.v1.beta1.TrialSpec.ParameterAssignments)
-    ))
-  ,
-
-  LabelsEntry = _reflection.GeneratedProtocolMessageType('LabelsEntry', (_message.Message,), dict(
-    DESCRIPTOR = _TRIALSPEC_LABELSENTRY,
-    __module__ = 'api_pb2'
-    # @@protoc_insertion_point(class_scope:api.v1.beta1.TrialSpec.LabelsEntry)
-    ))
-  ,
-  DESCRIPTOR = _TRIALSPEC,
-  __module__ = 'api_pb2'
-  # @@protoc_insertion_point(class_scope:api.v1.beta1.TrialSpec)
-  ))
-_sym_db.RegisterMessage(TrialSpec)
-_sym_db.RegisterMessage(TrialSpec.ParameterAssignments)
-_sym_db.RegisterMessage(TrialSpec.LabelsEntry)
-
-ParameterAssignment = _reflection.GeneratedProtocolMessageType('ParameterAssignment', (_message.Message,), dict(
-  DESCRIPTOR = _PARAMETERASSIGNMENT,
-  __module__ = 'api_pb2'
-  # @@protoc_insertion_point(class_scope:api.v1.beta1.ParameterAssignment)
-  ))
-_sym_db.RegisterMessage(ParameterAssignment)
-
-TrialStatus = _reflection.GeneratedProtocolMessageType('TrialStatus', (_message.Message,), dict(
-  DESCRIPTOR = _TRIALSTATUS,
-  __module__ = 'api_pb2'
-  # @@protoc_insertion_point(class_scope:api.v1.beta1.TrialStatus)
-  ))
-_sym_db.RegisterMessage(TrialStatus)
-
-Observation = _reflection.GeneratedProtocolMessageType('Observation', (_message.Message,), dict(
-  DESCRIPTOR = _OBSERVATION,
-  __module__ = 'api_pb2'
-  # @@protoc_insertion_point(class_scope:api.v1.beta1.Observation)
-  ))
-_sym_db.RegisterMessage(Observation)
-
-Metric = _reflection.GeneratedProtocolMessageType('Metric', (_message.Message,), dict(
-  DESCRIPTOR = _METRIC,
-  __module__ = 'api_pb2'
-  # @@protoc_insertion_point(class_scope:api.v1.beta1.Metric)
-  ))
-_sym_db.RegisterMessage(Metric)
-
-ReportObservationLogRequest = _reflection.GeneratedProtocolMessageType('ReportObservationLogRequest', (_message.Message,), dict(
-  DESCRIPTOR = _REPORTOBSERVATIONLOGREQUEST,
-  __module__ = 'api_pb2'
-  # @@protoc_insertion_point(class_scope:api.v1.beta1.ReportObservationLogRequest)
-  ))
-_sym_db.RegisterMessage(ReportObservationLogRequest)
-
-ReportObservationLogReply = _reflection.GeneratedProtocolMessageType('ReportObservationLogReply', (_message.Message,), dict(
-  DESCRIPTOR = _REPORTOBSERVATIONLOGREPLY,
-  __module__ = 'api_pb2'
-  # @@protoc_insertion_point(class_scope:api.v1.beta1.ReportObservationLogReply)
-  ))
-_sym_db.RegisterMessage(ReportObservationLogReply)
-
-ObservationLog = _reflection.GeneratedProtocolMessageType('ObservationLog', (_message.Message,), dict(
-  DESCRIPTOR = _OBSERVATIONLOG,
-  __module__ = 'api_pb2'
-  # @@protoc_insertion_point(class_scope:api.v1.beta1.ObservationLog)
-  ))
-_sym_db.RegisterMessage(ObservationLog)
-
-MetricLog = _reflection.GeneratedProtocolMessageType('MetricLog', (_message.Message,), dict(
-  DESCRIPTOR = _METRICLOG,
-  __module__ = 'api_pb2'
-  # @@protoc_insertion_point(class_scope:api.v1.beta1.MetricLog)
-  ))
-_sym_db.RegisterMessage(MetricLog)
-
-GetObservationLogRequest = _reflection.GeneratedProtocolMessageType('GetObservationLogRequest', (_message.Message,), dict(
-  DESCRIPTOR = _GETOBSERVATIONLOGREQUEST,
-  __module__ = 'api_pb2'
-  # @@protoc_insertion_point(class_scope:api.v1.beta1.GetObservationLogRequest)
-  ))
-_sym_db.RegisterMessage(GetObservationLogRequest)
-
-GetObservationLogReply = _reflection.GeneratedProtocolMessageType('GetObservationLogReply', (_message.Message,), dict(
-  DESCRIPTOR = _GETOBSERVATIONLOGREPLY,
-  __module__ = 'api_pb2'
-  # @@protoc_insertion_point(class_scope:api.v1.beta1.GetObservationLogReply)
-  ))
-_sym_db.RegisterMessage(GetObservationLogReply)
-
-DeleteObservationLogRequest = _reflection.GeneratedProtocolMessageType('DeleteObservationLogRequest', (_message.Message,), dict(
-  DESCRIPTOR = _DELETEOBSERVATIONLOGREQUEST,
-  __module__ = 'api_pb2'
-  # @@protoc_insertion_point(class_scope:api.v1.beta1.DeleteObservationLogRequest)
-  ))
-_sym_db.RegisterMessage(DeleteObservationLogRequest)
-
-DeleteObservationLogReply = _reflection.GeneratedProtocolMessageType('DeleteObservationLogReply', (_message.Message,), dict(
-  DESCRIPTOR = _DELETEOBSERVATIONLOGREPLY,
-  __module__ = 'api_pb2'
-  # @@protoc_insertion_point(class_scope:api.v1.beta1.DeleteObservationLogReply)
-  ))
-_sym_db.RegisterMessage(DeleteObservationLogReply)
-
-GetSuggestionsRequest = _reflection.GeneratedProtocolMessageType('GetSuggestionsRequest', (_message.Message,), dict(
-  DESCRIPTOR = _GETSUGGESTIONSREQUEST,
-  __module__ = 'api_pb2'
-  # @@protoc_insertion_point(class_scope:api.v1.beta1.GetSuggestionsRequest)
-  ))
-_sym_db.RegisterMessage(GetSuggestionsRequest)
-
-GetSuggestionsReply = _reflection.GeneratedProtocolMessageType('GetSuggestionsReply', (_message.Message,), dict(
-
-  ParameterAssignments = _reflection.GeneratedProtocolMessageType('ParameterAssignments', (_message.Message,), dict(
-
-    LabelsEntry = _reflection.GeneratedProtocolMessageType('LabelsEntry', (_message.Message,), dict(
-      DESCRIPTOR = _GETSUGGESTIONSREPLY_PARAMETERASSIGNMENTS_LABELSENTRY,
-      __module__ = 'api_pb2'
-      # @@protoc_insertion_point(class_scope:api.v1.beta1.GetSuggestionsReply.ParameterAssignments.LabelsEntry)
-      ))
-    ,
-    DESCRIPTOR = _GETSUGGESTIONSREPLY_PARAMETERASSIGNMENTS,
-    __module__ = 'api_pb2'
-    # @@protoc_insertion_point(class_scope:api.v1.beta1.GetSuggestionsReply.ParameterAssignments)
-    ))
-  ,
-  DESCRIPTOR = _GETSUGGESTIONSREPLY,
-  __module__ = 'api_pb2'
-  # @@protoc_insertion_point(class_scope:api.v1.beta1.GetSuggestionsReply)
-  ))
-_sym_db.RegisterMessage(GetSuggestionsReply)
-_sym_db.RegisterMessage(GetSuggestionsReply.ParameterAssignments)
-_sym_db.RegisterMessage(GetSuggestionsReply.ParameterAssignments.LabelsEntry)
-
-ValidateAlgorithmSettingsRequest = _reflection.GeneratedProtocolMessageType('ValidateAlgorithmSettingsRequest', (_message.Message,), dict(
-  DESCRIPTOR = _VALIDATEALGORITHMSETTINGSREQUEST,
-  __module__ = 'api_pb2'
-  # @@protoc_insertion_point(class_scope:api.v1.beta1.ValidateAlgorithmSettingsRequest)
-  ))
-_sym_db.RegisterMessage(ValidateAlgorithmSettingsRequest)
-
-ValidateAlgorithmSettingsReply = _reflection.GeneratedProtocolMessageType('ValidateAlgorithmSettingsReply', (_message.Message,), dict(
-  DESCRIPTOR = _VALIDATEALGORITHMSETTINGSREPLY,
-  __module__ = 'api_pb2'
-  # @@protoc_insertion_point(class_scope:api.v1.beta1.ValidateAlgorithmSettingsReply)
-  ))
-_sym_db.RegisterMessage(ValidateAlgorithmSettingsReply)
-
-GetEarlyStoppingRulesRequest = _reflection.GeneratedProtocolMessageType('GetEarlyStoppingRulesRequest', (_message.Message,), dict(
-  DESCRIPTOR = _GETEARLYSTOPPINGRULESREQUEST,
-  __module__ = 'api_pb2'
-  # @@protoc_insertion_point(class_scope:api.v1.beta1.GetEarlyStoppingRulesRequest)
-  ))
-_sym_db.RegisterMessage(GetEarlyStoppingRulesRequest)
-
-GetEarlyStoppingRulesReply = _reflection.GeneratedProtocolMessageType('GetEarlyStoppingRulesReply', (_message.Message,), dict(
-  DESCRIPTOR = _GETEARLYSTOPPINGRULESREPLY,
-  __module__ = 'api_pb2'
-  # @@protoc_insertion_point(class_scope:api.v1.beta1.GetEarlyStoppingRulesReply)
-  ))
-_sym_db.RegisterMessage(GetEarlyStoppingRulesReply)
-
-EarlyStoppingRule = _reflection.GeneratedProtocolMessageType('EarlyStoppingRule', (_message.Message,), dict(
-  DESCRIPTOR = _EARLYSTOPPINGRULE,
-  __module__ = 'api_pb2'
-  # @@protoc_insertion_point(class_scope:api.v1.beta1.EarlyStoppingRule)
-  ))
-_sym_db.RegisterMessage(EarlyStoppingRule)
-
-ValidateEarlyStoppingSettingsRequest = _reflection.GeneratedProtocolMessageType('ValidateEarlyStoppingSettingsRequest', (_message.Message,), dict(
-  DESCRIPTOR = _VALIDATEEARLYSTOPPINGSETTINGSREQUEST,
-  __module__ = 'api_pb2'
-  # @@protoc_insertion_point(class_scope:api.v1.beta1.ValidateEarlyStoppingSettingsRequest)
-  ))
-_sym_db.RegisterMessage(ValidateEarlyStoppingSettingsRequest)
-
-ValidateEarlyStoppingSettingsReply = _reflection.GeneratedProtocolMessageType('ValidateEarlyStoppingSettingsReply', (_message.Message,), dict(
-  DESCRIPTOR = _VALIDATEEARLYSTOPPINGSETTINGSREPLY,
-  __module__ = 'api_pb2'
-  # @@protoc_insertion_point(class_scope:api.v1.beta1.ValidateEarlyStoppingSettingsReply)
-  ))
-_sym_db.RegisterMessage(ValidateEarlyStoppingSettingsReply)
-
-SetTrialStatusRequest = _reflection.GeneratedProtocolMessageType('SetTrialStatusRequest', (_message.Message,), dict(
-  DESCRIPTOR = _SETTRIALSTATUSREQUEST,
-  __module__ = 'api_pb2'
-  # @@protoc_insertion_point(class_scope:api.v1.beta1.SetTrialStatusRequest)
-  ))
-_sym_db.RegisterMessage(SetTrialStatusRequest)
-
-SetTrialStatusReply = _reflection.GeneratedProtocolMessageType('SetTrialStatusReply', (_message.Message,), dict(
-  DESCRIPTOR = _SETTRIALSTATUSREPLY,
-  __module__ = 'api_pb2'
-  # @@protoc_insertion_point(class_scope:api.v1.beta1.SetTrialStatusReply)
-  ))
-_sym_db.RegisterMessage(SetTrialStatusReply)
-
-
-_TRIALSPEC_LABELSENTRY.has_options = True
-_TRIALSPEC_LABELSENTRY._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001'))
-_GETSUGGESTIONSREPLY_PARAMETERASSIGNMENTS_LABELSENTRY.has_options = True
-_GETSUGGESTIONSREPLY_PARAMETERASSIGNMENTS_LABELSENTRY._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), _b('8\001'))
-
-_DBMANAGER = _descriptor.ServiceDescriptor(
-  name='DBManager',
-  full_name='api.v1.beta1.DBManager',
-  file=DESCRIPTOR,
-  index=0,
-  options=None,
-  serialized_start=4540,
-  serialized_end=4866,
-  methods=[
-  _descriptor.MethodDescriptor(
-    name='ReportObservationLog',
-    full_name='api.v1.beta1.DBManager.ReportObservationLog',
-    index=0,
-    containing_service=None,
-    input_type=_REPORTOBSERVATIONLOGREQUEST,
-    output_type=_REPORTOBSERVATIONLOGREPLY,
-    options=None,
-  ),
-  _descriptor.MethodDescriptor(
-    name='GetObservationLog',
-    full_name='api.v1.beta1.DBManager.GetObservationLog',
-    index=1,
-    containing_service=None,
-    input_type=_GETOBSERVATIONLOGREQUEST,
-    output_type=_GETOBSERVATIONLOGREPLY,
-    options=None,
-  ),
-  _descriptor.MethodDescriptor(
-    name='DeleteObservationLog',
-    full_name='api.v1.beta1.DBManager.DeleteObservationLog',
-    index=2,
-    containing_service=None,
-    input_type=_DELETEOBSERVATIONLOGREQUEST,
-    output_type=_DELETEOBSERVATIONLOGREPLY,
-    options=None,
-  ),
-])
-_sym_db.RegisterServiceDescriptor(_DBMANAGER)
-
-DESCRIPTOR.services_by_name['DBManager'] = _DBMANAGER
-
-
-_SUGGESTION = _descriptor.ServiceDescriptor(
-  name='Suggestion',
-  full_name='api.v1.beta1.Suggestion',
-  file=DESCRIPTOR,
-  index=1,
-  options=None,
-  serialized_start=4869,
-  serialized_end=5094,
-  methods=[
-  _descriptor.MethodDescriptor(
-    name='GetSuggestions',
-    full_name='api.v1.beta1.Suggestion.GetSuggestions',
-    index=0,
-    containing_service=None,
-    input_type=_GETSUGGESTIONSREQUEST,
-    output_type=_GETSUGGESTIONSREPLY,
-    options=None,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ValidateAlgorithmSettings',
-    full_name='api.v1.beta1.Suggestion.ValidateAlgorithmSettings',
-    index=1,
-    containing_service=None,
-    input_type=_VALIDATEALGORITHMSETTINGSREQUEST,
-    output_type=_VALIDATEALGORITHMSETTINGSREPLY,
-    options=None,
-  ),
-])
-_sym_db.RegisterServiceDescriptor(_SUGGESTION)
-
-DESCRIPTOR.services_by_name['Suggestion'] = _SUGGESTION
-
-
-_EARLYSTOPPING = _descriptor.ServiceDescriptor(
-  name='EarlyStopping',
-  full_name='api.v1.beta1.EarlyStopping',
-  file=DESCRIPTOR,
-  index=2,
-  options=None,
-  serialized_start=5097,
-  serialized_end=5449,
-  methods=[
-  _descriptor.MethodDescriptor(
-    name='GetEarlyStoppingRules',
-    full_name='api.v1.beta1.EarlyStopping.GetEarlyStoppingRules',
-    index=0,
-    containing_service=None,
-    input_type=_GETEARLYSTOPPINGRULESREQUEST,
-    output_type=_GETEARLYSTOPPINGRULESREPLY,
-    options=None,
-  ),
-  _descriptor.MethodDescriptor(
-    name='SetTrialStatus',
-    full_name='api.v1.beta1.EarlyStopping.SetTrialStatus',
-    index=1,
-    containing_service=None,
-    input_type=_SETTRIALSTATUSREQUEST,
-    output_type=_SETTRIALSTATUSREPLY,
-    options=None,
-  ),
-  _descriptor.MethodDescriptor(
-    name='ValidateEarlyStoppingSettings',
-    full_name='api.v1.beta1.EarlyStopping.ValidateEarlyStoppingSettings',
-    index=2,
-    containing_service=None,
-    input_type=_VALIDATEEARLYSTOPPINGSETTINGSREQUEST,
-    output_type=_VALIDATEEARLYSTOPPINGSETTINGSREPLY,
-    options=None,
-  ),
-])
-_sym_db.RegisterServiceDescriptor(_EARLYSTOPPING)
-
-DESCRIPTOR.services_by_name['EarlyStopping'] = _EARLYSTOPPING
-
-try:
-  # THESE ELEMENTS WILL BE DEPRECATED.
-  # Please use the generated *_pb2_grpc.py files instead.
-  import grpc
-  from grpc.beta import implementations as beta_implementations
-  from grpc.beta import interfaces as beta_interfaces
-  from grpc.framework.common import cardinality
-  from grpc.framework.interfaces.face import utilities as face_utilities
-
-
-  class DBManagerStub(object):
-    """*
-    DBManager service defines APIs to manage Katib database.
-    """
-
-    def __init__(self, channel):
-      """Constructor.
-
-      Args:
-        channel: A grpc.Channel.
-      """
-      self.ReportObservationLog = channel.unary_unary(
-          '/api.v1.beta1.DBManager/ReportObservationLog',
-          request_serializer=ReportObservationLogRequest.SerializeToString,
-          response_deserializer=ReportObservationLogReply.FromString,
-          )
-      self.GetObservationLog = channel.unary_unary(
-          '/api.v1.beta1.DBManager/GetObservationLog',
-          request_serializer=GetObservationLogRequest.SerializeToString,
-          response_deserializer=GetObservationLogReply.FromString,
-          )
-      self.DeleteObservationLog = channel.unary_unary(
-          '/api.v1.beta1.DBManager/DeleteObservationLog',
-          request_serializer=DeleteObservationLogRequest.SerializeToString,
-          response_deserializer=DeleteObservationLogReply.FromString,
-          )
-
-
-  class DBManagerServicer(object):
-    """*
-    DBManager service defines APIs to manage Katib database.
-    """
-
-    def ReportObservationLog(self, request, context):
-      """* 
-      Report a log of Observations for a Trial.
-      The log consists of timestamp and value of metric.
-      Katib store every log of metrics.
-      You can see accuracy curve or other metric logs on UI.
-      """
-      context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-      context.set_details('Method not implemented!')
-      raise NotImplementedError('Method not implemented!')
-
-    def GetObservationLog(self, request, context):
-      """*
-      Get all log of Observations for a Trial.
-      """
-      context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-      context.set_details('Method not implemented!')
-      raise NotImplementedError('Method not implemented!')
-
-    def DeleteObservationLog(self, request, context):
-      """*
-      Delete all log of Observations for a Trial.
-      """
-      context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-      context.set_details('Method not implemented!')
-      raise NotImplementedError('Method not implemented!')
-
-
-  def add_DBManagerServicer_to_server(servicer, server):
-    rpc_method_handlers = {
-        'ReportObservationLog': grpc.unary_unary_rpc_method_handler(
-            servicer.ReportObservationLog,
-            request_deserializer=ReportObservationLogRequest.FromString,
-            response_serializer=ReportObservationLogReply.SerializeToString,
-        ),
-        'GetObservationLog': grpc.unary_unary_rpc_method_handler(
-            servicer.GetObservationLog,
-            request_deserializer=GetObservationLogRequest.FromString,
-            response_serializer=GetObservationLogReply.SerializeToString,
-        ),
-        'DeleteObservationLog': grpc.unary_unary_rpc_method_handler(
-            servicer.DeleteObservationLog,
-            request_deserializer=DeleteObservationLogRequest.FromString,
-            response_serializer=DeleteObservationLogReply.SerializeToString,
-        ),
-    }
-    generic_handler = grpc.method_handlers_generic_handler(
-        'api.v1.beta1.DBManager', rpc_method_handlers)
-    server.add_generic_rpc_handlers((generic_handler,))
-
-
-  class SuggestionStub(object):
-    """*
-    Suggestion service defines APIs to manage Katib Suggestion from HP or NAS algorithms
-    """
-
-    def __init__(self, channel):
-      """Constructor.
-
-      Args:
-        channel: A grpc.Channel.
-      """
-      self.GetSuggestions = channel.unary_unary(
-          '/api.v1.beta1.Suggestion/GetSuggestions',
-          request_serializer=GetSuggestionsRequest.SerializeToString,
-          response_deserializer=GetSuggestionsReply.FromString,
-          )
-      self.ValidateAlgorithmSettings = channel.unary_unary(
-          '/api.v1.beta1.Suggestion/ValidateAlgorithmSettings',
-          request_serializer=ValidateAlgorithmSettingsRequest.SerializeToString,
-          response_deserializer=ValidateAlgorithmSettingsReply.FromString,
-          )
-
-
-  class SuggestionServicer(object):
-    """*
-    Suggestion service defines APIs to manage Katib Suggestion from HP or NAS algorithms
-    """
-
-    def GetSuggestions(self, request, context):
-      # missing associated documentation comment in .proto file
-      pass
-      context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-      context.set_details('Method not implemented!')
-      raise NotImplementedError('Method not implemented!')
-
-    def ValidateAlgorithmSettings(self, request, context):
-      # missing associated documentation comment in .proto file
-      pass
-      context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-      context.set_details('Method not implemented!')
-      raise NotImplementedError('Method not implemented!')
-
-
-  def add_SuggestionServicer_to_server(servicer, server):
-    rpc_method_handlers = {
-        'GetSuggestions': grpc.unary_unary_rpc_method_handler(
-            servicer.GetSuggestions,
-            request_deserializer=GetSuggestionsRequest.FromString,
-            response_serializer=GetSuggestionsReply.SerializeToString,
-        ),
-        'ValidateAlgorithmSettings': grpc.unary_unary_rpc_method_handler(
-            servicer.ValidateAlgorithmSettings,
-            request_deserializer=ValidateAlgorithmSettingsRequest.FromString,
-            response_serializer=ValidateAlgorithmSettingsReply.SerializeToString,
-        ),
-    }
-    generic_handler = grpc.method_handlers_generic_handler(
-        'api.v1.beta1.Suggestion', rpc_method_handlers)
-    server.add_generic_rpc_handlers((generic_handler,))
-
-
-  class EarlyStoppingStub(object):
-    """*
-    EarlyStopping service defines APIs to manage Katib Early Stopping algorithms
-    """
-
-    def __init__(self, channel):
-      """Constructor.
-
-      Args:
-        channel: A grpc.Channel.
-      """
-      self.GetEarlyStoppingRules = channel.unary_unary(
-          '/api.v1.beta1.EarlyStopping/GetEarlyStoppingRules',
-          request_serializer=GetEarlyStoppingRulesRequest.SerializeToString,
-          response_deserializer=GetEarlyStoppingRulesReply.FromString,
-          )
-      self.SetTrialStatus = channel.unary_unary(
-          '/api.v1.beta1.EarlyStopping/SetTrialStatus',
-          request_serializer=SetTrialStatusRequest.SerializeToString,
-          response_deserializer=SetTrialStatusReply.FromString,
-          )
-      self.ValidateEarlyStoppingSettings = channel.unary_unary(
-          '/api.v1.beta1.EarlyStopping/ValidateEarlyStoppingSettings',
-          request_serializer=ValidateEarlyStoppingSettingsRequest.SerializeToString,
-          response_deserializer=ValidateEarlyStoppingSettingsReply.FromString,
-          )
-
-
-  class EarlyStoppingServicer(object):
-    """*
-    EarlyStopping service defines APIs to manage Katib Early Stopping algorithms
-    """
-
-    def GetEarlyStoppingRules(self, request, context):
-      # missing associated documentation comment in .proto file
-      pass
-      context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-      context.set_details('Method not implemented!')
-      raise NotImplementedError('Method not implemented!')
-
-    def SetTrialStatus(self, request, context):
-      # missing associated documentation comment in .proto file
-      pass
-      context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-      context.set_details('Method not implemented!')
-      raise NotImplementedError('Method not implemented!')
-
-    def ValidateEarlyStoppingSettings(self, request, context):
-      # missing associated documentation comment in .proto file
-      pass
-      context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-      context.set_details('Method not implemented!')
-      raise NotImplementedError('Method not implemented!')
-
-
-  def add_EarlyStoppingServicer_to_server(servicer, server):
-    rpc_method_handlers = {
-        'GetEarlyStoppingRules': grpc.unary_unary_rpc_method_handler(
-            servicer.GetEarlyStoppingRules,
-            request_deserializer=GetEarlyStoppingRulesRequest.FromString,
-            response_serializer=GetEarlyStoppingRulesReply.SerializeToString,
-        ),
-        'SetTrialStatus': grpc.unary_unary_rpc_method_handler(
-            servicer.SetTrialStatus,
-            request_deserializer=SetTrialStatusRequest.FromString,
-            response_serializer=SetTrialStatusReply.SerializeToString,
-        ),
-        'ValidateEarlyStoppingSettings': grpc.unary_unary_rpc_method_handler(
-            servicer.ValidateEarlyStoppingSettings,
-            request_deserializer=ValidateEarlyStoppingSettingsRequest.FromString,
-            response_serializer=ValidateEarlyStoppingSettingsReply.SerializeToString,
-        ),
-    }
-    generic_handler = grpc.method_handlers_generic_handler(
-        'api.v1.beta1.EarlyStopping', rpc_method_handlers)
-    server.add_generic_rpc_handlers((generic_handler,))
-
-
-  class BetaDBManagerServicer(object):
-    """The Beta API is deprecated for 0.15.0 and later.
-
-    It is recommended to use the GA API (classes and functions in this
-    file not marked beta) for all further purposes. This class was generated
-    only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0."""
-    """*
-    DBManager service defines APIs to manage Katib database.
-    """
-    def ReportObservationLog(self, request, context):
-      """* 
-      Report a log of Observations for a Trial.
-      The log consists of timestamp and value of metric.
-      Katib store every log of metrics.
-      You can see accuracy curve or other metric logs on UI.
-      """
-      context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
-    def GetObservationLog(self, request, context):
-      """*
-      Get all log of Observations for a Trial.
-      """
-      context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
-    def DeleteObservationLog(self, request, context):
-      """*
-      Delete all log of Observations for a Trial.
-      """
-      context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
-
-
-  class BetaDBManagerStub(object):
-    """The Beta API is deprecated for 0.15.0 and later.
-
-    It is recommended to use the GA API (classes and functions in this
-    file not marked beta) for all further purposes. This class was generated
-    only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0."""
-    """*
-    DBManager service defines APIs to manage Katib database.
-    """
-    def ReportObservationLog(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
-      """* 
-      Report a log of Observations for a Trial.
-      The log consists of timestamp and value of metric.
-      Katib store every log of metrics.
-      You can see accuracy curve or other metric logs on UI.
-      """
-      raise NotImplementedError()
-    ReportObservationLog.future = None
-    def GetObservationLog(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
-      """*
-      Get all log of Observations for a Trial.
-      """
-      raise NotImplementedError()
-    GetObservationLog.future = None
-    def DeleteObservationLog(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
-      """*
-      Delete all log of Observations for a Trial.
-      """
-      raise NotImplementedError()
-    DeleteObservationLog.future = None
-
-
-  def beta_create_DBManager_server(servicer, pool=None, pool_size=None, default_timeout=None, maximum_timeout=None):
-    """The Beta API is deprecated for 0.15.0 and later.
-
-    It is recommended to use the GA API (classes and functions in this
-    file not marked beta) for all further purposes. This function was
-    generated only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0"""
-    request_deserializers = {
-      ('api.v1.beta1.DBManager', 'DeleteObservationLog'): DeleteObservationLogRequest.FromString,
-      ('api.v1.beta1.DBManager', 'GetObservationLog'): GetObservationLogRequest.FromString,
-      ('api.v1.beta1.DBManager', 'ReportObservationLog'): ReportObservationLogRequest.FromString,
-    }
-    response_serializers = {
-      ('api.v1.beta1.DBManager', 'DeleteObservationLog'): DeleteObservationLogReply.SerializeToString,
-      ('api.v1.beta1.DBManager', 'GetObservationLog'): GetObservationLogReply.SerializeToString,
-      ('api.v1.beta1.DBManager', 'ReportObservationLog'): ReportObservationLogReply.SerializeToString,
-    }
-    method_implementations = {
-      ('api.v1.beta1.DBManager', 'DeleteObservationLog'): face_utilities.unary_unary_inline(servicer.DeleteObservationLog),
-      ('api.v1.beta1.DBManager', 'GetObservationLog'): face_utilities.unary_unary_inline(servicer.GetObservationLog),
-      ('api.v1.beta1.DBManager', 'ReportObservationLog'): face_utilities.unary_unary_inline(servicer.ReportObservationLog),
-    }
-    server_options = beta_implementations.server_options(request_deserializers=request_deserializers, response_serializers=response_serializers, thread_pool=pool, thread_pool_size=pool_size, default_timeout=default_timeout, maximum_timeout=maximum_timeout)
-    return beta_implementations.server(method_implementations, options=server_options)
-
-
-  def beta_create_DBManager_stub(channel, host=None, metadata_transformer=None, pool=None, pool_size=None):
-    """The Beta API is deprecated for 0.15.0 and later.
-
-    It is recommended to use the GA API (classes and functions in this
-    file not marked beta) for all further purposes. This function was
-    generated only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0"""
-    request_serializers = {
-      ('api.v1.beta1.DBManager', 'DeleteObservationLog'): DeleteObservationLogRequest.SerializeToString,
-      ('api.v1.beta1.DBManager', 'GetObservationLog'): GetObservationLogRequest.SerializeToString,
-      ('api.v1.beta1.DBManager', 'ReportObservationLog'): ReportObservationLogRequest.SerializeToString,
-    }
-    response_deserializers = {
-      ('api.v1.beta1.DBManager', 'DeleteObservationLog'): DeleteObservationLogReply.FromString,
-      ('api.v1.beta1.DBManager', 'GetObservationLog'): GetObservationLogReply.FromString,
-      ('api.v1.beta1.DBManager', 'ReportObservationLog'): ReportObservationLogReply.FromString,
-    }
-    cardinalities = {
-      'DeleteObservationLog': cardinality.Cardinality.UNARY_UNARY,
-      'GetObservationLog': cardinality.Cardinality.UNARY_UNARY,
-      'ReportObservationLog': cardinality.Cardinality.UNARY_UNARY,
-    }
-    stub_options = beta_implementations.stub_options(host=host, metadata_transformer=metadata_transformer, request_serializers=request_serializers, response_deserializers=response_deserializers, thread_pool=pool, thread_pool_size=pool_size)
-    return beta_implementations.dynamic_stub(channel, 'api.v1.beta1.DBManager', cardinalities, options=stub_options)
-
-
-  class BetaSuggestionServicer(object):
-    """The Beta API is deprecated for 0.15.0 and later.
-
-    It is recommended to use the GA API (classes and functions in this
-    file not marked beta) for all further purposes. This class was generated
-    only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0."""
-    """*
-    Suggestion service defines APIs to manage Katib Suggestion from HP or NAS algorithms
-    """
-    def GetSuggestions(self, request, context):
-      # missing associated documentation comment in .proto file
-      pass
-      context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
-    def ValidateAlgorithmSettings(self, request, context):
-      # missing associated documentation comment in .proto file
-      pass
-      context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
-
-
-  class BetaSuggestionStub(object):
-    """The Beta API is deprecated for 0.15.0 and later.
-
-    It is recommended to use the GA API (classes and functions in this
-    file not marked beta) for all further purposes. This class was generated
-    only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0."""
-    """*
-    Suggestion service defines APIs to manage Katib Suggestion from HP or NAS algorithms
-    """
-    def GetSuggestions(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
-      # missing associated documentation comment in .proto file
-      pass
-      raise NotImplementedError()
-    GetSuggestions.future = None
-    def ValidateAlgorithmSettings(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
-      # missing associated documentation comment in .proto file
-      pass
-      raise NotImplementedError()
-    ValidateAlgorithmSettings.future = None
-
-
-  def beta_create_Suggestion_server(servicer, pool=None, pool_size=None, default_timeout=None, maximum_timeout=None):
-    """The Beta API is deprecated for 0.15.0 and later.
-
-    It is recommended to use the GA API (classes and functions in this
-    file not marked beta) for all further purposes. This function was
-    generated only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0"""
-    request_deserializers = {
-      ('api.v1.beta1.Suggestion', 'GetSuggestions'): GetSuggestionsRequest.FromString,
-      ('api.v1.beta1.Suggestion', 'ValidateAlgorithmSettings'): ValidateAlgorithmSettingsRequest.FromString,
-    }
-    response_serializers = {
-      ('api.v1.beta1.Suggestion', 'GetSuggestions'): GetSuggestionsReply.SerializeToString,
-      ('api.v1.beta1.Suggestion', 'ValidateAlgorithmSettings'): ValidateAlgorithmSettingsReply.SerializeToString,
-    }
-    method_implementations = {
-      ('api.v1.beta1.Suggestion', 'GetSuggestions'): face_utilities.unary_unary_inline(servicer.GetSuggestions),
-      ('api.v1.beta1.Suggestion', 'ValidateAlgorithmSettings'): face_utilities.unary_unary_inline(servicer.ValidateAlgorithmSettings),
-    }
-    server_options = beta_implementations.server_options(request_deserializers=request_deserializers, response_serializers=response_serializers, thread_pool=pool, thread_pool_size=pool_size, default_timeout=default_timeout, maximum_timeout=maximum_timeout)
-    return beta_implementations.server(method_implementations, options=server_options)
-
-
-  def beta_create_Suggestion_stub(channel, host=None, metadata_transformer=None, pool=None, pool_size=None):
-    """The Beta API is deprecated for 0.15.0 and later.
-
-    It is recommended to use the GA API (classes and functions in this
-    file not marked beta) for all further purposes. This function was
-    generated only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0"""
-    request_serializers = {
-      ('api.v1.beta1.Suggestion', 'GetSuggestions'): GetSuggestionsRequest.SerializeToString,
-      ('api.v1.beta1.Suggestion', 'ValidateAlgorithmSettings'): ValidateAlgorithmSettingsRequest.SerializeToString,
-    }
-    response_deserializers = {
-      ('api.v1.beta1.Suggestion', 'GetSuggestions'): GetSuggestionsReply.FromString,
-      ('api.v1.beta1.Suggestion', 'ValidateAlgorithmSettings'): ValidateAlgorithmSettingsReply.FromString,
-    }
-    cardinalities = {
-      'GetSuggestions': cardinality.Cardinality.UNARY_UNARY,
-      'ValidateAlgorithmSettings': cardinality.Cardinality.UNARY_UNARY,
-    }
-    stub_options = beta_implementations.stub_options(host=host, metadata_transformer=metadata_transformer, request_serializers=request_serializers, response_deserializers=response_deserializers, thread_pool=pool, thread_pool_size=pool_size)
-    return beta_implementations.dynamic_stub(channel, 'api.v1.beta1.Suggestion', cardinalities, options=stub_options)
-
-
-  class BetaEarlyStoppingServicer(object):
-    """The Beta API is deprecated for 0.15.0 and later.
-
-    It is recommended to use the GA API (classes and functions in this
-    file not marked beta) for all further purposes. This class was generated
-    only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0."""
-    """*
-    EarlyStopping service defines APIs to manage Katib Early Stopping algorithms
-    """
-    def GetEarlyStoppingRules(self, request, context):
-      # missing associated documentation comment in .proto file
-      pass
-      context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
-    def SetTrialStatus(self, request, context):
-      # missing associated documentation comment in .proto file
-      pass
-      context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
-    def ValidateEarlyStoppingSettings(self, request, context):
-      # missing associated documentation comment in .proto file
-      pass
-      context.code(beta_interfaces.StatusCode.UNIMPLEMENTED)
-
-
-  class BetaEarlyStoppingStub(object):
-    """The Beta API is deprecated for 0.15.0 and later.
-
-    It is recommended to use the GA API (classes and functions in this
-    file not marked beta) for all further purposes. This class was generated
-    only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0."""
-    """*
-    EarlyStopping service defines APIs to manage Katib Early Stopping algorithms
-    """
-    def GetEarlyStoppingRules(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
-      # missing associated documentation comment in .proto file
-      pass
-      raise NotImplementedError()
-    GetEarlyStoppingRules.future = None
-    def SetTrialStatus(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
-      # missing associated documentation comment in .proto file
-      pass
-      raise NotImplementedError()
-    SetTrialStatus.future = None
-    def ValidateEarlyStoppingSettings(self, request, timeout, metadata=None, with_call=False, protocol_options=None):
-      # missing associated documentation comment in .proto file
-      pass
-      raise NotImplementedError()
-    ValidateEarlyStoppingSettings.future = None
-
-
-  def beta_create_EarlyStopping_server(servicer, pool=None, pool_size=None, default_timeout=None, maximum_timeout=None):
-    """The Beta API is deprecated for 0.15.0 and later.
-
-    It is recommended to use the GA API (classes and functions in this
-    file not marked beta) for all further purposes. This function was
-    generated only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0"""
-    request_deserializers = {
-      ('api.v1.beta1.EarlyStopping', 'GetEarlyStoppingRules'): GetEarlyStoppingRulesRequest.FromString,
-      ('api.v1.beta1.EarlyStopping', 'SetTrialStatus'): SetTrialStatusRequest.FromString,
-      ('api.v1.beta1.EarlyStopping', 'ValidateEarlyStoppingSettings'): ValidateEarlyStoppingSettingsRequest.FromString,
-    }
-    response_serializers = {
-      ('api.v1.beta1.EarlyStopping', 'GetEarlyStoppingRules'): GetEarlyStoppingRulesReply.SerializeToString,
-      ('api.v1.beta1.EarlyStopping', 'SetTrialStatus'): SetTrialStatusReply.SerializeToString,
-      ('api.v1.beta1.EarlyStopping', 'ValidateEarlyStoppingSettings'): ValidateEarlyStoppingSettingsReply.SerializeToString,
-    }
-    method_implementations = {
-      ('api.v1.beta1.EarlyStopping', 'GetEarlyStoppingRules'): face_utilities.unary_unary_inline(servicer.GetEarlyStoppingRules),
-      ('api.v1.beta1.EarlyStopping', 'SetTrialStatus'): face_utilities.unary_unary_inline(servicer.SetTrialStatus),
-      ('api.v1.beta1.EarlyStopping', 'ValidateEarlyStoppingSettings'): face_utilities.unary_unary_inline(servicer.ValidateEarlyStoppingSettings),
-    }
-    server_options = beta_implementations.server_options(request_deserializers=request_deserializers, response_serializers=response_serializers, thread_pool=pool, thread_pool_size=pool_size, default_timeout=default_timeout, maximum_timeout=maximum_timeout)
-    return beta_implementations.server(method_implementations, options=server_options)
-
-
-  def beta_create_EarlyStopping_stub(channel, host=None, metadata_transformer=None, pool=None, pool_size=None):
-    """The Beta API is deprecated for 0.15.0 and later.
-
-    It is recommended to use the GA API (classes and functions in this
-    file not marked beta) for all further purposes. This function was
-    generated only to ease transition from grpcio<0.15.0 to grpcio>=0.15.0"""
-    request_serializers = {
-      ('api.v1.beta1.EarlyStopping', 'GetEarlyStoppingRules'): GetEarlyStoppingRulesRequest.SerializeToString,
-      ('api.v1.beta1.EarlyStopping', 'SetTrialStatus'): SetTrialStatusRequest.SerializeToString,
-      ('api.v1.beta1.EarlyStopping', 'ValidateEarlyStoppingSettings'): ValidateEarlyStoppingSettingsRequest.SerializeToString,
-    }
-    response_deserializers = {
-      ('api.v1.beta1.EarlyStopping', 'GetEarlyStoppingRules'): GetEarlyStoppingRulesReply.FromString,
-      ('api.v1.beta1.EarlyStopping', 'SetTrialStatus'): SetTrialStatusReply.FromString,
-      ('api.v1.beta1.EarlyStopping', 'ValidateEarlyStoppingSettings'): ValidateEarlyStoppingSettingsReply.FromString,
-    }
-    cardinalities = {
-      'GetEarlyStoppingRules': cardinality.Cardinality.UNARY_UNARY,
-      'SetTrialStatus': cardinality.Cardinality.UNARY_UNARY,
-      'ValidateEarlyStoppingSettings': cardinality.Cardinality.UNARY_UNARY,
-    }
-    stub_options = beta_implementations.stub_options(host=host, metadata_transformer=metadata_transformer, request_serializers=request_serializers, response_deserializers=response_deserializers, thread_pool=pool, thread_pool_size=pool_size)
-    return beta_implementations.dynamic_stub(channel, 'api.v1.beta1.EarlyStopping', cardinalities, options=stub_options)
-except ImportError:
-  pass
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\tapi.proto\x12\x0c\x61pi.v1.beta1\"R\n\nExperiment\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x30\n\x04spec\x18\x02 \x01(\x0b\x32\x1c.api.v1.beta1.ExperimentSpecR\x04spec\"\x85\x04\n\x0e\x45xperimentSpec\x12T\n\x0fparameter_specs\x18\x01 \x01(\x0b\x32+.api.v1.beta1.ExperimentSpec.ParameterSpecsR\x0eparameterSpecs\x12\x39\n\tobjective\x18\x02 \x01(\x0b\x32\x1b.api.v1.beta1.ObjectiveSpecR\tobjective\x12\x39\n\talgorithm\x18\x03 \x01(\x0b\x32\x1b.api.v1.beta1.AlgorithmSpecR\talgorithm\x12\x46\n\x0e\x65\x61rly_stopping\x18\x04 \x01(\x0b\x32\x1f.api.v1.beta1.EarlyStoppingSpecR\rearlyStopping\x12\x30\n\x14parallel_trial_count\x18\x05 \x01(\x05R\x12parallelTrialCount\x12&\n\x0fmax_trial_count\x18\x06 \x01(\x05R\rmaxTrialCount\x12\x36\n\nnas_config\x18\x07 \x01(\x0b\x32\x17.api.v1.beta1.NasConfigR\tnasConfig\x1aM\n\x0eParameterSpecs\x12;\n\nparameters\x18\x01 \x03(\x0b\x32\x1b.api.v1.beta1.ParameterSpecR\nparameters\"\xab\x01\n\rParameterSpec\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x42\n\x0eparameter_type\x18\x02 \x01(\x0e\x32\x1b.api.v1.beta1.ParameterTypeR\rparameterType\x12\x42\n\x0e\x66\x65\x61sible_space\x18\x03 \x01(\x0b\x32\x1b.api.v1.beta1.FeasibleSpaceR\rfeasibleSpace\"[\n\rFeasibleSpace\x12\x10\n\x03max\x18\x01 \x01(\tR\x03max\x12\x10\n\x03min\x18\x02 \x01(\tR\x03min\x12\x12\n\x04list\x18\x03 \x03(\tR\x04list\x12\x12\n\x04step\x18\x04 \x01(\tR\x04step\"\xc0\x01\n\rObjectiveSpec\x12/\n\x04type\x18\x01 \x01(\x0e\x32\x1b.api.v1.beta1.ObjectiveTypeR\x04type\x12\x12\n\x04goal\x18\x02 \x01(\x01R\x04goal\x12\x32\n\x15objective_metric_name\x18\x03 \x01(\tR\x13objectiveMetricName\x12\x36\n\x17\x61\x64\x64itional_metric_names\x18\x04 \x03(\tR\x15\x61\x64\x64itionalMetricNames\"\x85\x01\n\rAlgorithmSpec\x12%\n\x0e\x61lgorithm_name\x18\x01 \x01(\tR\ralgorithmName\x12M\n\x12\x61lgorithm_settings\x18\x02 \x03(\x0b\x32\x1e.api.v1.beta1.AlgorithmSettingR\x11\x61lgorithmSettings\"<\n\x10\x41lgorithmSetting\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value\"\x8d\x01\n\x11\x45\x61rlyStoppingSpec\x12%\n\x0e\x61lgorithm_name\x18\x01 \x01(\tR\ralgorithmName\x12Q\n\x12\x61lgorithm_settings\x18\x02 \x03(\x0b\x32\".api.v1.beta1.EarlyStoppingSettingR\x11\x61lgorithmSettings\"@\n\x14\x45\x61rlyStoppingSetting\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value\"\xd2\x01\n\tNasConfig\x12<\n\x0cgraph_config\x18\x01 \x01(\x0b\x32\x19.api.v1.beta1.GraphConfigR\x0bgraphConfig\x12\x42\n\noperations\x18\x02 \x01(\x0b\x32\".api.v1.beta1.NasConfig.OperationsR\noperations\x1a\x43\n\nOperations\x12\x35\n\toperation\x18\x01 \x03(\x0b\x32\x17.api.v1.beta1.OperationR\toperation\"p\n\x0bGraphConfig\x12\x1d\n\nnum_layers\x18\x01 \x01(\x05R\tnumLayers\x12\x1f\n\x0binput_sizes\x18\x02 \x03(\x05R\ninputSizes\x12!\n\x0coutput_sizes\x18\x03 \x03(\x05R\x0boutputSizes\"\xd2\x01\n\tOperation\x12%\n\x0eoperation_type\x18\x01 \x01(\tR\roperationType\x12O\n\x0fparameter_specs\x18\x02 \x01(\x0b\x32&.api.v1.beta1.Operation.ParameterSpecsR\x0eparameterSpecs\x1aM\n\x0eParameterSpecs\x12;\n\nparameters\x18\x01 \x03(\x0b\x32\x1b.api.v1.beta1.ParameterSpecR\nparameters\"{\n\x05Trial\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12+\n\x04spec\x18\x02 \x01(\x0b\x32\x17.api.v1.beta1.TrialSpecR\x04spec\x12\x31\n\x06status\x18\x03 \x01(\x0b\x32\x19.api.v1.beta1.TrialStatusR\x06status\"\xfe\x02\n\tTrialSpec\x12\x39\n\tobjective\x18\x02 \x01(\x0b\x32\x1b.api.v1.beta1.ObjectiveSpecR\tobjective\x12\x61\n\x15parameter_assignments\x18\x03 \x01(\x0b\x32,.api.v1.beta1.TrialSpec.ParameterAssignmentsR\x14parameterAssignments\x12;\n\x06labels\x18\x04 \x03(\x0b\x32#.api.v1.beta1.TrialSpec.LabelsEntryR\x06labels\x1a[\n\x14ParameterAssignments\x12\x43\n\x0b\x61ssignments\x18\x01 \x03(\x0b\x32!.api.v1.beta1.ParameterAssignmentR\x0b\x61ssignments\x1a\x39\n\x0bLabelsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"?\n\x13ParameterAssignment\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value\"\xed\x02\n\x0bTrialStatus\x12\x1d\n\nstart_time\x18\x01 \x01(\tR\tstartTime\x12\'\n\x0f\x63ompletion_time\x18\x02 \x01(\tR\x0e\x63ompletionTime\x12J\n\tcondition\x18\x03 \x01(\x0e\x32,.api.v1.beta1.TrialStatus.TrialConditionTypeR\tcondition\x12;\n\x0bobservation\x18\x04 \x01(\x0b\x32\x19.api.v1.beta1.ObservationR\x0bobservation\"\x8c\x01\n\x12TrialConditionType\x12\x0b\n\x07\x43REATED\x10\x00\x12\x0b\n\x07RUNNING\x10\x01\x12\r\n\tSUCCEEDED\x10\x02\x12\n\n\x06KILLED\x10\x03\x12\n\n\x06\x46\x41ILED\x10\x04\x12\x16\n\x12METRICSUNAVAILABLE\x10\x05\x12\x10\n\x0c\x45\x41RLYSTOPPED\x10\x06\x12\x0b\n\x07UNKNOWN\x10\x07\"=\n\x0bObservation\x12.\n\x07metrics\x18\x01 \x03(\x0b\x32\x14.api.v1.beta1.MetricR\x07metrics\"2\n\x06Metric\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value\"\x83\x01\n\x1bReportObservationLogRequest\x12\x1d\n\ntrial_name\x18\x01 \x01(\tR\ttrialName\x12\x45\n\x0fobservation_log\x18\x02 \x01(\x0b\x32\x1c.api.v1.beta1.ObservationLogR\x0eobservationLog\"\x1b\n\x19ReportObservationLogReply\"J\n\x0eObservationLog\x12\x38\n\x0bmetric_logs\x18\x01 \x03(\x0b\x32\x17.api.v1.beta1.MetricLogR\nmetricLogs\"X\n\tMetricLog\x12\x1d\n\ntime_stamp\x18\x01 \x01(\tR\ttimeStamp\x12,\n\x06metric\x18\x02 \x01(\x0b\x32\x14.api.v1.beta1.MetricR\x06metric\"\x94\x01\n\x18GetObservationLogRequest\x12\x1d\n\ntrial_name\x18\x01 \x01(\tR\ttrialName\x12\x1f\n\x0bmetric_name\x18\x02 \x01(\tR\nmetricName\x12\x1d\n\nstart_time\x18\x03 \x01(\tR\tstartTime\x12\x19\n\x08\x65nd_time\x18\x04 \x01(\tR\x07\x65ndTime\"_\n\x16GetObservationLogReply\x12\x45\n\x0fobservation_log\x18\x01 \x01(\x0b\x32\x1c.api.v1.beta1.ObservationLogR\x0eobservationLog\"<\n\x1b\x44\x65leteObservationLogRequest\x12\x1d\n\ntrial_name\x18\x01 \x01(\tR\ttrialName\"\x1b\n\x19\x44\x65leteObservationLogReply\"\xe6\x01\n\x15GetSuggestionsRequest\x12\x38\n\nexperiment\x18\x01 \x01(\x0b\x32\x18.api.v1.beta1.ExperimentR\nexperiment\x12+\n\x06trials\x18\x02 \x03(\x0b\x32\x13.api.v1.beta1.TrialR\x06trials\x12\x34\n\x16\x63urrent_request_number\x18\x04 \x01(\x05R\x14\x63urrentRequestNumber\x12\x30\n\x14total_request_number\x18\x05 \x01(\x05R\x12totalRequestNumber\"\xa4\x04\n\x13GetSuggestionsReply\x12k\n\x15parameter_assignments\x18\x01 \x03(\x0b\x32\x36.api.v1.beta1.GetSuggestionsReply.ParameterAssignmentsR\x14parameterAssignments\x12\x39\n\talgorithm\x18\x02 \x01(\x0b\x32\x1b.api.v1.beta1.AlgorithmSpecR\talgorithm\x12Q\n\x14\x65\x61rly_stopping_rules\x18\x03 \x03(\x0b\x32\x1f.api.v1.beta1.EarlyStoppingRuleR\x12\x65\x61rlyStoppingRules\x1a\x91\x02\n\x14ParameterAssignments\x12\x43\n\x0b\x61ssignments\x18\x01 \x03(\x0b\x32!.api.v1.beta1.ParameterAssignmentR\x0b\x61ssignments\x12\x1d\n\ntrial_name\x18\x02 \x01(\tR\ttrialName\x12Z\n\x06labels\x18\x03 \x03(\x0b\x32\x42.api.v1.beta1.GetSuggestionsReply.ParameterAssignments.LabelsEntryR\x06labels\x1a\x39\n\x0bLabelsEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\"\\\n ValidateAlgorithmSettingsRequest\x12\x38\n\nexperiment\x18\x01 \x01(\x0b\x32\x18.api.v1.beta1.ExperimentR\nexperiment\" \n\x1eValidateAlgorithmSettingsReply\"\xb3\x01\n\x1cGetEarlyStoppingRulesRequest\x12\x38\n\nexperiment\x18\x01 \x01(\x0b\x32\x18.api.v1.beta1.ExperimentR\nexperiment\x12+\n\x06trials\x18\x02 \x03(\x0b\x32\x13.api.v1.beta1.TrialR\x06trials\x12,\n\x12\x64\x62_manager_address\x18\x03 \x01(\tR\x10\x64\x62ManagerAddress\"o\n\x1aGetEarlyStoppingRulesReply\x12Q\n\x14\x65\x61rly_stopping_rules\x18\x01 \x03(\x0b\x32\x1f.api.v1.beta1.EarlyStoppingRuleR\x12\x65\x61rlyStoppingRules\"\x9a\x01\n\x11\x45\x61rlyStoppingRule\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value\x12<\n\ncomparison\x18\x03 \x01(\x0e\x32\x1c.api.v1.beta1.ComparisonTypeR\ncomparison\x12\x1d\n\nstart_step\x18\x04 \x01(\x05R\tstartStep\"n\n$ValidateEarlyStoppingSettingsRequest\x12\x46\n\x0e\x65\x61rly_stopping\x18\x01 \x01(\x0b\x32\x1f.api.v1.beta1.EarlyStoppingSpecR\rearlyStopping\"$\n\"ValidateEarlyStoppingSettingsReply\"6\n\x15SetTrialStatusRequest\x12\x1d\n\ntrial_name\x18\x01 \x01(\tR\ttrialName\"\x15\n\x13SetTrialStatusReply*U\n\rParameterType\x12\x10\n\x0cUNKNOWN_TYPE\x10\x00\x12\n\n\x06\x44OUBLE\x10\x01\x12\x07\n\x03INT\x10\x02\x12\x0c\n\x08\x44ISCRETE\x10\x03\x12\x0f\n\x0b\x43\x41TEGORICAL\x10\x04*8\n\rObjectiveType\x12\x0b\n\x07UNKNOWN\x10\x00\x12\x0c\n\x08MINIMIZE\x10\x01\x12\x0c\n\x08MAXIMIZE\x10\x02*J\n\x0e\x43omparisonType\x12\x16\n\x12UNKNOWN_COMPARISON\x10\x00\x12\t\n\x05\x45QUAL\x10\x01\x12\x08\n\x04LESS\x10\x02\x12\x0b\n\x07GREATER\x10\x03\x32\xc6\x02\n\tDBManager\x12j\n\x14ReportObservationLog\x12).api.v1.beta1.ReportObservationLogRequest\x1a\'.api.v1.beta1.ReportObservationLogReply\x12\x61\n\x11GetObservationLog\x12&.api.v1.beta1.GetObservationLogRequest\x1a$.api.v1.beta1.GetObservationLogReply\x12j\n\x14\x44\x65leteObservationLog\x12).api.v1.beta1.DeleteObservationLogRequest\x1a\'.api.v1.beta1.DeleteObservationLogReply2\xe1\x01\n\nSuggestion\x12X\n\x0eGetSuggestions\x12#.api.v1.beta1.GetSuggestionsRequest\x1a!.api.v1.beta1.GetSuggestionsReply\x12y\n\x19ValidateAlgorithmSettings\x12..api.v1.beta1.ValidateAlgorithmSettingsRequest\x1a,.api.v1.beta1.ValidateAlgorithmSettingsReply2\xe0\x02\n\rEarlyStopping\x12m\n\x15GetEarlyStoppingRules\x12*.api.v1.beta1.GetEarlyStoppingRulesRequest\x1a(.api.v1.beta1.GetEarlyStoppingRulesReply\x12X\n\x0eSetTrialStatus\x12#.api.v1.beta1.SetTrialStatusRequest\x1a!.api.v1.beta1.SetTrialStatusReply\x12\x85\x01\n\x1dValidateEarlyStoppingSettings\x12\x32.api.v1.beta1.ValidateEarlyStoppingSettingsRequest\x1a\x30.api.v1.beta1.ValidateEarlyStoppingSettingsReplyBAZ?github.com/kubeflow/katib/pkg/apis/manager/v1beta1;api_v1_beta1b\x06proto3')
+
+_globals = globals()
+_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
+_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'api_pb2', _globals)
+if not _descriptor._USE_C_DESCRIPTORS:
+  _globals['DESCRIPTOR']._loaded_options = None
+  _globals['DESCRIPTOR']._serialized_options = b'Z?github.com/kubeflow/katib/pkg/apis/manager/v1beta1;api_v1_beta1'
+  _globals['_TRIALSPEC_LABELSENTRY']._loaded_options = None
+  _globals['_TRIALSPEC_LABELSENTRY']._serialized_options = b'8\001'
+  _globals['_GETSUGGESTIONSREPLY_PARAMETERASSIGNMENTS_LABELSENTRY']._loaded_options = None
+  _globals['_GETSUGGESTIONSREPLY_PARAMETERASSIGNMENTS_LABELSENTRY']._serialized_options = b'8\001'
+  _globals['_PARAMETERTYPE']._serialized_start=5360
+  _globals['_PARAMETERTYPE']._serialized_end=5445
+  _globals['_OBJECTIVETYPE']._serialized_start=5447
+  _globals['_OBJECTIVETYPE']._serialized_end=5503
+  _globals['_COMPARISONTYPE']._serialized_start=5505
+  _globals['_COMPARISONTYPE']._serialized_end=5579
+  _globals['_EXPERIMENT']._serialized_start=27
+  _globals['_EXPERIMENT']._serialized_end=109
+  _globals['_EXPERIMENTSPEC']._serialized_start=112
+  _globals['_EXPERIMENTSPEC']._serialized_end=629
+  _globals['_EXPERIMENTSPEC_PARAMETERSPECS']._serialized_start=552
+  _globals['_EXPERIMENTSPEC_PARAMETERSPECS']._serialized_end=629
+  _globals['_PARAMETERSPEC']._serialized_start=632
+  _globals['_PARAMETERSPEC']._serialized_end=803
+  _globals['_FEASIBLESPACE']._serialized_start=805
+  _globals['_FEASIBLESPACE']._serialized_end=896
+  _globals['_OBJECTIVESPEC']._serialized_start=899
+  _globals['_OBJECTIVESPEC']._serialized_end=1091
+  _globals['_ALGORITHMSPEC']._serialized_start=1094
+  _globals['_ALGORITHMSPEC']._serialized_end=1227
+  _globals['_ALGORITHMSETTING']._serialized_start=1229
+  _globals['_ALGORITHMSETTING']._serialized_end=1289
+  _globals['_EARLYSTOPPINGSPEC']._serialized_start=1292
+  _globals['_EARLYSTOPPINGSPEC']._serialized_end=1433
+  _globals['_EARLYSTOPPINGSETTING']._serialized_start=1435
+  _globals['_EARLYSTOPPINGSETTING']._serialized_end=1499
+  _globals['_NASCONFIG']._serialized_start=1502
+  _globals['_NASCONFIG']._serialized_end=1712
+  _globals['_NASCONFIG_OPERATIONS']._serialized_start=1645
+  _globals['_NASCONFIG_OPERATIONS']._serialized_end=1712
+  _globals['_GRAPHCONFIG']._serialized_start=1714
+  _globals['_GRAPHCONFIG']._serialized_end=1826
+  _globals['_OPERATION']._serialized_start=1829
+  _globals['_OPERATION']._serialized_end=2039
+  _globals['_OPERATION_PARAMETERSPECS']._serialized_start=552
+  _globals['_OPERATION_PARAMETERSPECS']._serialized_end=629
+  _globals['_TRIAL']._serialized_start=2041
+  _globals['_TRIAL']._serialized_end=2164
+  _globals['_TRIALSPEC']._serialized_start=2167
+  _globals['_TRIALSPEC']._serialized_end=2549
+  _globals['_TRIALSPEC_PARAMETERASSIGNMENTS']._serialized_start=2399
+  _globals['_TRIALSPEC_PARAMETERASSIGNMENTS']._serialized_end=2490
+  _globals['_TRIALSPEC_LABELSENTRY']._serialized_start=2492
+  _globals['_TRIALSPEC_LABELSENTRY']._serialized_end=2549
+  _globals['_PARAMETERASSIGNMENT']._serialized_start=2551
+  _globals['_PARAMETERASSIGNMENT']._serialized_end=2614
+  _globals['_TRIALSTATUS']._serialized_start=2617
+  _globals['_TRIALSTATUS']._serialized_end=2982
+  _globals['_TRIALSTATUS_TRIALCONDITIONTYPE']._serialized_start=2842
+  _globals['_TRIALSTATUS_TRIALCONDITIONTYPE']._serialized_end=2982
+  _globals['_OBSERVATION']._serialized_start=2984
+  _globals['_OBSERVATION']._serialized_end=3045
+  _globals['_METRIC']._serialized_start=3047
+  _globals['_METRIC']._serialized_end=3097
+  _globals['_REPORTOBSERVATIONLOGREQUEST']._serialized_start=3100
+  _globals['_REPORTOBSERVATIONLOGREQUEST']._serialized_end=3231
+  _globals['_REPORTOBSERVATIONLOGREPLY']._serialized_start=3233
+  _globals['_REPORTOBSERVATIONLOGREPLY']._serialized_end=3260
+  _globals['_OBSERVATIONLOG']._serialized_start=3262
+  _globals['_OBSERVATIONLOG']._serialized_end=3336
+  _globals['_METRICLOG']._serialized_start=3338
+  _globals['_METRICLOG']._serialized_end=3426
+  _globals['_GETOBSERVATIONLOGREQUEST']._serialized_start=3429
+  _globals['_GETOBSERVATIONLOGREQUEST']._serialized_end=3577
+  _globals['_GETOBSERVATIONLOGREPLY']._serialized_start=3579
+  _globals['_GETOBSERVATIONLOGREPLY']._serialized_end=3674
+  _globals['_DELETEOBSERVATIONLOGREQUEST']._serialized_start=3676
+  _globals['_DELETEOBSERVATIONLOGREQUEST']._serialized_end=3736
+  _globals['_DELETEOBSERVATIONLOGREPLY']._serialized_start=3738
+  _globals['_DELETEOBSERVATIONLOGREPLY']._serialized_end=3765
+  _globals['_GETSUGGESTIONSREQUEST']._serialized_start=3768
+  _globals['_GETSUGGESTIONSREQUEST']._serialized_end=3998
+  _globals['_GETSUGGESTIONSREPLY']._serialized_start=4001
+  _globals['_GETSUGGESTIONSREPLY']._serialized_end=4549
+  _globals['_GETSUGGESTIONSREPLY_PARAMETERASSIGNMENTS']._serialized_start=4276
+  _globals['_GETSUGGESTIONSREPLY_PARAMETERASSIGNMENTS']._serialized_end=4549
+  _globals['_GETSUGGESTIONSREPLY_PARAMETERASSIGNMENTS_LABELSENTRY']._serialized_start=2492
+  _globals['_GETSUGGESTIONSREPLY_PARAMETERASSIGNMENTS_LABELSENTRY']._serialized_end=2549
+  _globals['_VALIDATEALGORITHMSETTINGSREQUEST']._serialized_start=4551
+  _globals['_VALIDATEALGORITHMSETTINGSREQUEST']._serialized_end=4643
+  _globals['_VALIDATEALGORITHMSETTINGSREPLY']._serialized_start=4645
+  _globals['_VALIDATEALGORITHMSETTINGSREPLY']._serialized_end=4677
+  _globals['_GETEARLYSTOPPINGRULESREQUEST']._serialized_start=4680
+  _globals['_GETEARLYSTOPPINGRULESREQUEST']._serialized_end=4859
+  _globals['_GETEARLYSTOPPINGRULESREPLY']._serialized_start=4861
+  _globals['_GETEARLYSTOPPINGRULESREPLY']._serialized_end=4972
+  _globals['_EARLYSTOPPINGRULE']._serialized_start=4975
+  _globals['_EARLYSTOPPINGRULE']._serialized_end=5129
+  _globals['_VALIDATEEARLYSTOPPINGSETTINGSREQUEST']._serialized_start=5131
+  _globals['_VALIDATEEARLYSTOPPINGSETTINGSREQUEST']._serialized_end=5241
+  _globals['_VALIDATEEARLYSTOPPINGSETTINGSREPLY']._serialized_start=5243
+  _globals['_VALIDATEEARLYSTOPPINGSETTINGSREPLY']._serialized_end=5279
+  _globals['_SETTRIALSTATUSREQUEST']._serialized_start=5281
+  _globals['_SETTRIALSTATUSREQUEST']._serialized_end=5335
+  _globals['_SETTRIALSTATUSREPLY']._serialized_start=5337
+  _globals['_SETTRIALSTATUSREPLY']._serialized_end=5358
+  _globals['_DBMANAGER']._serialized_start=5582
+  _globals['_DBMANAGER']._serialized_end=5908
+  _globals['_SUGGESTION']._serialized_start=5911
+  _globals['_SUGGESTION']._serialized_end=6136
+  _globals['_EARLYSTOPPING']._serialized_start=6139
+  _globals['_EARLYSTOPPING']._serialized_end=6491
 # @@protoc_insertion_point(module_scope)
diff --git a/pkg/apis/manager/v1beta1/python/api_pb2.pyi b/pkg/apis/manager/v1beta1/python/api_pb2.pyi
new file mode 100644
index 00000000000..d1df3096d05
--- /dev/null
+++ b/pkg/apis/manager/v1beta1/python/api_pb2.pyi
@@ -0,0 +1,407 @@
+from google.protobuf.internal import containers as _containers
+from google.protobuf.internal import enum_type_wrapper as _enum_type_wrapper
+from google.protobuf import descriptor as _descriptor
+from google.protobuf import message as _message
+from typing import ClassVar as _ClassVar, Iterable as _Iterable, Mapping as _Mapping, Optional as _Optional, Union as _Union
+
+DESCRIPTOR: _descriptor.FileDescriptor
+
+class ParameterType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+    __slots__ = ()
+    UNKNOWN_TYPE: _ClassVar[ParameterType]
+    DOUBLE: _ClassVar[ParameterType]
+    INT: _ClassVar[ParameterType]
+    DISCRETE: _ClassVar[ParameterType]
+    CATEGORICAL: _ClassVar[ParameterType]
+
+class ObjectiveType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+    __slots__ = ()
+    UNKNOWN: _ClassVar[ObjectiveType]
+    MINIMIZE: _ClassVar[ObjectiveType]
+    MAXIMIZE: _ClassVar[ObjectiveType]
+
+class ComparisonType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+    __slots__ = ()
+    UNKNOWN_COMPARISON: _ClassVar[ComparisonType]
+    EQUAL: _ClassVar[ComparisonType]
+    LESS: _ClassVar[ComparisonType]
+    GREATER: _ClassVar[ComparisonType]
+UNKNOWN_TYPE: ParameterType
+DOUBLE: ParameterType
+INT: ParameterType
+DISCRETE: ParameterType
+CATEGORICAL: ParameterType
+UNKNOWN: ObjectiveType
+MINIMIZE: ObjectiveType
+MAXIMIZE: ObjectiveType
+UNKNOWN_COMPARISON: ComparisonType
+EQUAL: ComparisonType
+LESS: ComparisonType
+GREATER: ComparisonType
+
+class Experiment(_message.Message):
+    __slots__ = ("name", "spec")
+    NAME_FIELD_NUMBER: _ClassVar[int]
+    SPEC_FIELD_NUMBER: _ClassVar[int]
+    name: str
+    spec: ExperimentSpec
+    def __init__(self, name: _Optional[str] = ..., spec: _Optional[_Union[ExperimentSpec, _Mapping]] = ...) -> None: ...
+
+class ExperimentSpec(_message.Message):
+    __slots__ = ("parameter_specs", "objective", "algorithm", "early_stopping", "parallel_trial_count", "max_trial_count", "nas_config")
+    class ParameterSpecs(_message.Message):
+        __slots__ = ("parameters",)
+        PARAMETERS_FIELD_NUMBER: _ClassVar[int]
+        parameters: _containers.RepeatedCompositeFieldContainer[ParameterSpec]
+        def __init__(self, parameters: _Optional[_Iterable[_Union[ParameterSpec, _Mapping]]] = ...) -> None: ...
+    PARAMETER_SPECS_FIELD_NUMBER: _ClassVar[int]
+    OBJECTIVE_FIELD_NUMBER: _ClassVar[int]
+    ALGORITHM_FIELD_NUMBER: _ClassVar[int]
+    EARLY_STOPPING_FIELD_NUMBER: _ClassVar[int]
+    PARALLEL_TRIAL_COUNT_FIELD_NUMBER: _ClassVar[int]
+    MAX_TRIAL_COUNT_FIELD_NUMBER: _ClassVar[int]
+    NAS_CONFIG_FIELD_NUMBER: _ClassVar[int]
+    parameter_specs: ExperimentSpec.ParameterSpecs
+    objective: ObjectiveSpec
+    algorithm: AlgorithmSpec
+    early_stopping: EarlyStoppingSpec
+    parallel_trial_count: int
+    max_trial_count: int
+    nas_config: NasConfig
+    def __init__(self, parameter_specs: _Optional[_Union[ExperimentSpec.ParameterSpecs, _Mapping]] = ..., objective: _Optional[_Union[ObjectiveSpec, _Mapping]] = ..., algorithm: _Optional[_Union[AlgorithmSpec, _Mapping]] = ..., early_stopping: _Optional[_Union[EarlyStoppingSpec, _Mapping]] = ..., parallel_trial_count: _Optional[int] = ..., max_trial_count: _Optional[int] = ..., nas_config: _Optional[_Union[NasConfig, _Mapping]] = ...) -> None: ...
+
+class ParameterSpec(_message.Message):
+    __slots__ = ("name", "parameter_type", "feasible_space")
+    NAME_FIELD_NUMBER: _ClassVar[int]
+    PARAMETER_TYPE_FIELD_NUMBER: _ClassVar[int]
+    FEASIBLE_SPACE_FIELD_NUMBER: _ClassVar[int]
+    name: str
+    parameter_type: ParameterType
+    feasible_space: FeasibleSpace
+    def __init__(self, name: _Optional[str] = ..., parameter_type: _Optional[_Union[ParameterType, str]] = ..., feasible_space: _Optional[_Union[FeasibleSpace, _Mapping]] = ...) -> None: ...
+
+class FeasibleSpace(_message.Message):
+    __slots__ = ("max", "min", "list", "step")
+    MAX_FIELD_NUMBER: _ClassVar[int]
+    MIN_FIELD_NUMBER: _ClassVar[int]
+    LIST_FIELD_NUMBER: _ClassVar[int]
+    STEP_FIELD_NUMBER: _ClassVar[int]
+    max: str
+    min: str
+    list: _containers.RepeatedScalarFieldContainer[str]
+    step: str
+    def __init__(self, max: _Optional[str] = ..., min: _Optional[str] = ..., list: _Optional[_Iterable[str]] = ..., step: _Optional[str] = ...) -> None: ...
+
+class ObjectiveSpec(_message.Message):
+    __slots__ = ("type", "goal", "objective_metric_name", "additional_metric_names")
+    TYPE_FIELD_NUMBER: _ClassVar[int]
+    GOAL_FIELD_NUMBER: _ClassVar[int]
+    OBJECTIVE_METRIC_NAME_FIELD_NUMBER: _ClassVar[int]
+    ADDITIONAL_METRIC_NAMES_FIELD_NUMBER: _ClassVar[int]
+    type: ObjectiveType
+    goal: float
+    objective_metric_name: str
+    additional_metric_names: _containers.RepeatedScalarFieldContainer[str]
+    def __init__(self, type: _Optional[_Union[ObjectiveType, str]] = ..., goal: _Optional[float] = ..., objective_metric_name: _Optional[str] = ..., additional_metric_names: _Optional[_Iterable[str]] = ...) -> None: ...
+
+class AlgorithmSpec(_message.Message):
+    __slots__ = ("algorithm_name", "algorithm_settings")
+    ALGORITHM_NAME_FIELD_NUMBER: _ClassVar[int]
+    ALGORITHM_SETTINGS_FIELD_NUMBER: _ClassVar[int]
+    algorithm_name: str
+    algorithm_settings: _containers.RepeatedCompositeFieldContainer[AlgorithmSetting]
+    def __init__(self, algorithm_name: _Optional[str] = ..., algorithm_settings: _Optional[_Iterable[_Union[AlgorithmSetting, _Mapping]]] = ...) -> None: ...
+
+class AlgorithmSetting(_message.Message):
+    __slots__ = ("name", "value")
+    NAME_FIELD_NUMBER: _ClassVar[int]
+    VALUE_FIELD_NUMBER: _ClassVar[int]
+    name: str
+    value: str
+    def __init__(self, name: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ...
+
+class EarlyStoppingSpec(_message.Message):
+    __slots__ = ("algorithm_name", "algorithm_settings")
+    ALGORITHM_NAME_FIELD_NUMBER: _ClassVar[int]
+    ALGORITHM_SETTINGS_FIELD_NUMBER: _ClassVar[int]
+    algorithm_name: str
+    algorithm_settings: _containers.RepeatedCompositeFieldContainer[EarlyStoppingSetting]
+    def __init__(self, algorithm_name: _Optional[str] = ..., algorithm_settings: _Optional[_Iterable[_Union[EarlyStoppingSetting, _Mapping]]] = ...) -> None: ...
+
+class EarlyStoppingSetting(_message.Message):
+    __slots__ = ("name", "value")
+    NAME_FIELD_NUMBER: _ClassVar[int]
+    VALUE_FIELD_NUMBER: _ClassVar[int]
+    name: str
+    value: str
+    def __init__(self, name: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ...
+
+class NasConfig(_message.Message):
+    __slots__ = ("graph_config", "operations")
+    class Operations(_message.Message):
+        __slots__ = ("operation",)
+        OPERATION_FIELD_NUMBER: _ClassVar[int]
+        operation: _containers.RepeatedCompositeFieldContainer[Operation]
+        def __init__(self, operation: _Optional[_Iterable[_Union[Operation, _Mapping]]] = ...) -> None: ...
+    GRAPH_CONFIG_FIELD_NUMBER: _ClassVar[int]
+    OPERATIONS_FIELD_NUMBER: _ClassVar[int]
+    graph_config: GraphConfig
+    operations: NasConfig.Operations
+    def __init__(self, graph_config: _Optional[_Union[GraphConfig, _Mapping]] = ..., operations: _Optional[_Union[NasConfig.Operations, _Mapping]] = ...) -> None: ...
+
+class GraphConfig(_message.Message):
+    __slots__ = ("num_layers", "input_sizes", "output_sizes")
+    NUM_LAYERS_FIELD_NUMBER: _ClassVar[int]
+    INPUT_SIZES_FIELD_NUMBER: _ClassVar[int]
+    OUTPUT_SIZES_FIELD_NUMBER: _ClassVar[int]
+    num_layers: int
+    input_sizes: _containers.RepeatedScalarFieldContainer[int]
+    output_sizes: _containers.RepeatedScalarFieldContainer[int]
+    def __init__(self, num_layers: _Optional[int] = ..., input_sizes: _Optional[_Iterable[int]] = ..., output_sizes: _Optional[_Iterable[int]] = ...) -> None: ...
+
+class Operation(_message.Message):
+    __slots__ = ("operation_type", "parameter_specs")
+    class ParameterSpecs(_message.Message):
+        __slots__ = ("parameters",)
+        PARAMETERS_FIELD_NUMBER: _ClassVar[int]
+        parameters: _containers.RepeatedCompositeFieldContainer[ParameterSpec]
+        def __init__(self, parameters: _Optional[_Iterable[_Union[ParameterSpec, _Mapping]]] = ...) -> None: ...
+    OPERATION_TYPE_FIELD_NUMBER: _ClassVar[int]
+    PARAMETER_SPECS_FIELD_NUMBER: _ClassVar[int]
+    operation_type: str
+    parameter_specs: Operation.ParameterSpecs
+    def __init__(self, operation_type: _Optional[str] = ..., parameter_specs: _Optional[_Union[Operation.ParameterSpecs, _Mapping]] = ...) -> None: ...
+
+class Trial(_message.Message):
+    __slots__ = ("name", "spec", "status")
+    NAME_FIELD_NUMBER: _ClassVar[int]
+    SPEC_FIELD_NUMBER: _ClassVar[int]
+    STATUS_FIELD_NUMBER: _ClassVar[int]
+    name: str
+    spec: TrialSpec
+    status: TrialStatus
+    def __init__(self, name: _Optional[str] = ..., spec: _Optional[_Union[TrialSpec, _Mapping]] = ..., status: _Optional[_Union[TrialStatus, _Mapping]] = ...) -> None: ...
+
+class TrialSpec(_message.Message):
+    __slots__ = ("objective", "parameter_assignments", "labels")
+    class ParameterAssignments(_message.Message):
+        __slots__ = ("assignments",)
+        ASSIGNMENTS_FIELD_NUMBER: _ClassVar[int]
+        assignments: _containers.RepeatedCompositeFieldContainer[ParameterAssignment]
+        def __init__(self, assignments: _Optional[_Iterable[_Union[ParameterAssignment, _Mapping]]] = ...) -> None: ...
+    class LabelsEntry(_message.Message):
+        __slots__ = ("key", "value")
+        KEY_FIELD_NUMBER: _ClassVar[int]
+        VALUE_FIELD_NUMBER: _ClassVar[int]
+        key: str
+        value: str
+        def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ...
+    OBJECTIVE_FIELD_NUMBER: _ClassVar[int]
+    PARAMETER_ASSIGNMENTS_FIELD_NUMBER: _ClassVar[int]
+    LABELS_FIELD_NUMBER: _ClassVar[int]
+    objective: ObjectiveSpec
+    parameter_assignments: TrialSpec.ParameterAssignments
+    labels: _containers.ScalarMap[str, str]
+    def __init__(self, objective: _Optional[_Union[ObjectiveSpec, _Mapping]] = ..., parameter_assignments: _Optional[_Union[TrialSpec.ParameterAssignments, _Mapping]] = ..., labels: _Optional[_Mapping[str, str]] = ...) -> None: ...
+
+class ParameterAssignment(_message.Message):
+    __slots__ = ("name", "value")
+    NAME_FIELD_NUMBER: _ClassVar[int]
+    VALUE_FIELD_NUMBER: _ClassVar[int]
+    name: str
+    value: str
+    def __init__(self, name: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ...
+
+class TrialStatus(_message.Message):
+    __slots__ = ("start_time", "completion_time", "condition", "observation")
+    class TrialConditionType(int, metaclass=_enum_type_wrapper.EnumTypeWrapper):
+        __slots__ = ()
+        CREATED: _ClassVar[TrialStatus.TrialConditionType]
+        RUNNING: _ClassVar[TrialStatus.TrialConditionType]
+        SUCCEEDED: _ClassVar[TrialStatus.TrialConditionType]
+        KILLED: _ClassVar[TrialStatus.TrialConditionType]
+        FAILED: _ClassVar[TrialStatus.TrialConditionType]
+        METRICSUNAVAILABLE: _ClassVar[TrialStatus.TrialConditionType]
+        EARLYSTOPPED: _ClassVar[TrialStatus.TrialConditionType]
+        UNKNOWN: _ClassVar[TrialStatus.TrialConditionType]
+    CREATED: TrialStatus.TrialConditionType
+    RUNNING: TrialStatus.TrialConditionType
+    SUCCEEDED: TrialStatus.TrialConditionType
+    KILLED: TrialStatus.TrialConditionType
+    FAILED: TrialStatus.TrialConditionType
+    METRICSUNAVAILABLE: TrialStatus.TrialConditionType
+    EARLYSTOPPED: TrialStatus.TrialConditionType
+    UNKNOWN: TrialStatus.TrialConditionType
+    START_TIME_FIELD_NUMBER: _ClassVar[int]
+    COMPLETION_TIME_FIELD_NUMBER: _ClassVar[int]
+    CONDITION_FIELD_NUMBER: _ClassVar[int]
+    OBSERVATION_FIELD_NUMBER: _ClassVar[int]
+    start_time: str
+    completion_time: str
+    condition: TrialStatus.TrialConditionType
+    observation: Observation
+    def __init__(self, start_time: _Optional[str] = ..., completion_time: _Optional[str] = ..., condition: _Optional[_Union[TrialStatus.TrialConditionType, str]] = ..., observation: _Optional[_Union[Observation, _Mapping]] = ...) -> None: ...
+
+class Observation(_message.Message):
+    __slots__ = ("metrics",)
+    METRICS_FIELD_NUMBER: _ClassVar[int]
+    metrics: _containers.RepeatedCompositeFieldContainer[Metric]
+    def __init__(self, metrics: _Optional[_Iterable[_Union[Metric, _Mapping]]] = ...) -> None: ...
+
+class Metric(_message.Message):
+    __slots__ = ("name", "value")
+    NAME_FIELD_NUMBER: _ClassVar[int]
+    VALUE_FIELD_NUMBER: _ClassVar[int]
+    name: str
+    value: str
+    def __init__(self, name: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ...
+
+class ReportObservationLogRequest(_message.Message):
+    __slots__ = ("trial_name", "observation_log")
+    TRIAL_NAME_FIELD_NUMBER: _ClassVar[int]
+    OBSERVATION_LOG_FIELD_NUMBER: _ClassVar[int]
+    trial_name: str
+    observation_log: ObservationLog
+    def __init__(self, trial_name: _Optional[str] = ..., observation_log: _Optional[_Union[ObservationLog, _Mapping]] = ...) -> None: ...
+
+class ReportObservationLogReply(_message.Message):
+    __slots__ = ()
+    def __init__(self) -> None: ...
+
+class ObservationLog(_message.Message):
+    __slots__ = ("metric_logs",)
+    METRIC_LOGS_FIELD_NUMBER: _ClassVar[int]
+    metric_logs: _containers.RepeatedCompositeFieldContainer[MetricLog]
+    def __init__(self, metric_logs: _Optional[_Iterable[_Union[MetricLog, _Mapping]]] = ...) -> None: ...
+
+class MetricLog(_message.Message):
+    __slots__ = ("time_stamp", "metric")
+    TIME_STAMP_FIELD_NUMBER: _ClassVar[int]
+    METRIC_FIELD_NUMBER: _ClassVar[int]
+    time_stamp: str
+    metric: Metric
+    def __init__(self, time_stamp: _Optional[str] = ..., metric: _Optional[_Union[Metric, _Mapping]] = ...) -> None: ...
+
+class GetObservationLogRequest(_message.Message):
+    __slots__ = ("trial_name", "metric_name", "start_time", "end_time")
+    TRIAL_NAME_FIELD_NUMBER: _ClassVar[int]
+    METRIC_NAME_FIELD_NUMBER: _ClassVar[int]
+    START_TIME_FIELD_NUMBER: _ClassVar[int]
+    END_TIME_FIELD_NUMBER: _ClassVar[int]
+    trial_name: str
+    metric_name: str
+    start_time: str
+    end_time: str
+    def __init__(self, trial_name: _Optional[str] = ..., metric_name: _Optional[str] = ..., start_time: _Optional[str] = ..., end_time: _Optional[str] = ...) -> None: ...
+
+class GetObservationLogReply(_message.Message):
+    __slots__ = ("observation_log",)
+    OBSERVATION_LOG_FIELD_NUMBER: _ClassVar[int]
+    observation_log: ObservationLog
+    def __init__(self, observation_log: _Optional[_Union[ObservationLog, _Mapping]] = ...) -> None: ...
+
+class DeleteObservationLogRequest(_message.Message):
+    __slots__ = ("trial_name",)
+    TRIAL_NAME_FIELD_NUMBER: _ClassVar[int]
+    trial_name: str
+    def __init__(self, trial_name: _Optional[str] = ...) -> None: ...
+
+class DeleteObservationLogReply(_message.Message):
+    __slots__ = ()
+    def __init__(self) -> None: ...
+
+class GetSuggestionsRequest(_message.Message):
+    __slots__ = ("experiment", "trials", "current_request_number", "total_request_number")
+    EXPERIMENT_FIELD_NUMBER: _ClassVar[int]
+    TRIALS_FIELD_NUMBER: _ClassVar[int]
+    CURRENT_REQUEST_NUMBER_FIELD_NUMBER: _ClassVar[int]
+    TOTAL_REQUEST_NUMBER_FIELD_NUMBER: _ClassVar[int]
+    experiment: Experiment
+    trials: _containers.RepeatedCompositeFieldContainer[Trial]
+    current_request_number: int
+    total_request_number: int
+    def __init__(self, experiment: _Optional[_Union[Experiment, _Mapping]] = ..., trials: _Optional[_Iterable[_Union[Trial, _Mapping]]] = ..., current_request_number: _Optional[int] = ..., total_request_number: _Optional[int] = ...) -> None: ...
+
+class GetSuggestionsReply(_message.Message):
+    __slots__ = ("parameter_assignments", "algorithm", "early_stopping_rules")
+    class ParameterAssignments(_message.Message):
+        __slots__ = ("assignments", "trial_name", "labels")
+        class LabelsEntry(_message.Message):
+            __slots__ = ("key", "value")
+            KEY_FIELD_NUMBER: _ClassVar[int]
+            VALUE_FIELD_NUMBER: _ClassVar[int]
+            key: str
+            value: str
+            def __init__(self, key: _Optional[str] = ..., value: _Optional[str] = ...) -> None: ...
+        ASSIGNMENTS_FIELD_NUMBER: _ClassVar[int]
+        TRIAL_NAME_FIELD_NUMBER: _ClassVar[int]
+        LABELS_FIELD_NUMBER: _ClassVar[int]
+        assignments: _containers.RepeatedCompositeFieldContainer[ParameterAssignment]
+        trial_name: str
+        labels: _containers.ScalarMap[str, str]
+        def __init__(self, assignments: _Optional[_Iterable[_Union[ParameterAssignment, _Mapping]]] = ..., trial_name: _Optional[str] = ..., labels: _Optional[_Mapping[str, str]] = ...) -> None: ...
+    PARAMETER_ASSIGNMENTS_FIELD_NUMBER: _ClassVar[int]
+    ALGORITHM_FIELD_NUMBER: _ClassVar[int]
+    EARLY_STOPPING_RULES_FIELD_NUMBER: _ClassVar[int]
+    parameter_assignments: _containers.RepeatedCompositeFieldContainer[GetSuggestionsReply.ParameterAssignments]
+    algorithm: AlgorithmSpec
+    early_stopping_rules: _containers.RepeatedCompositeFieldContainer[EarlyStoppingRule]
+    def __init__(self, parameter_assignments: _Optional[_Iterable[_Union[GetSuggestionsReply.ParameterAssignments, _Mapping]]] = ..., algorithm: _Optional[_Union[AlgorithmSpec, _Mapping]] = ..., early_stopping_rules: _Optional[_Iterable[_Union[EarlyStoppingRule, _Mapping]]] = ...) -> None: ...
+
+class ValidateAlgorithmSettingsRequest(_message.Message):
+    __slots__ = ("experiment",)
+    EXPERIMENT_FIELD_NUMBER: _ClassVar[int]
+    experiment: Experiment
+    def __init__(self, experiment: _Optional[_Union[Experiment, _Mapping]] = ...) -> None: ...
+
+class ValidateAlgorithmSettingsReply(_message.Message):
+    __slots__ = ()
+    def __init__(self) -> None: ...
+
+class GetEarlyStoppingRulesRequest(_message.Message):
+    __slots__ = ("experiment", "trials", "db_manager_address")
+    EXPERIMENT_FIELD_NUMBER: _ClassVar[int]
+    TRIALS_FIELD_NUMBER: _ClassVar[int]
+    DB_MANAGER_ADDRESS_FIELD_NUMBER: _ClassVar[int]
+    experiment: Experiment
+    trials: _containers.RepeatedCompositeFieldContainer[Trial]
+    db_manager_address: str
+    def __init__(self, experiment: _Optional[_Union[Experiment, _Mapping]] = ..., trials: _Optional[_Iterable[_Union[Trial, _Mapping]]] = ..., db_manager_address: _Optional[str] = ...) -> None: ...
+
+class GetEarlyStoppingRulesReply(_message.Message):
+    __slots__ = ("early_stopping_rules",)
+    EARLY_STOPPING_RULES_FIELD_NUMBER: _ClassVar[int]
+    early_stopping_rules: _containers.RepeatedCompositeFieldContainer[EarlyStoppingRule]
+    def __init__(self, early_stopping_rules: _Optional[_Iterable[_Union[EarlyStoppingRule, _Mapping]]] = ...) -> None: ...
+
+class EarlyStoppingRule(_message.Message):
+    __slots__ = ("name", "value", "comparison", "start_step")
+    NAME_FIELD_NUMBER: _ClassVar[int]
+    VALUE_FIELD_NUMBER: _ClassVar[int]
+    COMPARISON_FIELD_NUMBER: _ClassVar[int]
+    START_STEP_FIELD_NUMBER: _ClassVar[int]
+    name: str
+    value: str
+    comparison: ComparisonType
+    start_step: int
+    def __init__(self, name: _Optional[str] = ..., value: _Optional[str] = ..., comparison: _Optional[_Union[ComparisonType, str]] = ..., start_step: _Optional[int] = ...) -> None: ...
+
+class ValidateEarlyStoppingSettingsRequest(_message.Message):
+    __slots__ = ("early_stopping",)
+    EARLY_STOPPING_FIELD_NUMBER: _ClassVar[int]
+    early_stopping: EarlyStoppingSpec
+    def __init__(self, early_stopping: _Optional[_Union[EarlyStoppingSpec, _Mapping]] = ...) -> None: ...
+
+class ValidateEarlyStoppingSettingsReply(_message.Message):
+    __slots__ = ()
+    def __init__(self) -> None: ...
+
+class SetTrialStatusRequest(_message.Message):
+    __slots__ = ("trial_name",)
+    TRIAL_NAME_FIELD_NUMBER: _ClassVar[int]
+    trial_name: str
+    def __init__(self, trial_name: _Optional[str] = ...) -> None: ...
+
+class SetTrialStatusReply(_message.Message):
+    __slots__ = ()
+    def __init__(self) -> None: ...
diff --git a/pkg/apis/manager/v1beta1/python/api_pb2_grpc.py b/pkg/apis/manager/v1beta1/python/api_pb2_grpc.py
index 7d5cbf79006..62ad535358f 100644
--- a/pkg/apis/manager/v1beta1/python/api_pb2_grpc.py
+++ b/pkg/apis/manager/v1beta1/python/api_pb2_grpc.py
@@ -1,227 +1,463 @@
 # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+"""Client and server classes corresponding to protobuf-defined services."""
 import grpc
 
 import api_pb2 as api__pb2
 
 
 class DBManagerStub(object):
-  """*
-  DBManager service defines APIs to manage Katib database.
-  """
-
-  def __init__(self, channel):
-    """Constructor.
-
-    Args:
-      channel: A grpc.Channel.
+    """*
+    DBManager service defines APIs to manage Katib database.
     """
-    self.ReportObservationLog = channel.unary_unary(
-        '/api.v1.beta1.DBManager/ReportObservationLog',
-        request_serializer=api__pb2.ReportObservationLogRequest.SerializeToString,
-        response_deserializer=api__pb2.ReportObservationLogReply.FromString,
-        )
-    self.GetObservationLog = channel.unary_unary(
-        '/api.v1.beta1.DBManager/GetObservationLog',
-        request_serializer=api__pb2.GetObservationLogRequest.SerializeToString,
-        response_deserializer=api__pb2.GetObservationLogReply.FromString,
-        )
-    self.DeleteObservationLog = channel.unary_unary(
-        '/api.v1.beta1.DBManager/DeleteObservationLog',
-        request_serializer=api__pb2.DeleteObservationLogRequest.SerializeToString,
-        response_deserializer=api__pb2.DeleteObservationLogReply.FromString,
-        )
 
+    def __init__(self, channel):
+        """Constructor.
+
+        Args:
+            channel: A grpc.Channel.
+        """
+        self.ReportObservationLog = channel.unary_unary(
+                '/api.v1.beta1.DBManager/ReportObservationLog',
+                request_serializer=api__pb2.ReportObservationLogRequest.SerializeToString,
+                response_deserializer=api__pb2.ReportObservationLogReply.FromString,
+                _registered_method=True)
+        self.GetObservationLog = channel.unary_unary(
+                '/api.v1.beta1.DBManager/GetObservationLog',
+                request_serializer=api__pb2.GetObservationLogRequest.SerializeToString,
+                response_deserializer=api__pb2.GetObservationLogReply.FromString,
+                _registered_method=True)
+        self.DeleteObservationLog = channel.unary_unary(
+                '/api.v1.beta1.DBManager/DeleteObservationLog',
+                request_serializer=api__pb2.DeleteObservationLogRequest.SerializeToString,
+                response_deserializer=api__pb2.DeleteObservationLogReply.FromString,
+                _registered_method=True)
 
-class DBManagerServicer(object):
-  """*
-  DBManager service defines APIs to manage Katib database.
-  """
-
-  def ReportObservationLog(self, request, context):
-    """* 
-    Report a log of Observations for a Trial.
-    The log consists of timestamp and value of metric.
-    Katib store every log of metrics.
-    You can see accuracy curve or other metric logs on UI.
-    """
-    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-    context.set_details('Method not implemented!')
-    raise NotImplementedError('Method not implemented!')
 
-  def GetObservationLog(self, request, context):
+class DBManagerServicer(object):
     """*
-    Get all log of Observations for a Trial.
+    DBManager service defines APIs to manage Katib database.
     """
-    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-    context.set_details('Method not implemented!')
-    raise NotImplementedError('Method not implemented!')
 
-  def DeleteObservationLog(self, request, context):
-    """*
-    Delete all log of Observations for a Trial.
-    """
-    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-    context.set_details('Method not implemented!')
-    raise NotImplementedError('Method not implemented!')
+    def ReportObservationLog(self, request, context):
+        """* 
+        Report a log of Observations for a Trial.
+        The log consists of timestamp and value of metric.
+        Katib store every log of metrics.
+        You can see accuracy curve or other metric logs on UI.
+        """
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def GetObservationLog(self, request, context):
+        """*
+        Get all log of Observations for a Trial.
+        """
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def DeleteObservationLog(self, request, context):
+        """*
+        Delete all log of Observations for a Trial.
+        """
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
 
 
 def add_DBManagerServicer_to_server(servicer, server):
-  rpc_method_handlers = {
-      'ReportObservationLog': grpc.unary_unary_rpc_method_handler(
-          servicer.ReportObservationLog,
-          request_deserializer=api__pb2.ReportObservationLogRequest.FromString,
-          response_serializer=api__pb2.ReportObservationLogReply.SerializeToString,
-      ),
-      'GetObservationLog': grpc.unary_unary_rpc_method_handler(
-          servicer.GetObservationLog,
-          request_deserializer=api__pb2.GetObservationLogRequest.FromString,
-          response_serializer=api__pb2.GetObservationLogReply.SerializeToString,
-      ),
-      'DeleteObservationLog': grpc.unary_unary_rpc_method_handler(
-          servicer.DeleteObservationLog,
-          request_deserializer=api__pb2.DeleteObservationLogRequest.FromString,
-          response_serializer=api__pb2.DeleteObservationLogReply.SerializeToString,
-      ),
-  }
-  generic_handler = grpc.method_handlers_generic_handler(
-      'api.v1.beta1.DBManager', rpc_method_handlers)
-  server.add_generic_rpc_handlers((generic_handler,))
+    rpc_method_handlers = {
+            'ReportObservationLog': grpc.unary_unary_rpc_method_handler(
+                    servicer.ReportObservationLog,
+                    request_deserializer=api__pb2.ReportObservationLogRequest.FromString,
+                    response_serializer=api__pb2.ReportObservationLogReply.SerializeToString,
+            ),
+            'GetObservationLog': grpc.unary_unary_rpc_method_handler(
+                    servicer.GetObservationLog,
+                    request_deserializer=api__pb2.GetObservationLogRequest.FromString,
+                    response_serializer=api__pb2.GetObservationLogReply.SerializeToString,
+            ),
+            'DeleteObservationLog': grpc.unary_unary_rpc_method_handler(
+                    servicer.DeleteObservationLog,
+                    request_deserializer=api__pb2.DeleteObservationLogRequest.FromString,
+                    response_serializer=api__pb2.DeleteObservationLogReply.SerializeToString,
+            ),
+    }
+    generic_handler = grpc.method_handlers_generic_handler(
+            'api.v1.beta1.DBManager', rpc_method_handlers)
+    server.add_generic_rpc_handlers((generic_handler,))
+    server.add_registered_method_handlers('api.v1.beta1.DBManager', rpc_method_handlers)
+
+
+ # This class is part of an EXPERIMENTAL API.
+class DBManager(object):
+    """*
+    DBManager service defines APIs to manage Katib database.
+    """
+
+    @staticmethod
+    def ReportObservationLog(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(
+            request,
+            target,
+            '/api.v1.beta1.DBManager/ReportObservationLog',
+            api__pb2.ReportObservationLogRequest.SerializeToString,
+            api__pb2.ReportObservationLogReply.FromString,
+            options,
+            channel_credentials,
+            insecure,
+            call_credentials,
+            compression,
+            wait_for_ready,
+            timeout,
+            metadata,
+            _registered_method=True)
+
+    @staticmethod
+    def GetObservationLog(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(
+            request,
+            target,
+            '/api.v1.beta1.DBManager/GetObservationLog',
+            api__pb2.GetObservationLogRequest.SerializeToString,
+            api__pb2.GetObservationLogReply.FromString,
+            options,
+            channel_credentials,
+            insecure,
+            call_credentials,
+            compression,
+            wait_for_ready,
+            timeout,
+            metadata,
+            _registered_method=True)
+
+    @staticmethod
+    def DeleteObservationLog(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(
+            request,
+            target,
+            '/api.v1.beta1.DBManager/DeleteObservationLog',
+            api__pb2.DeleteObservationLogRequest.SerializeToString,
+            api__pb2.DeleteObservationLogReply.FromString,
+            options,
+            channel_credentials,
+            insecure,
+            call_credentials,
+            compression,
+            wait_for_ready,
+            timeout,
+            metadata,
+            _registered_method=True)
 
 
 class SuggestionStub(object):
-  """*
-  Suggestion service defines APIs to manage Katib Suggestion from HP or NAS algorithms
-  """
+    """*
+    Suggestion service defines APIs to manage Katib Suggestion from HP or NAS algorithms
+    """
 
-  def __init__(self, channel):
-    """Constructor.
+    def __init__(self, channel):
+        """Constructor.
 
-    Args:
-      channel: A grpc.Channel.
-    """
-    self.GetSuggestions = channel.unary_unary(
-        '/api.v1.beta1.Suggestion/GetSuggestions',
-        request_serializer=api__pb2.GetSuggestionsRequest.SerializeToString,
-        response_deserializer=api__pb2.GetSuggestionsReply.FromString,
-        )
-    self.ValidateAlgorithmSettings = channel.unary_unary(
-        '/api.v1.beta1.Suggestion/ValidateAlgorithmSettings',
-        request_serializer=api__pb2.ValidateAlgorithmSettingsRequest.SerializeToString,
-        response_deserializer=api__pb2.ValidateAlgorithmSettingsReply.FromString,
-        )
+        Args:
+            channel: A grpc.Channel.
+        """
+        self.GetSuggestions = channel.unary_unary(
+                '/api.v1.beta1.Suggestion/GetSuggestions',
+                request_serializer=api__pb2.GetSuggestionsRequest.SerializeToString,
+                response_deserializer=api__pb2.GetSuggestionsReply.FromString,
+                _registered_method=True)
+        self.ValidateAlgorithmSettings = channel.unary_unary(
+                '/api.v1.beta1.Suggestion/ValidateAlgorithmSettings',
+                request_serializer=api__pb2.ValidateAlgorithmSettingsRequest.SerializeToString,
+                response_deserializer=api__pb2.ValidateAlgorithmSettingsReply.FromString,
+                _registered_method=True)
 
 
 class SuggestionServicer(object):
-  """*
-  Suggestion service defines APIs to manage Katib Suggestion from HP or NAS algorithms
-  """
+    """*
+    Suggestion service defines APIs to manage Katib Suggestion from HP or NAS algorithms
+    """
 
-  def GetSuggestions(self, request, context):
-    # missing associated documentation comment in .proto file
-    pass
-    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-    context.set_details('Method not implemented!')
-    raise NotImplementedError('Method not implemented!')
+    def GetSuggestions(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
 
-  def ValidateAlgorithmSettings(self, request, context):
-    # missing associated documentation comment in .proto file
-    pass
-    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-    context.set_details('Method not implemented!')
-    raise NotImplementedError('Method not implemented!')
+    def ValidateAlgorithmSettings(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
 
 
 def add_SuggestionServicer_to_server(servicer, server):
-  rpc_method_handlers = {
-      'GetSuggestions': grpc.unary_unary_rpc_method_handler(
-          servicer.GetSuggestions,
-          request_deserializer=api__pb2.GetSuggestionsRequest.FromString,
-          response_serializer=api__pb2.GetSuggestionsReply.SerializeToString,
-      ),
-      'ValidateAlgorithmSettings': grpc.unary_unary_rpc_method_handler(
-          servicer.ValidateAlgorithmSettings,
-          request_deserializer=api__pb2.ValidateAlgorithmSettingsRequest.FromString,
-          response_serializer=api__pb2.ValidateAlgorithmSettingsReply.SerializeToString,
-      ),
-  }
-  generic_handler = grpc.method_handlers_generic_handler(
-      'api.v1.beta1.Suggestion', rpc_method_handlers)
-  server.add_generic_rpc_handlers((generic_handler,))
+    rpc_method_handlers = {
+            'GetSuggestions': grpc.unary_unary_rpc_method_handler(
+                    servicer.GetSuggestions,
+                    request_deserializer=api__pb2.GetSuggestionsRequest.FromString,
+                    response_serializer=api__pb2.GetSuggestionsReply.SerializeToString,
+            ),
+            'ValidateAlgorithmSettings': grpc.unary_unary_rpc_method_handler(
+                    servicer.ValidateAlgorithmSettings,
+                    request_deserializer=api__pb2.ValidateAlgorithmSettingsRequest.FromString,
+                    response_serializer=api__pb2.ValidateAlgorithmSettingsReply.SerializeToString,
+            ),
+    }
+    generic_handler = grpc.method_handlers_generic_handler(
+            'api.v1.beta1.Suggestion', rpc_method_handlers)
+    server.add_generic_rpc_handlers((generic_handler,))
+    server.add_registered_method_handlers('api.v1.beta1.Suggestion', rpc_method_handlers)
+
+
+ # This class is part of an EXPERIMENTAL API.
+class Suggestion(object):
+    """*
+    Suggestion service defines APIs to manage Katib Suggestion from HP or NAS algorithms
+    """
+
+    @staticmethod
+    def GetSuggestions(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(
+            request,
+            target,
+            '/api.v1.beta1.Suggestion/GetSuggestions',
+            api__pb2.GetSuggestionsRequest.SerializeToString,
+            api__pb2.GetSuggestionsReply.FromString,
+            options,
+            channel_credentials,
+            insecure,
+            call_credentials,
+            compression,
+            wait_for_ready,
+            timeout,
+            metadata,
+            _registered_method=True)
+
+    @staticmethod
+    def ValidateAlgorithmSettings(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(
+            request,
+            target,
+            '/api.v1.beta1.Suggestion/ValidateAlgorithmSettings',
+            api__pb2.ValidateAlgorithmSettingsRequest.SerializeToString,
+            api__pb2.ValidateAlgorithmSettingsReply.FromString,
+            options,
+            channel_credentials,
+            insecure,
+            call_credentials,
+            compression,
+            wait_for_ready,
+            timeout,
+            metadata,
+            _registered_method=True)
 
 
 class EarlyStoppingStub(object):
-  """*
-  EarlyStopping service defines APIs to manage Katib Early Stopping algorithms
-  """
+    """*
+    EarlyStopping service defines APIs to manage Katib Early Stopping algorithms
+    """
+
+    def __init__(self, channel):
+        """Constructor.
+
+        Args:
+            channel: A grpc.Channel.
+        """
+        self.GetEarlyStoppingRules = channel.unary_unary(
+                '/api.v1.beta1.EarlyStopping/GetEarlyStoppingRules',
+                request_serializer=api__pb2.GetEarlyStoppingRulesRequest.SerializeToString,
+                response_deserializer=api__pb2.GetEarlyStoppingRulesReply.FromString,
+                _registered_method=True)
+        self.SetTrialStatus = channel.unary_unary(
+                '/api.v1.beta1.EarlyStopping/SetTrialStatus',
+                request_serializer=api__pb2.SetTrialStatusRequest.SerializeToString,
+                response_deserializer=api__pb2.SetTrialStatusReply.FromString,
+                _registered_method=True)
+        self.ValidateEarlyStoppingSettings = channel.unary_unary(
+                '/api.v1.beta1.EarlyStopping/ValidateEarlyStoppingSettings',
+                request_serializer=api__pb2.ValidateEarlyStoppingSettingsRequest.SerializeToString,
+                response_deserializer=api__pb2.ValidateEarlyStoppingSettingsReply.FromString,
+                _registered_method=True)
 
-  def __init__(self, channel):
-    """Constructor.
 
-    Args:
-      channel: A grpc.Channel.
+class EarlyStoppingServicer(object):
+    """*
+    EarlyStopping service defines APIs to manage Katib Early Stopping algorithms
     """
-    self.GetEarlyStoppingRules = channel.unary_unary(
-        '/api.v1.beta1.EarlyStopping/GetEarlyStoppingRules',
-        request_serializer=api__pb2.GetEarlyStoppingRulesRequest.SerializeToString,
-        response_deserializer=api__pb2.GetEarlyStoppingRulesReply.FromString,
-        )
-    self.SetTrialStatus = channel.unary_unary(
-        '/api.v1.beta1.EarlyStopping/SetTrialStatus',
-        request_serializer=api__pb2.SetTrialStatusRequest.SerializeToString,
-        response_deserializer=api__pb2.SetTrialStatusReply.FromString,
-        )
-    self.ValidateEarlyStoppingSettings = channel.unary_unary(
-        '/api.v1.beta1.EarlyStopping/ValidateEarlyStoppingSettings',
-        request_serializer=api__pb2.ValidateEarlyStoppingSettingsRequest.SerializeToString,
-        response_deserializer=api__pb2.ValidateEarlyStoppingSettingsReply.FromString,
-        )
 
+    def GetEarlyStoppingRules(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
 
-class EarlyStoppingServicer(object):
-  """*
-  EarlyStopping service defines APIs to manage Katib Early Stopping algorithms
-  """
-
-  def GetEarlyStoppingRules(self, request, context):
-    # missing associated documentation comment in .proto file
-    pass
-    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-    context.set_details('Method not implemented!')
-    raise NotImplementedError('Method not implemented!')
-
-  def SetTrialStatus(self, request, context):
-    # missing associated documentation comment in .proto file
-    pass
-    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-    context.set_details('Method not implemented!')
-    raise NotImplementedError('Method not implemented!')
-
-  def ValidateEarlyStoppingSettings(self, request, context):
-    # missing associated documentation comment in .proto file
-    pass
-    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-    context.set_details('Method not implemented!')
-    raise NotImplementedError('Method not implemented!')
+    def SetTrialStatus(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def ValidateEarlyStoppingSettings(self, request, context):
+        """Missing associated documentation comment in .proto file."""
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
 
 
 def add_EarlyStoppingServicer_to_server(servicer, server):
-  rpc_method_handlers = {
-      'GetEarlyStoppingRules': grpc.unary_unary_rpc_method_handler(
-          servicer.GetEarlyStoppingRules,
-          request_deserializer=api__pb2.GetEarlyStoppingRulesRequest.FromString,
-          response_serializer=api__pb2.GetEarlyStoppingRulesReply.SerializeToString,
-      ),
-      'SetTrialStatus': grpc.unary_unary_rpc_method_handler(
-          servicer.SetTrialStatus,
-          request_deserializer=api__pb2.SetTrialStatusRequest.FromString,
-          response_serializer=api__pb2.SetTrialStatusReply.SerializeToString,
-      ),
-      'ValidateEarlyStoppingSettings': grpc.unary_unary_rpc_method_handler(
-          servicer.ValidateEarlyStoppingSettings,
-          request_deserializer=api__pb2.ValidateEarlyStoppingSettingsRequest.FromString,
-          response_serializer=api__pb2.ValidateEarlyStoppingSettingsReply.SerializeToString,
-      ),
-  }
-  generic_handler = grpc.method_handlers_generic_handler(
-      'api.v1.beta1.EarlyStopping', rpc_method_handlers)
-  server.add_generic_rpc_handlers((generic_handler,))
+    rpc_method_handlers = {
+            'GetEarlyStoppingRules': grpc.unary_unary_rpc_method_handler(
+                    servicer.GetEarlyStoppingRules,
+                    request_deserializer=api__pb2.GetEarlyStoppingRulesRequest.FromString,
+                    response_serializer=api__pb2.GetEarlyStoppingRulesReply.SerializeToString,
+            ),
+            'SetTrialStatus': grpc.unary_unary_rpc_method_handler(
+                    servicer.SetTrialStatus,
+                    request_deserializer=api__pb2.SetTrialStatusRequest.FromString,
+                    response_serializer=api__pb2.SetTrialStatusReply.SerializeToString,
+            ),
+            'ValidateEarlyStoppingSettings': grpc.unary_unary_rpc_method_handler(
+                    servicer.ValidateEarlyStoppingSettings,
+                    request_deserializer=api__pb2.ValidateEarlyStoppingSettingsRequest.FromString,
+                    response_serializer=api__pb2.ValidateEarlyStoppingSettingsReply.SerializeToString,
+            ),
+    }
+    generic_handler = grpc.method_handlers_generic_handler(
+            'api.v1.beta1.EarlyStopping', rpc_method_handlers)
+    server.add_generic_rpc_handlers((generic_handler,))
+    server.add_registered_method_handlers('api.v1.beta1.EarlyStopping', rpc_method_handlers)
+
+
+ # This class is part of an EXPERIMENTAL API.
+class EarlyStopping(object):
+    """*
+    EarlyStopping service defines APIs to manage Katib Early Stopping algorithms
+    """
+
+    @staticmethod
+    def GetEarlyStoppingRules(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(
+            request,
+            target,
+            '/api.v1.beta1.EarlyStopping/GetEarlyStoppingRules',
+            api__pb2.GetEarlyStoppingRulesRequest.SerializeToString,
+            api__pb2.GetEarlyStoppingRulesReply.FromString,
+            options,
+            channel_credentials,
+            insecure,
+            call_credentials,
+            compression,
+            wait_for_ready,
+            timeout,
+            metadata,
+            _registered_method=True)
+
+    @staticmethod
+    def SetTrialStatus(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(
+            request,
+            target,
+            '/api.v1.beta1.EarlyStopping/SetTrialStatus',
+            api__pb2.SetTrialStatusRequest.SerializeToString,
+            api__pb2.SetTrialStatusReply.FromString,
+            options,
+            channel_credentials,
+            insecure,
+            call_credentials,
+            compression,
+            wait_for_ready,
+            timeout,
+            metadata,
+            _registered_method=True)
+
+    @staticmethod
+    def ValidateEarlyStoppingSettings(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(
+            request,
+            target,
+            '/api.v1.beta1.EarlyStopping/ValidateEarlyStoppingSettings',
+            api__pb2.ValidateEarlyStoppingSettingsRequest.SerializeToString,
+            api__pb2.ValidateEarlyStoppingSettingsReply.FromString,
+            options,
+            channel_credentials,
+            insecure,
+            call_credentials,
+            compression,
+            wait_for_ready,
+            timeout,
+            metadata,
+            _registered_method=True)
diff --git a/pkg/earlystopping/v1beta1/medianstop/service.py b/pkg/earlystopping/v1beta1/medianstop/service.py
index 384d04f3a57..6658ab2a894 100644
--- a/pkg/earlystopping/v1beta1/medianstop/service.py
+++ b/pkg/earlystopping/v1beta1/medianstop/service.py
@@ -13,6 +13,7 @@
 # limitations under the License.
 
 import logging
+from typing import Iterable, Optional
 from kubernetes import client, config
 import multiprocessing
 from datetime import datetime
@@ -64,7 +65,7 @@ def __init__(self):
 
         self.api_instance = client.CustomObjectsApi()
 
-    def ValidateEarlyStoppingSettings(self, request, context):
+    def ValidateEarlyStoppingSettings(self, request: api_pb2.ValidateEarlyStoppingSettingsRequest, context: grpc.ServicerContext) -> api_pb2.ValidateEarlyStoppingSettingsReply:
         is_valid, message = self.validate_early_stopping_spec(request.early_stopping)
         if not is_valid:
             context.set_code(grpc.StatusCode.INVALID_ARGUMENT)
@@ -97,7 +98,7 @@ def validate_medianstop_setting(early_stopping_settings):
 
         return True, ""
 
-    def GetEarlyStoppingRules(self, request, context):
+    def GetEarlyStoppingRules(self, request: api_pb2.GetEarlyStoppingRulesRequest, context: grpc.ServicerContext) -> api_pb2.GetSuggestionsReply:
         logger.info("Get new early stopping rules")
 
         # Get required values for the first call.
@@ -137,24 +138,32 @@ def GetEarlyStoppingRules(self, request, context):
             early_stopping_rules=early_stopping_rules
         )
 
-    def get_early_stopping_settings(self, early_stopping_settings):
+    def get_early_stopping_settings(self, early_stopping_settings: Iterable[api_pb2.EarlyStoppingSetting]):
         for setting in early_stopping_settings:
             if setting.name == "min_trials_required":
                 self.min_trials_required = int(setting.value)
             elif setting.name == "start_step":
                 self.start_step = int(setting.value)
 
-    def get_median_value(self, trials):
+    def get_median_value(self, trials: Iterable[api_pb2.Trial]) -> Optional[float]:
         for trial in trials:
             # Get metrics only for the new succeeded Trials.
-            if trial.name not in self.trials_avg_history and trial.status.condition == SUCCEEDED_TRIAL:
-                channel = grpc.beta.implementations.insecure_channel(
-                    self.db_manager_address[0], int(self.db_manager_address[1]))
-                with api_pb2.beta_create_DBManager_stub(channel) as client:
-                    get_log_response = client.GetObservationLog(api_pb2.GetObservationLogRequest(
-                        trial_name=trial.name,
-                        metric_name=self.objective_metric
-                    ), timeout=APISERVER_TIMEOUT)
+            if (
+                trial.name not in self.trials_avg_history
+                and trial.status.condition == SUCCEEDED_TRIAL
+            ):
+                with grpc.insecure_channel(
+                    f"{self.db_manager_address[0]}:{self.db_manager_address[1]}"
+                ) as channel:
+                    stub = api_pb2_grpc.DBManagerStub(channel)
+                    get_log_response: api_pb2.GetObservationLogReply = (
+                        stub.GetObservationLog(
+                            api_pb2.GetObservationLogRequest(
+                                trial_name=trial.name, metric_name=self.objective_metric
+                            ),
+                            timeout=APISERVER_TIMEOUT,
+                        )
+                    )
 
                 # Get only first start_step metrics.
                 # Since metrics are collected consistently and ordered by time, we slice top start_step metrics.
@@ -181,7 +190,7 @@ def get_median_value(self, trials):
         ))
         return None
 
-    def SetTrialStatus(self, request, context):
+    def SetTrialStatus(self, request: api_pb2.SetTrialStatusRequest, context: grpc.ServicerContext) -> api_pb2.SetTrialStatusReply:
         trial_name = request.trial_name
 
         logger.info("Update status for Trial: {}".format(trial_name))


Test patch:
diff --git a/pkg/controller.v1beta1/suggestion/suggestionclient/suggestionclient_test.go b/pkg/controller.v1beta1/suggestion/suggestionclient/suggestionclient_test.go
index 862e82b4636..b51e9f6cb29 100644
--- a/pkg/controller.v1beta1/suggestion/suggestionclient/suggestionclient_test.go
+++ b/pkg/controller.v1beta1/suggestion/suggestionclient/suggestionclient_test.go
@@ -28,6 +28,7 @@ import (
 	"google.golang.org/grpc"
 	"google.golang.org/grpc/codes"
 	"google.golang.org/grpc/status"
+	"google.golang.org/protobuf/proto"
 	corev1 "k8s.io/api/core/v1"
 	"k8s.io/apimachinery/pkg/api/equality"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -52,7 +53,12 @@ type k8sMatcher struct {
 }
 
 func (k8s k8sMatcher) Matches(x interface{}) bool {
-	return equality.Semantic.DeepEqual(k8s.x, x)
+	switch ex := k8s.x.(type) {
+	case proto.Message:
+		return proto.Equal(ex, x.(proto.Message))
+	default:
+		return equality.Semantic.DeepEqual(k8s.x, x)
+	}
 }
 
 func (k8s k8sMatcher) String() string {
diff --git a/pkg/metricscollector/v1beta1/file-metricscollector/file-metricscollector_test.go b/pkg/metricscollector/v1beta1/file-metricscollector/file-metricscollector_test.go
index 87353f09a9b..14e505f6ec4 100644
--- a/pkg/metricscollector/v1beta1/file-metricscollector/file-metricscollector_test.go
+++ b/pkg/metricscollector/v1beta1/file-metricscollector/file-metricscollector_test.go
@@ -27,6 +27,7 @@ import (
 	commonv1beta1 "github.com/kubeflow/katib/pkg/apis/controller/common/v1beta1"
 	v1beta1 "github.com/kubeflow/katib/pkg/apis/manager/v1beta1"
 	"github.com/kubeflow/katib/pkg/controller.v1beta1/consts"
+	"google.golang.org/protobuf/testing/protocmp"
 )
 
 func TestCollectObservationLog(t *testing.T) {
@@ -320,7 +321,7 @@ invalid INFO     {metricName: loss, metricValue: 0.3634}`,
 			if diff := cmp.Diff(test.wantError, err, cmpopts.EquateErrors()); len(diff) != 0 {
 				t.Errorf("Unexpected error (-want,+got):\n%s", diff)
 			}
-			if diff := cmp.Diff(test.expected, actual); len(diff) != 0 {
+			if diff := cmp.Diff(test.expected, actual, protocmp.Transform()); len(diff) != 0 {
 				t.Errorf("Unexpected parsed result (-want,+got):\n%s", diff)
 			}
 		})
diff --git a/test/__init__.py b/test/__init__.py
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/test/conftest.py b/test/conftest.py
new file mode 100644
index 00000000000..6d492c40318
--- /dev/null
+++ b/test/conftest.py
@@ -0,0 +1,12 @@
+import os
+from sys import path
+
+root = os.path.join(os.path.dirname(__file__), "..")
+path.extend(
+    [
+        os.path.join(root, "pkg/apis/manager/v1beta1/python"),
+        os.path.join(root, "pkg/apis/manager/health/python"),
+        os.path.join(root, "pkg/metricscollector/v1beta1/common"),
+        os.path.join(root, "pkg/metricscollector/v1beta1/tfevent-metricscollector"),
+    ]
+)