diff --git a/docs/api_reference/api_inventory.txt b/docs/api_reference/api_inventory.txt index 0899539839a54..2941aeb608212 100644 --- a/docs/api_reference/api_inventory.txt +++ b/docs/api_reference/api_inventory.txt @@ -40,6 +40,7 @@ mlflow.client.MlflowClient.create_prompt_version mlflow.client.MlflowClient.create_registered_model mlflow.client.MlflowClient.create_run mlflow.client.MlflowClient.create_webhook +mlflow.client.MlflowClient.create_workspace mlflow.client.MlflowClient.delete_dataset mlflow.client.MlflowClient.delete_dataset_tag mlflow.client.MlflowClient.delete_experiment @@ -61,6 +62,7 @@ mlflow.client.MlflowClient.delete_tag mlflow.client.MlflowClient.delete_trace_tag mlflow.client.MlflowClient.delete_traces mlflow.client.MlflowClient.delete_webhook +mlflow.client.MlflowClient.delete_workspace mlflow.client.MlflowClient.detach_prompt_from_run mlflow.client.MlflowClient.download_artifacts mlflow.client.MlflowClient.end_span @@ -84,6 +86,8 @@ mlflow.client.MlflowClient.get_registered_model mlflow.client.MlflowClient.get_run mlflow.client.MlflowClient.get_trace mlflow.client.MlflowClient.get_webhook +mlflow.client.MlflowClient.get_workspace +mlflow.client.MlflowClient.get_workspace_store_uri mlflow.client.MlflowClient.link_prompt_version_to_model mlflow.client.MlflowClient.link_prompt_version_to_run mlflow.client.MlflowClient.link_prompt_versions_to_trace @@ -92,6 +96,7 @@ mlflow.client.MlflowClient.list_artifacts mlflow.client.MlflowClient.list_logged_model_artifacts mlflow.client.MlflowClient.list_logged_prompts mlflow.client.MlflowClient.list_webhooks +mlflow.client.MlflowClient.list_workspaces mlflow.client.MlflowClient.load_prompt mlflow.client.MlflowClient.load_table mlflow.client.MlflowClient.log_artifact @@ -146,6 +151,7 @@ mlflow.client.MlflowClient.update_model_version mlflow.client.MlflowClient.update_registered_model mlflow.client.MlflowClient.update_run mlflow.client.MlflowClient.update_webhook +mlflow.client.MlflowClient.update_workspace mlflow.config.disable_system_metrics_logging mlflow.config.enable_async_logging mlflow.config.enable_system_metrics_logging @@ -529,6 +535,10 @@ mlflow.entities.WebhookTestResult mlflow.entities.WebhookTestResult.from_proto mlflow.entities.WebhookTestResult.to_proto mlflow.entities.Workspace +mlflow.entities.Workspace.from_dict +mlflow.entities.Workspace.from_proto +mlflow.entities.Workspace.to_dict +mlflow.entities.Workspace.to_proto mlflow.entities.assessment.Assessment mlflow.entities.assessment.Expectation mlflow.entities.assessment.Feedback diff --git a/mlflow/cli/__init__.py b/mlflow/cli/__init__.py index 500c52f6f2f28..5158bf743aa73 100644 --- a/mlflow/cli/__init__.py +++ b/mlflow/cli/__init__.py @@ -20,7 +20,12 @@ from mlflow import ai_commands, projects, version from mlflow.entities import ViewType from mlflow.entities.lifecycle_stage import LifecycleStage -from mlflow.environment_variables import MLFLOW_EXPERIMENT_ID, MLFLOW_EXPERIMENT_NAME +from mlflow.environment_variables import ( + MLFLOW_ENABLE_WORKSPACES, + MLFLOW_EXPERIMENT_ID, + MLFLOW_EXPERIMENT_NAME, + MLFLOW_WORKSPACE_STORE_URI, +) from mlflow.exceptions import InvalidUrlException, MlflowException from mlflow.protos.databricks_pb2 import INVALID_PARAMETER_VALUE from mlflow.store.artifact.artifact_repository_registry import get_artifact_repository @@ -458,6 +463,26 @@ def _validate_static_prefix(ctx, param, value): "Unsupported on Windows." ), ) +@click.option( + "--workspace-store-uri", + envvar=MLFLOW_WORKSPACE_STORE_URI.name, + metavar="URI", + default=None, + help=( + "Workspace provider backend URI used for workspace CRUD APIs and request routing. " + "When unspecified, defaults to the backend store URI. This only needs to be specified " + "when using a workspace store plugin leveraging externally managed workspaces (e.g. " + + "Kubernetes namespaces)." + ), +) +@click.option( + "--enable-workspaces", + envvar=MLFLOW_ENABLE_WORKSPACES.name, + is_flag=True, + default=False, + show_default=True, + help="Enable backwards compatible workspace-aware multi-tenancy mode.", +) def server( ctx, backend_store_uri, @@ -480,6 +505,8 @@ def server( app_name, dev, uvicorn_opts, + workspace_store_uri, + enable_workspaces, ): """ Run the MLflow tracking server with built-in security middleware. @@ -525,6 +552,17 @@ def server( disable_security_middleware=disable_security_middleware, ) + if enable_workspaces: + os.environ[MLFLOW_ENABLE_WORKSPACES.name] = "true" + if workspace_store_uri: + os.environ[MLFLOW_WORKSPACE_STORE_URI.name] = workspace_store_uri + elif workspace_store_uri: + click.echo( + "Ignoring --workspace-store-uri because workspaces are not enabled. " + "Use --enable-workspaces to activate workspace mode.", + err=True, + ) + if disable_security_middleware: os.environ["MLFLOW_SERVER_DISABLE_SECURITY_MIDDLEWARE"] = "true" else: diff --git a/mlflow/entities/workspace.py b/mlflow/entities/workspace.py index cfd74daf09eaf..9a79a2cb7c21e 100644 --- a/mlflow/entities/workspace.py +++ b/mlflow/entities/workspace.py @@ -3,6 +3,9 @@ from __future__ import annotations from dataclasses import dataclass +from typing import Any + +from mlflow.protos.service_pb2 import Workspace as ProtoWorkspace @dataclass(frozen=True, slots=True) @@ -11,3 +14,22 @@ class Workspace: name: str description: str | None = None + + def to_dict(self) -> dict[str, str | None]: + return {"name": self.name, "description": self.description} + + @classmethod + def from_dict(cls, payload: dict[str, Any]) -> "Workspace": + return cls(name=payload["name"], description=payload.get("description")) + + def to_proto(self) -> ProtoWorkspace: + workspace = ProtoWorkspace() + workspace.name = self.name + if self.description is not None: + workspace.description = self.description + return workspace + + @classmethod + def from_proto(cls, proto: ProtoWorkspace) -> "Workspace": + description = proto.description if proto.HasField("description") else None + return cls(name=proto.name, description=description) diff --git a/mlflow/environment_variables.py b/mlflow/environment_variables.py index 130de645a07f9..81a9f874fd1c1 100644 --- a/mlflow/environment_variables.py +++ b/mlflow/environment_variables.py @@ -106,6 +106,10 @@ def get(self): #: (default: ``None``) MLFLOW_REGISTRY_URI = _EnvironmentVariable("MLFLOW_REGISTRY_URI", str, None) +#: Specifies the workspace provider backend URI. +#: Defaults to the tracking URI when unset. +MLFLOW_WORKSPACE_STORE_URI = _EnvironmentVariable("MLFLOW_WORKSPACE_STORE_URI", str, None) + #: Specifies the ``dfs_tmpdir`` parameter to use for ``mlflow.spark.save_model``, #: ``mlflow.spark.log_model`` and ``mlflow.spark.load_model``. See #: https://www.mlflow.org/docs/latest/python_api/mlflow.spark.html#mlflow.spark.save_model @@ -435,6 +439,10 @@ def get(self): "MLFLOW_ENABLE_DBFS_FUSE_ARTIFACT_REPO", True ) +#: Enables workspace-aware multi-tenancy features on the MLflow server. +#: (default: ``False``) +MLFLOW_ENABLE_WORKSPACES = _BooleanEnvironmentVariable("MLFLOW_ENABLE_WORKSPACES", False) + #: Specifies whether or not to use UC Volume FUSE mount to store artifacts on Databricks #: (default: ``True``) MLFLOW_ENABLE_UC_VOLUME_FUSE_ARTIFACT_REPO = _BooleanEnvironmentVariable( diff --git a/mlflow/java/client/src/main/java/org/mlflow/api/proto/Service.java b/mlflow/java/client/src/main/java/org/mlflow/api/proto/Service.java index 0d80b783625d3..c8e292f75f758 100644 --- a/mlflow/java/client/src/main/java/org/mlflow/api/proto/Service.java +++ b/mlflow/java/client/src/main/java/org/mlflow/api/proto/Service.java @@ -186784,6 +186784,7831 @@ public org.mlflow.api.proto.Service.Scorer getDefaultInstanceForType() { } + public interface WorkspaceOrBuilder extends + // @@protoc_insertion_point(interface_extends:mlflow.Workspace) + com.google.protobuf.MessageOrBuilder { + + /** + *
+     * The unique workspace name.
+     * 
+ * + * optional string name = 1 [(.mlflow.validate_required) = true]; + * @return Whether the name field is set. + */ + boolean hasName(); + /** + *
+     * The unique workspace name.
+     * 
+ * + * optional string name = 1 [(.mlflow.validate_required) = true]; + * @return The name. + */ + java.lang.String getName(); + /** + *
+     * The unique workspace name.
+     * 
+ * + * optional string name = 1 [(.mlflow.validate_required) = true]; + * @return The bytes for name. + */ + com.google.protobuf.ByteString + getNameBytes(); + + /** + *
+     * Optional workspace description.
+     * 
+ * + * optional string description = 2; + * @return Whether the description field is set. + */ + boolean hasDescription(); + /** + *
+     * Optional workspace description.
+     * 
+ * + * optional string description = 2; + * @return The description. + */ + java.lang.String getDescription(); + /** + *
+     * Optional workspace description.
+     * 
+ * + * optional string description = 2; + * @return The bytes for description. + */ + com.google.protobuf.ByteString + getDescriptionBytes(); + } + /** + *
+   * Workspace metadata returned by workspace APIs.
+   * 
+ * + * Protobuf type {@code mlflow.Workspace} + */ + public static final class Workspace extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:mlflow.Workspace) + WorkspaceOrBuilder { + private static final long serialVersionUID = 0L; + // Use Workspace.newBuilder() to construct. + private Workspace(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private Workspace() { + name_ = ""; + description_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new Workspace(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private Workspace( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + com.google.protobuf.ByteString bs = input.readBytes(); + bitField0_ |= 0x00000001; + name_ = bs; + break; + } + case 18: { + com.google.protobuf.ByteString bs = input.readBytes(); + bitField0_ |= 0x00000002; + description_ = bs; + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.mlflow.api.proto.Service.internal_static_mlflow_Workspace_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.mlflow.api.proto.Service.internal_static_mlflow_Workspace_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.mlflow.api.proto.Service.Workspace.class, org.mlflow.api.proto.Service.Workspace.Builder.class); + } + + private int bitField0_; + public static final int NAME_FIELD_NUMBER = 1; + private volatile java.lang.Object name_; + /** + *
+     * The unique workspace name.
+     * 
+ * + * optional string name = 1 [(.mlflow.validate_required) = true]; + * @return Whether the name field is set. + */ + @java.lang.Override + public boolean hasName() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + *
+     * The unique workspace name.
+     * 
+ * + * optional string name = 1 [(.mlflow.validate_required) = true]; + * @return The name. + */ + @java.lang.Override + public java.lang.String getName() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + name_ = s; + } + return s; + } + } + /** + *
+     * The unique workspace name.
+     * 
+ * + * optional string name = 1 [(.mlflow.validate_required) = true]; + * @return The bytes for name. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int DESCRIPTION_FIELD_NUMBER = 2; + private volatile java.lang.Object description_; + /** + *
+     * Optional workspace description.
+     * 
+ * + * optional string description = 2; + * @return Whether the description field is set. + */ + @java.lang.Override + public boolean hasDescription() { + return ((bitField0_ & 0x00000002) != 0); + } + /** + *
+     * Optional workspace description.
+     * 
+ * + * optional string description = 2; + * @return The description. + */ + @java.lang.Override + public java.lang.String getDescription() { + java.lang.Object ref = description_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + description_ = s; + } + return s; + } + } + /** + *
+     * Optional workspace description.
+     * 
+ * + * optional string description = 2; + * @return The bytes for description. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getDescriptionBytes() { + java.lang.Object ref = description_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + description_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + } + if (((bitField0_ & 0x00000002) != 0)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 2, description_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + } + if (((bitField0_ & 0x00000002) != 0)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, description_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof org.mlflow.api.proto.Service.Workspace)) { + return super.equals(obj); + } + org.mlflow.api.proto.Service.Workspace other = (org.mlflow.api.proto.Service.Workspace) obj; + + if (hasName() != other.hasName()) return false; + if (hasName()) { + if (!getName() + .equals(other.getName())) return false; + } + if (hasDescription() != other.hasDescription()) return false; + if (hasDescription()) { + if (!getDescription() + .equals(other.getDescription())) return false; + } + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasName()) { + hash = (37 * hash) + NAME_FIELD_NUMBER; + hash = (53 * hash) + getName().hashCode(); + } + if (hasDescription()) { + hash = (37 * hash) + DESCRIPTION_FIELD_NUMBER; + hash = (53 * hash) + getDescription().hashCode(); + } + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static org.mlflow.api.proto.Service.Workspace parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.mlflow.api.proto.Service.Workspace parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.mlflow.api.proto.Service.Workspace parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.mlflow.api.proto.Service.Workspace parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.mlflow.api.proto.Service.Workspace parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.mlflow.api.proto.Service.Workspace parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.mlflow.api.proto.Service.Workspace parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.mlflow.api.proto.Service.Workspace parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static org.mlflow.api.proto.Service.Workspace parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static org.mlflow.api.proto.Service.Workspace parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static org.mlflow.api.proto.Service.Workspace parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.mlflow.api.proto.Service.Workspace parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(org.mlflow.api.proto.Service.Workspace prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + *
+     * Workspace metadata returned by workspace APIs.
+     * 
+ * + * Protobuf type {@code mlflow.Workspace} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:mlflow.Workspace) + org.mlflow.api.proto.Service.WorkspaceOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.mlflow.api.proto.Service.internal_static_mlflow_Workspace_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.mlflow.api.proto.Service.internal_static_mlflow_Workspace_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.mlflow.api.proto.Service.Workspace.class, org.mlflow.api.proto.Service.Workspace.Builder.class); + } + + // Construct using org.mlflow.api.proto.Service.Workspace.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + name_ = ""; + bitField0_ = (bitField0_ & ~0x00000001); + description_ = ""; + bitField0_ = (bitField0_ & ~0x00000002); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return org.mlflow.api.proto.Service.internal_static_mlflow_Workspace_descriptor; + } + + @java.lang.Override + public org.mlflow.api.proto.Service.Workspace getDefaultInstanceForType() { + return org.mlflow.api.proto.Service.Workspace.getDefaultInstance(); + } + + @java.lang.Override + public org.mlflow.api.proto.Service.Workspace build() { + org.mlflow.api.proto.Service.Workspace result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public org.mlflow.api.proto.Service.Workspace buildPartial() { + org.mlflow.api.proto.Service.Workspace result = new org.mlflow.api.proto.Service.Workspace(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + to_bitField0_ |= 0x00000001; + } + result.name_ = name_; + if (((from_bitField0_ & 0x00000002) != 0)) { + to_bitField0_ |= 0x00000002; + } + result.description_ = description_; + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof org.mlflow.api.proto.Service.Workspace) { + return mergeFrom((org.mlflow.api.proto.Service.Workspace)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(org.mlflow.api.proto.Service.Workspace other) { + if (other == org.mlflow.api.proto.Service.Workspace.getDefaultInstance()) return this; + if (other.hasName()) { + bitField0_ |= 0x00000001; + name_ = other.name_; + onChanged(); + } + if (other.hasDescription()) { + bitField0_ |= 0x00000002; + description_ = other.description_; + onChanged(); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + org.mlflow.api.proto.Service.Workspace parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (org.mlflow.api.proto.Service.Workspace) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private java.lang.Object name_ = ""; + /** + *
+       * The unique workspace name.
+       * 
+ * + * optional string name = 1 [(.mlflow.validate_required) = true]; + * @return Whether the name field is set. + */ + public boolean hasName() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + *
+       * The unique workspace name.
+       * 
+ * + * optional string name = 1 [(.mlflow.validate_required) = true]; + * @return The name. + */ + public java.lang.String getName() { + java.lang.Object ref = name_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + name_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * The unique workspace name.
+       * 
+ * + * optional string name = 1 [(.mlflow.validate_required) = true]; + * @return The bytes for name. + */ + public com.google.protobuf.ByteString + getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * The unique workspace name.
+       * 
+ * + * optional string name = 1 [(.mlflow.validate_required) = true]; + * @param value The name to set. + * @return This builder for chaining. + */ + public Builder setName( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + name_ = value; + onChanged(); + return this; + } + /** + *
+       * The unique workspace name.
+       * 
+ * + * optional string name = 1 [(.mlflow.validate_required) = true]; + * @return This builder for chaining. + */ + public Builder clearName() { + bitField0_ = (bitField0_ & ~0x00000001); + name_ = getDefaultInstance().getName(); + onChanged(); + return this; + } + /** + *
+       * The unique workspace name.
+       * 
+ * + * optional string name = 1 [(.mlflow.validate_required) = true]; + * @param value The bytes for name to set. + * @return This builder for chaining. + */ + public Builder setNameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + name_ = value; + onChanged(); + return this; + } + + private java.lang.Object description_ = ""; + /** + *
+       * Optional workspace description.
+       * 
+ * + * optional string description = 2; + * @return Whether the description field is set. + */ + public boolean hasDescription() { + return ((bitField0_ & 0x00000002) != 0); + } + /** + *
+       * Optional workspace description.
+       * 
+ * + * optional string description = 2; + * @return The description. + */ + public java.lang.String getDescription() { + java.lang.Object ref = description_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + description_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * Optional workspace description.
+       * 
+ * + * optional string description = 2; + * @return The bytes for description. + */ + public com.google.protobuf.ByteString + getDescriptionBytes() { + java.lang.Object ref = description_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + description_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * Optional workspace description.
+       * 
+ * + * optional string description = 2; + * @param value The description to set. + * @return This builder for chaining. + */ + public Builder setDescription( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + description_ = value; + onChanged(); + return this; + } + /** + *
+       * Optional workspace description.
+       * 
+ * + * optional string description = 2; + * @return This builder for chaining. + */ + public Builder clearDescription() { + bitField0_ = (bitField0_ & ~0x00000002); + description_ = getDefaultInstance().getDescription(); + onChanged(); + return this; + } + /** + *
+       * Optional workspace description.
+       * 
+ * + * optional string description = 2; + * @param value The bytes for description to set. + * @return This builder for chaining. + */ + public Builder setDescriptionBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + description_ = value; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:mlflow.Workspace) + } + + // @@protoc_insertion_point(class_scope:mlflow.Workspace) + private static final org.mlflow.api.proto.Service.Workspace DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.Workspace(); + } + + public static org.mlflow.api.proto.Service.Workspace getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + @java.lang.Deprecated public static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Workspace parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new Workspace(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public org.mlflow.api.proto.Service.Workspace getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface ListWorkspacesOrBuilder extends + // @@protoc_insertion_point(interface_extends:mlflow.ListWorkspaces) + com.google.protobuf.MessageOrBuilder { + } + /** + *
+   * List workspaces available to the current principal.
+   * 
+ * + * Protobuf type {@code mlflow.ListWorkspaces} + */ + public static final class ListWorkspaces extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:mlflow.ListWorkspaces) + ListWorkspacesOrBuilder { + private static final long serialVersionUID = 0L; + // Use ListWorkspaces.newBuilder() to construct. + private ListWorkspaces(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private ListWorkspaces() { + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new ListWorkspaces(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private ListWorkspaces( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.mlflow.api.proto.Service.internal_static_mlflow_ListWorkspaces_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.mlflow.api.proto.Service.internal_static_mlflow_ListWorkspaces_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.mlflow.api.proto.Service.ListWorkspaces.class, org.mlflow.api.proto.Service.ListWorkspaces.Builder.class); + } + + public interface ResponseOrBuilder extends + // @@protoc_insertion_point(interface_extends:mlflow.ListWorkspaces.Response) + com.google.protobuf.MessageOrBuilder { + + /** + *
+       * Collection of workspace records.
+       * 
+ * + * repeated .mlflow.Workspace workspaces = 1; + */ + java.util.List + getWorkspacesList(); + /** + *
+       * Collection of workspace records.
+       * 
+ * + * repeated .mlflow.Workspace workspaces = 1; + */ + org.mlflow.api.proto.Service.Workspace getWorkspaces(int index); + /** + *
+       * Collection of workspace records.
+       * 
+ * + * repeated .mlflow.Workspace workspaces = 1; + */ + int getWorkspacesCount(); + /** + *
+       * Collection of workspace records.
+       * 
+ * + * repeated .mlflow.Workspace workspaces = 1; + */ + java.util.List + getWorkspacesOrBuilderList(); + /** + *
+       * Collection of workspace records.
+       * 
+ * + * repeated .mlflow.Workspace workspaces = 1; + */ + org.mlflow.api.proto.Service.WorkspaceOrBuilder getWorkspacesOrBuilder( + int index); + } + /** + * Protobuf type {@code mlflow.ListWorkspaces.Response} + */ + public static final class Response extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:mlflow.ListWorkspaces.Response) + ResponseOrBuilder { + private static final long serialVersionUID = 0L; + // Use Response.newBuilder() to construct. + private Response(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private Response() { + workspaces_ = java.util.Collections.emptyList(); + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new Response(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private Response( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + if (!((mutable_bitField0_ & 0x00000001) != 0)) { + workspaces_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000001; + } + workspaces_.add( + input.readMessage(org.mlflow.api.proto.Service.Workspace.PARSER, extensionRegistry)); + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + if (((mutable_bitField0_ & 0x00000001) != 0)) { + workspaces_ = java.util.Collections.unmodifiableList(workspaces_); + } + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.mlflow.api.proto.Service.internal_static_mlflow_ListWorkspaces_Response_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.mlflow.api.proto.Service.internal_static_mlflow_ListWorkspaces_Response_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.mlflow.api.proto.Service.ListWorkspaces.Response.class, org.mlflow.api.proto.Service.ListWorkspaces.Response.Builder.class); + } + + public static final int WORKSPACES_FIELD_NUMBER = 1; + private java.util.List workspaces_; + /** + *
+       * Collection of workspace records.
+       * 
+ * + * repeated .mlflow.Workspace workspaces = 1; + */ + @java.lang.Override + public java.util.List getWorkspacesList() { + return workspaces_; + } + /** + *
+       * Collection of workspace records.
+       * 
+ * + * repeated .mlflow.Workspace workspaces = 1; + */ + @java.lang.Override + public java.util.List + getWorkspacesOrBuilderList() { + return workspaces_; + } + /** + *
+       * Collection of workspace records.
+       * 
+ * + * repeated .mlflow.Workspace workspaces = 1; + */ + @java.lang.Override + public int getWorkspacesCount() { + return workspaces_.size(); + } + /** + *
+       * Collection of workspace records.
+       * 
+ * + * repeated .mlflow.Workspace workspaces = 1; + */ + @java.lang.Override + public org.mlflow.api.proto.Service.Workspace getWorkspaces(int index) { + return workspaces_.get(index); + } + /** + *
+       * Collection of workspace records.
+       * 
+ * + * repeated .mlflow.Workspace workspaces = 1; + */ + @java.lang.Override + public org.mlflow.api.proto.Service.WorkspaceOrBuilder getWorkspacesOrBuilder( + int index) { + return workspaces_.get(index); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + for (int i = 0; i < workspaces_.size(); i++) { + output.writeMessage(1, workspaces_.get(i)); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + for (int i = 0; i < workspaces_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, workspaces_.get(i)); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof org.mlflow.api.proto.Service.ListWorkspaces.Response)) { + return super.equals(obj); + } + org.mlflow.api.proto.Service.ListWorkspaces.Response other = (org.mlflow.api.proto.Service.ListWorkspaces.Response) obj; + + if (!getWorkspacesList() + .equals(other.getWorkspacesList())) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (getWorkspacesCount() > 0) { + hash = (37 * hash) + WORKSPACES_FIELD_NUMBER; + hash = (53 * hash) + getWorkspacesList().hashCode(); + } + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static org.mlflow.api.proto.Service.ListWorkspaces.Response parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.mlflow.api.proto.Service.ListWorkspaces.Response parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.mlflow.api.proto.Service.ListWorkspaces.Response parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.mlflow.api.proto.Service.ListWorkspaces.Response parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.mlflow.api.proto.Service.ListWorkspaces.Response parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.mlflow.api.proto.Service.ListWorkspaces.Response parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.mlflow.api.proto.Service.ListWorkspaces.Response parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.mlflow.api.proto.Service.ListWorkspaces.Response parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static org.mlflow.api.proto.Service.ListWorkspaces.Response parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static org.mlflow.api.proto.Service.ListWorkspaces.Response parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static org.mlflow.api.proto.Service.ListWorkspaces.Response parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.mlflow.api.proto.Service.ListWorkspaces.Response parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(org.mlflow.api.proto.Service.ListWorkspaces.Response prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code mlflow.ListWorkspaces.Response} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:mlflow.ListWorkspaces.Response) + org.mlflow.api.proto.Service.ListWorkspaces.ResponseOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.mlflow.api.proto.Service.internal_static_mlflow_ListWorkspaces_Response_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.mlflow.api.proto.Service.internal_static_mlflow_ListWorkspaces_Response_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.mlflow.api.proto.Service.ListWorkspaces.Response.class, org.mlflow.api.proto.Service.ListWorkspaces.Response.Builder.class); + } + + // Construct using org.mlflow.api.proto.Service.ListWorkspaces.Response.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + getWorkspacesFieldBuilder(); + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + if (workspacesBuilder_ == null) { + workspaces_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + } else { + workspacesBuilder_.clear(); + } + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return org.mlflow.api.proto.Service.internal_static_mlflow_ListWorkspaces_Response_descriptor; + } + + @java.lang.Override + public org.mlflow.api.proto.Service.ListWorkspaces.Response getDefaultInstanceForType() { + return org.mlflow.api.proto.Service.ListWorkspaces.Response.getDefaultInstance(); + } + + @java.lang.Override + public org.mlflow.api.proto.Service.ListWorkspaces.Response build() { + org.mlflow.api.proto.Service.ListWorkspaces.Response result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public org.mlflow.api.proto.Service.ListWorkspaces.Response buildPartial() { + org.mlflow.api.proto.Service.ListWorkspaces.Response result = new org.mlflow.api.proto.Service.ListWorkspaces.Response(this); + int from_bitField0_ = bitField0_; + if (workspacesBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0)) { + workspaces_ = java.util.Collections.unmodifiableList(workspaces_); + bitField0_ = (bitField0_ & ~0x00000001); + } + result.workspaces_ = workspaces_; + } else { + result.workspaces_ = workspacesBuilder_.build(); + } + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof org.mlflow.api.proto.Service.ListWorkspaces.Response) { + return mergeFrom((org.mlflow.api.proto.Service.ListWorkspaces.Response)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(org.mlflow.api.proto.Service.ListWorkspaces.Response other) { + if (other == org.mlflow.api.proto.Service.ListWorkspaces.Response.getDefaultInstance()) return this; + if (workspacesBuilder_ == null) { + if (!other.workspaces_.isEmpty()) { + if (workspaces_.isEmpty()) { + workspaces_ = other.workspaces_; + bitField0_ = (bitField0_ & ~0x00000001); + } else { + ensureWorkspacesIsMutable(); + workspaces_.addAll(other.workspaces_); + } + onChanged(); + } + } else { + if (!other.workspaces_.isEmpty()) { + if (workspacesBuilder_.isEmpty()) { + workspacesBuilder_.dispose(); + workspacesBuilder_ = null; + workspaces_ = other.workspaces_; + bitField0_ = (bitField0_ & ~0x00000001); + workspacesBuilder_ = + com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? + getWorkspacesFieldBuilder() : null; + } else { + workspacesBuilder_.addAllMessages(other.workspaces_); + } + } + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + org.mlflow.api.proto.Service.ListWorkspaces.Response parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (org.mlflow.api.proto.Service.ListWorkspaces.Response) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private java.util.List workspaces_ = + java.util.Collections.emptyList(); + private void ensureWorkspacesIsMutable() { + if (!((bitField0_ & 0x00000001) != 0)) { + workspaces_ = new java.util.ArrayList(workspaces_); + bitField0_ |= 0x00000001; + } + } + + private com.google.protobuf.RepeatedFieldBuilderV3< + org.mlflow.api.proto.Service.Workspace, org.mlflow.api.proto.Service.Workspace.Builder, org.mlflow.api.proto.Service.WorkspaceOrBuilder> workspacesBuilder_; + + /** + *
+         * Collection of workspace records.
+         * 
+ * + * repeated .mlflow.Workspace workspaces = 1; + */ + public java.util.List getWorkspacesList() { + if (workspacesBuilder_ == null) { + return java.util.Collections.unmodifiableList(workspaces_); + } else { + return workspacesBuilder_.getMessageList(); + } + } + /** + *
+         * Collection of workspace records.
+         * 
+ * + * repeated .mlflow.Workspace workspaces = 1; + */ + public int getWorkspacesCount() { + if (workspacesBuilder_ == null) { + return workspaces_.size(); + } else { + return workspacesBuilder_.getCount(); + } + } + /** + *
+         * Collection of workspace records.
+         * 
+ * + * repeated .mlflow.Workspace workspaces = 1; + */ + public org.mlflow.api.proto.Service.Workspace getWorkspaces(int index) { + if (workspacesBuilder_ == null) { + return workspaces_.get(index); + } else { + return workspacesBuilder_.getMessage(index); + } + } + /** + *
+         * Collection of workspace records.
+         * 
+ * + * repeated .mlflow.Workspace workspaces = 1; + */ + public Builder setWorkspaces( + int index, org.mlflow.api.proto.Service.Workspace value) { + if (workspacesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureWorkspacesIsMutable(); + workspaces_.set(index, value); + onChanged(); + } else { + workspacesBuilder_.setMessage(index, value); + } + return this; + } + /** + *
+         * Collection of workspace records.
+         * 
+ * + * repeated .mlflow.Workspace workspaces = 1; + */ + public Builder setWorkspaces( + int index, org.mlflow.api.proto.Service.Workspace.Builder builderForValue) { + if (workspacesBuilder_ == null) { + ensureWorkspacesIsMutable(); + workspaces_.set(index, builderForValue.build()); + onChanged(); + } else { + workspacesBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + *
+         * Collection of workspace records.
+         * 
+ * + * repeated .mlflow.Workspace workspaces = 1; + */ + public Builder addWorkspaces(org.mlflow.api.proto.Service.Workspace value) { + if (workspacesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureWorkspacesIsMutable(); + workspaces_.add(value); + onChanged(); + } else { + workspacesBuilder_.addMessage(value); + } + return this; + } + /** + *
+         * Collection of workspace records.
+         * 
+ * + * repeated .mlflow.Workspace workspaces = 1; + */ + public Builder addWorkspaces( + int index, org.mlflow.api.proto.Service.Workspace value) { + if (workspacesBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureWorkspacesIsMutable(); + workspaces_.add(index, value); + onChanged(); + } else { + workspacesBuilder_.addMessage(index, value); + } + return this; + } + /** + *
+         * Collection of workspace records.
+         * 
+ * + * repeated .mlflow.Workspace workspaces = 1; + */ + public Builder addWorkspaces( + org.mlflow.api.proto.Service.Workspace.Builder builderForValue) { + if (workspacesBuilder_ == null) { + ensureWorkspacesIsMutable(); + workspaces_.add(builderForValue.build()); + onChanged(); + } else { + workspacesBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + *
+         * Collection of workspace records.
+         * 
+ * + * repeated .mlflow.Workspace workspaces = 1; + */ + public Builder addWorkspaces( + int index, org.mlflow.api.proto.Service.Workspace.Builder builderForValue) { + if (workspacesBuilder_ == null) { + ensureWorkspacesIsMutable(); + workspaces_.add(index, builderForValue.build()); + onChanged(); + } else { + workspacesBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + *
+         * Collection of workspace records.
+         * 
+ * + * repeated .mlflow.Workspace workspaces = 1; + */ + public Builder addAllWorkspaces( + java.lang.Iterable values) { + if (workspacesBuilder_ == null) { + ensureWorkspacesIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, workspaces_); + onChanged(); + } else { + workspacesBuilder_.addAllMessages(values); + } + return this; + } + /** + *
+         * Collection of workspace records.
+         * 
+ * + * repeated .mlflow.Workspace workspaces = 1; + */ + public Builder clearWorkspaces() { + if (workspacesBuilder_ == null) { + workspaces_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000001); + onChanged(); + } else { + workspacesBuilder_.clear(); + } + return this; + } + /** + *
+         * Collection of workspace records.
+         * 
+ * + * repeated .mlflow.Workspace workspaces = 1; + */ + public Builder removeWorkspaces(int index) { + if (workspacesBuilder_ == null) { + ensureWorkspacesIsMutable(); + workspaces_.remove(index); + onChanged(); + } else { + workspacesBuilder_.remove(index); + } + return this; + } + /** + *
+         * Collection of workspace records.
+         * 
+ * + * repeated .mlflow.Workspace workspaces = 1; + */ + public org.mlflow.api.proto.Service.Workspace.Builder getWorkspacesBuilder( + int index) { + return getWorkspacesFieldBuilder().getBuilder(index); + } + /** + *
+         * Collection of workspace records.
+         * 
+ * + * repeated .mlflow.Workspace workspaces = 1; + */ + public org.mlflow.api.proto.Service.WorkspaceOrBuilder getWorkspacesOrBuilder( + int index) { + if (workspacesBuilder_ == null) { + return workspaces_.get(index); } else { + return workspacesBuilder_.getMessageOrBuilder(index); + } + } + /** + *
+         * Collection of workspace records.
+         * 
+ * + * repeated .mlflow.Workspace workspaces = 1; + */ + public java.util.List + getWorkspacesOrBuilderList() { + if (workspacesBuilder_ != null) { + return workspacesBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(workspaces_); + } + } + /** + *
+         * Collection of workspace records.
+         * 
+ * + * repeated .mlflow.Workspace workspaces = 1; + */ + public org.mlflow.api.proto.Service.Workspace.Builder addWorkspacesBuilder() { + return getWorkspacesFieldBuilder().addBuilder( + org.mlflow.api.proto.Service.Workspace.getDefaultInstance()); + } + /** + *
+         * Collection of workspace records.
+         * 
+ * + * repeated .mlflow.Workspace workspaces = 1; + */ + public org.mlflow.api.proto.Service.Workspace.Builder addWorkspacesBuilder( + int index) { + return getWorkspacesFieldBuilder().addBuilder( + index, org.mlflow.api.proto.Service.Workspace.getDefaultInstance()); + } + /** + *
+         * Collection of workspace records.
+         * 
+ * + * repeated .mlflow.Workspace workspaces = 1; + */ + public java.util.List + getWorkspacesBuilderList() { + return getWorkspacesFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilderV3< + org.mlflow.api.proto.Service.Workspace, org.mlflow.api.proto.Service.Workspace.Builder, org.mlflow.api.proto.Service.WorkspaceOrBuilder> + getWorkspacesFieldBuilder() { + if (workspacesBuilder_ == null) { + workspacesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< + org.mlflow.api.proto.Service.Workspace, org.mlflow.api.proto.Service.Workspace.Builder, org.mlflow.api.proto.Service.WorkspaceOrBuilder>( + workspaces_, + ((bitField0_ & 0x00000001) != 0), + getParentForChildren(), + isClean()); + workspaces_ = null; + } + return workspacesBuilder_; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:mlflow.ListWorkspaces.Response) + } + + // @@protoc_insertion_point(class_scope:mlflow.ListWorkspaces.Response) + private static final org.mlflow.api.proto.Service.ListWorkspaces.Response DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.ListWorkspaces.Response(); + } + + public static org.mlflow.api.proto.Service.ListWorkspaces.Response getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + @java.lang.Deprecated public static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Response parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new Response(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public org.mlflow.api.proto.Service.ListWorkspaces.Response getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof org.mlflow.api.proto.Service.ListWorkspaces)) { + return super.equals(obj); + } + org.mlflow.api.proto.Service.ListWorkspaces other = (org.mlflow.api.proto.Service.ListWorkspaces) obj; + + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static org.mlflow.api.proto.Service.ListWorkspaces parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.mlflow.api.proto.Service.ListWorkspaces parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.mlflow.api.proto.Service.ListWorkspaces parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.mlflow.api.proto.Service.ListWorkspaces parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.mlflow.api.proto.Service.ListWorkspaces parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.mlflow.api.proto.Service.ListWorkspaces parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.mlflow.api.proto.Service.ListWorkspaces parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.mlflow.api.proto.Service.ListWorkspaces parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static org.mlflow.api.proto.Service.ListWorkspaces parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static org.mlflow.api.proto.Service.ListWorkspaces parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static org.mlflow.api.proto.Service.ListWorkspaces parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.mlflow.api.proto.Service.ListWorkspaces parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(org.mlflow.api.proto.Service.ListWorkspaces prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + *
+     * List workspaces available to the current principal.
+     * 
+ * + * Protobuf type {@code mlflow.ListWorkspaces} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:mlflow.ListWorkspaces) + org.mlflow.api.proto.Service.ListWorkspacesOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.mlflow.api.proto.Service.internal_static_mlflow_ListWorkspaces_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.mlflow.api.proto.Service.internal_static_mlflow_ListWorkspaces_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.mlflow.api.proto.Service.ListWorkspaces.class, org.mlflow.api.proto.Service.ListWorkspaces.Builder.class); + } + + // Construct using org.mlflow.api.proto.Service.ListWorkspaces.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return org.mlflow.api.proto.Service.internal_static_mlflow_ListWorkspaces_descriptor; + } + + @java.lang.Override + public org.mlflow.api.proto.Service.ListWorkspaces getDefaultInstanceForType() { + return org.mlflow.api.proto.Service.ListWorkspaces.getDefaultInstance(); + } + + @java.lang.Override + public org.mlflow.api.proto.Service.ListWorkspaces build() { + org.mlflow.api.proto.Service.ListWorkspaces result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public org.mlflow.api.proto.Service.ListWorkspaces buildPartial() { + org.mlflow.api.proto.Service.ListWorkspaces result = new org.mlflow.api.proto.Service.ListWorkspaces(this); + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof org.mlflow.api.proto.Service.ListWorkspaces) { + return mergeFrom((org.mlflow.api.proto.Service.ListWorkspaces)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(org.mlflow.api.proto.Service.ListWorkspaces other) { + if (other == org.mlflow.api.proto.Service.ListWorkspaces.getDefaultInstance()) return this; + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + org.mlflow.api.proto.Service.ListWorkspaces parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (org.mlflow.api.proto.Service.ListWorkspaces) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:mlflow.ListWorkspaces) + } + + // @@protoc_insertion_point(class_scope:mlflow.ListWorkspaces) + private static final org.mlflow.api.proto.Service.ListWorkspaces DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.ListWorkspaces(); + } + + public static org.mlflow.api.proto.Service.ListWorkspaces getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + @java.lang.Deprecated public static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public ListWorkspaces parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new ListWorkspaces(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public org.mlflow.api.proto.Service.ListWorkspaces getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface CreateWorkspaceOrBuilder extends + // @@protoc_insertion_point(interface_extends:mlflow.CreateWorkspace) + com.google.protobuf.MessageOrBuilder { + + /** + *
+     * Workspace name to create.
+     * 
+ * + * optional string name = 1 [(.mlflow.validate_required) = true]; + * @return Whether the name field is set. + */ + boolean hasName(); + /** + *
+     * Workspace name to create.
+     * 
+ * + * optional string name = 1 [(.mlflow.validate_required) = true]; + * @return The name. + */ + java.lang.String getName(); + /** + *
+     * Workspace name to create.
+     * 
+ * + * optional string name = 1 [(.mlflow.validate_required) = true]; + * @return The bytes for name. + */ + com.google.protobuf.ByteString + getNameBytes(); + + /** + *
+     * Optional workspace description.
+     * 
+ * + * optional string description = 2; + * @return Whether the description field is set. + */ + boolean hasDescription(); + /** + *
+     * Optional workspace description.
+     * 
+ * + * optional string description = 2; + * @return The description. + */ + java.lang.String getDescription(); + /** + *
+     * Optional workspace description.
+     * 
+ * + * optional string description = 2; + * @return The bytes for description. + */ + com.google.protobuf.ByteString + getDescriptionBytes(); + } + /** + *
+   * Create a new workspace.
+   * 
+ * + * Protobuf type {@code mlflow.CreateWorkspace} + */ + public static final class CreateWorkspace extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:mlflow.CreateWorkspace) + CreateWorkspaceOrBuilder { + private static final long serialVersionUID = 0L; + // Use CreateWorkspace.newBuilder() to construct. + private CreateWorkspace(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private CreateWorkspace() { + name_ = ""; + description_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new CreateWorkspace(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private CreateWorkspace( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + com.google.protobuf.ByteString bs = input.readBytes(); + bitField0_ |= 0x00000001; + name_ = bs; + break; + } + case 18: { + com.google.protobuf.ByteString bs = input.readBytes(); + bitField0_ |= 0x00000002; + description_ = bs; + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.mlflow.api.proto.Service.internal_static_mlflow_CreateWorkspace_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.mlflow.api.proto.Service.internal_static_mlflow_CreateWorkspace_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.mlflow.api.proto.Service.CreateWorkspace.class, org.mlflow.api.proto.Service.CreateWorkspace.Builder.class); + } + + public interface ResponseOrBuilder extends + // @@protoc_insertion_point(interface_extends:mlflow.CreateWorkspace.Response) + com.google.protobuf.MessageOrBuilder { + + /** + *
+       * Metadata describing the created workspace.
+       * 
+ * + * optional .mlflow.Workspace workspace = 1; + * @return Whether the workspace field is set. + */ + boolean hasWorkspace(); + /** + *
+       * Metadata describing the created workspace.
+       * 
+ * + * optional .mlflow.Workspace workspace = 1; + * @return The workspace. + */ + org.mlflow.api.proto.Service.Workspace getWorkspace(); + /** + *
+       * Metadata describing the created workspace.
+       * 
+ * + * optional .mlflow.Workspace workspace = 1; + */ + org.mlflow.api.proto.Service.WorkspaceOrBuilder getWorkspaceOrBuilder(); + } + /** + * Protobuf type {@code mlflow.CreateWorkspace.Response} + */ + public static final class Response extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:mlflow.CreateWorkspace.Response) + ResponseOrBuilder { + private static final long serialVersionUID = 0L; + // Use Response.newBuilder() to construct. + private Response(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private Response() { + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new Response(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private Response( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + org.mlflow.api.proto.Service.Workspace.Builder subBuilder = null; + if (((bitField0_ & 0x00000001) != 0)) { + subBuilder = workspace_.toBuilder(); + } + workspace_ = input.readMessage(org.mlflow.api.proto.Service.Workspace.PARSER, extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom(workspace_); + workspace_ = subBuilder.buildPartial(); + } + bitField0_ |= 0x00000001; + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.mlflow.api.proto.Service.internal_static_mlflow_CreateWorkspace_Response_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.mlflow.api.proto.Service.internal_static_mlflow_CreateWorkspace_Response_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.mlflow.api.proto.Service.CreateWorkspace.Response.class, org.mlflow.api.proto.Service.CreateWorkspace.Response.Builder.class); + } + + private int bitField0_; + public static final int WORKSPACE_FIELD_NUMBER = 1; + private org.mlflow.api.proto.Service.Workspace workspace_; + /** + *
+       * Metadata describing the created workspace.
+       * 
+ * + * optional .mlflow.Workspace workspace = 1; + * @return Whether the workspace field is set. + */ + @java.lang.Override + public boolean hasWorkspace() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + *
+       * Metadata describing the created workspace.
+       * 
+ * + * optional .mlflow.Workspace workspace = 1; + * @return The workspace. + */ + @java.lang.Override + public org.mlflow.api.proto.Service.Workspace getWorkspace() { + return workspace_ == null ? org.mlflow.api.proto.Service.Workspace.getDefaultInstance() : workspace_; + } + /** + *
+       * Metadata describing the created workspace.
+       * 
+ * + * optional .mlflow.Workspace workspace = 1; + */ + @java.lang.Override + public org.mlflow.api.proto.Service.WorkspaceOrBuilder getWorkspaceOrBuilder() { + return workspace_ == null ? org.mlflow.api.proto.Service.Workspace.getDefaultInstance() : workspace_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(1, getWorkspace()); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, getWorkspace()); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof org.mlflow.api.proto.Service.CreateWorkspace.Response)) { + return super.equals(obj); + } + org.mlflow.api.proto.Service.CreateWorkspace.Response other = (org.mlflow.api.proto.Service.CreateWorkspace.Response) obj; + + if (hasWorkspace() != other.hasWorkspace()) return false; + if (hasWorkspace()) { + if (!getWorkspace() + .equals(other.getWorkspace())) return false; + } + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasWorkspace()) { + hash = (37 * hash) + WORKSPACE_FIELD_NUMBER; + hash = (53 * hash) + getWorkspace().hashCode(); + } + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static org.mlflow.api.proto.Service.CreateWorkspace.Response parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.mlflow.api.proto.Service.CreateWorkspace.Response parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.mlflow.api.proto.Service.CreateWorkspace.Response parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.mlflow.api.proto.Service.CreateWorkspace.Response parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.mlflow.api.proto.Service.CreateWorkspace.Response parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.mlflow.api.proto.Service.CreateWorkspace.Response parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.mlflow.api.proto.Service.CreateWorkspace.Response parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.mlflow.api.proto.Service.CreateWorkspace.Response parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static org.mlflow.api.proto.Service.CreateWorkspace.Response parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static org.mlflow.api.proto.Service.CreateWorkspace.Response parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static org.mlflow.api.proto.Service.CreateWorkspace.Response parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.mlflow.api.proto.Service.CreateWorkspace.Response parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(org.mlflow.api.proto.Service.CreateWorkspace.Response prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code mlflow.CreateWorkspace.Response} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:mlflow.CreateWorkspace.Response) + org.mlflow.api.proto.Service.CreateWorkspace.ResponseOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.mlflow.api.proto.Service.internal_static_mlflow_CreateWorkspace_Response_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.mlflow.api.proto.Service.internal_static_mlflow_CreateWorkspace_Response_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.mlflow.api.proto.Service.CreateWorkspace.Response.class, org.mlflow.api.proto.Service.CreateWorkspace.Response.Builder.class); + } + + // Construct using org.mlflow.api.proto.Service.CreateWorkspace.Response.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + getWorkspaceFieldBuilder(); + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + if (workspaceBuilder_ == null) { + workspace_ = null; + } else { + workspaceBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return org.mlflow.api.proto.Service.internal_static_mlflow_CreateWorkspace_Response_descriptor; + } + + @java.lang.Override + public org.mlflow.api.proto.Service.CreateWorkspace.Response getDefaultInstanceForType() { + return org.mlflow.api.proto.Service.CreateWorkspace.Response.getDefaultInstance(); + } + + @java.lang.Override + public org.mlflow.api.proto.Service.CreateWorkspace.Response build() { + org.mlflow.api.proto.Service.CreateWorkspace.Response result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public org.mlflow.api.proto.Service.CreateWorkspace.Response buildPartial() { + org.mlflow.api.proto.Service.CreateWorkspace.Response result = new org.mlflow.api.proto.Service.CreateWorkspace.Response(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + if (workspaceBuilder_ == null) { + result.workspace_ = workspace_; + } else { + result.workspace_ = workspaceBuilder_.build(); + } + to_bitField0_ |= 0x00000001; + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof org.mlflow.api.proto.Service.CreateWorkspace.Response) { + return mergeFrom((org.mlflow.api.proto.Service.CreateWorkspace.Response)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(org.mlflow.api.proto.Service.CreateWorkspace.Response other) { + if (other == org.mlflow.api.proto.Service.CreateWorkspace.Response.getDefaultInstance()) return this; + if (other.hasWorkspace()) { + mergeWorkspace(other.getWorkspace()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + org.mlflow.api.proto.Service.CreateWorkspace.Response parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (org.mlflow.api.proto.Service.CreateWorkspace.Response) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private org.mlflow.api.proto.Service.Workspace workspace_; + private com.google.protobuf.SingleFieldBuilderV3< + org.mlflow.api.proto.Service.Workspace, org.mlflow.api.proto.Service.Workspace.Builder, org.mlflow.api.proto.Service.WorkspaceOrBuilder> workspaceBuilder_; + /** + *
+         * Metadata describing the created workspace.
+         * 
+ * + * optional .mlflow.Workspace workspace = 1; + * @return Whether the workspace field is set. + */ + public boolean hasWorkspace() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + *
+         * Metadata describing the created workspace.
+         * 
+ * + * optional .mlflow.Workspace workspace = 1; + * @return The workspace. + */ + public org.mlflow.api.proto.Service.Workspace getWorkspace() { + if (workspaceBuilder_ == null) { + return workspace_ == null ? org.mlflow.api.proto.Service.Workspace.getDefaultInstance() : workspace_; + } else { + return workspaceBuilder_.getMessage(); + } + } + /** + *
+         * Metadata describing the created workspace.
+         * 
+ * + * optional .mlflow.Workspace workspace = 1; + */ + public Builder setWorkspace(org.mlflow.api.proto.Service.Workspace value) { + if (workspaceBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + workspace_ = value; + onChanged(); + } else { + workspaceBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + return this; + } + /** + *
+         * Metadata describing the created workspace.
+         * 
+ * + * optional .mlflow.Workspace workspace = 1; + */ + public Builder setWorkspace( + org.mlflow.api.proto.Service.Workspace.Builder builderForValue) { + if (workspaceBuilder_ == null) { + workspace_ = builderForValue.build(); + onChanged(); + } else { + workspaceBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + return this; + } + /** + *
+         * Metadata describing the created workspace.
+         * 
+ * + * optional .mlflow.Workspace workspace = 1; + */ + public Builder mergeWorkspace(org.mlflow.api.proto.Service.Workspace value) { + if (workspaceBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0) && + workspace_ != null && + workspace_ != org.mlflow.api.proto.Service.Workspace.getDefaultInstance()) { + workspace_ = + org.mlflow.api.proto.Service.Workspace.newBuilder(workspace_).mergeFrom(value).buildPartial(); + } else { + workspace_ = value; + } + onChanged(); + } else { + workspaceBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000001; + return this; + } + /** + *
+         * Metadata describing the created workspace.
+         * 
+ * + * optional .mlflow.Workspace workspace = 1; + */ + public Builder clearWorkspace() { + if (workspaceBuilder_ == null) { + workspace_ = null; + onChanged(); + } else { + workspaceBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + /** + *
+         * Metadata describing the created workspace.
+         * 
+ * + * optional .mlflow.Workspace workspace = 1; + */ + public org.mlflow.api.proto.Service.Workspace.Builder getWorkspaceBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return getWorkspaceFieldBuilder().getBuilder(); + } + /** + *
+         * Metadata describing the created workspace.
+         * 
+ * + * optional .mlflow.Workspace workspace = 1; + */ + public org.mlflow.api.proto.Service.WorkspaceOrBuilder getWorkspaceOrBuilder() { + if (workspaceBuilder_ != null) { + return workspaceBuilder_.getMessageOrBuilder(); + } else { + return workspace_ == null ? + org.mlflow.api.proto.Service.Workspace.getDefaultInstance() : workspace_; + } + } + /** + *
+         * Metadata describing the created workspace.
+         * 
+ * + * optional .mlflow.Workspace workspace = 1; + */ + private com.google.protobuf.SingleFieldBuilderV3< + org.mlflow.api.proto.Service.Workspace, org.mlflow.api.proto.Service.Workspace.Builder, org.mlflow.api.proto.Service.WorkspaceOrBuilder> + getWorkspaceFieldBuilder() { + if (workspaceBuilder_ == null) { + workspaceBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + org.mlflow.api.proto.Service.Workspace, org.mlflow.api.proto.Service.Workspace.Builder, org.mlflow.api.proto.Service.WorkspaceOrBuilder>( + getWorkspace(), + getParentForChildren(), + isClean()); + workspace_ = null; + } + return workspaceBuilder_; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:mlflow.CreateWorkspace.Response) + } + + // @@protoc_insertion_point(class_scope:mlflow.CreateWorkspace.Response) + private static final org.mlflow.api.proto.Service.CreateWorkspace.Response DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.CreateWorkspace.Response(); + } + + public static org.mlflow.api.proto.Service.CreateWorkspace.Response getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + @java.lang.Deprecated public static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Response parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new Response(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public org.mlflow.api.proto.Service.CreateWorkspace.Response getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private int bitField0_; + public static final int NAME_FIELD_NUMBER = 1; + private volatile java.lang.Object name_; + /** + *
+     * Workspace name to create.
+     * 
+ * + * optional string name = 1 [(.mlflow.validate_required) = true]; + * @return Whether the name field is set. + */ + @java.lang.Override + public boolean hasName() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + *
+     * Workspace name to create.
+     * 
+ * + * optional string name = 1 [(.mlflow.validate_required) = true]; + * @return The name. + */ + @java.lang.Override + public java.lang.String getName() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + name_ = s; + } + return s; + } + } + /** + *
+     * Workspace name to create.
+     * 
+ * + * optional string name = 1 [(.mlflow.validate_required) = true]; + * @return The bytes for name. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int DESCRIPTION_FIELD_NUMBER = 2; + private volatile java.lang.Object description_; + /** + *
+     * Optional workspace description.
+     * 
+ * + * optional string description = 2; + * @return Whether the description field is set. + */ + @java.lang.Override + public boolean hasDescription() { + return ((bitField0_ & 0x00000002) != 0); + } + /** + *
+     * Optional workspace description.
+     * 
+ * + * optional string description = 2; + * @return The description. + */ + @java.lang.Override + public java.lang.String getDescription() { + java.lang.Object ref = description_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + description_ = s; + } + return s; + } + } + /** + *
+     * Optional workspace description.
+     * 
+ * + * optional string description = 2; + * @return The bytes for description. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getDescriptionBytes() { + java.lang.Object ref = description_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + description_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + } + if (((bitField0_ & 0x00000002) != 0)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 2, description_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + } + if (((bitField0_ & 0x00000002) != 0)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, description_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof org.mlflow.api.proto.Service.CreateWorkspace)) { + return super.equals(obj); + } + org.mlflow.api.proto.Service.CreateWorkspace other = (org.mlflow.api.proto.Service.CreateWorkspace) obj; + + if (hasName() != other.hasName()) return false; + if (hasName()) { + if (!getName() + .equals(other.getName())) return false; + } + if (hasDescription() != other.hasDescription()) return false; + if (hasDescription()) { + if (!getDescription() + .equals(other.getDescription())) return false; + } + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasName()) { + hash = (37 * hash) + NAME_FIELD_NUMBER; + hash = (53 * hash) + getName().hashCode(); + } + if (hasDescription()) { + hash = (37 * hash) + DESCRIPTION_FIELD_NUMBER; + hash = (53 * hash) + getDescription().hashCode(); + } + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static org.mlflow.api.proto.Service.CreateWorkspace parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.mlflow.api.proto.Service.CreateWorkspace parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.mlflow.api.proto.Service.CreateWorkspace parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.mlflow.api.proto.Service.CreateWorkspace parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.mlflow.api.proto.Service.CreateWorkspace parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.mlflow.api.proto.Service.CreateWorkspace parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.mlflow.api.proto.Service.CreateWorkspace parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.mlflow.api.proto.Service.CreateWorkspace parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static org.mlflow.api.proto.Service.CreateWorkspace parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static org.mlflow.api.proto.Service.CreateWorkspace parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static org.mlflow.api.proto.Service.CreateWorkspace parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.mlflow.api.proto.Service.CreateWorkspace parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(org.mlflow.api.proto.Service.CreateWorkspace prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + *
+     * Create a new workspace.
+     * 
+ * + * Protobuf type {@code mlflow.CreateWorkspace} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:mlflow.CreateWorkspace) + org.mlflow.api.proto.Service.CreateWorkspaceOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.mlflow.api.proto.Service.internal_static_mlflow_CreateWorkspace_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.mlflow.api.proto.Service.internal_static_mlflow_CreateWorkspace_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.mlflow.api.proto.Service.CreateWorkspace.class, org.mlflow.api.proto.Service.CreateWorkspace.Builder.class); + } + + // Construct using org.mlflow.api.proto.Service.CreateWorkspace.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + name_ = ""; + bitField0_ = (bitField0_ & ~0x00000001); + description_ = ""; + bitField0_ = (bitField0_ & ~0x00000002); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return org.mlflow.api.proto.Service.internal_static_mlflow_CreateWorkspace_descriptor; + } + + @java.lang.Override + public org.mlflow.api.proto.Service.CreateWorkspace getDefaultInstanceForType() { + return org.mlflow.api.proto.Service.CreateWorkspace.getDefaultInstance(); + } + + @java.lang.Override + public org.mlflow.api.proto.Service.CreateWorkspace build() { + org.mlflow.api.proto.Service.CreateWorkspace result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public org.mlflow.api.proto.Service.CreateWorkspace buildPartial() { + org.mlflow.api.proto.Service.CreateWorkspace result = new org.mlflow.api.proto.Service.CreateWorkspace(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + to_bitField0_ |= 0x00000001; + } + result.name_ = name_; + if (((from_bitField0_ & 0x00000002) != 0)) { + to_bitField0_ |= 0x00000002; + } + result.description_ = description_; + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof org.mlflow.api.proto.Service.CreateWorkspace) { + return mergeFrom((org.mlflow.api.proto.Service.CreateWorkspace)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(org.mlflow.api.proto.Service.CreateWorkspace other) { + if (other == org.mlflow.api.proto.Service.CreateWorkspace.getDefaultInstance()) return this; + if (other.hasName()) { + bitField0_ |= 0x00000001; + name_ = other.name_; + onChanged(); + } + if (other.hasDescription()) { + bitField0_ |= 0x00000002; + description_ = other.description_; + onChanged(); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + org.mlflow.api.proto.Service.CreateWorkspace parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (org.mlflow.api.proto.Service.CreateWorkspace) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private java.lang.Object name_ = ""; + /** + *
+       * Workspace name to create.
+       * 
+ * + * optional string name = 1 [(.mlflow.validate_required) = true]; + * @return Whether the name field is set. + */ + public boolean hasName() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + *
+       * Workspace name to create.
+       * 
+ * + * optional string name = 1 [(.mlflow.validate_required) = true]; + * @return The name. + */ + public java.lang.String getName() { + java.lang.Object ref = name_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + name_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * Workspace name to create.
+       * 
+ * + * optional string name = 1 [(.mlflow.validate_required) = true]; + * @return The bytes for name. + */ + public com.google.protobuf.ByteString + getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * Workspace name to create.
+       * 
+ * + * optional string name = 1 [(.mlflow.validate_required) = true]; + * @param value The name to set. + * @return This builder for chaining. + */ + public Builder setName( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + name_ = value; + onChanged(); + return this; + } + /** + *
+       * Workspace name to create.
+       * 
+ * + * optional string name = 1 [(.mlflow.validate_required) = true]; + * @return This builder for chaining. + */ + public Builder clearName() { + bitField0_ = (bitField0_ & ~0x00000001); + name_ = getDefaultInstance().getName(); + onChanged(); + return this; + } + /** + *
+       * Workspace name to create.
+       * 
+ * + * optional string name = 1 [(.mlflow.validate_required) = true]; + * @param value The bytes for name to set. + * @return This builder for chaining. + */ + public Builder setNameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + name_ = value; + onChanged(); + return this; + } + + private java.lang.Object description_ = ""; + /** + *
+       * Optional workspace description.
+       * 
+ * + * optional string description = 2; + * @return Whether the description field is set. + */ + public boolean hasDescription() { + return ((bitField0_ & 0x00000002) != 0); + } + /** + *
+       * Optional workspace description.
+       * 
+ * + * optional string description = 2; + * @return The description. + */ + public java.lang.String getDescription() { + java.lang.Object ref = description_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + description_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * Optional workspace description.
+       * 
+ * + * optional string description = 2; + * @return The bytes for description. + */ + public com.google.protobuf.ByteString + getDescriptionBytes() { + java.lang.Object ref = description_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + description_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * Optional workspace description.
+       * 
+ * + * optional string description = 2; + * @param value The description to set. + * @return This builder for chaining. + */ + public Builder setDescription( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + description_ = value; + onChanged(); + return this; + } + /** + *
+       * Optional workspace description.
+       * 
+ * + * optional string description = 2; + * @return This builder for chaining. + */ + public Builder clearDescription() { + bitField0_ = (bitField0_ & ~0x00000002); + description_ = getDefaultInstance().getDescription(); + onChanged(); + return this; + } + /** + *
+       * Optional workspace description.
+       * 
+ * + * optional string description = 2; + * @param value The bytes for description to set. + * @return This builder for chaining. + */ + public Builder setDescriptionBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + description_ = value; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:mlflow.CreateWorkspace) + } + + // @@protoc_insertion_point(class_scope:mlflow.CreateWorkspace) + private static final org.mlflow.api.proto.Service.CreateWorkspace DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.CreateWorkspace(); + } + + public static org.mlflow.api.proto.Service.CreateWorkspace getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + @java.lang.Deprecated public static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public CreateWorkspace parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new CreateWorkspace(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public org.mlflow.api.proto.Service.CreateWorkspace getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface GetWorkspaceOrBuilder extends + // @@protoc_insertion_point(interface_extends:mlflow.GetWorkspace) + com.google.protobuf.MessageOrBuilder { + + /** + *
+     * Name of the workspace to fetch.
+     * 
+ * + * optional string workspace_name = 1 [(.mlflow.validate_required) = true]; + * @return Whether the workspaceName field is set. + */ + boolean hasWorkspaceName(); + /** + *
+     * Name of the workspace to fetch.
+     * 
+ * + * optional string workspace_name = 1 [(.mlflow.validate_required) = true]; + * @return The workspaceName. + */ + java.lang.String getWorkspaceName(); + /** + *
+     * Name of the workspace to fetch.
+     * 
+ * + * optional string workspace_name = 1 [(.mlflow.validate_required) = true]; + * @return The bytes for workspaceName. + */ + com.google.protobuf.ByteString + getWorkspaceNameBytes(); + } + /** + *
+   * Retrieve workspace metadata.
+   * 
+ * + * Protobuf type {@code mlflow.GetWorkspace} + */ + public static final class GetWorkspace extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:mlflow.GetWorkspace) + GetWorkspaceOrBuilder { + private static final long serialVersionUID = 0L; + // Use GetWorkspace.newBuilder() to construct. + private GetWorkspace(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private GetWorkspace() { + workspaceName_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new GetWorkspace(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private GetWorkspace( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + com.google.protobuf.ByteString bs = input.readBytes(); + bitField0_ |= 0x00000001; + workspaceName_ = bs; + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.mlflow.api.proto.Service.internal_static_mlflow_GetWorkspace_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.mlflow.api.proto.Service.internal_static_mlflow_GetWorkspace_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.mlflow.api.proto.Service.GetWorkspace.class, org.mlflow.api.proto.Service.GetWorkspace.Builder.class); + } + + public interface ResponseOrBuilder extends + // @@protoc_insertion_point(interface_extends:mlflow.GetWorkspace.Response) + com.google.protobuf.MessageOrBuilder { + + /** + *
+       * Metadata describing the requested workspace.
+       * 
+ * + * optional .mlflow.Workspace workspace = 1; + * @return Whether the workspace field is set. + */ + boolean hasWorkspace(); + /** + *
+       * Metadata describing the requested workspace.
+       * 
+ * + * optional .mlflow.Workspace workspace = 1; + * @return The workspace. + */ + org.mlflow.api.proto.Service.Workspace getWorkspace(); + /** + *
+       * Metadata describing the requested workspace.
+       * 
+ * + * optional .mlflow.Workspace workspace = 1; + */ + org.mlflow.api.proto.Service.WorkspaceOrBuilder getWorkspaceOrBuilder(); + } + /** + * Protobuf type {@code mlflow.GetWorkspace.Response} + */ + public static final class Response extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:mlflow.GetWorkspace.Response) + ResponseOrBuilder { + private static final long serialVersionUID = 0L; + // Use Response.newBuilder() to construct. + private Response(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private Response() { + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new Response(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private Response( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + org.mlflow.api.proto.Service.Workspace.Builder subBuilder = null; + if (((bitField0_ & 0x00000001) != 0)) { + subBuilder = workspace_.toBuilder(); + } + workspace_ = input.readMessage(org.mlflow.api.proto.Service.Workspace.PARSER, extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom(workspace_); + workspace_ = subBuilder.buildPartial(); + } + bitField0_ |= 0x00000001; + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.mlflow.api.proto.Service.internal_static_mlflow_GetWorkspace_Response_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.mlflow.api.proto.Service.internal_static_mlflow_GetWorkspace_Response_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.mlflow.api.proto.Service.GetWorkspace.Response.class, org.mlflow.api.proto.Service.GetWorkspace.Response.Builder.class); + } + + private int bitField0_; + public static final int WORKSPACE_FIELD_NUMBER = 1; + private org.mlflow.api.proto.Service.Workspace workspace_; + /** + *
+       * Metadata describing the requested workspace.
+       * 
+ * + * optional .mlflow.Workspace workspace = 1; + * @return Whether the workspace field is set. + */ + @java.lang.Override + public boolean hasWorkspace() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + *
+       * Metadata describing the requested workspace.
+       * 
+ * + * optional .mlflow.Workspace workspace = 1; + * @return The workspace. + */ + @java.lang.Override + public org.mlflow.api.proto.Service.Workspace getWorkspace() { + return workspace_ == null ? org.mlflow.api.proto.Service.Workspace.getDefaultInstance() : workspace_; + } + /** + *
+       * Metadata describing the requested workspace.
+       * 
+ * + * optional .mlflow.Workspace workspace = 1; + */ + @java.lang.Override + public org.mlflow.api.proto.Service.WorkspaceOrBuilder getWorkspaceOrBuilder() { + return workspace_ == null ? org.mlflow.api.proto.Service.Workspace.getDefaultInstance() : workspace_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(1, getWorkspace()); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, getWorkspace()); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof org.mlflow.api.proto.Service.GetWorkspace.Response)) { + return super.equals(obj); + } + org.mlflow.api.proto.Service.GetWorkspace.Response other = (org.mlflow.api.proto.Service.GetWorkspace.Response) obj; + + if (hasWorkspace() != other.hasWorkspace()) return false; + if (hasWorkspace()) { + if (!getWorkspace() + .equals(other.getWorkspace())) return false; + } + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasWorkspace()) { + hash = (37 * hash) + WORKSPACE_FIELD_NUMBER; + hash = (53 * hash) + getWorkspace().hashCode(); + } + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static org.mlflow.api.proto.Service.GetWorkspace.Response parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.mlflow.api.proto.Service.GetWorkspace.Response parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.mlflow.api.proto.Service.GetWorkspace.Response parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.mlflow.api.proto.Service.GetWorkspace.Response parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.mlflow.api.proto.Service.GetWorkspace.Response parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.mlflow.api.proto.Service.GetWorkspace.Response parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.mlflow.api.proto.Service.GetWorkspace.Response parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.mlflow.api.proto.Service.GetWorkspace.Response parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static org.mlflow.api.proto.Service.GetWorkspace.Response parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static org.mlflow.api.proto.Service.GetWorkspace.Response parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static org.mlflow.api.proto.Service.GetWorkspace.Response parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.mlflow.api.proto.Service.GetWorkspace.Response parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(org.mlflow.api.proto.Service.GetWorkspace.Response prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code mlflow.GetWorkspace.Response} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:mlflow.GetWorkspace.Response) + org.mlflow.api.proto.Service.GetWorkspace.ResponseOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.mlflow.api.proto.Service.internal_static_mlflow_GetWorkspace_Response_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.mlflow.api.proto.Service.internal_static_mlflow_GetWorkspace_Response_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.mlflow.api.proto.Service.GetWorkspace.Response.class, org.mlflow.api.proto.Service.GetWorkspace.Response.Builder.class); + } + + // Construct using org.mlflow.api.proto.Service.GetWorkspace.Response.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + getWorkspaceFieldBuilder(); + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + if (workspaceBuilder_ == null) { + workspace_ = null; + } else { + workspaceBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return org.mlflow.api.proto.Service.internal_static_mlflow_GetWorkspace_Response_descriptor; + } + + @java.lang.Override + public org.mlflow.api.proto.Service.GetWorkspace.Response getDefaultInstanceForType() { + return org.mlflow.api.proto.Service.GetWorkspace.Response.getDefaultInstance(); + } + + @java.lang.Override + public org.mlflow.api.proto.Service.GetWorkspace.Response build() { + org.mlflow.api.proto.Service.GetWorkspace.Response result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public org.mlflow.api.proto.Service.GetWorkspace.Response buildPartial() { + org.mlflow.api.proto.Service.GetWorkspace.Response result = new org.mlflow.api.proto.Service.GetWorkspace.Response(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + if (workspaceBuilder_ == null) { + result.workspace_ = workspace_; + } else { + result.workspace_ = workspaceBuilder_.build(); + } + to_bitField0_ |= 0x00000001; + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof org.mlflow.api.proto.Service.GetWorkspace.Response) { + return mergeFrom((org.mlflow.api.proto.Service.GetWorkspace.Response)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(org.mlflow.api.proto.Service.GetWorkspace.Response other) { + if (other == org.mlflow.api.proto.Service.GetWorkspace.Response.getDefaultInstance()) return this; + if (other.hasWorkspace()) { + mergeWorkspace(other.getWorkspace()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + org.mlflow.api.proto.Service.GetWorkspace.Response parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (org.mlflow.api.proto.Service.GetWorkspace.Response) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private org.mlflow.api.proto.Service.Workspace workspace_; + private com.google.protobuf.SingleFieldBuilderV3< + org.mlflow.api.proto.Service.Workspace, org.mlflow.api.proto.Service.Workspace.Builder, org.mlflow.api.proto.Service.WorkspaceOrBuilder> workspaceBuilder_; + /** + *
+         * Metadata describing the requested workspace.
+         * 
+ * + * optional .mlflow.Workspace workspace = 1; + * @return Whether the workspace field is set. + */ + public boolean hasWorkspace() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + *
+         * Metadata describing the requested workspace.
+         * 
+ * + * optional .mlflow.Workspace workspace = 1; + * @return The workspace. + */ + public org.mlflow.api.proto.Service.Workspace getWorkspace() { + if (workspaceBuilder_ == null) { + return workspace_ == null ? org.mlflow.api.proto.Service.Workspace.getDefaultInstance() : workspace_; + } else { + return workspaceBuilder_.getMessage(); + } + } + /** + *
+         * Metadata describing the requested workspace.
+         * 
+ * + * optional .mlflow.Workspace workspace = 1; + */ + public Builder setWorkspace(org.mlflow.api.proto.Service.Workspace value) { + if (workspaceBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + workspace_ = value; + onChanged(); + } else { + workspaceBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + return this; + } + /** + *
+         * Metadata describing the requested workspace.
+         * 
+ * + * optional .mlflow.Workspace workspace = 1; + */ + public Builder setWorkspace( + org.mlflow.api.proto.Service.Workspace.Builder builderForValue) { + if (workspaceBuilder_ == null) { + workspace_ = builderForValue.build(); + onChanged(); + } else { + workspaceBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + return this; + } + /** + *
+         * Metadata describing the requested workspace.
+         * 
+ * + * optional .mlflow.Workspace workspace = 1; + */ + public Builder mergeWorkspace(org.mlflow.api.proto.Service.Workspace value) { + if (workspaceBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0) && + workspace_ != null && + workspace_ != org.mlflow.api.proto.Service.Workspace.getDefaultInstance()) { + workspace_ = + org.mlflow.api.proto.Service.Workspace.newBuilder(workspace_).mergeFrom(value).buildPartial(); + } else { + workspace_ = value; + } + onChanged(); + } else { + workspaceBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000001; + return this; + } + /** + *
+         * Metadata describing the requested workspace.
+         * 
+ * + * optional .mlflow.Workspace workspace = 1; + */ + public Builder clearWorkspace() { + if (workspaceBuilder_ == null) { + workspace_ = null; + onChanged(); + } else { + workspaceBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + /** + *
+         * Metadata describing the requested workspace.
+         * 
+ * + * optional .mlflow.Workspace workspace = 1; + */ + public org.mlflow.api.proto.Service.Workspace.Builder getWorkspaceBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return getWorkspaceFieldBuilder().getBuilder(); + } + /** + *
+         * Metadata describing the requested workspace.
+         * 
+ * + * optional .mlflow.Workspace workspace = 1; + */ + public org.mlflow.api.proto.Service.WorkspaceOrBuilder getWorkspaceOrBuilder() { + if (workspaceBuilder_ != null) { + return workspaceBuilder_.getMessageOrBuilder(); + } else { + return workspace_ == null ? + org.mlflow.api.proto.Service.Workspace.getDefaultInstance() : workspace_; + } + } + /** + *
+         * Metadata describing the requested workspace.
+         * 
+ * + * optional .mlflow.Workspace workspace = 1; + */ + private com.google.protobuf.SingleFieldBuilderV3< + org.mlflow.api.proto.Service.Workspace, org.mlflow.api.proto.Service.Workspace.Builder, org.mlflow.api.proto.Service.WorkspaceOrBuilder> + getWorkspaceFieldBuilder() { + if (workspaceBuilder_ == null) { + workspaceBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + org.mlflow.api.proto.Service.Workspace, org.mlflow.api.proto.Service.Workspace.Builder, org.mlflow.api.proto.Service.WorkspaceOrBuilder>( + getWorkspace(), + getParentForChildren(), + isClean()); + workspace_ = null; + } + return workspaceBuilder_; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:mlflow.GetWorkspace.Response) + } + + // @@protoc_insertion_point(class_scope:mlflow.GetWorkspace.Response) + private static final org.mlflow.api.proto.Service.GetWorkspace.Response DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.GetWorkspace.Response(); + } + + public static org.mlflow.api.proto.Service.GetWorkspace.Response getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + @java.lang.Deprecated public static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Response parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new Response(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public org.mlflow.api.proto.Service.GetWorkspace.Response getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private int bitField0_; + public static final int WORKSPACE_NAME_FIELD_NUMBER = 1; + private volatile java.lang.Object workspaceName_; + /** + *
+     * Name of the workspace to fetch.
+     * 
+ * + * optional string workspace_name = 1 [(.mlflow.validate_required) = true]; + * @return Whether the workspaceName field is set. + */ + @java.lang.Override + public boolean hasWorkspaceName() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + *
+     * Name of the workspace to fetch.
+     * 
+ * + * optional string workspace_name = 1 [(.mlflow.validate_required) = true]; + * @return The workspaceName. + */ + @java.lang.Override + public java.lang.String getWorkspaceName() { + java.lang.Object ref = workspaceName_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + workspaceName_ = s; + } + return s; + } + } + /** + *
+     * Name of the workspace to fetch.
+     * 
+ * + * optional string workspace_name = 1 [(.mlflow.validate_required) = true]; + * @return The bytes for workspaceName. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getWorkspaceNameBytes() { + java.lang.Object ref = workspaceName_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + workspaceName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, workspaceName_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, workspaceName_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof org.mlflow.api.proto.Service.GetWorkspace)) { + return super.equals(obj); + } + org.mlflow.api.proto.Service.GetWorkspace other = (org.mlflow.api.proto.Service.GetWorkspace) obj; + + if (hasWorkspaceName() != other.hasWorkspaceName()) return false; + if (hasWorkspaceName()) { + if (!getWorkspaceName() + .equals(other.getWorkspaceName())) return false; + } + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasWorkspaceName()) { + hash = (37 * hash) + WORKSPACE_NAME_FIELD_NUMBER; + hash = (53 * hash) + getWorkspaceName().hashCode(); + } + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static org.mlflow.api.proto.Service.GetWorkspace parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.mlflow.api.proto.Service.GetWorkspace parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.mlflow.api.proto.Service.GetWorkspace parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.mlflow.api.proto.Service.GetWorkspace parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.mlflow.api.proto.Service.GetWorkspace parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.mlflow.api.proto.Service.GetWorkspace parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.mlflow.api.proto.Service.GetWorkspace parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.mlflow.api.proto.Service.GetWorkspace parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static org.mlflow.api.proto.Service.GetWorkspace parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static org.mlflow.api.proto.Service.GetWorkspace parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static org.mlflow.api.proto.Service.GetWorkspace parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.mlflow.api.proto.Service.GetWorkspace parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(org.mlflow.api.proto.Service.GetWorkspace prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + *
+     * Retrieve workspace metadata.
+     * 
+ * + * Protobuf type {@code mlflow.GetWorkspace} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:mlflow.GetWorkspace) + org.mlflow.api.proto.Service.GetWorkspaceOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.mlflow.api.proto.Service.internal_static_mlflow_GetWorkspace_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.mlflow.api.proto.Service.internal_static_mlflow_GetWorkspace_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.mlflow.api.proto.Service.GetWorkspace.class, org.mlflow.api.proto.Service.GetWorkspace.Builder.class); + } + + // Construct using org.mlflow.api.proto.Service.GetWorkspace.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + workspaceName_ = ""; + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return org.mlflow.api.proto.Service.internal_static_mlflow_GetWorkspace_descriptor; + } + + @java.lang.Override + public org.mlflow.api.proto.Service.GetWorkspace getDefaultInstanceForType() { + return org.mlflow.api.proto.Service.GetWorkspace.getDefaultInstance(); + } + + @java.lang.Override + public org.mlflow.api.proto.Service.GetWorkspace build() { + org.mlflow.api.proto.Service.GetWorkspace result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public org.mlflow.api.proto.Service.GetWorkspace buildPartial() { + org.mlflow.api.proto.Service.GetWorkspace result = new org.mlflow.api.proto.Service.GetWorkspace(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + to_bitField0_ |= 0x00000001; + } + result.workspaceName_ = workspaceName_; + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof org.mlflow.api.proto.Service.GetWorkspace) { + return mergeFrom((org.mlflow.api.proto.Service.GetWorkspace)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(org.mlflow.api.proto.Service.GetWorkspace other) { + if (other == org.mlflow.api.proto.Service.GetWorkspace.getDefaultInstance()) return this; + if (other.hasWorkspaceName()) { + bitField0_ |= 0x00000001; + workspaceName_ = other.workspaceName_; + onChanged(); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + org.mlflow.api.proto.Service.GetWorkspace parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (org.mlflow.api.proto.Service.GetWorkspace) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private java.lang.Object workspaceName_ = ""; + /** + *
+       * Name of the workspace to fetch.
+       * 
+ * + * optional string workspace_name = 1 [(.mlflow.validate_required) = true]; + * @return Whether the workspaceName field is set. + */ + public boolean hasWorkspaceName() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + *
+       * Name of the workspace to fetch.
+       * 
+ * + * optional string workspace_name = 1 [(.mlflow.validate_required) = true]; + * @return The workspaceName. + */ + public java.lang.String getWorkspaceName() { + java.lang.Object ref = workspaceName_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + workspaceName_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * Name of the workspace to fetch.
+       * 
+ * + * optional string workspace_name = 1 [(.mlflow.validate_required) = true]; + * @return The bytes for workspaceName. + */ + public com.google.protobuf.ByteString + getWorkspaceNameBytes() { + java.lang.Object ref = workspaceName_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + workspaceName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * Name of the workspace to fetch.
+       * 
+ * + * optional string workspace_name = 1 [(.mlflow.validate_required) = true]; + * @param value The workspaceName to set. + * @return This builder for chaining. + */ + public Builder setWorkspaceName( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + workspaceName_ = value; + onChanged(); + return this; + } + /** + *
+       * Name of the workspace to fetch.
+       * 
+ * + * optional string workspace_name = 1 [(.mlflow.validate_required) = true]; + * @return This builder for chaining. + */ + public Builder clearWorkspaceName() { + bitField0_ = (bitField0_ & ~0x00000001); + workspaceName_ = getDefaultInstance().getWorkspaceName(); + onChanged(); + return this; + } + /** + *
+       * Name of the workspace to fetch.
+       * 
+ * + * optional string workspace_name = 1 [(.mlflow.validate_required) = true]; + * @param value The bytes for workspaceName to set. + * @return This builder for chaining. + */ + public Builder setWorkspaceNameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + workspaceName_ = value; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:mlflow.GetWorkspace) + } + + // @@protoc_insertion_point(class_scope:mlflow.GetWorkspace) + private static final org.mlflow.api.proto.Service.GetWorkspace DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.GetWorkspace(); + } + + public static org.mlflow.api.proto.Service.GetWorkspace getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + @java.lang.Deprecated public static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public GetWorkspace parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new GetWorkspace(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public org.mlflow.api.proto.Service.GetWorkspace getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface UpdateWorkspaceOrBuilder extends + // @@protoc_insertion_point(interface_extends:mlflow.UpdateWorkspace) + com.google.protobuf.MessageOrBuilder { + + /** + *
+     * Name of the workspace to update.
+     * 
+ * + * optional string workspace_name = 1 [(.mlflow.validate_required) = true]; + * @return Whether the workspaceName field is set. + */ + boolean hasWorkspaceName(); + /** + *
+     * Name of the workspace to update.
+     * 
+ * + * optional string workspace_name = 1 [(.mlflow.validate_required) = true]; + * @return The workspaceName. + */ + java.lang.String getWorkspaceName(); + /** + *
+     * Name of the workspace to update.
+     * 
+ * + * optional string workspace_name = 1 [(.mlflow.validate_required) = true]; + * @return The bytes for workspaceName. + */ + com.google.protobuf.ByteString + getWorkspaceNameBytes(); + + /** + *
+     * Optional description update.
+     * 
+ * + * optional string description = 2; + * @return Whether the description field is set. + */ + boolean hasDescription(); + /** + *
+     * Optional description update.
+     * 
+ * + * optional string description = 2; + * @return The description. + */ + java.lang.String getDescription(); + /** + *
+     * Optional description update.
+     * 
+ * + * optional string description = 2; + * @return The bytes for description. + */ + com.google.protobuf.ByteString + getDescriptionBytes(); + } + /** + *
+   * Update workspace metadata.
+   * 
+ * + * Protobuf type {@code mlflow.UpdateWorkspace} + */ + public static final class UpdateWorkspace extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:mlflow.UpdateWorkspace) + UpdateWorkspaceOrBuilder { + private static final long serialVersionUID = 0L; + // Use UpdateWorkspace.newBuilder() to construct. + private UpdateWorkspace(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private UpdateWorkspace() { + workspaceName_ = ""; + description_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new UpdateWorkspace(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private UpdateWorkspace( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + com.google.protobuf.ByteString bs = input.readBytes(); + bitField0_ |= 0x00000001; + workspaceName_ = bs; + break; + } + case 18: { + com.google.protobuf.ByteString bs = input.readBytes(); + bitField0_ |= 0x00000002; + description_ = bs; + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.mlflow.api.proto.Service.internal_static_mlflow_UpdateWorkspace_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.mlflow.api.proto.Service.internal_static_mlflow_UpdateWorkspace_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.mlflow.api.proto.Service.UpdateWorkspace.class, org.mlflow.api.proto.Service.UpdateWorkspace.Builder.class); + } + + public interface ResponseOrBuilder extends + // @@protoc_insertion_point(interface_extends:mlflow.UpdateWorkspace.Response) + com.google.protobuf.MessageOrBuilder { + + /** + *
+       * Metadata describing the updated workspace.
+       * 
+ * + * optional .mlflow.Workspace workspace = 1; + * @return Whether the workspace field is set. + */ + boolean hasWorkspace(); + /** + *
+       * Metadata describing the updated workspace.
+       * 
+ * + * optional .mlflow.Workspace workspace = 1; + * @return The workspace. + */ + org.mlflow.api.proto.Service.Workspace getWorkspace(); + /** + *
+       * Metadata describing the updated workspace.
+       * 
+ * + * optional .mlflow.Workspace workspace = 1; + */ + org.mlflow.api.proto.Service.WorkspaceOrBuilder getWorkspaceOrBuilder(); + } + /** + * Protobuf type {@code mlflow.UpdateWorkspace.Response} + */ + public static final class Response extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:mlflow.UpdateWorkspace.Response) + ResponseOrBuilder { + private static final long serialVersionUID = 0L; + // Use Response.newBuilder() to construct. + private Response(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private Response() { + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new Response(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private Response( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + org.mlflow.api.proto.Service.Workspace.Builder subBuilder = null; + if (((bitField0_ & 0x00000001) != 0)) { + subBuilder = workspace_.toBuilder(); + } + workspace_ = input.readMessage(org.mlflow.api.proto.Service.Workspace.PARSER, extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom(workspace_); + workspace_ = subBuilder.buildPartial(); + } + bitField0_ |= 0x00000001; + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.mlflow.api.proto.Service.internal_static_mlflow_UpdateWorkspace_Response_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.mlflow.api.proto.Service.internal_static_mlflow_UpdateWorkspace_Response_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.mlflow.api.proto.Service.UpdateWorkspace.Response.class, org.mlflow.api.proto.Service.UpdateWorkspace.Response.Builder.class); + } + + private int bitField0_; + public static final int WORKSPACE_FIELD_NUMBER = 1; + private org.mlflow.api.proto.Service.Workspace workspace_; + /** + *
+       * Metadata describing the updated workspace.
+       * 
+ * + * optional .mlflow.Workspace workspace = 1; + * @return Whether the workspace field is set. + */ + @java.lang.Override + public boolean hasWorkspace() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + *
+       * Metadata describing the updated workspace.
+       * 
+ * + * optional .mlflow.Workspace workspace = 1; + * @return The workspace. + */ + @java.lang.Override + public org.mlflow.api.proto.Service.Workspace getWorkspace() { + return workspace_ == null ? org.mlflow.api.proto.Service.Workspace.getDefaultInstance() : workspace_; + } + /** + *
+       * Metadata describing the updated workspace.
+       * 
+ * + * optional .mlflow.Workspace workspace = 1; + */ + @java.lang.Override + public org.mlflow.api.proto.Service.WorkspaceOrBuilder getWorkspaceOrBuilder() { + return workspace_ == null ? org.mlflow.api.proto.Service.Workspace.getDefaultInstance() : workspace_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + output.writeMessage(1, getWorkspace()); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(1, getWorkspace()); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof org.mlflow.api.proto.Service.UpdateWorkspace.Response)) { + return super.equals(obj); + } + org.mlflow.api.proto.Service.UpdateWorkspace.Response other = (org.mlflow.api.proto.Service.UpdateWorkspace.Response) obj; + + if (hasWorkspace() != other.hasWorkspace()) return false; + if (hasWorkspace()) { + if (!getWorkspace() + .equals(other.getWorkspace())) return false; + } + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasWorkspace()) { + hash = (37 * hash) + WORKSPACE_FIELD_NUMBER; + hash = (53 * hash) + getWorkspace().hashCode(); + } + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static org.mlflow.api.proto.Service.UpdateWorkspace.Response parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.mlflow.api.proto.Service.UpdateWorkspace.Response parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.mlflow.api.proto.Service.UpdateWorkspace.Response parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.mlflow.api.proto.Service.UpdateWorkspace.Response parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.mlflow.api.proto.Service.UpdateWorkspace.Response parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.mlflow.api.proto.Service.UpdateWorkspace.Response parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.mlflow.api.proto.Service.UpdateWorkspace.Response parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.mlflow.api.proto.Service.UpdateWorkspace.Response parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static org.mlflow.api.proto.Service.UpdateWorkspace.Response parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static org.mlflow.api.proto.Service.UpdateWorkspace.Response parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static org.mlflow.api.proto.Service.UpdateWorkspace.Response parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.mlflow.api.proto.Service.UpdateWorkspace.Response parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(org.mlflow.api.proto.Service.UpdateWorkspace.Response prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code mlflow.UpdateWorkspace.Response} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:mlflow.UpdateWorkspace.Response) + org.mlflow.api.proto.Service.UpdateWorkspace.ResponseOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.mlflow.api.proto.Service.internal_static_mlflow_UpdateWorkspace_Response_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.mlflow.api.proto.Service.internal_static_mlflow_UpdateWorkspace_Response_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.mlflow.api.proto.Service.UpdateWorkspace.Response.class, org.mlflow.api.proto.Service.UpdateWorkspace.Response.Builder.class); + } + + // Construct using org.mlflow.api.proto.Service.UpdateWorkspace.Response.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + getWorkspaceFieldBuilder(); + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + if (workspaceBuilder_ == null) { + workspace_ = null; + } else { + workspaceBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return org.mlflow.api.proto.Service.internal_static_mlflow_UpdateWorkspace_Response_descriptor; + } + + @java.lang.Override + public org.mlflow.api.proto.Service.UpdateWorkspace.Response getDefaultInstanceForType() { + return org.mlflow.api.proto.Service.UpdateWorkspace.Response.getDefaultInstance(); + } + + @java.lang.Override + public org.mlflow.api.proto.Service.UpdateWorkspace.Response build() { + org.mlflow.api.proto.Service.UpdateWorkspace.Response result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public org.mlflow.api.proto.Service.UpdateWorkspace.Response buildPartial() { + org.mlflow.api.proto.Service.UpdateWorkspace.Response result = new org.mlflow.api.proto.Service.UpdateWorkspace.Response(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + if (workspaceBuilder_ == null) { + result.workspace_ = workspace_; + } else { + result.workspace_ = workspaceBuilder_.build(); + } + to_bitField0_ |= 0x00000001; + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof org.mlflow.api.proto.Service.UpdateWorkspace.Response) { + return mergeFrom((org.mlflow.api.proto.Service.UpdateWorkspace.Response)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(org.mlflow.api.proto.Service.UpdateWorkspace.Response other) { + if (other == org.mlflow.api.proto.Service.UpdateWorkspace.Response.getDefaultInstance()) return this; + if (other.hasWorkspace()) { + mergeWorkspace(other.getWorkspace()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + org.mlflow.api.proto.Service.UpdateWorkspace.Response parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (org.mlflow.api.proto.Service.UpdateWorkspace.Response) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private org.mlflow.api.proto.Service.Workspace workspace_; + private com.google.protobuf.SingleFieldBuilderV3< + org.mlflow.api.proto.Service.Workspace, org.mlflow.api.proto.Service.Workspace.Builder, org.mlflow.api.proto.Service.WorkspaceOrBuilder> workspaceBuilder_; + /** + *
+         * Metadata describing the updated workspace.
+         * 
+ * + * optional .mlflow.Workspace workspace = 1; + * @return Whether the workspace field is set. + */ + public boolean hasWorkspace() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + *
+         * Metadata describing the updated workspace.
+         * 
+ * + * optional .mlflow.Workspace workspace = 1; + * @return The workspace. + */ + public org.mlflow.api.proto.Service.Workspace getWorkspace() { + if (workspaceBuilder_ == null) { + return workspace_ == null ? org.mlflow.api.proto.Service.Workspace.getDefaultInstance() : workspace_; + } else { + return workspaceBuilder_.getMessage(); + } + } + /** + *
+         * Metadata describing the updated workspace.
+         * 
+ * + * optional .mlflow.Workspace workspace = 1; + */ + public Builder setWorkspace(org.mlflow.api.proto.Service.Workspace value) { + if (workspaceBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + workspace_ = value; + onChanged(); + } else { + workspaceBuilder_.setMessage(value); + } + bitField0_ |= 0x00000001; + return this; + } + /** + *
+         * Metadata describing the updated workspace.
+         * 
+ * + * optional .mlflow.Workspace workspace = 1; + */ + public Builder setWorkspace( + org.mlflow.api.proto.Service.Workspace.Builder builderForValue) { + if (workspaceBuilder_ == null) { + workspace_ = builderForValue.build(); + onChanged(); + } else { + workspaceBuilder_.setMessage(builderForValue.build()); + } + bitField0_ |= 0x00000001; + return this; + } + /** + *
+         * Metadata describing the updated workspace.
+         * 
+ * + * optional .mlflow.Workspace workspace = 1; + */ + public Builder mergeWorkspace(org.mlflow.api.proto.Service.Workspace value) { + if (workspaceBuilder_ == null) { + if (((bitField0_ & 0x00000001) != 0) && + workspace_ != null && + workspace_ != org.mlflow.api.proto.Service.Workspace.getDefaultInstance()) { + workspace_ = + org.mlflow.api.proto.Service.Workspace.newBuilder(workspace_).mergeFrom(value).buildPartial(); + } else { + workspace_ = value; + } + onChanged(); + } else { + workspaceBuilder_.mergeFrom(value); + } + bitField0_ |= 0x00000001; + return this; + } + /** + *
+         * Metadata describing the updated workspace.
+         * 
+ * + * optional .mlflow.Workspace workspace = 1; + */ + public Builder clearWorkspace() { + if (workspaceBuilder_ == null) { + workspace_ = null; + onChanged(); + } else { + workspaceBuilder_.clear(); + } + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + /** + *
+         * Metadata describing the updated workspace.
+         * 
+ * + * optional .mlflow.Workspace workspace = 1; + */ + public org.mlflow.api.proto.Service.Workspace.Builder getWorkspaceBuilder() { + bitField0_ |= 0x00000001; + onChanged(); + return getWorkspaceFieldBuilder().getBuilder(); + } + /** + *
+         * Metadata describing the updated workspace.
+         * 
+ * + * optional .mlflow.Workspace workspace = 1; + */ + public org.mlflow.api.proto.Service.WorkspaceOrBuilder getWorkspaceOrBuilder() { + if (workspaceBuilder_ != null) { + return workspaceBuilder_.getMessageOrBuilder(); + } else { + return workspace_ == null ? + org.mlflow.api.proto.Service.Workspace.getDefaultInstance() : workspace_; + } + } + /** + *
+         * Metadata describing the updated workspace.
+         * 
+ * + * optional .mlflow.Workspace workspace = 1; + */ + private com.google.protobuf.SingleFieldBuilderV3< + org.mlflow.api.proto.Service.Workspace, org.mlflow.api.proto.Service.Workspace.Builder, org.mlflow.api.proto.Service.WorkspaceOrBuilder> + getWorkspaceFieldBuilder() { + if (workspaceBuilder_ == null) { + workspaceBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + org.mlflow.api.proto.Service.Workspace, org.mlflow.api.proto.Service.Workspace.Builder, org.mlflow.api.proto.Service.WorkspaceOrBuilder>( + getWorkspace(), + getParentForChildren(), + isClean()); + workspace_ = null; + } + return workspaceBuilder_; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:mlflow.UpdateWorkspace.Response) + } + + // @@protoc_insertion_point(class_scope:mlflow.UpdateWorkspace.Response) + private static final org.mlflow.api.proto.Service.UpdateWorkspace.Response DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.UpdateWorkspace.Response(); + } + + public static org.mlflow.api.proto.Service.UpdateWorkspace.Response getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + @java.lang.Deprecated public static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Response parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new Response(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public org.mlflow.api.proto.Service.UpdateWorkspace.Response getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private int bitField0_; + public static final int WORKSPACE_NAME_FIELD_NUMBER = 1; + private volatile java.lang.Object workspaceName_; + /** + *
+     * Name of the workspace to update.
+     * 
+ * + * optional string workspace_name = 1 [(.mlflow.validate_required) = true]; + * @return Whether the workspaceName field is set. + */ + @java.lang.Override + public boolean hasWorkspaceName() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + *
+     * Name of the workspace to update.
+     * 
+ * + * optional string workspace_name = 1 [(.mlflow.validate_required) = true]; + * @return The workspaceName. + */ + @java.lang.Override + public java.lang.String getWorkspaceName() { + java.lang.Object ref = workspaceName_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + workspaceName_ = s; + } + return s; + } + } + /** + *
+     * Name of the workspace to update.
+     * 
+ * + * optional string workspace_name = 1 [(.mlflow.validate_required) = true]; + * @return The bytes for workspaceName. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getWorkspaceNameBytes() { + java.lang.Object ref = workspaceName_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + workspaceName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int DESCRIPTION_FIELD_NUMBER = 2; + private volatile java.lang.Object description_; + /** + *
+     * Optional description update.
+     * 
+ * + * optional string description = 2; + * @return Whether the description field is set. + */ + @java.lang.Override + public boolean hasDescription() { + return ((bitField0_ & 0x00000002) != 0); + } + /** + *
+     * Optional description update.
+     * 
+ * + * optional string description = 2; + * @return The description. + */ + @java.lang.Override + public java.lang.String getDescription() { + java.lang.Object ref = description_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + description_ = s; + } + return s; + } + } + /** + *
+     * Optional description update.
+     * 
+ * + * optional string description = 2; + * @return The bytes for description. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getDescriptionBytes() { + java.lang.Object ref = description_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + description_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, workspaceName_); + } + if (((bitField0_ & 0x00000002) != 0)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 2, description_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, workspaceName_); + } + if (((bitField0_ & 0x00000002) != 0)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, description_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof org.mlflow.api.proto.Service.UpdateWorkspace)) { + return super.equals(obj); + } + org.mlflow.api.proto.Service.UpdateWorkspace other = (org.mlflow.api.proto.Service.UpdateWorkspace) obj; + + if (hasWorkspaceName() != other.hasWorkspaceName()) return false; + if (hasWorkspaceName()) { + if (!getWorkspaceName() + .equals(other.getWorkspaceName())) return false; + } + if (hasDescription() != other.hasDescription()) return false; + if (hasDescription()) { + if (!getDescription() + .equals(other.getDescription())) return false; + } + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasWorkspaceName()) { + hash = (37 * hash) + WORKSPACE_NAME_FIELD_NUMBER; + hash = (53 * hash) + getWorkspaceName().hashCode(); + } + if (hasDescription()) { + hash = (37 * hash) + DESCRIPTION_FIELD_NUMBER; + hash = (53 * hash) + getDescription().hashCode(); + } + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static org.mlflow.api.proto.Service.UpdateWorkspace parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.mlflow.api.proto.Service.UpdateWorkspace parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.mlflow.api.proto.Service.UpdateWorkspace parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.mlflow.api.proto.Service.UpdateWorkspace parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.mlflow.api.proto.Service.UpdateWorkspace parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.mlflow.api.proto.Service.UpdateWorkspace parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.mlflow.api.proto.Service.UpdateWorkspace parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.mlflow.api.proto.Service.UpdateWorkspace parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static org.mlflow.api.proto.Service.UpdateWorkspace parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static org.mlflow.api.proto.Service.UpdateWorkspace parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static org.mlflow.api.proto.Service.UpdateWorkspace parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.mlflow.api.proto.Service.UpdateWorkspace parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(org.mlflow.api.proto.Service.UpdateWorkspace prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + *
+     * Update workspace metadata.
+     * 
+ * + * Protobuf type {@code mlflow.UpdateWorkspace} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:mlflow.UpdateWorkspace) + org.mlflow.api.proto.Service.UpdateWorkspaceOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.mlflow.api.proto.Service.internal_static_mlflow_UpdateWorkspace_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.mlflow.api.proto.Service.internal_static_mlflow_UpdateWorkspace_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.mlflow.api.proto.Service.UpdateWorkspace.class, org.mlflow.api.proto.Service.UpdateWorkspace.Builder.class); + } + + // Construct using org.mlflow.api.proto.Service.UpdateWorkspace.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + workspaceName_ = ""; + bitField0_ = (bitField0_ & ~0x00000001); + description_ = ""; + bitField0_ = (bitField0_ & ~0x00000002); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return org.mlflow.api.proto.Service.internal_static_mlflow_UpdateWorkspace_descriptor; + } + + @java.lang.Override + public org.mlflow.api.proto.Service.UpdateWorkspace getDefaultInstanceForType() { + return org.mlflow.api.proto.Service.UpdateWorkspace.getDefaultInstance(); + } + + @java.lang.Override + public org.mlflow.api.proto.Service.UpdateWorkspace build() { + org.mlflow.api.proto.Service.UpdateWorkspace result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public org.mlflow.api.proto.Service.UpdateWorkspace buildPartial() { + org.mlflow.api.proto.Service.UpdateWorkspace result = new org.mlflow.api.proto.Service.UpdateWorkspace(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + to_bitField0_ |= 0x00000001; + } + result.workspaceName_ = workspaceName_; + if (((from_bitField0_ & 0x00000002) != 0)) { + to_bitField0_ |= 0x00000002; + } + result.description_ = description_; + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof org.mlflow.api.proto.Service.UpdateWorkspace) { + return mergeFrom((org.mlflow.api.proto.Service.UpdateWorkspace)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(org.mlflow.api.proto.Service.UpdateWorkspace other) { + if (other == org.mlflow.api.proto.Service.UpdateWorkspace.getDefaultInstance()) return this; + if (other.hasWorkspaceName()) { + bitField0_ |= 0x00000001; + workspaceName_ = other.workspaceName_; + onChanged(); + } + if (other.hasDescription()) { + bitField0_ |= 0x00000002; + description_ = other.description_; + onChanged(); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + org.mlflow.api.proto.Service.UpdateWorkspace parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (org.mlflow.api.proto.Service.UpdateWorkspace) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private java.lang.Object workspaceName_ = ""; + /** + *
+       * Name of the workspace to update.
+       * 
+ * + * optional string workspace_name = 1 [(.mlflow.validate_required) = true]; + * @return Whether the workspaceName field is set. + */ + public boolean hasWorkspaceName() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + *
+       * Name of the workspace to update.
+       * 
+ * + * optional string workspace_name = 1 [(.mlflow.validate_required) = true]; + * @return The workspaceName. + */ + public java.lang.String getWorkspaceName() { + java.lang.Object ref = workspaceName_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + workspaceName_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * Name of the workspace to update.
+       * 
+ * + * optional string workspace_name = 1 [(.mlflow.validate_required) = true]; + * @return The bytes for workspaceName. + */ + public com.google.protobuf.ByteString + getWorkspaceNameBytes() { + java.lang.Object ref = workspaceName_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + workspaceName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * Name of the workspace to update.
+       * 
+ * + * optional string workspace_name = 1 [(.mlflow.validate_required) = true]; + * @param value The workspaceName to set. + * @return This builder for chaining. + */ + public Builder setWorkspaceName( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + workspaceName_ = value; + onChanged(); + return this; + } + /** + *
+       * Name of the workspace to update.
+       * 
+ * + * optional string workspace_name = 1 [(.mlflow.validate_required) = true]; + * @return This builder for chaining. + */ + public Builder clearWorkspaceName() { + bitField0_ = (bitField0_ & ~0x00000001); + workspaceName_ = getDefaultInstance().getWorkspaceName(); + onChanged(); + return this; + } + /** + *
+       * Name of the workspace to update.
+       * 
+ * + * optional string workspace_name = 1 [(.mlflow.validate_required) = true]; + * @param value The bytes for workspaceName to set. + * @return This builder for chaining. + */ + public Builder setWorkspaceNameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + workspaceName_ = value; + onChanged(); + return this; + } + + private java.lang.Object description_ = ""; + /** + *
+       * Optional description update.
+       * 
+ * + * optional string description = 2; + * @return Whether the description field is set. + */ + public boolean hasDescription() { + return ((bitField0_ & 0x00000002) != 0); + } + /** + *
+       * Optional description update.
+       * 
+ * + * optional string description = 2; + * @return The description. + */ + public java.lang.String getDescription() { + java.lang.Object ref = description_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + description_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * Optional description update.
+       * 
+ * + * optional string description = 2; + * @return The bytes for description. + */ + public com.google.protobuf.ByteString + getDescriptionBytes() { + java.lang.Object ref = description_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + description_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * Optional description update.
+       * 
+ * + * optional string description = 2; + * @param value The description to set. + * @return This builder for chaining. + */ + public Builder setDescription( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + description_ = value; + onChanged(); + return this; + } + /** + *
+       * Optional description update.
+       * 
+ * + * optional string description = 2; + * @return This builder for chaining. + */ + public Builder clearDescription() { + bitField0_ = (bitField0_ & ~0x00000002); + description_ = getDefaultInstance().getDescription(); + onChanged(); + return this; + } + /** + *
+       * Optional description update.
+       * 
+ * + * optional string description = 2; + * @param value The bytes for description to set. + * @return This builder for chaining. + */ + public Builder setDescriptionBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + description_ = value; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:mlflow.UpdateWorkspace) + } + + // @@protoc_insertion_point(class_scope:mlflow.UpdateWorkspace) + private static final org.mlflow.api.proto.Service.UpdateWorkspace DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.UpdateWorkspace(); + } + + public static org.mlflow.api.proto.Service.UpdateWorkspace getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + @java.lang.Deprecated public static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public UpdateWorkspace parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new UpdateWorkspace(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public org.mlflow.api.proto.Service.UpdateWorkspace getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface DeleteWorkspaceOrBuilder extends + // @@protoc_insertion_point(interface_extends:mlflow.DeleteWorkspace) + com.google.protobuf.MessageOrBuilder { + + /** + *
+     * Name of the workspace to delete.
+     * 
+ * + * optional string workspace_name = 1 [(.mlflow.validate_required) = true]; + * @return Whether the workspaceName field is set. + */ + boolean hasWorkspaceName(); + /** + *
+     * Name of the workspace to delete.
+     * 
+ * + * optional string workspace_name = 1 [(.mlflow.validate_required) = true]; + * @return The workspaceName. + */ + java.lang.String getWorkspaceName(); + /** + *
+     * Name of the workspace to delete.
+     * 
+ * + * optional string workspace_name = 1 [(.mlflow.validate_required) = true]; + * @return The bytes for workspaceName. + */ + com.google.protobuf.ByteString + getWorkspaceNameBytes(); + } + /** + *
+   * Delete a workspace.
+   * 
+ * + * Protobuf type {@code mlflow.DeleteWorkspace} + */ + public static final class DeleteWorkspace extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:mlflow.DeleteWorkspace) + DeleteWorkspaceOrBuilder { + private static final long serialVersionUID = 0L; + // Use DeleteWorkspace.newBuilder() to construct. + private DeleteWorkspace(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private DeleteWorkspace() { + workspaceName_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new DeleteWorkspace(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private DeleteWorkspace( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + com.google.protobuf.ByteString bs = input.readBytes(); + bitField0_ |= 0x00000001; + workspaceName_ = bs; + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.mlflow.api.proto.Service.internal_static_mlflow_DeleteWorkspace_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.mlflow.api.proto.Service.internal_static_mlflow_DeleteWorkspace_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.mlflow.api.proto.Service.DeleteWorkspace.class, org.mlflow.api.proto.Service.DeleteWorkspace.Builder.class); + } + + public interface ResponseOrBuilder extends + // @@protoc_insertion_point(interface_extends:mlflow.DeleteWorkspace.Response) + com.google.protobuf.MessageOrBuilder { + } + /** + * Protobuf type {@code mlflow.DeleteWorkspace.Response} + */ + public static final class Response extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:mlflow.DeleteWorkspace.Response) + ResponseOrBuilder { + private static final long serialVersionUID = 0L; + // Use Response.newBuilder() to construct. + private Response(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private Response() { + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new Response(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private Response( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.mlflow.api.proto.Service.internal_static_mlflow_DeleteWorkspace_Response_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.mlflow.api.proto.Service.internal_static_mlflow_DeleteWorkspace_Response_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.mlflow.api.proto.Service.DeleteWorkspace.Response.class, org.mlflow.api.proto.Service.DeleteWorkspace.Response.Builder.class); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof org.mlflow.api.proto.Service.DeleteWorkspace.Response)) { + return super.equals(obj); + } + org.mlflow.api.proto.Service.DeleteWorkspace.Response other = (org.mlflow.api.proto.Service.DeleteWorkspace.Response) obj; + + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static org.mlflow.api.proto.Service.DeleteWorkspace.Response parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.mlflow.api.proto.Service.DeleteWorkspace.Response parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.mlflow.api.proto.Service.DeleteWorkspace.Response parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.mlflow.api.proto.Service.DeleteWorkspace.Response parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.mlflow.api.proto.Service.DeleteWorkspace.Response parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.mlflow.api.proto.Service.DeleteWorkspace.Response parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.mlflow.api.proto.Service.DeleteWorkspace.Response parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.mlflow.api.proto.Service.DeleteWorkspace.Response parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static org.mlflow.api.proto.Service.DeleteWorkspace.Response parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static org.mlflow.api.proto.Service.DeleteWorkspace.Response parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static org.mlflow.api.proto.Service.DeleteWorkspace.Response parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.mlflow.api.proto.Service.DeleteWorkspace.Response parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(org.mlflow.api.proto.Service.DeleteWorkspace.Response prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code mlflow.DeleteWorkspace.Response} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:mlflow.DeleteWorkspace.Response) + org.mlflow.api.proto.Service.DeleteWorkspace.ResponseOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.mlflow.api.proto.Service.internal_static_mlflow_DeleteWorkspace_Response_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.mlflow.api.proto.Service.internal_static_mlflow_DeleteWorkspace_Response_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.mlflow.api.proto.Service.DeleteWorkspace.Response.class, org.mlflow.api.proto.Service.DeleteWorkspace.Response.Builder.class); + } + + // Construct using org.mlflow.api.proto.Service.DeleteWorkspace.Response.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return org.mlflow.api.proto.Service.internal_static_mlflow_DeleteWorkspace_Response_descriptor; + } + + @java.lang.Override + public org.mlflow.api.proto.Service.DeleteWorkspace.Response getDefaultInstanceForType() { + return org.mlflow.api.proto.Service.DeleteWorkspace.Response.getDefaultInstance(); + } + + @java.lang.Override + public org.mlflow.api.proto.Service.DeleteWorkspace.Response build() { + org.mlflow.api.proto.Service.DeleteWorkspace.Response result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public org.mlflow.api.proto.Service.DeleteWorkspace.Response buildPartial() { + org.mlflow.api.proto.Service.DeleteWorkspace.Response result = new org.mlflow.api.proto.Service.DeleteWorkspace.Response(this); + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof org.mlflow.api.proto.Service.DeleteWorkspace.Response) { + return mergeFrom((org.mlflow.api.proto.Service.DeleteWorkspace.Response)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(org.mlflow.api.proto.Service.DeleteWorkspace.Response other) { + if (other == org.mlflow.api.proto.Service.DeleteWorkspace.Response.getDefaultInstance()) return this; + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + org.mlflow.api.proto.Service.DeleteWorkspace.Response parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (org.mlflow.api.proto.Service.DeleteWorkspace.Response) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:mlflow.DeleteWorkspace.Response) + } + + // @@protoc_insertion_point(class_scope:mlflow.DeleteWorkspace.Response) + private static final org.mlflow.api.proto.Service.DeleteWorkspace.Response DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.DeleteWorkspace.Response(); + } + + public static org.mlflow.api.proto.Service.DeleteWorkspace.Response getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + @java.lang.Deprecated public static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Response parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new Response(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public org.mlflow.api.proto.Service.DeleteWorkspace.Response getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private int bitField0_; + public static final int WORKSPACE_NAME_FIELD_NUMBER = 1; + private volatile java.lang.Object workspaceName_; + /** + *
+     * Name of the workspace to delete.
+     * 
+ * + * optional string workspace_name = 1 [(.mlflow.validate_required) = true]; + * @return Whether the workspaceName field is set. + */ + @java.lang.Override + public boolean hasWorkspaceName() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + *
+     * Name of the workspace to delete.
+     * 
+ * + * optional string workspace_name = 1 [(.mlflow.validate_required) = true]; + * @return The workspaceName. + */ + @java.lang.Override + public java.lang.String getWorkspaceName() { + java.lang.Object ref = workspaceName_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + workspaceName_ = s; + } + return s; + } + } + /** + *
+     * Name of the workspace to delete.
+     * 
+ * + * optional string workspace_name = 1 [(.mlflow.validate_required) = true]; + * @return The bytes for workspaceName. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getWorkspaceNameBytes() { + java.lang.Object ref = workspaceName_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + workspaceName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (((bitField0_ & 0x00000001) != 0)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, workspaceName_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, workspaceName_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof org.mlflow.api.proto.Service.DeleteWorkspace)) { + return super.equals(obj); + } + org.mlflow.api.proto.Service.DeleteWorkspace other = (org.mlflow.api.proto.Service.DeleteWorkspace) obj; + + if (hasWorkspaceName() != other.hasWorkspaceName()) return false; + if (hasWorkspaceName()) { + if (!getWorkspaceName() + .equals(other.getWorkspaceName())) return false; + } + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + if (hasWorkspaceName()) { + hash = (37 * hash) + WORKSPACE_NAME_FIELD_NUMBER; + hash = (53 * hash) + getWorkspaceName().hashCode(); + } + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static org.mlflow.api.proto.Service.DeleteWorkspace parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.mlflow.api.proto.Service.DeleteWorkspace parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.mlflow.api.proto.Service.DeleteWorkspace parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.mlflow.api.proto.Service.DeleteWorkspace parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.mlflow.api.proto.Service.DeleteWorkspace parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.mlflow.api.proto.Service.DeleteWorkspace parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.mlflow.api.proto.Service.DeleteWorkspace parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.mlflow.api.proto.Service.DeleteWorkspace parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static org.mlflow.api.proto.Service.DeleteWorkspace parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static org.mlflow.api.proto.Service.DeleteWorkspace parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static org.mlflow.api.proto.Service.DeleteWorkspace parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.mlflow.api.proto.Service.DeleteWorkspace parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(org.mlflow.api.proto.Service.DeleteWorkspace prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + *
+     * Delete a workspace.
+     * 
+ * + * Protobuf type {@code mlflow.DeleteWorkspace} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:mlflow.DeleteWorkspace) + org.mlflow.api.proto.Service.DeleteWorkspaceOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.mlflow.api.proto.Service.internal_static_mlflow_DeleteWorkspace_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.mlflow.api.proto.Service.internal_static_mlflow_DeleteWorkspace_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.mlflow.api.proto.Service.DeleteWorkspace.class, org.mlflow.api.proto.Service.DeleteWorkspace.Builder.class); + } + + // Construct using org.mlflow.api.proto.Service.DeleteWorkspace.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + workspaceName_ = ""; + bitField0_ = (bitField0_ & ~0x00000001); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return org.mlflow.api.proto.Service.internal_static_mlflow_DeleteWorkspace_descriptor; + } + + @java.lang.Override + public org.mlflow.api.proto.Service.DeleteWorkspace getDefaultInstanceForType() { + return org.mlflow.api.proto.Service.DeleteWorkspace.getDefaultInstance(); + } + + @java.lang.Override + public org.mlflow.api.proto.Service.DeleteWorkspace build() { + org.mlflow.api.proto.Service.DeleteWorkspace result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public org.mlflow.api.proto.Service.DeleteWorkspace buildPartial() { + org.mlflow.api.proto.Service.DeleteWorkspace result = new org.mlflow.api.proto.Service.DeleteWorkspace(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) != 0)) { + to_bitField0_ |= 0x00000001; + } + result.workspaceName_ = workspaceName_; + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof org.mlflow.api.proto.Service.DeleteWorkspace) { + return mergeFrom((org.mlflow.api.proto.Service.DeleteWorkspace)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(org.mlflow.api.proto.Service.DeleteWorkspace other) { + if (other == org.mlflow.api.proto.Service.DeleteWorkspace.getDefaultInstance()) return this; + if (other.hasWorkspaceName()) { + bitField0_ |= 0x00000001; + workspaceName_ = other.workspaceName_; + onChanged(); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + org.mlflow.api.proto.Service.DeleteWorkspace parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (org.mlflow.api.proto.Service.DeleteWorkspace) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private java.lang.Object workspaceName_ = ""; + /** + *
+       * Name of the workspace to delete.
+       * 
+ * + * optional string workspace_name = 1 [(.mlflow.validate_required) = true]; + * @return Whether the workspaceName field is set. + */ + public boolean hasWorkspaceName() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + *
+       * Name of the workspace to delete.
+       * 
+ * + * optional string workspace_name = 1 [(.mlflow.validate_required) = true]; + * @return The workspaceName. + */ + public java.lang.String getWorkspaceName() { + java.lang.Object ref = workspaceName_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + workspaceName_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + /** + *
+       * Name of the workspace to delete.
+       * 
+ * + * optional string workspace_name = 1 [(.mlflow.validate_required) = true]; + * @return The bytes for workspaceName. + */ + public com.google.protobuf.ByteString + getWorkspaceNameBytes() { + java.lang.Object ref = workspaceName_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + workspaceName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + *
+       * Name of the workspace to delete.
+       * 
+ * + * optional string workspace_name = 1 [(.mlflow.validate_required) = true]; + * @param value The workspaceName to set. + * @return This builder for chaining. + */ + public Builder setWorkspaceName( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + workspaceName_ = value; + onChanged(); + return this; + } + /** + *
+       * Name of the workspace to delete.
+       * 
+ * + * optional string workspace_name = 1 [(.mlflow.validate_required) = true]; + * @return This builder for chaining. + */ + public Builder clearWorkspaceName() { + bitField0_ = (bitField0_ & ~0x00000001); + workspaceName_ = getDefaultInstance().getWorkspaceName(); + onChanged(); + return this; + } + /** + *
+       * Name of the workspace to delete.
+       * 
+ * + * optional string workspace_name = 1 [(.mlflow.validate_required) = true]; + * @param value The bytes for workspaceName to set. + * @return This builder for chaining. + */ + public Builder setWorkspaceNameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000001; + workspaceName_ = value; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:mlflow.DeleteWorkspace) + } + + // @@protoc_insertion_point(class_scope:mlflow.DeleteWorkspace) + private static final org.mlflow.api.proto.Service.DeleteWorkspace DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.DeleteWorkspace(); + } + + public static org.mlflow.api.proto.Service.DeleteWorkspace getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + @java.lang.Deprecated public static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public DeleteWorkspace parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new DeleteWorkspace(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public org.mlflow.api.proto.Service.DeleteWorkspace getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + private static final com.google.protobuf.Descriptors.Descriptor internal_static_mlflow_Metric_descriptor; private static final @@ -187719,6 +195544,61 @@ public org.mlflow.api.proto.Service.Scorer getDefaultInstanceForType() { private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internal_static_mlflow_Scorer_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_mlflow_Workspace_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_mlflow_Workspace_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_mlflow_ListWorkspaces_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_mlflow_ListWorkspaces_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_mlflow_ListWorkspaces_Response_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_mlflow_ListWorkspaces_Response_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_mlflow_CreateWorkspace_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_mlflow_CreateWorkspace_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_mlflow_CreateWorkspace_Response_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_mlflow_CreateWorkspace_Response_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_mlflow_GetWorkspace_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_mlflow_GetWorkspace_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_mlflow_GetWorkspace_Response_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_mlflow_GetWorkspace_Response_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_mlflow_UpdateWorkspace_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_mlflow_UpdateWorkspace_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_mlflow_UpdateWorkspace_Response_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_mlflow_UpdateWorkspace_Response_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_mlflow_DeleteWorkspace_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_mlflow_DeleteWorkspace_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_mlflow_DeleteWorkspace_Response_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_mlflow_DeleteWorkspace_Response_fieldAccessorTable; public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { @@ -188174,307 +196054,344 @@ public org.mlflow.api.proto.Service.Scorer getDefaultInstanceForType() { "id\030\001 \001(\005\022\023\n\013scorer_name\030\002 \001(\t\022\026\n\016scorer_" + "version\030\003 \001(\005\022\031\n\021serialized_scorer\030\004 \001(\t" + "\022\025\n\rcreation_time\030\005 \001(\003\022\021\n\tscorer_id\030\006 \001" + - "(\t*6\n\010ViewType\022\017\n\013ACTIVE_ONLY\020\001\022\020\n\014DELET" + - "ED_ONLY\020\002\022\007\n\003ALL\020\003*I\n\nSourceType\022\014\n\010NOTE" + - "BOOK\020\001\022\007\n\003JOB\020\002\022\013\n\007PROJECT\020\003\022\t\n\005LOCAL\020\004\022" + - "\014\n\007UNKNOWN\020\350\007*M\n\tRunStatus\022\013\n\007RUNNING\020\001\022" + - "\r\n\tSCHEDULED\020\002\022\014\n\010FINISHED\020\003\022\n\n\006FAILED\020\004" + - "\022\n\n\006KILLED\020\005*O\n\013TraceStatus\022\034\n\030TRACE_STA" + - "TUS_UNSPECIFIED\020\000\022\006\n\002OK\020\001\022\t\n\005ERROR\020\002\022\017\n\013" + - "IN_PROGRESS\020\003*\212\001\n\021LoggedModelStatus\022#\n\037L" + - "OGGED_MODEL_STATUS_UNSPECIFIED\020\000\022\030\n\024LOGG" + - "ED_MODEL_PENDING\020\001\022\026\n\022LOGGED_MODEL_READY" + - "\020\002\022\036\n\032LOGGED_MODEL_UPLOAD_FAILED\020\0032\252Z\n\rM" + - "lflowService\022\246\001\n\023getExperimentByName\022\033.m" + - "lflow.GetExperimentByName\032$.mlflow.GetEx" + - "perimentByName.Response\"L\362\206\031H\n,\n\003GET\022\037/m" + - "lflow/experiments/get-by-name\032\004\010\002\020\000\020\001*\026G" + - "et Experiment By Name\022\224\001\n\020createExperime" + - "nt\022\030.mlflow.CreateExperiment\032!.mlflow.Cr" + - "eateExperiment.Response\"C\362\206\031?\n(\n\004POST\022\032/" + - "mlflow/experiments/create\032\004\010\002\020\000\020\001*\021Creat" + - "e Experiment\022\301\001\n\021searchExperiments\022\031.mlf" + - "low.SearchExperiments\032\".mlflow.SearchExp" + - "eriments.Response\"m\362\206\031i\n(\n\004POST\022\032/mlflow" + - "/experiments/search\032\004\010\002\020\000\n\'\n\003GET\022\032/mlflo" + - "w/experiments/search\032\004\010\002\020\000\020\001*\022Search Exp" + - "eriments\022\210\001\n\rgetExperiment\022\025.mlflow.GetE" + - "xperiment\032\036.mlflow.GetExperiment.Respons" + - "e\"@\362\206\0318\n$\n\003GET\022\027/mlflow/experiments/get\032" + - "\004\010\002\020\000\020\001*\016Get Experiment\272\214\031\000\022\224\001\n\020deleteEx" + - "periment\022\030.mlflow.DeleteExperiment\032!.mlf" + - "low.DeleteExperiment.Response\"C\362\206\031?\n(\n\004P" + - "OST\022\032/mlflow/experiments/delete\032\004\010\002\020\000\020\001*" + - "\021Delete Experiment\022\231\001\n\021restoreExperiment" + - "\022\031.mlflow.RestoreExperiment\032\".mlflow.Res" + - "toreExperiment.Response\"E\362\206\031A\n)\n\004POST\022\033/" + - "mlflow/experiments/restore\032\004\010\002\020\000\020\001*\022Rest" + - "ore Experiment\022\224\001\n\020updateExperiment\022\030.ml" + - "flow.UpdateExperiment\032!.mlflow.UpdateExp" + - "eriment.Response\"C\362\206\031?\n(\n\004POST\022\032/mlflow/" + - "experiments/update\032\004\010\002\020\000\020\001*\021Update Exper" + - "iment\022q\n\tcreateRun\022\021.mlflow.CreateRun\032\032." + - "mlflow.CreateRun.Response\"5\362\206\0311\n!\n\004POST\022" + - "\023/mlflow/runs/create\032\004\010\002\020\000\020\001*\nCreate Run" + - "\022q\n\tupdateRun\022\021.mlflow.UpdateRun\032\032.mlflo" + - "w.UpdateRun.Response\"5\362\206\0311\n!\n\004POST\022\023/mlf" + - "low/runs/update\032\004\010\002\020\000\020\001*\nUpdate Run\022q\n\td" + - "eleteRun\022\021.mlflow.DeleteRun\032\032.mlflow.Del" + - "eteRun.Response\"5\362\206\0311\n!\n\004POST\022\023/mlflow/r" + - "uns/delete\032\004\010\002\020\000\020\001*\nDelete Run\022v\n\nrestor" + - "eRun\022\022.mlflow.RestoreRun\032\033.mlflow.Restor" + - "eRun.Response\"7\362\206\0313\n\"\n\004POST\022\024/mlflow/run" + - "s/restore\032\004\010\002\020\000\020\001*\013Restore Run\022u\n\tlogMet" + - "ric\022\021.mlflow.LogMetric\032\032.mlflow.LogMetri" + - "c.Response\"9\362\206\0315\n%\n\004POST\022\027/mlflow/runs/l" + - "og-metric\032\004\010\002\020\000\020\001*\nLog Metric\022t\n\010logPara" + - "m\022\020.mlflow.LogParam\032\031.mlflow.LogParam.Re" + - "sponse\";\362\206\0317\n(\n\004POST\022\032/mlflow/runs/log-p" + - "arameter\032\004\010\002\020\000\020\001*\tLog Param\022\241\001\n\020setExper" + - "imentTag\022\030.mlflow.SetExperimentTag\032!.mlf" + - "low.SetExperimentTag.Response\"P\362\206\031L\n4\n\004P" + - "OST\022&/mlflow/experiments/set-experiment-" + - "tag\032\004\010\002\020\000\020\001*\022Set Experiment Tag\022\260\001\n\023dele" + - "teExperimentTag\022\033.mlflow.DeleteExperimen" + - "tTag\032$.mlflow.DeleteExperimentTag.Respon" + - "se\"V\362\206\031R\n7\n\004POST\022)/mlflow/experiments/de" + - "lete-experiment-tag\032\004\010\002\020\000\020\001*\025Delete Expe" + - "riment Tag\022f\n\006setTag\022\016.mlflow.SetTag\032\027.m" + - "lflow.SetTag.Response\"3\362\206\031/\n\"\n\004POST\022\024/ml" + - "flow/runs/set-tag\032\004\010\002\020\000\020\001*\007Set Tag\022\210\001\n\013s" + - "etTraceTag\022\023.mlflow.SetTraceTag\032\034.mlflow" + - ".SetTraceTag.Response\"F\362\206\031B\n/\n\005PATCH\022 /m" + - "lflow/traces/{request_id}/tags\032\004\010\002\020\000\020\003*\r" + - "Set Trace Tag\022\217\001\n\rsetTraceTagV3\022\025.mlflow" + - ".SetTraceTagV3\032\036.mlflow.SetTraceTagV3.Re" + - "sponse\"G\362\206\031C\n-\n\005PATCH\022\036/mlflow/traces/{t" + - "race_id}/tags\032\004\010\003\020\000\020\003*\020Set Trace Tag V3\022" + - "\225\001\n\016deleteTraceTag\022\026.mlflow.DeleteTraceT" + - "ag\032\037.mlflow.DeleteTraceTag.Response\"J\362\206\031" + - "F\n0\n\006DELETE\022 /mlflow/traces/{request_id}" + - "/tags\032\004\010\002\020\000\020\003*\020Delete Trace Tag\022\234\001\n\020dele" + - "teTraceTagV3\022\030.mlflow.DeleteTraceTagV3\032!" + - ".mlflow.DeleteTraceTagV3.Response\"K\362\206\031G\n" + - ".\n\006DELETE\022\036/mlflow/traces/{trace_id}/tag" + - "s\032\004\010\003\020\000\020\003*\023Delete Trace Tag V3\022u\n\tdelete" + - "Tag\022\021.mlflow.DeleteTag\032\032.mlflow.DeleteTa" + - "g.Response\"9\362\206\0315\n%\n\004POST\022\027/mlflow/runs/d" + - "elete-tag\032\004\010\002\020\000\020\001*\nDelete Tag\022e\n\006getRun\022" + - "\016.mlflow.GetRun\032\027.mlflow.GetRun.Response" + - "\"2\362\206\031*\n\035\n\003GET\022\020/mlflow/runs/get\032\004\010\002\020\000\020\001*" + - "\007Get Run\272\214\031\000\022y\n\nsearchRuns\022\022.mlflow.Sear" + - "chRuns\032\033.mlflow.SearchRuns.Response\":\362\206\031" + - "2\n!\n\004POST\022\023/mlflow/runs/search\032\004\010\002\020\000\020\001*\013" + - "Search Runs\272\214\031\000\022\207\001\n\rlistArtifacts\022\025.mlfl" + - "ow.ListArtifacts\032\036.mlflow.ListArtifacts." + - "Response\"?\362\206\0317\n#\n\003GET\022\026/mlflow/artifacts" + - "/list\032\004\010\002\020\000\020\001*\016List Artifacts\272\214\031\000\022\225\001\n\020ge" + - "tMetricHistory\022\030.mlflow.GetMetricHistory" + - "\032!.mlflow.GetMetricHistory.Response\"D\362\206\031" + - "@\n(\n\003GET\022\033/mlflow/metrics/get-history\032\004\010" + - "\002\020\000\020\001*\022Get Metric History\022\267\001\n\034getMetricH" + - "istoryBulkInterval\022$.mlflow.GetMetricHis" + - "toryBulkInterval\032-.mlflow.GetMetricHisto" + - "ryBulkInterval.Response\"B\362\206\031:\n6\n\003GET\022)/m" + - "lflow/metrics/get-history-bulk-interval\032" + - "\004\010\002\020\013\020\003\272\214\031\000\022p\n\010logBatch\022\020.mlflow.LogBatc" + - "h\032\031.mlflow.LogBatch.Response\"7\362\206\0313\n$\n\004PO" + - "ST\022\026/mlflow/runs/log-batch\032\004\010\002\020\000\020\001*\tLog " + - "Batch\022p\n\010logModel\022\020.mlflow.LogModel\032\031.ml" + - "flow.LogModel.Response\"7\362\206\0313\n$\n\004POST\022\026/m" + - "lflow/runs/log-model\032\004\010\002\020\000\020\001*\tLog Model\022" + - "u\n\tlogInputs\022\021.mlflow.LogInputs\032\032.mlflow" + - ".LogInputs.Response\"9\362\206\0315\n%\n\004POST\022\027/mlfl" + - "ow/runs/log-inputs\032\004\010\002\020\000\020\001*\nLog Inputs\022v" + - "\n\nlogOutputs\022\022.mlflow.LogOutputs\032\033.mlflo" + - "w.LogOutputs.Response\"7\362\206\0313\n\"\n\004POST\022\024/ml" + - "flow/runs/outputs\032\004\010\002\020\000\020\003*\013Log Outputs\022\207" + - "\001\n\016searchDatasets\022\026.mlflow.SearchDataset" + - "s\032\037.mlflow.SearchDatasets.Response\"<\362\206\0314" + - "\n0\n\004POST\022\"mlflow/experiments/search-data" + - "sets\032\004\010\002\020\000\020\003\272\214\031\000\022p\n\nstartTrace\022\022.mlflow." + - "StartTrace\032\033.mlflow.StartTrace.Response\"" + - "1\362\206\031-\n\034\n\004POST\022\016/mlflow/traces\032\004\010\002\020\000\020\003*\013S" + - "tart Trace\022v\n\010endTrace\022\020.mlflow.EndTrace" + - "\032\031.mlflow.EndTrace.Response\"=\362\206\0319\n*\n\005PAT" + - "CH\022\033/mlflow/traces/{request_id}\032\004\010\002\020\000\020\003*" + - "\tEnd Trace\022\211\001\n\014getTraceInfo\022\024.mlflow.Get" + - "TraceInfo\032\035.mlflow.GetTraceInfo.Response" + - "\"D\362\206\031@\n-\n\003GET\022 /mlflow/traces/{request_i" + - "d}/info\032\004\010\002\020\000\020\003*\rGet TraceInfo\022\213\001\n\016getTr" + - "aceInfoV3\022\026.mlflow.GetTraceInfoV3\032\037.mlfl" + - "ow.GetTraceInfoV3.Response\"@\362\206\031<\n&\n\003GET\022" + - "\031/mlflow/traces/{trace_id}\032\004\010\003\020\000\020\003*\020Get " + - "TraceInfo v3\022n\n\010getTrace\022\020.mlflow.GetTra" + - "ce\032\031.mlflow.GetTrace.Response\"5\362\206\0311\n\037\n\003G" + - "ET\022\022/mlflow/traces/get\032\004\010\003\020\000\020\003*\014Get Trac" + - "e v3\022\203\001\n\016batchGetTraces\022\026.mlflow.BatchGe" + - "tTraces\032\037.mlflow.BatchGetTraces.Response" + - "\"8\362\206\0314\n$\n\003GET\022\027/mlflow/traces/batchGet\032\004" + - "\010\003\020\000\020\003*\nGet Traces\022w\n\014searchTraces\022\024.mlf" + - "low.SearchTraces\032\035.mlflow.SearchTraces.R" + - "esponse\"2\362\206\031.\n\033\n\003GET\022\016/mlflow/traces\032\004\010\002" + - "\020\000\020\003*\rSearch Traces\022\210\001\n\016searchTracesV3\022\026" + - ".mlflow.SearchTracesV3\032\037.mlflow.SearchTr" + - "acesV3.Response\"=\362\206\0319\n#\n\004POST\022\025/mlflow/t" + - "races/search\032\004\010\003\020\000\020\003*\020Search Traces V3\022i" + - "\n\014startTraceV3\022\024.mlflow.StartTraceV3\032\035.m" + - "lflow.StartTraceV3.Response\"$\362\206\031 \n\034\n\004POS" + - "T\022\016/mlflow/traces\032\004\010\003\020\000\020\003\022\222\001\n\017linkTraces" + - "ToRun\022\027.mlflow.LinkTracesToRun\032 .mlflow." + - "LinkTracesToRun.Response\"D\362\206\031@\n(\n\004POST\022\032" + - "/mlflow/traces/link-to-run\032\004\010\002\020\000\020\003*\022Link" + - " Traces to Run\022\242\001\n\031searchUnifiedTraceHan" + - "dler\022\033.mlflow.SearchUnifiedTraces\032$.mlfl" + - "ow.SearchUnifiedTraces.Response\"B\362\206\031>\n#\n" + - "\003GET\022\026/mlflow/unified-traces\032\004\010\002\020\000\020\003*\025Se" + - "arch Unified Traces\022\257\001\n\025getOnlineTraceDe" + - "tails\022\035.mlflow.GetOnlineTraceDetails\032&.m" + - "lflow.GetOnlineTraceDetails.Response\"O\362\206" + - "\031K\n-\n\003GET\022 /mlflow/get-online-trace-deta" + - "ils\032\004\010\002\020\000\020\003*\030Get Online Trace Details\022\206\001" + - "\n\014deleteTraces\022\024.mlflow.DeleteTraces\032\035.m" + - "lflow.DeleteTraces.Response\"A\362\206\031=\n*\n\004POS" + - "T\022\034/mlflow/traces/delete-traces\032\004\010\002\020\000\020\003*" + - "\rDelete Traces\022\217\001\n\016deleteTracesV3\022\026.mlfl" + - "ow.DeleteTracesV3\032\037.mlflow.DeleteTracesV" + - "3.Response\"D\362\206\031@\n*\n\004POST\022\034/mlflow/traces" + - "/delete-traces\032\004\010\003\020\000\020\003*\020Delete Traces V3" + - "\022\343\001\n\037calculateTraceFilterCorrelation\022\'.m" + - "lflow.CalculateTraceFilterCorrelation\0320." + - "mlflow.CalculateTraceFilterCorrelation.R" + - "esponse\"e\362\206\031a\n9\n\004POST\022+/mlflow/traces/ca" + - "lculate-filter-correlation\032\004\010\003\020\000\020\003*\"Calc" + - "ulate Trace Filter Correlation\022\224\001\n\021creat" + - "eLoggedModel\022\031.mlflow.CreateLoggedModel\032" + - "\".mlflow.CreateLoggedModel.Response\"@\362\206\031" + - "<\n#\n\004POST\022\025/mlflow/logged-models\032\004\010\002\020\000\020\003" + - "*\023Create Logged Model\022\250\001\n\023finalizeLogged" + - "Model\022\033.mlflow.FinalizeLoggedModel\032$.mlf" + - "low.FinalizeLoggedModel.Response\"N\362\206\031J\n/" + - "\n\005PATCH\022 /mlflow/logged-models/{model_id" + - "}\032\004\010\002\020\000\020\003*\025Finalize Logged Model\022\222\001\n\016get" + - "LoggedModel\022\026.mlflow.GetLoggedModel\032\037.ml" + - "flow.GetLoggedModel.Response\"G\362\206\031C\n-\n\003GE" + - "T\022 /mlflow/logged-models/{model_id}\032\004\010\002\020" + - "\000\020\003*\020Get Logged Model\022\243\001\n\021deleteLoggedMo" + - "del\022\031.mlflow.DeleteLoggedModel\032\".mlflow." + - "DeleteLoggedModel.Response\"O\362\206\031K\n0\n\006DELE" + - "TE\022 /mlflow/logged-models/{model_id}\032\004\010\002" + - "\020\000\020\003*\025Delete a Logged Model\022\236\001\n\022searchLo" + - "ggedModels\022\032.mlflow.SearchLoggedModels\032#" + - ".mlflow.SearchLoggedModels.Response\"G\362\206\031" + - "C\n*\n\004POST\022\034/mlflow/logged-models/search\032" + - "\004\010\002\020\000\020\003*\023Search LoggedModels\022\251\001\n\022setLogg" + - "edModelTags\022\032.mlflow.SetLoggedModelTags\032" + - "#.mlflow.SetLoggedModelTags.Response\"R\362\206" + - "\031N\n4\n\005PATCH\022%/mlflow/logged-models/{mode" + - "l_id}/tags\032\004\010\002\020\000\020\003*\024Set Logged Model Tag" + - "\022\275\001\n\024deleteLoggedModelTag\022\034.mlflow.Delet" + - "eLoggedModelTag\032%.mlflow.DeleteLoggedMod" + - "elTag.Response\"`\362\206\031\\\n?\n\006DELETE\022//mlflow/" + - "logged-models/{model_id}/tags/{tag_key}\032" + - "\004\010\002\020\000\020\003*\027Delete Logged Model Tag\022\326\001\n\030lis" + - "tLoggedModelArtifacts\022 .mlflow.ListLogge" + - "dModelArtifacts\032).mlflow.ListLoggedModel" + - "Artifacts.Response\"m\362\206\031i\nC\n\003GET\0226/mlflow" + - "/logged-models/{model_id}/artifacts/dire" + - "ctories\032\004\010\002\020\000\020\003* List Artifacts for Logg" + - "ed Models\022\301\001\n\024LogLoggedModelParams\022#.mlf" + - "low.LogLoggedModelParamsRequest\032,.mlflow" + - ".LogLoggedModelParamsRequest.Response\"V\362" + - "\206\031R\n5\n\004POST\022\'/mlflow/logged-models/{mode" + - "l_id}/params\032\004\010\002\020\000\020\003*\027Log Logged Model P" + - "arams\022\260\001\n\rGetAssessment\022\034.mlflow.GetAsse" + - "ssmentRequest\032%.mlflow.GetAssessmentRequ" + - "est.Response\"Z\362\206\031V\nB\n\003GET\0225/mlflow/trace" + - "s/{trace_id}/assessments/{assessment_id}" + - "\032\004\010\003\020\000\020\003*\016Get Assessment\022\337\001\n\020createAsses" + - "sment\022\030.mlflow.CreateAssessment\032!.mlflow" + - ".CreateAssessment.Response\"\215\001\362\206\031\210\001\n>\n\004PO" + - "ST\0220/mlflow/traces/{assessment.trace_id}" + - "/assessments\032\004\010\003\020\000\020\003\030\350\007\030\356\007\030\014\030\001*:Create a" + - "n assessment of a trace or a span within" + - " the trace\022\320\001\n\020updateAssessment\022\030.mlflow" + - ".UpdateAssessment\032!.mlflow.UpdateAssessm" + - "ent.Response\"\177\362\206\031{\nD\n\005PATCH\0225/mlflow/tra" + - "ces/{trace_id}/assessments/{assessment_i" + - "d}\032\004\010\003\020\000\020\003\030\350\007\030\356\007\030\001*)Update an existing a" + - "ssessment on a trace.\022\261\001\n\020deleteAssessme" + - "nt\022\030.mlflow.DeleteAssessment\032!.mlflow.De" + - "leteAssessment.Response\"`\362\206\031\\\nE\n\006DELETE\022" + - "5/mlflow/traces/{trace_id}/assessments/{" + - "assessment_id}\032\004\010\003\020\000\020\003*\021Delete Assessmen" + - "t\022\232\001\n\rcreateDataset\022\025.mlflow.CreateDatas" + - "et\032\036.mlflow.CreateDataset.Response\"R\362\206\031N" + - "\n%\n\004POST\022\027/mlflow/datasets/create\032\004\010\003\020\000\020" + - "\003\030\350\007\030\356\007\030\014\030\001*\031Create Evaluation Dataset\022\221" + - "\001\n\ngetDataset\022\022.mlflow.GetDataset\032\033.mlfl" + - "ow.GetDataset.Response\"R\362\206\031N\n*\n\003GET\022\035/ml" + - "flow/datasets/{dataset_id}\032\004\010\003\020\000\020\003\030\350\007\030\272\027" + - "\030\001*\026Get Evaluation Dataset\022\240\001\n\rdeleteDat" + - "aset\022\025.mlflow.DeleteDataset\032\036.mlflow.Del" + - "eteDataset.Response\"X\362\206\031T\n-\n\006DELETE\022\035/ml" + - "flow/datasets/{dataset_id}\032\004\010\003\020\000\020\003\030\350\007\030\272\027" + - "\030\001*\031Delete Evaluation Dataset\022\335\001\n\030search" + - "EvaluationDatasets\022 .mlflow.SearchEvalua" + - "tionDatasets\032).mlflow.SearchEvaluationDa" + - "tasets.Response\"t\362\206\031p\n%\n\004POST\022\027/mlflow/d" + - "atasets/search\032\004\010\003\020\000\n$\n\003GET\022\027/mlflow/dat" + - "asets/search\032\004\010\003\020\000\020\003\030\350\007\030\001*\032Search Evalua" + - "tion Datasets\022\251\001\n\016setDatasetTags\022\026.mlflo" + - "w.SetDatasetTags\032\037.mlflow.SetDatasetTags" + - ".Response\"^\362\206\031Z\n1\n\005PATCH\022\"/mlflow/datase" + - "ts/{dataset_id}/tags\032\004\010\003\020\000\020\003\030\350\007\030\272\027\030\001*\033Se" + - "t Evaluation Dataset Tags\022\270\001\n\020deleteData" + - "setTag\022\030.mlflow.DeleteDatasetTag\032!.mlflo" + - "w.DeleteDatasetTag.Response\"g\362\206\031c\n8\n\006DEL" + - "ETE\022(/mlflow/datasets/{dataset_id}/tags/" + - "{key}\032\004\010\003\020\000\020\003\030\350\007\030\272\027\030\001*\035Delete Evaluation" + - " Dataset Tag\022\303\001\n\024upsertDatasetRecords\022\034." + - "mlflow.UpsertDatasetRecords\032%.mlflow.Ups" + - "ertDatasetRecords.Response\"f\362\206\031b\n3\n\004POST" + - "\022%/mlflow/datasets/{dataset_id}/records\032" + - "\004\010\003\020\000\020\003\030\350\007\030\272\027\030\001*!Upsert Evaluation Datas" + - "et Records\022\326\001\n\027getDatasetExperimentIds\022\037" + - ".mlflow.GetDatasetExperimentIds\032(.mlflow" + - ".GetDatasetExperimentIds.Response\"p\362\206\031l\n" + - "9\n\003GET\022,/mlflow/datasets/{dataset_id}/ex" + - "periment-ids\032\004\010\003\020\000\020\003\030\350\007\030\272\027\030\001*%Get Evalua" + - "tion Dataset Experiment IDs\022\212\001\n\016register" + - "Scorer\022\026.mlflow.RegisterScorer\032\037.mlflow." + - "RegisterScorer.Response\"?\362\206\031;\n&\n\004POST\022\030/" + - "mlflow/scorers/register\032\004\010\003\020\000\020\001*\017Registe" + - "r Scorer\022y\n\013listScorers\022\023.mlflow.ListSco" + - "rers\032\034.mlflow.ListScorers.Response\"7\362\206\0313" + - "\n!\n\003GET\022\024/mlflow/scorers/list\032\004\010\003\020\000\020\001*\014L" + - "ist Scorers\022\232\001\n\022listScorerVersions\022\032.mlf" + - "low.ListScorerVersions\032#.mlflow.ListScor" + - "erVersions.Response\"C\362\206\031?\n%\n\003GET\022\030/mlflo" + - "w/scorers/versions\032\004\010\003\020\000\020\001*\024List Scorer " + - "Versions\022p\n\tgetScorer\022\021.mlflow.GetScorer" + - "\032\032.mlflow.GetScorer.Response\"4\362\206\0310\n \n\003GE" + - "T\022\023/mlflow/scorers/get\032\004\010\003\020\000\020\001*\nGet Scor" + - "er\022\202\001\n\014deleteScorer\022\024.mlflow.DeleteScore" + - "r\032\035.mlflow.DeleteScorer.Response\"=\362\206\0319\n&" + - "\n\006DELETE\022\026/mlflow/scorers/delete\032\004\010\003\020\000\020\001" + - "*\rDelete Scorer\022\266\001\n\021getDatasetRecords\022\031." + - "mlflow.GetDatasetRecords\032\".mlflow.GetDat" + - "asetRecords.Response\"b\362\206\031^\n2\n\003GET\022%/mlfl" + - "ow/datasets/{dataset_id}/records\032\004\010\003\020\000\020\003" + - "\030\350\007\030\272\027\030\001*\036Get Evaluation Dataset Records" + - "\022\315\001\n\027addDatasetToExperiments\022\037.mlflow.Ad" + - "dDatasetToExperiments\032(.mlflow.AddDatase" + - "tToExperiments.Response\"g\362\206\031c\n;\n\004POST\022-/" + - "mlflow/datasets/{dataset_id}/add-experim" + - "ents\032\004\010\003\020\000\020\003\030\350\007\030\272\027\030\001*\032Add Dataset to Exp" + - "eriments\022\344\001\n\034removeDatasetFromExperiment" + - "s\022$.mlflow.RemoveDatasetFromExperiments\032" + - "-.mlflow.RemoveDatasetFromExperiments.Re" + - "sponse\"o\362\206\031k\n>\n\004POST\0220/mlflow/datasets/{" + - "dataset_id}/remove-experiments\032\004\010\003\020\000\020\003\030\350" + - "\007\030\272\027\030\001*\037Remove Dataset from ExperimentsB" + - "\036\n\024org.mlflow.api.proto\220\001\001\342?\002\020\001" + "(\t\"4\n\tWorkspace\022\022\n\004name\030\001 \001(\tB\004\370\206\031\001\022\023\n\013d" + + "escription\030\002 \001(\t\"p\n\016ListWorkspaces\0321\n\010Re" + + "sponse\022%\n\nworkspaces\030\001 \003(\0132\021.mlflow.Work" + + "space:+\342?(\n&com.databricks.rpc.RPC[$this" + + ".Response]\"\231\001\n\017CreateWorkspace\022\022\n\004name\030\001" + + " \001(\tB\004\370\206\031\001\022\023\n\013description\030\002 \001(\t\0320\n\010Respo" + + "nse\022$\n\tworkspace\030\001 \001(\0132\021.mlflow.Workspac" + + "e:+\342?(\n&com.databricks.rpc.RPC[$this.Res" + + "ponse]\"\213\001\n\014GetWorkspace\022\034\n\016workspace_nam" + + "e\030\001 \001(\tB\004\370\206\031\001\0320\n\010Response\022$\n\tworkspace\030\001" + + " \001(\0132\021.mlflow.Workspace:+\342?(\n&com.databr" + + "icks.rpc.RPC[$this.Response]\"\243\001\n\017UpdateW" + + "orkspace\022\034\n\016workspace_name\030\001 \001(\tB\004\370\206\031\001\022\023" + + "\n\013description\030\002 \001(\t\0320\n\010Response\022$\n\tworks" + + "pace\030\001 \001(\0132\021.mlflow.Workspace:+\342?(\n&com." + + "databricks.rpc.RPC[$this.Response]\"h\n\017De" + + "leteWorkspace\022\034\n\016workspace_name\030\001 \001(\tB\004\370" + + "\206\031\001\032\n\n\010Response:+\342?(\n&com.databricks.rpc" + + ".RPC[$this.Response]*6\n\010ViewType\022\017\n\013ACTI" + + "VE_ONLY\020\001\022\020\n\014DELETED_ONLY\020\002\022\007\n\003ALL\020\003*I\n\n" + + "SourceType\022\014\n\010NOTEBOOK\020\001\022\007\n\003JOB\020\002\022\013\n\007PRO" + + "JECT\020\003\022\t\n\005LOCAL\020\004\022\014\n\007UNKNOWN\020\350\007*M\n\tRunSt" + + "atus\022\013\n\007RUNNING\020\001\022\r\n\tSCHEDULED\020\002\022\014\n\010FINI" + + "SHED\020\003\022\n\n\006FAILED\020\004\022\n\n\006KILLED\020\005*O\n\013TraceS" + + "tatus\022\034\n\030TRACE_STATUS_UNSPECIFIED\020\000\022\006\n\002O" + + "K\020\001\022\t\n\005ERROR\020\002\022\017\n\013IN_PROGRESS\020\003*\212\001\n\021Logg" + + "edModelStatus\022#\n\037LOGGED_MODEL_STATUS_UNS" + + "PECIFIED\020\000\022\030\n\024LOGGED_MODEL_PENDING\020\001\022\026\n\022" + + "LOGGED_MODEL_READY\020\002\022\036\n\032LOGGED_MODEL_UPL" + + "OAD_FAILED\020\0032\205`\n\rMlflowService\022\246\001\n\023getEx" + + "perimentByName\022\033.mlflow.GetExperimentByN" + + "ame\032$.mlflow.GetExperimentByName.Respons" + + "e\"L\362\206\031H\n,\n\003GET\022\037/mlflow/experiments/get-" + + "by-name\032\004\010\002\020\000\020\001*\026Get Experiment By Name\022" + + "\224\001\n\020createExperiment\022\030.mlflow.CreateExpe" + + "riment\032!.mlflow.CreateExperiment.Respons" + + "e\"C\362\206\031?\n(\n\004POST\022\032/mlflow/experiments/cre" + + "ate\032\004\010\002\020\000\020\001*\021Create Experiment\022\301\001\n\021searc" + + "hExperiments\022\031.mlflow.SearchExperiments\032" + + "\".mlflow.SearchExperiments.Response\"m\362\206\031" + + "i\n(\n\004POST\022\032/mlflow/experiments/search\032\004\010" + + "\002\020\000\n\'\n\003GET\022\032/mlflow/experiments/search\032\004" + + "\010\002\020\000\020\001*\022Search Experiments\022\210\001\n\rgetExperi" + + "ment\022\025.mlflow.GetExperiment\032\036.mlflow.Get" + + "Experiment.Response\"@\362\206\0318\n$\n\003GET\022\027/mlflo" + + "w/experiments/get\032\004\010\002\020\000\020\001*\016Get Experimen" + + "t\272\214\031\000\022\224\001\n\020deleteExperiment\022\030.mlflow.Dele" + + "teExperiment\032!.mlflow.DeleteExperiment.R" + + "esponse\"C\362\206\031?\n(\n\004POST\022\032/mlflow/experimen" + + "ts/delete\032\004\010\002\020\000\020\001*\021Delete Experiment\022\231\001\n" + + "\021restoreExperiment\022\031.mlflow.RestoreExper" + + "iment\032\".mlflow.RestoreExperiment.Respons" + + "e\"E\362\206\031A\n)\n\004POST\022\033/mlflow/experiments/res" + + "tore\032\004\010\002\020\000\020\001*\022Restore Experiment\022\224\001\n\020upd" + + "ateExperiment\022\030.mlflow.UpdateExperiment\032" + + "!.mlflow.UpdateExperiment.Response\"C\362\206\031?" + + "\n(\n\004POST\022\032/mlflow/experiments/update\032\004\010\002" + + "\020\000\020\001*\021Update Experiment\022q\n\tcreateRun\022\021.m" + + "lflow.CreateRun\032\032.mlflow.CreateRun.Respo" + + "nse\"5\362\206\0311\n!\n\004POST\022\023/mlflow/runs/create\032\004" + + "\010\002\020\000\020\001*\nCreate Run\022q\n\tupdateRun\022\021.mlflow" + + ".UpdateRun\032\032.mlflow.UpdateRun.Response\"5" + + "\362\206\0311\n!\n\004POST\022\023/mlflow/runs/update\032\004\010\002\020\000\020" + + "\001*\nUpdate Run\022q\n\tdeleteRun\022\021.mlflow.Dele" + + "teRun\032\032.mlflow.DeleteRun.Response\"5\362\206\0311\n" + + "!\n\004POST\022\023/mlflow/runs/delete\032\004\010\002\020\000\020\001*\nDe" + + "lete Run\022v\n\nrestoreRun\022\022.mlflow.RestoreR" + + "un\032\033.mlflow.RestoreRun.Response\"7\362\206\0313\n\"\n" + + "\004POST\022\024/mlflow/runs/restore\032\004\010\002\020\000\020\001*\013Res" + + "tore Run\022u\n\tlogMetric\022\021.mlflow.LogMetric" + + "\032\032.mlflow.LogMetric.Response\"9\362\206\0315\n%\n\004PO" + + "ST\022\027/mlflow/runs/log-metric\032\004\010\002\020\000\020\001*\nLog" + + " Metric\022t\n\010logParam\022\020.mlflow.LogParam\032\031." + + "mlflow.LogParam.Response\";\362\206\0317\n(\n\004POST\022\032" + + "/mlflow/runs/log-parameter\032\004\010\002\020\000\020\001*\tLog " + + "Param\022\241\001\n\020setExperimentTag\022\030.mlflow.SetE" + + "xperimentTag\032!.mlflow.SetExperimentTag.R" + + "esponse\"P\362\206\031L\n4\n\004POST\022&/mlflow/experimen" + + "ts/set-experiment-tag\032\004\010\002\020\000\020\001*\022Set Exper" + + "iment Tag\022\260\001\n\023deleteExperimentTag\022\033.mlfl" + + "ow.DeleteExperimentTag\032$.mlflow.DeleteEx" + + "perimentTag.Response\"V\362\206\031R\n7\n\004POST\022)/mlf" + + "low/experiments/delete-experiment-tag\032\004\010" + + "\002\020\000\020\001*\025Delete Experiment Tag\022f\n\006setTag\022\016" + + ".mlflow.SetTag\032\027.mlflow.SetTag.Response\"" + + "3\362\206\031/\n\"\n\004POST\022\024/mlflow/runs/set-tag\032\004\010\002\020" + + "\000\020\001*\007Set Tag\022\210\001\n\013setTraceTag\022\023.mlflow.Se" + + "tTraceTag\032\034.mlflow.SetTraceTag.Response\"" + + "F\362\206\031B\n/\n\005PATCH\022 /mlflow/traces/{request_" + + "id}/tags\032\004\010\002\020\000\020\003*\rSet Trace Tag\022\217\001\n\rsetT" + + "raceTagV3\022\025.mlflow.SetTraceTagV3\032\036.mlflo" + + "w.SetTraceTagV3.Response\"G\362\206\031C\n-\n\005PATCH\022" + + "\036/mlflow/traces/{trace_id}/tags\032\004\010\003\020\000\020\003*" + + "\020Set Trace Tag V3\022\225\001\n\016deleteTraceTag\022\026.m" + + "lflow.DeleteTraceTag\032\037.mlflow.DeleteTrac" + + "eTag.Response\"J\362\206\031F\n0\n\006DELETE\022 /mlflow/t" + + "races/{request_id}/tags\032\004\010\002\020\000\020\003*\020Delete " + + "Trace Tag\022\234\001\n\020deleteTraceTagV3\022\030.mlflow." + + "DeleteTraceTagV3\032!.mlflow.DeleteTraceTag" + + "V3.Response\"K\362\206\031G\n.\n\006DELETE\022\036/mlflow/tra" + + "ces/{trace_id}/tags\032\004\010\003\020\000\020\003*\023Delete Trac" + + "e Tag V3\022u\n\tdeleteTag\022\021.mlflow.DeleteTag" + + "\032\032.mlflow.DeleteTag.Response\"9\362\206\0315\n%\n\004PO" + + "ST\022\027/mlflow/runs/delete-tag\032\004\010\002\020\000\020\001*\nDel" + + "ete Tag\022e\n\006getRun\022\016.mlflow.GetRun\032\027.mlfl" + + "ow.GetRun.Response\"2\362\206\031*\n\035\n\003GET\022\020/mlflow" + + "/runs/get\032\004\010\002\020\000\020\001*\007Get Run\272\214\031\000\022y\n\nsearch" + + "Runs\022\022.mlflow.SearchRuns\032\033.mlflow.Search" + + "Runs.Response\":\362\206\0312\n!\n\004POST\022\023/mlflow/run" + + "s/search\032\004\010\002\020\000\020\001*\013Search Runs\272\214\031\000\022\207\001\n\rli" + + "stArtifacts\022\025.mlflow.ListArtifacts\032\036.mlf" + + "low.ListArtifacts.Response\"?\362\206\0317\n#\n\003GET\022" + + "\026/mlflow/artifacts/list\032\004\010\002\020\000\020\001*\016List Ar" + + "tifacts\272\214\031\000\022\225\001\n\020getMetricHistory\022\030.mlflo" + + "w.GetMetricHistory\032!.mlflow.GetMetricHis" + + "tory.Response\"D\362\206\031@\n(\n\003GET\022\033/mlflow/metr" + + "ics/get-history\032\004\010\002\020\000\020\001*\022Get Metric Hist" + + "ory\022\267\001\n\034getMetricHistoryBulkInterval\022$.m" + + "lflow.GetMetricHistoryBulkInterval\032-.mlf" + + "low.GetMetricHistoryBulkInterval.Respons" + + "e\"B\362\206\031:\n6\n\003GET\022)/mlflow/metrics/get-hist" + + "ory-bulk-interval\032\004\010\002\020\013\020\003\272\214\031\000\022p\n\010logBatc" + + "h\022\020.mlflow.LogBatch\032\031.mlflow.LogBatch.Re" + + "sponse\"7\362\206\0313\n$\n\004POST\022\026/mlflow/runs/log-b" + + "atch\032\004\010\002\020\000\020\001*\tLog Batch\022p\n\010logModel\022\020.ml" + + "flow.LogModel\032\031.mlflow.LogModel.Response" + + "\"7\362\206\0313\n$\n\004POST\022\026/mlflow/runs/log-model\032\004" + + "\010\002\020\000\020\001*\tLog Model\022u\n\tlogInputs\022\021.mlflow." + + "LogInputs\032\032.mlflow.LogInputs.Response\"9\362" + + "\206\0315\n%\n\004POST\022\027/mlflow/runs/log-inputs\032\004\010\002" + + "\020\000\020\001*\nLog Inputs\022v\n\nlogOutputs\022\022.mlflow." + + "LogOutputs\032\033.mlflow.LogOutputs.Response\"" + + "7\362\206\0313\n\"\n\004POST\022\024/mlflow/runs/outputs\032\004\010\002\020" + + "\000\020\003*\013Log Outputs\022\207\001\n\016searchDatasets\022\026.ml" + + "flow.SearchDatasets\032\037.mlflow.SearchDatas" + + "ets.Response\"<\362\206\0314\n0\n\004POST\022\"mlflow/exper" + + "iments/search-datasets\032\004\010\002\020\000\020\003\272\214\031\000\022p\n\nst" + + "artTrace\022\022.mlflow.StartTrace\032\033.mlflow.St" + + "artTrace.Response\"1\362\206\031-\n\034\n\004POST\022\016/mlflow" + + "/traces\032\004\010\002\020\000\020\003*\013Start Trace\022v\n\010endTrace" + + "\022\020.mlflow.EndTrace\032\031.mlflow.EndTrace.Res" + + "ponse\"=\362\206\0319\n*\n\005PATCH\022\033/mlflow/traces/{re" + + "quest_id}\032\004\010\002\020\000\020\003*\tEnd Trace\022\211\001\n\014getTrac" + + "eInfo\022\024.mlflow.GetTraceInfo\032\035.mlflow.Get" + + "TraceInfo.Response\"D\362\206\031@\n-\n\003GET\022 /mlflow" + + "/traces/{request_id}/info\032\004\010\002\020\000\020\003*\rGet T" + + "raceInfo\022\213\001\n\016getTraceInfoV3\022\026.mlflow.Get" + + "TraceInfoV3\032\037.mlflow.GetTraceInfoV3.Resp" + + "onse\"@\362\206\031<\n&\n\003GET\022\031/mlflow/traces/{trace" + + "_id}\032\004\010\003\020\000\020\003*\020Get TraceInfo v3\022n\n\010getTra" + + "ce\022\020.mlflow.GetTrace\032\031.mlflow.GetTrace.R" + + "esponse\"5\362\206\0311\n\037\n\003GET\022\022/mlflow/traces/get" + + "\032\004\010\003\020\000\020\003*\014Get Trace v3\022\203\001\n\016batchGetTrace" + + "s\022\026.mlflow.BatchGetTraces\032\037.mlflow.Batch" + + "GetTraces.Response\"8\362\206\0314\n$\n\003GET\022\027/mlflow" + + "/traces/batchGet\032\004\010\003\020\000\020\003*\nGet Traces\022w\n\014" + + "searchTraces\022\024.mlflow.SearchTraces\032\035.mlf" + + "low.SearchTraces.Response\"2\362\206\031.\n\033\n\003GET\022\016" + + "/mlflow/traces\032\004\010\002\020\000\020\003*\rSearch Traces\022\210\001" + + "\n\016searchTracesV3\022\026.mlflow.SearchTracesV3" + + "\032\037.mlflow.SearchTracesV3.Response\"=\362\206\0319\n" + + "#\n\004POST\022\025/mlflow/traces/search\032\004\010\003\020\000\020\003*\020" + + "Search Traces V3\022i\n\014startTraceV3\022\024.mlflo" + + "w.StartTraceV3\032\035.mlflow.StartTraceV3.Res" + + "ponse\"$\362\206\031 \n\034\n\004POST\022\016/mlflow/traces\032\004\010\003\020" + + "\000\020\003\022\222\001\n\017linkTracesToRun\022\027.mlflow.LinkTra" + + "cesToRun\032 .mlflow.LinkTracesToRun.Respon" + + "se\"D\362\206\031@\n(\n\004POST\022\032/mlflow/traces/link-to" + + "-run\032\004\010\002\020\000\020\003*\022Link Traces to Run\022\242\001\n\031sea" + + "rchUnifiedTraceHandler\022\033.mlflow.SearchUn" + + "ifiedTraces\032$.mlflow.SearchUnifiedTraces" + + ".Response\"B\362\206\031>\n#\n\003GET\022\026/mlflow/unified-" + + "traces\032\004\010\002\020\000\020\003*\025Search Unified Traces\022\257\001" + + "\n\025getOnlineTraceDetails\022\035.mlflow.GetOnli" + + "neTraceDetails\032&.mlflow.GetOnlineTraceDe" + + "tails.Response\"O\362\206\031K\n-\n\003GET\022 /mlflow/get" + + "-online-trace-details\032\004\010\002\020\000\020\003*\030Get Onlin" + + "e Trace Details\022\206\001\n\014deleteTraces\022\024.mlflo" + + "w.DeleteTraces\032\035.mlflow.DeleteTraces.Res" + + "ponse\"A\362\206\031=\n*\n\004POST\022\034/mlflow/traces/dele" + + "te-traces\032\004\010\002\020\000\020\003*\rDelete Traces\022\217\001\n\016del" + + "eteTracesV3\022\026.mlflow.DeleteTracesV3\032\037.ml" + + "flow.DeleteTracesV3.Response\"D\362\206\031@\n*\n\004PO" + + "ST\022\034/mlflow/traces/delete-traces\032\004\010\003\020\000\020\003" + + "*\020Delete Traces V3\022\343\001\n\037calculateTraceFil" + + "terCorrelation\022\'.mlflow.CalculateTraceFi" + + "lterCorrelation\0320.mlflow.CalculateTraceF" + + "ilterCorrelation.Response\"e\362\206\031a\n9\n\004POST\022" + + "+/mlflow/traces/calculate-filter-correla" + + "tion\032\004\010\003\020\000\020\003*\"Calculate Trace Filter Cor" + + "relation\022\203\001\n\016listWorkspaces\022\026.mlflow.Lis" + + "tWorkspaces\032\037.mlflow.ListWorkspaces.Resp" + + "onse\"8\362\206\0314\n\037\n\003GET\022\022/mlflow/workspaces\032\004\010" + + "\002\020\000\020\003*\017List Workspaces\022\210\001\n\017createWorkspa" + + "ce\022\027.mlflow.CreateWorkspace\032 .mlflow.Cre" + + "ateWorkspace.Response\":\362\206\0316\n \n\004POST\022\022/ml" + + "flow/workspaces\032\004\010\002\020\000\020\003*\020Create Workspac" + + "e\022\214\001\n\014getWorkspace\022\024.mlflow.GetWorkspace" + + "\032\035.mlflow.GetWorkspace.Response\"G\362\206\031C\n0\n" + + "\003GET\022#/mlflow/workspaces/{workspace_name" + + "}\032\004\010\002\020\000\020\003*\rGet Workspace\022\232\001\n\017updateWorks" + + "pace\022\027.mlflow.UpdateWorkspace\032 .mlflow.U" + + "pdateWorkspace.Response\"L\362\206\031H\n2\n\005PATCH\022#" + + "/mlflow/workspaces/{workspace_name}\032\004\010\002\020" + + "\000\020\003*\020Update Workspace\022\233\001\n\017deleteWorkspac" + + "e\022\027.mlflow.DeleteWorkspace\032 .mlflow.Dele" + + "teWorkspace.Response\"M\362\206\031I\n3\n\006DELETE\022#/m" + + "lflow/workspaces/{workspace_name}\032\004\010\002\020\000\020" + + "\003*\020Delete Workspace\022\224\001\n\021createLoggedMode" + + "l\022\031.mlflow.CreateLoggedModel\032\".mlflow.Cr" + + "eateLoggedModel.Response\"@\362\206\031<\n#\n\004POST\022\025" + + "/mlflow/logged-models\032\004\010\002\020\000\020\003*\023Create Lo" + + "gged Model\022\250\001\n\023finalizeLoggedModel\022\033.mlf" + + "low.FinalizeLoggedModel\032$.mlflow.Finaliz" + + "eLoggedModel.Response\"N\362\206\031J\n/\n\005PATCH\022 /m" + + "lflow/logged-models/{model_id}\032\004\010\002\020\000\020\003*\025" + + "Finalize Logged Model\022\222\001\n\016getLoggedModel" + + "\022\026.mlflow.GetLoggedModel\032\037.mlflow.GetLog" + + "gedModel.Response\"G\362\206\031C\n-\n\003GET\022 /mlflow/" + + "logged-models/{model_id}\032\004\010\002\020\000\020\003*\020Get Lo" + + "gged Model\022\243\001\n\021deleteLoggedModel\022\031.mlflo" + + "w.DeleteLoggedModel\032\".mlflow.DeleteLogge" + + "dModel.Response\"O\362\206\031K\n0\n\006DELETE\022 /mlflow" + + "/logged-models/{model_id}\032\004\010\002\020\000\020\003*\025Delet" + + "e a Logged Model\022\236\001\n\022searchLoggedModels\022" + + "\032.mlflow.SearchLoggedModels\032#.mlflow.Sea" + + "rchLoggedModels.Response\"G\362\206\031C\n*\n\004POST\022\034" + + "/mlflow/logged-models/search\032\004\010\002\020\000\020\003*\023Se" + + "arch LoggedModels\022\251\001\n\022setLoggedModelTags" + + "\022\032.mlflow.SetLoggedModelTags\032#.mlflow.Se" + + "tLoggedModelTags.Response\"R\362\206\031N\n4\n\005PATCH" + + "\022%/mlflow/logged-models/{model_id}/tags\032" + + "\004\010\002\020\000\020\003*\024Set Logged Model Tag\022\275\001\n\024delete" + + "LoggedModelTag\022\034.mlflow.DeleteLoggedMode" + + "lTag\032%.mlflow.DeleteLoggedModelTag.Respo" + + "nse\"`\362\206\031\\\n?\n\006DELETE\022//mlflow/logged-mode" + + "ls/{model_id}/tags/{tag_key}\032\004\010\002\020\000\020\003*\027De" + + "lete Logged Model Tag\022\326\001\n\030listLoggedMode" + + "lArtifacts\022 .mlflow.ListLoggedModelArtif" + + "acts\032).mlflow.ListLoggedModelArtifacts.R" + + "esponse\"m\362\206\031i\nC\n\003GET\0226/mlflow/logged-mod" + + "els/{model_id}/artifacts/directories\032\004\010\002" + + "\020\000\020\003* List Artifacts for Logged Models\022\301" + + "\001\n\024LogLoggedModelParams\022#.mlflow.LogLogg" + + "edModelParamsRequest\032,.mlflow.LogLoggedM" + + "odelParamsRequest.Response\"V\362\206\031R\n5\n\004POST" + + "\022\'/mlflow/logged-models/{model_id}/param" + + "s\032\004\010\002\020\000\020\003*\027Log Logged Model Params\022\260\001\n\rG" + + "etAssessment\022\034.mlflow.GetAssessmentReque" + + "st\032%.mlflow.GetAssessmentRequest.Respons" + + "e\"Z\362\206\031V\nB\n\003GET\0225/mlflow/traces/{trace_id" + + "}/assessments/{assessment_id}\032\004\010\003\020\000\020\003*\016G" + + "et Assessment\022\337\001\n\020createAssessment\022\030.mlf" + + "low.CreateAssessment\032!.mlflow.CreateAsse" + + "ssment.Response\"\215\001\362\206\031\210\001\n>\n\004POST\0220/mlflow" + + "/traces/{assessment.trace_id}/assessment" + + "s\032\004\010\003\020\000\020\003\030\350\007\030\356\007\030\014\030\001*:Create an assessmen" + + "t of a trace or a span within the trace\022" + + "\320\001\n\020updateAssessment\022\030.mlflow.UpdateAsse" + + "ssment\032!.mlflow.UpdateAssessment.Respons" + + "e\"\177\362\206\031{\nD\n\005PATCH\0225/mlflow/traces/{trace_" + + "id}/assessments/{assessment_id}\032\004\010\003\020\000\020\003\030" + + "\350\007\030\356\007\030\001*)Update an existing assessment o" + + "n a trace.\022\261\001\n\020deleteAssessment\022\030.mlflow" + + ".DeleteAssessment\032!.mlflow.DeleteAssessm" + + "ent.Response\"`\362\206\031\\\nE\n\006DELETE\0225/mlflow/tr" + + "aces/{trace_id}/assessments/{assessment_" + + "id}\032\004\010\003\020\000\020\003*\021Delete Assessment\022\232\001\n\rcreat" + + "eDataset\022\025.mlflow.CreateDataset\032\036.mlflow" + + ".CreateDataset.Response\"R\362\206\031N\n%\n\004POST\022\027/" + + "mlflow/datasets/create\032\004\010\003\020\000\020\003\030\350\007\030\356\007\030\014\030\001" + + "*\031Create Evaluation Dataset\022\221\001\n\ngetDatas" + + "et\022\022.mlflow.GetDataset\032\033.mlflow.GetDatas" + + "et.Response\"R\362\206\031N\n*\n\003GET\022\035/mlflow/datase" + + "ts/{dataset_id}\032\004\010\003\020\000\020\003\030\350\007\030\272\027\030\001*\026Get Eva" + + "luation Dataset\022\240\001\n\rdeleteDataset\022\025.mlfl" + + "ow.DeleteDataset\032\036.mlflow.DeleteDataset." + + "Response\"X\362\206\031T\n-\n\006DELETE\022\035/mlflow/datase" + + "ts/{dataset_id}\032\004\010\003\020\000\020\003\030\350\007\030\272\027\030\001*\031Delete " + + "Evaluation Dataset\022\335\001\n\030searchEvaluationD" + + "atasets\022 .mlflow.SearchEvaluationDataset" + + "s\032).mlflow.SearchEvaluationDatasets.Resp" + + "onse\"t\362\206\031p\n%\n\004POST\022\027/mlflow/datasets/sea" + + "rch\032\004\010\003\020\000\n$\n\003GET\022\027/mlflow/datasets/searc" + + "h\032\004\010\003\020\000\020\003\030\350\007\030\001*\032Search Evaluation Datase" + + "ts\022\251\001\n\016setDatasetTags\022\026.mlflow.SetDatase" + + "tTags\032\037.mlflow.SetDatasetTags.Response\"^" + + "\362\206\031Z\n1\n\005PATCH\022\"/mlflow/datasets/{dataset" + + "_id}/tags\032\004\010\003\020\000\020\003\030\350\007\030\272\027\030\001*\033Set Evaluatio" + + "n Dataset Tags\022\270\001\n\020deleteDatasetTag\022\030.ml" + + "flow.DeleteDatasetTag\032!.mlflow.DeleteDat" + + "asetTag.Response\"g\362\206\031c\n8\n\006DELETE\022(/mlflo" + + "w/datasets/{dataset_id}/tags/{key}\032\004\010\003\020\000" + + "\020\003\030\350\007\030\272\027\030\001*\035Delete Evaluation Dataset Ta" + + "g\022\303\001\n\024upsertDatasetRecords\022\034.mlflow.Upse" + + "rtDatasetRecords\032%.mlflow.UpsertDatasetR" + + "ecords.Response\"f\362\206\031b\n3\n\004POST\022%/mlflow/d" + + "atasets/{dataset_id}/records\032\004\010\003\020\000\020\003\030\350\007\030" + + "\272\027\030\001*!Upsert Evaluation Dataset Records\022" + + "\326\001\n\027getDatasetExperimentIds\022\037.mlflow.Get" + + "DatasetExperimentIds\032(.mlflow.GetDataset" + + "ExperimentIds.Response\"p\362\206\031l\n9\n\003GET\022,/ml" + + "flow/datasets/{dataset_id}/experiment-id" + + "s\032\004\010\003\020\000\020\003\030\350\007\030\272\027\030\001*%Get Evaluation Datase" + + "t Experiment IDs\022\212\001\n\016registerScorer\022\026.ml" + + "flow.RegisterScorer\032\037.mlflow.RegisterSco" + + "rer.Response\"?\362\206\031;\n&\n\004POST\022\030/mlflow/scor" + + "ers/register\032\004\010\003\020\000\020\001*\017Register Scorer\022y\n" + + "\013listScorers\022\023.mlflow.ListScorers\032\034.mlfl" + + "ow.ListScorers.Response\"7\362\206\0313\n!\n\003GET\022\024/m" + + "lflow/scorers/list\032\004\010\003\020\000\020\001*\014List Scorers" + + "\022\232\001\n\022listScorerVersions\022\032.mlflow.ListSco" + + "rerVersions\032#.mlflow.ListScorerVersions." + + "Response\"C\362\206\031?\n%\n\003GET\022\030/mlflow/scorers/v" + + "ersions\032\004\010\003\020\000\020\001*\024List Scorer Versions\022p\n" + + "\tgetScorer\022\021.mlflow.GetScorer\032\032.mlflow.G" + + "etScorer.Response\"4\362\206\0310\n \n\003GET\022\023/mlflow/" + + "scorers/get\032\004\010\003\020\000\020\001*\nGet Scorer\022\202\001\n\014dele" + + "teScorer\022\024.mlflow.DeleteScorer\032\035.mlflow." + + "DeleteScorer.Response\"=\362\206\0319\n&\n\006DELETE\022\026/" + + "mlflow/scorers/delete\032\004\010\003\020\000\020\001*\rDelete Sc" + + "orer\022\266\001\n\021getDatasetRecords\022\031.mlflow.GetD" + + "atasetRecords\032\".mlflow.GetDatasetRecords" + + ".Response\"b\362\206\031^\n2\n\003GET\022%/mlflow/datasets" + + "/{dataset_id}/records\032\004\010\003\020\000\020\003\030\350\007\030\272\027\030\001*\036G" + + "et Evaluation Dataset Records\022\315\001\n\027addDat" + + "asetToExperiments\022\037.mlflow.AddDatasetToE" + + "xperiments\032(.mlflow.AddDatasetToExperime" + + "nts.Response\"g\362\206\031c\n;\n\004POST\022-/mlflow/data" + + "sets/{dataset_id}/add-experiments\032\004\010\003\020\000\020" + + "\003\030\350\007\030\272\027\030\001*\032Add Dataset to Experiments\022\344\001" + + "\n\034removeDatasetFromExperiments\022$.mlflow." + + "RemoveDatasetFromExperiments\032-.mlflow.Re" + + "moveDatasetFromExperiments.Response\"o\362\206\031" + + "k\n>\n\004POST\0220/mlflow/datasets/{dataset_id}" + + "/remove-experiments\032\004\010\003\020\000\020\003\030\350\007\030\272\027\030\001*\037Rem" + + "ove Dataset from ExperimentsB\036\n\024org.mlfl" + + "ow.api.proto\220\001\001\342?\002\020\001" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor .internalBuildGeneratedFileFrom(descriptorData, @@ -189610,6 +197527,72 @@ public org.mlflow.api.proto.Service.Scorer getDefaultInstanceForType() { com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( internal_static_mlflow_Scorer_descriptor, new java.lang.String[] { "ExperimentId", "ScorerName", "ScorerVersion", "SerializedScorer", "CreationTime", "ScorerId", }); + internal_static_mlflow_Workspace_descriptor = + getDescriptor().getMessageTypes().get(106); + internal_static_mlflow_Workspace_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_mlflow_Workspace_descriptor, + new java.lang.String[] { "Name", "Description", }); + internal_static_mlflow_ListWorkspaces_descriptor = + getDescriptor().getMessageTypes().get(107); + internal_static_mlflow_ListWorkspaces_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_mlflow_ListWorkspaces_descriptor, + new java.lang.String[] { }); + internal_static_mlflow_ListWorkspaces_Response_descriptor = + internal_static_mlflow_ListWorkspaces_descriptor.getNestedTypes().get(0); + internal_static_mlflow_ListWorkspaces_Response_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_mlflow_ListWorkspaces_Response_descriptor, + new java.lang.String[] { "Workspaces", }); + internal_static_mlflow_CreateWorkspace_descriptor = + getDescriptor().getMessageTypes().get(108); + internal_static_mlflow_CreateWorkspace_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_mlflow_CreateWorkspace_descriptor, + new java.lang.String[] { "Name", "Description", }); + internal_static_mlflow_CreateWorkspace_Response_descriptor = + internal_static_mlflow_CreateWorkspace_descriptor.getNestedTypes().get(0); + internal_static_mlflow_CreateWorkspace_Response_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_mlflow_CreateWorkspace_Response_descriptor, + new java.lang.String[] { "Workspace", }); + internal_static_mlflow_GetWorkspace_descriptor = + getDescriptor().getMessageTypes().get(109); + internal_static_mlflow_GetWorkspace_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_mlflow_GetWorkspace_descriptor, + new java.lang.String[] { "WorkspaceName", }); + internal_static_mlflow_GetWorkspace_Response_descriptor = + internal_static_mlflow_GetWorkspace_descriptor.getNestedTypes().get(0); + internal_static_mlflow_GetWorkspace_Response_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_mlflow_GetWorkspace_Response_descriptor, + new java.lang.String[] { "Workspace", }); + internal_static_mlflow_UpdateWorkspace_descriptor = + getDescriptor().getMessageTypes().get(110); + internal_static_mlflow_UpdateWorkspace_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_mlflow_UpdateWorkspace_descriptor, + new java.lang.String[] { "WorkspaceName", "Description", }); + internal_static_mlflow_UpdateWorkspace_Response_descriptor = + internal_static_mlflow_UpdateWorkspace_descriptor.getNestedTypes().get(0); + internal_static_mlflow_UpdateWorkspace_Response_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_mlflow_UpdateWorkspace_Response_descriptor, + new java.lang.String[] { "Workspace", }); + internal_static_mlflow_DeleteWorkspace_descriptor = + getDescriptor().getMessageTypes().get(111); + internal_static_mlflow_DeleteWorkspace_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_mlflow_DeleteWorkspace_descriptor, + new java.lang.String[] { "WorkspaceName", }); + internal_static_mlflow_DeleteWorkspace_Response_descriptor = + internal_static_mlflow_DeleteWorkspace_descriptor.getNestedTypes().get(0); + internal_static_mlflow_DeleteWorkspace_Response_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_mlflow_DeleteWorkspace_Response_descriptor, + new java.lang.String[] { }); com.google.protobuf.ExtensionRegistry registry = com.google.protobuf.ExtensionRegistry.newInstance(); registry.add(com.databricks.api.proto.databricks.Databricks.graphql); diff --git a/mlflow/protos/service.proto b/mlflow/protos/service.proto index 3b6b6349692d9..47225135b33ba 100644 --- a/mlflow/protos/service.proto +++ b/mlflow/protos/service.proto @@ -964,6 +964,92 @@ service MlflowService { }; } + // Workspace APIs + rpc listWorkspaces(ListWorkspaces) returns (ListWorkspaces.Response) { + option (rpc) = { + endpoints: [ + { + method: "GET" + path: "/mlflow/workspaces" + since: { + major: 2 + minor: 0 + } + } + ] + visibility: PUBLIC_UNDOCUMENTED + rpc_doc_title: "List Workspaces" + }; + } + + rpc createWorkspace(CreateWorkspace) returns (CreateWorkspace.Response) { + option (rpc) = { + endpoints: [ + { + method: "POST" + path: "/mlflow/workspaces" + since: { + major: 2 + minor: 0 + } + } + ] + visibility: PUBLIC_UNDOCUMENTED + rpc_doc_title: "Create Workspace" + }; + } + + rpc getWorkspace(GetWorkspace) returns (GetWorkspace.Response) { + option (rpc) = { + endpoints: [ + { + method: "GET" + path: "/mlflow/workspaces/{workspace_name}" + since: { + major: 2 + minor: 0 + } + } + ] + visibility: PUBLIC_UNDOCUMENTED + rpc_doc_title: "Get Workspace" + }; + } + + rpc updateWorkspace(UpdateWorkspace) returns (UpdateWorkspace.Response) { + option (rpc) = { + endpoints: [ + { + method: "PATCH" + path: "/mlflow/workspaces/{workspace_name}" + since: { + major: 2 + minor: 0 + } + } + ] + visibility: PUBLIC_UNDOCUMENTED + rpc_doc_title: "Update Workspace" + }; + } + + rpc deleteWorkspace(DeleteWorkspace) returns (DeleteWorkspace.Response) { + option (rpc) = { + endpoints: [ + { + method: "DELETE" + path: "/mlflow/workspaces/{workspace_name}" + since: { + major: 2 + minor: 0 + } + } + ] + visibility: PUBLIC_UNDOCUMENTED + rpc_doc_title: "Delete Workspace" + }; + } + rpc createLoggedModel(CreateLoggedModel) returns (CreateLoggedModel.Response) { option (rpc) = { endpoints: [ @@ -3572,3 +3658,77 @@ message Scorer { // The unique identifier for the scorer. optional string scorer_id = 6; } + +// Workspace metadata returned by workspace APIs. +message Workspace { + // The unique workspace name. + optional string name = 1 [(validate_required) = true]; + + // Optional workspace description. + optional string description = 2; +} + +// List workspaces available to the current principal. +message ListWorkspaces { + option (scalapb.message).extends = "com.databricks.rpc.RPC[$this.Response]"; + + message Response { + // Collection of workspace records. + repeated Workspace workspaces = 1; + } +} + +// Create a new workspace. +message CreateWorkspace { + option (scalapb.message).extends = "com.databricks.rpc.RPC[$this.Response]"; + + // Workspace name to create. + optional string name = 1 [(validate_required) = true]; + + // Optional workspace description. + optional string description = 2; + + message Response { + // Metadata describing the created workspace. + optional Workspace workspace = 1; + } +} + +// Retrieve workspace metadata. +message GetWorkspace { + option (scalapb.message).extends = "com.databricks.rpc.RPC[$this.Response]"; + + // Name of the workspace to fetch. + optional string workspace_name = 1 [(validate_required) = true]; + + message Response { + // Metadata describing the requested workspace. + optional Workspace workspace = 1; + } +} + +// Update workspace metadata. +message UpdateWorkspace { + option (scalapb.message).extends = "com.databricks.rpc.RPC[$this.Response]"; + + // Name of the workspace to update. + optional string workspace_name = 1 [(validate_required) = true]; + + // Optional description update. + optional string description = 2; + + message Response { + // Metadata describing the updated workspace. + optional Workspace workspace = 1; + } +} + +// Delete a workspace. +message DeleteWorkspace { + option (scalapb.message).extends = "com.databricks.rpc.RPC[$this.Response]"; + + // Name of the workspace to delete. + optional string workspace_name = 1 [(validate_required) = true]; + + message Response {} +} diff --git a/mlflow/protos/service_pb2.py b/mlflow/protos/service_pb2.py index 9f9b4f1b04adf..aac26d5947d51 100644 --- a/mlflow/protos/service_pb2.py +++ b/mlflow/protos/service_pb2.py @@ -26,7 +26,7 @@ from .scalapb import scalapb_pb2 as scalapb_dot_scalapb__pb2 - DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\rservice.proto\x12\x06mlflow\x1a\x11\x61ssessments.proto\x1a\x10\x64\x61tabricks.proto\x1a\x0e\x64\x61tasets.proto\x1a\x1egoogle/protobuf/duration.proto\x1a google/protobuf/field_mask.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a(opentelemetry/proto/trace/v1/trace.proto\x1a\x15scalapb/scalapb.proto\"\xb0\x01\n\x06Metric\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x01\x12\x11\n\ttimestamp\x18\x03 \x01(\x03\x12\x0f\n\x04step\x18\x04 \x01(\x03:\x01\x30\x12\x1a\n\x0c\x64\x61taset_name\x18\x05 \x01(\tB\x04\xf0\x86\x19\x03\x12\x1c\n\x0e\x64\x61taset_digest\x18\x06 \x01(\tB\x04\xf0\x86\x19\x03\x12\x16\n\x08model_id\x18\x07 \x01(\tB\x04\xf0\x86\x19\x03\x12\x14\n\x06run_id\x18\x08 \x01(\tB\x04\xf0\x86\x19\x03\"#\n\x05Param\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\x8b\x01\n\x03Run\x12\x1d\n\x04info\x18\x01 \x01(\x0b\x32\x0f.mlflow.RunInfo\x12\x1d\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x0f.mlflow.RunData\x12!\n\x06inputs\x18\x03 \x01(\x0b\x32\x11.mlflow.RunInputs\x12#\n\x07outputs\x18\x04 \x01(\x0b\x32\x12.mlflow.RunOutputs\"g\n\x07RunData\x12\x1f\n\x07metrics\x18\x01 \x03(\x0b\x32\x0e.mlflow.Metric\x12\x1d\n\x06params\x18\x02 \x03(\x0b\x32\r.mlflow.Param\x12\x1c\n\x04tags\x18\x03 \x03(\x0b\x32\x0e.mlflow.RunTag\"c\n\tRunInputs\x12,\n\x0e\x64\x61taset_inputs\x18\x01 \x03(\x0b\x32\x14.mlflow.DatasetInput\x12(\n\x0cmodel_inputs\x18\x02 \x03(\x0b\x32\x12.mlflow.ModelInput\"8\n\nRunOutputs\x12*\n\rmodel_outputs\x18\x01 \x03(\x0b\x32\x13.mlflow.ModelOutput\"$\n\x06RunTag\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"+\n\rExperimentTag\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\xdd\x01\n\x07RunInfo\x12\x0e\n\x06run_id\x18\x0f \x01(\t\x12\x10\n\x08run_uuid\x18\x01 \x01(\t\x12\x10\n\x08run_name\x18\x03 \x01(\t\x12\x15\n\rexperiment_id\x18\x02 \x01(\t\x12\x0f\n\x07user_id\x18\x06 \x01(\t\x12!\n\x06status\x18\x07 \x01(\x0e\x32\x11.mlflow.RunStatus\x12\x12\n\nstart_time\x18\x08 \x01(\x03\x12\x10\n\x08\x65nd_time\x18\t \x01(\x03\x12\x14\n\x0c\x61rtifact_uri\x18\r \x01(\t\x12\x17\n\x0flifecycle_stage\x18\x0e \x01(\t\"\xbb\x01\n\nExperiment\x12\x15\n\rexperiment_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x19\n\x11\x61rtifact_location\x18\x03 \x01(\t\x12\x17\n\x0flifecycle_stage\x18\x04 \x01(\t\x12\x18\n\x10last_update_time\x18\x05 \x01(\x03\x12\x15\n\rcreation_time\x18\x06 \x01(\x03\x12#\n\x04tags\x18\x07 \x03(\x0b\x32\x15.mlflow.ExperimentTag\"V\n\x0c\x44\x61tasetInput\x12\x1e\n\x04tags\x18\x01 \x03(\x0b\x32\x10.mlflow.InputTag\x12&\n\x07\x64\x61taset\x18\x02 \x01(\x0b\x32\x0f.mlflow.DatasetB\x04\xf8\x86\x19\x01\"$\n\nModelInput\x12\x16\n\x08model_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\"2\n\x08InputTag\x12\x11\n\x03key\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x13\n\x05value\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\"\x85\x01\n\x07\x44\x61taset\x12\x12\n\x04name\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x14\n\x06\x64igest\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12\x19\n\x0bsource_type\x18\x03 \x01(\tB\x04\xf8\x86\x19\x01\x12\x14\n\x06source\x18\x04 \x01(\tB\x04\xf8\x86\x19\x01\x12\x0e\n\x06schema\x18\x05 \x01(\t\x12\x0f\n\x07profile\x18\x06 \x01(\t\"9\n\x0bModelOutput\x12\x16\n\x08model_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x12\n\x04step\x18\x02 \x01(\x03\x42\x04\xf8\x86\x19\x01\"\xb6\x01\n\x10\x43reateExperiment\x12\x12\n\x04name\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x19\n\x11\x61rtifact_location\x18\x02 \x01(\t\x12#\n\x04tags\x18\x03 \x03(\x0b\x32\x15.mlflow.ExperimentTag\x1a!\n\x08Response\x12\x15\n\rexperiment_id\x18\x01 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xfe\x01\n\x11SearchExperiments\x12\x13\n\x0bmax_results\x18\x01 \x01(\x03\x12\x12\n\npage_token\x18\x02 \x01(\t\x12\x0e\n\x06\x66ilter\x18\x03 \x01(\t\x12\x10\n\x08order_by\x18\x04 \x03(\t\x12#\n\tview_type\x18\x05 \x01(\x0e\x32\x10.mlflow.ViewType\x1aL\n\x08Response\x12\'\n\x0b\x65xperiments\x18\x01 \x03(\x0b\x32\x12.mlflow.Experiment\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x8d\x01\n\rGetExperiment\x12\x1b\n\rexperiment_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a\x32\n\x08Response\x12&\n\nexperiment\x18\x01 \x01(\x0b\x32\x12.mlflow.Experiment:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"h\n\x10\x44\x65leteExperiment\x12\x1b\n\rexperiment_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"i\n\x11RestoreExperiment\x12\x1b\n\rexperiment_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"z\n\x10UpdateExperiment\x12\x1b\n\rexperiment_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x10\n\x08new_name\x18\x02 \x01(\t\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xca\x01\n\tCreateRun\x12\x15\n\rexperiment_id\x18\x01 \x01(\t\x12\x0f\n\x07user_id\x18\x02 \x01(\t\x12\x10\n\x08run_name\x18\x03 \x01(\t\x12\x12\n\nstart_time\x18\x07 \x01(\x03\x12\x1c\n\x04tags\x18\t \x03(\x0b\x32\x0e.mlflow.RunTag\x1a$\n\x08Response\x12\x18\n\x03run\x18\x01 \x01(\x0b\x32\x0b.mlflow.Run:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xd0\x01\n\tUpdateRun\x12\x0e\n\x06run_id\x18\x04 \x01(\t\x12\x10\n\x08run_uuid\x18\x01 \x01(\t\x12!\n\x06status\x18\x02 \x01(\x0e\x32\x11.mlflow.RunStatus\x12\x10\n\x08\x65nd_time\x18\x03 \x01(\x03\x12\x10\n\x08run_name\x18\x05 \x01(\t\x1a-\n\x08Response\x12!\n\x08run_info\x18\x01 \x01(\x0b\x32\x0f.mlflow.RunInfo:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"Z\n\tDeleteRun\x12\x14\n\x06run_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"[\n\nRestoreRun\x12\x14\n\x06run_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x8a\x02\n\tLogMetric\x12\x0e\n\x06run_id\x18\x06 \x01(\t\x12\x10\n\x08run_uuid\x18\x01 \x01(\t\x12\x11\n\x03key\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12\x13\n\x05value\x18\x03 \x01(\x01\x42\x04\xf8\x86\x19\x01\x12\x17\n\ttimestamp\x18\x04 \x01(\x03\x42\x04\xf8\x86\x19\x01\x12\x0f\n\x04step\x18\x05 \x01(\x03:\x01\x30\x12\x16\n\x08model_id\x18\x07 \x01(\tB\x04\xf0\x86\x19\x03\x12\x1a\n\x0c\x64\x61taset_name\x18\x08 \x01(\tB\x04\xf0\x86\x19\x03\x12\x1c\n\x0e\x64\x61taset_digest\x18\t \x01(\tB\x04\xf0\x86\x19\x03\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x8d\x01\n\x08LogParam\x12\x0e\n\x06run_id\x18\x04 \x01(\t\x12\x10\n\x08run_uuid\x18\x01 \x01(\t\x12\x11\n\x03key\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12\x13\n\x05value\x18\x03 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x90\x01\n\x10SetExperimentTag\x12\x1b\n\rexperiment_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x11\n\x03key\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12\x13\n\x05value\x18\x03 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"~\n\x13\x44\x65leteExperimentTag\x12\x1b\n\rexperiment_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x11\n\x03key\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x8b\x01\n\x06SetTag\x12\x0e\n\x06run_id\x18\x04 \x01(\t\x12\x10\n\x08run_uuid\x18\x01 \x01(\t\x12\x11\n\x03key\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12\x13\n\x05value\x18\x03 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"m\n\tDeleteTag\x12\x14\n\x06run_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x11\n\x03key\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"}\n\x06GetRun\x12\x0e\n\x06run_id\x18\x02 \x01(\t\x12\x10\n\x08run_uuid\x18\x01 \x01(\t\x1a$\n\x08Response\x12\x18\n\x03run\x18\x01 \x01(\x0b\x32\x0b.mlflow.Run:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x98\x02\n\nSearchRuns\x12\x16\n\x0e\x65xperiment_ids\x18\x01 \x03(\t\x12\x0e\n\x06\x66ilter\x18\x04 \x01(\t\x12\x34\n\rrun_view_type\x18\x03 \x01(\x0e\x32\x10.mlflow.ViewType:\x0b\x41\x43TIVE_ONLY\x12\x19\n\x0bmax_results\x18\x05 \x01(\x05:\x04\x31\x30\x30\x30\x12\x10\n\x08order_by\x18\x06 \x03(\t\x12\x12\n\npage_token\x18\x07 \x01(\t\x1a>\n\x08Response\x12\x19\n\x04runs\x18\x01 \x03(\x0b\x32\x0b.mlflow.Run\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xd8\x01\n\rListArtifacts\x12\x0e\n\x06run_id\x18\x03 \x01(\t\x12\x10\n\x08run_uuid\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\x12\x12\n\npage_token\x18\x04 \x01(\t\x1aV\n\x08Response\x12\x10\n\x08root_uri\x18\x01 \x01(\t\x12\x1f\n\x05\x66iles\x18\x02 \x03(\x0b\x32\x10.mlflow.FileInfo\x12\x17\n\x0fnext_page_token\x18\x03 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\";\n\x08\x46ileInfo\x12\x0c\n\x04path\x18\x01 \x01(\t\x12\x0e\n\x06is_dir\x18\x02 \x01(\x08\x12\x11\n\tfile_size\x18\x03 \x01(\x03\"\xea\x01\n\x10GetMetricHistory\x12\x0e\n\x06run_id\x18\x03 \x01(\t\x12\x10\n\x08run_uuid\x18\x01 \x01(\t\x12\x18\n\nmetric_key\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12\x12\n\npage_token\x18\x04 \x01(\t\x12\x13\n\x0bmax_results\x18\x05 \x01(\x05\x1a\x44\n\x08Response\x12\x1f\n\x07metrics\x18\x01 \x03(\x0b\x32\x0e.mlflow.Metric\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"a\n\x0fMetricWithRunId\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x01\x12\x11\n\ttimestamp\x18\x03 \x01(\x03\x12\x0f\n\x04step\x18\x04 \x01(\x03:\x01\x30\x12\x0e\n\x06run_id\x18\x05 \x01(\t\"\xe7\x01\n\x1cGetMetricHistoryBulkInterval\x12\x0f\n\x07run_ids\x18\x01 \x03(\t\x12\x18\n\nmetric_key\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12\x12\n\nstart_step\x18\x03 \x01(\x05\x12\x10\n\x08\x65nd_step\x18\x04 \x01(\x05\x12\x13\n\x0bmax_results\x18\x05 \x01(\x05\x1a\x34\n\x08Response\x12(\n\x07metrics\x18\x01 \x03(\x0b\x32\x17.mlflow.MetricWithRunId:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xb1\x01\n\x08LogBatch\x12\x0e\n\x06run_id\x18\x01 \x01(\t\x12\x1f\n\x07metrics\x18\x02 \x03(\x0b\x32\x0e.mlflow.Metric\x12\x1d\n\x06params\x18\x03 \x03(\x0b\x32\r.mlflow.Param\x12\x1c\n\x04tags\x18\x04 \x03(\x0b\x32\x0e.mlflow.RunTag\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"g\n\x08LogModel\x12\x0e\n\x06run_id\x18\x01 \x01(\t\x12\x12\n\nmodel_json\x18\x02 \x01(\t\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xac\x01\n\tLogInputs\x12\x14\n\x06run_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12&\n\x08\x64\x61tasets\x18\x02 \x03(\x0b\x32\x14.mlflow.DatasetInput\x12(\n\x06models\x18\x03 \x03(\x0b\x32\x12.mlflow.ModelInputB\x04\xf0\x86\x19\x03\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x80\x01\n\nLogOutputs\x12\x14\n\x06run_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12#\n\x06models\x18\x02 \x03(\x0b\x32\x13.mlflow.ModelOutput\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x95\x01\n\x13GetExperimentByName\x12\x1d\n\x0f\x65xperiment_name\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a\x32\n\x08Response\x12&\n\nexperiment\x18\x01 \x01(\x0b\x32\x12.mlflow.Experiment:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xb9\x01\n\x10\x43reateAssessment\x12\x38\n\nassessment\x18\x01 \x01(\x0b\x32\x1e.mlflow.assessments.AssessmentB\x04\xf8\x86\x19\x01\x1a>\n\x08Response\x12\x32\n\nassessment\x18\x01 \x01(\x0b\x32\x1e.mlflow.assessments.Assessment:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xf0\x01\n\x10UpdateAssessment\x12\x38\n\nassessment\x18\x01 \x01(\x0b\x32\x1e.mlflow.assessments.AssessmentB\x04\xf8\x86\x19\x01\x12\x35\n\x0bupdate_mask\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskB\x04\xf8\x86\x19\x01\x1a>\n\x08Response\x12\x32\n\nassessment\x18\x01 \x01(\x0b\x32\x1e.mlflow.assessments.Assessment:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x80\x01\n\x10\x44\x65leteAssessment\x12\x16\n\x08trace_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x1b\n\rassessment_id\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xb8\x01\n\x14GetAssessmentRequest\x12\x16\n\x08trace_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x1b\n\rassessment_id\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x1a>\n\x08Response\x12\x32\n\nassessment\x18\x01 \x01(\x0b\x32\x1e.mlflow.assessments.Assessment:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xe4\x01\n\tTraceInfo\x12\x12\n\nrequest_id\x18\x01 \x01(\t\x12\x15\n\rexperiment_id\x18\x02 \x01(\t\x12\x14\n\x0ctimestamp_ms\x18\x03 \x01(\x03\x12\x19\n\x11\x65xecution_time_ms\x18\x04 \x01(\x03\x12#\n\x06status\x18\x05 \x01(\x0e\x32\x13.mlflow.TraceStatus\x12\x36\n\x10request_metadata\x18\x06 \x03(\x0b\x32\x1c.mlflow.TraceRequestMetadata\x12\x1e\n\x04tags\x18\x07 \x03(\x0b\x32\x10.mlflow.TraceTag\"2\n\x14TraceRequestMetadata\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"&\n\x08TraceTag\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\xf1\x01\n\nStartTrace\x12\x15\n\rexperiment_id\x18\x01 \x01(\t\x12\x14\n\x0ctimestamp_ms\x18\x02 \x01(\x03\x12\x36\n\x10request_metadata\x18\x03 \x03(\x0b\x32\x1c.mlflow.TraceRequestMetadata\x12\x1e\n\x04tags\x18\x04 \x03(\x0b\x32\x10.mlflow.TraceTag\x1a\x31\n\x08Response\x12%\n\ntrace_info\x18\x01 \x01(\x0b\x32\x11.mlflow.TraceInfo:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x91\x02\n\x08\x45ndTrace\x12\x12\n\nrequest_id\x18\x01 \x01(\t\x12\x14\n\x0ctimestamp_ms\x18\x02 \x01(\x03\x12#\n\x06status\x18\x03 \x01(\x0e\x32\x13.mlflow.TraceStatus\x12\x36\n\x10request_metadata\x18\x04 \x03(\x0b\x32\x1c.mlflow.TraceRequestMetadata\x12\x1e\n\x04tags\x18\x05 \x03(\x0b\x32\x10.mlflow.TraceTag\x1a\x31\n\x08Response\x12%\n\ntrace_info\x18\x01 \x01(\x0b\x32\x11.mlflow.TraceInfo:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x82\x01\n\x0cGetTraceInfo\x12\x12\n\nrequest_id\x18\x01 \x01(\t\x1a\x31\n\x08Response\x12%\n\ntrace_info\x18\x01 \x01(\x0b\x32\x11.mlflow.TraceInfo:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"y\n\x0eGetTraceInfoV3\x12\x10\n\x08trace_id\x18\x01 \x01(\t\x1a(\n\x08Response\x12\x1c\n\x05trace\x18\x01 \x01(\x0b\x32\r.mlflow.Trace:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"{\n\x0e\x42\x61tchGetTraces\x12\x11\n\ttrace_ids\x18\x01 \x03(\t\x1a)\n\x08Response\x12\x1d\n\x06traces\x18\x01 \x03(\x0b\x32\r.mlflow.Trace:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x97\x01\n\x08GetTrace\x12\x16\n\x08trace_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x1c\n\rallow_partial\x18\x02 \x01(\x08:\x05\x66\x61lse\x1a(\n\x08Response\x12\x1c\n\x05trace\x18\x01 \x01(\x0b\x32\r.mlflow.Trace:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xeb\x01\n\x0cSearchTraces\x12\x16\n\x0e\x65xperiment_ids\x18\x01 \x03(\t\x12\x0e\n\x06\x66ilter\x18\x02 \x01(\t\x12\x18\n\x0bmax_results\x18\x03 \x01(\x05:\x03\x31\x30\x30\x12\x10\n\x08order_by\x18\x04 \x03(\t\x12\x12\n\npage_token\x18\x05 \x01(\t\x1a\x46\n\x08Response\x12!\n\x06traces\x18\x01 \x03(\x0b\x32\x11.mlflow.TraceInfo\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xaa\x02\n\x13SearchUnifiedTraces\x12\x16\n\x08model_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x1e\n\x10sql_warehouse_id\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12\x16\n\x0e\x65xperiment_ids\x18\x03 \x03(\t\x12\x0e\n\x06\x66ilter\x18\x04 \x01(\t\x12\x18\n\x0bmax_results\x18\x05 \x01(\x05:\x03\x31\x30\x30\x12\x10\n\x08order_by\x18\x06 \x03(\t\x12\x12\n\npage_token\x18\x07 \x01(\t\x1a\x46\n\x08Response\x12!\n\x06traces\x18\x01 \x03(\x0b\x32\x11.mlflow.TraceInfo\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xc1\x01\n\x15GetOnlineTraceDetails\x12\x16\n\x08trace_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x1e\n\x10sql_warehouse_id\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12$\n\x16source_inference_table\x18\x03 \x01(\tB\x04\xf8\x86\x19\x01\x12*\n\x1csource_databricks_request_id\x18\x04 \x01(\tB\x04\xf8\x86\x19\x01\x1a\x1e\n\x08Response\x12\x12\n\ntrace_data\x18\x01 \x01(\t\"\xc3\x01\n\x0c\x44\x65leteTraces\x12\x1b\n\rexperiment_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x1c\n\x14max_timestamp_millis\x18\x02 \x01(\x03\x12\x12\n\nmax_traces\x18\x03 \x01(\x05\x12\x13\n\x0brequest_ids\x18\x04 \x03(\t\x1a\"\n\x08Response\x12\x16\n\x0etraces_deleted\x18\x01 \x01(\x05:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xc5\x01\n\x0e\x44\x65leteTracesV3\x12\x1b\n\rexperiment_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x1c\n\x14max_timestamp_millis\x18\x02 \x01(\x03\x12\x12\n\nmax_traces\x18\x03 \x01(\x05\x12\x13\n\x0brequest_ids\x18\x04 \x03(\t\x1a\"\n\x08Response\x12\x16\n\x0etraces_deleted\x18\x01 \x01(\x05:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xb5\x02\n\x1f\x43\x61lculateTraceFilterCorrelation\x12\x16\n\x0e\x65xperiment_ids\x18\x01 \x03(\t\x12\x16\n\x0e\x66ilter_string1\x18\x02 \x01(\t\x12\x16\n\x0e\x66ilter_string2\x18\x03 \x01(\t\x12\x13\n\x0b\x62\x61se_filter\x18\x04 \x01(\t\x1a\x87\x01\n\x08Response\x12\x0c\n\x04npmi\x18\x01 \x01(\x01\x12\x15\n\rnpmi_smoothed\x18\x02 \x01(\x01\x12\x15\n\rfilter1_count\x18\x03 \x01(\x05\x12\x15\n\rfilter2_count\x18\x04 \x01(\x05\x12\x13\n\x0bjoint_count\x18\x05 \x01(\x05\x12\x13\n\x0btotal_count\x18\x06 \x01(\x05:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"v\n\x0bSetTraceTag\x12\x12\n\nrequest_id\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\x12\r\n\x05value\x18\x03 \x01(\t\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x88\x01\n\rSetTraceTagV3\x12\x10\n\x08trace_id\x18\x04 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\x12\r\n\x05value\x18\x03 \x01(\t\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]J\x04\x08\x01\x10\x02R\nrequest_id\"z\n\x0e\x44\x65leteTraceTag\x12\x10\n\x08trace_id\x18\x03 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]J\x04\x08\x01\x10\x02R\nrequest_id\"l\n\x10\x44\x65leteTraceTagV3\x12\x12\n\nrequest_id\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"c\n\x05Trace\x12\'\n\ntrace_info\x18\x01 \x01(\x0b\x32\x13.mlflow.TraceInfoV3\x12\x31\n\x05spans\x18\x02 \x03(\x0b\x32\".opentelemetry.proto.trace.v1.Span\"\xb6\x03\n\rTraceLocation\x12\x35\n\x04type\x18\x01 \x01(\x0e\x32\'.mlflow.TraceLocation.TraceLocationType\x12K\n\x11mlflow_experiment\x18\x02 \x01(\x0b\x32..mlflow.TraceLocation.MlflowExperimentLocationH\x00\x12G\n\x0finference_table\x18\x03 \x01(\x0b\x32,.mlflow.TraceLocation.InferenceTableLocationH\x00\x1a\x31\n\x18MlflowExperimentLocation\x12\x15\n\rexperiment_id\x18\x01 \x01(\t\x1a\x31\n\x16InferenceTableLocation\x12\x17\n\x0f\x66ull_table_name\x18\x01 \x01(\t\"d\n\x11TraceLocationType\x12#\n\x1fTRACE_LOCATION_TYPE_UNSPECIFIED\x10\x00\x12\x15\n\x11MLFLOW_EXPERIMENT\x10\x01\x12\x13\n\x0fINFERENCE_TABLE\x10\x02\x42\x0c\n\nidentifier\"\x9b\x05\n\x0bTraceInfoV3\x12\x10\n\x08trace_id\x18\x01 \x01(\t\x12\x19\n\x11\x63lient_request_id\x18\x02 \x01(\t\x12-\n\x0etrace_location\x18\x03 \x01(\x0b\x32\x15.mlflow.TraceLocation\x12\x0f\n\x07request\x18\x04 \x01(\t\x12\x10\n\x08response\x18\x05 \x01(\t\x12\x17\n\x0frequest_preview\x18\x0c \x01(\t\x12\x18\n\x10response_preview\x18\r \x01(\t\x12\x30\n\x0crequest_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x35\n\x12\x65xecution_duration\x18\x07 \x01(\x0b\x32\x19.google.protobuf.Duration\x12(\n\x05state\x18\x08 \x01(\x0e\x32\x19.mlflow.TraceInfoV3.State\x12>\n\x0etrace_metadata\x18\t \x03(\x0b\x32&.mlflow.TraceInfoV3.TraceMetadataEntry\x12\x33\n\x0b\x61ssessments\x18\n \x03(\x0b\x32\x1e.mlflow.assessments.Assessment\x12+\n\x04tags\x18\x0b \x03(\x0b\x32\x1d.mlflow.TraceInfoV3.TagsEntry\x1a\x34\n\x12TraceMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a+\n\tTagsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"B\n\x05State\x12\x15\n\x11STATE_UNSPECIFIED\x10\x00\x12\x06\n\x02OK\x10\x01\x12\t\n\x05\x45RROR\x10\x02\x12\x0f\n\x0bIN_PROGRESS\x10\x03\"\\\n\x0cStartTraceV3\x12\"\n\x05trace\x18\x01 \x01(\x0b\x32\r.mlflow.TraceB\x04\xf8\x86\x19\x01\x1a(\n\x08Response\x12\x1c\n\x05trace\x18\x01 \x01(\x0b\x32\r.mlflow.Trace\"F\n\x0fLinkTracesToRun\x12\x11\n\ttrace_ids\x18\x01 \x03(\t\x12\x14\n\x06run_id\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response\"h\n\x0e\x44\x61tasetSummary\x12\x1b\n\rexperiment_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x12\n\x04name\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12\x14\n\x06\x64igest\x18\x03 \x01(\tB\x04\xf8\x86\x19\x01\x12\x0f\n\x07\x63ontext\x18\x04 \x01(\t\"\x94\x01\n\x0eSearchDatasets\x12\x16\n\x0e\x65xperiment_ids\x18\x01 \x03(\t\x1a=\n\x08Response\x12\x31\n\x11\x64\x61taset_summaries\x18\x01 \x03(\x0b\x32\x16.mlflow.DatasetSummary:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x9a\x02\n\x11\x43reateLoggedModel\x12\x1b\n\rexperiment_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x12\n\nmodel_type\x18\x03 \x01(\t\x12\x15\n\rsource_run_id\x18\x04 \x01(\t\x12,\n\x06params\x18\x05 \x03(\x0b\x32\x1c.mlflow.LoggedModelParameter\x12$\n\x04tags\x18\x06 \x03(\x0b\x32\x16.mlflow.LoggedModelTag\x1a.\n\x08Response\x12\"\n\x05model\x18\x01 \x01(\x0b\x32\x13.mlflow.LoggedModel:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xbb\x01\n\x13\x46inalizeLoggedModel\x12\x16\n\x08model_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12/\n\x06status\x18\x02 \x01(\x0e\x32\x19.mlflow.LoggedModelStatusB\x04\xf8\x86\x19\x01\x1a.\n\x08Response\x12\"\n\x05model\x18\x01 \x01(\x0b\x32\x13.mlflow.LoggedModel:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x85\x01\n\x0eGetLoggedModel\x12\x16\n\x08model_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a.\n\x08Response\x12\"\n\x05model\x18\x01 \x01(\x0b\x32\x13.mlflow.LoggedModel:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"d\n\x11\x44\x65leteLoggedModel\x12\x16\n\x08model_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xf7\x03\n\x12SearchLoggedModels\x12\x16\n\x0e\x65xperiment_ids\x18\x01 \x03(\t\x12\x0e\n\x06\x66ilter\x18\x02 \x01(\t\x12\x34\n\x08\x64\x61tasets\x18\x06 \x03(\x0b\x32\".mlflow.SearchLoggedModels.Dataset\x12\x17\n\x0bmax_results\x18\x03 \x01(\x05:\x02\x35\x30\x12\x34\n\x08order_by\x18\x04 \x03(\x0b\x32\".mlflow.SearchLoggedModels.OrderBy\x12\x12\n\npage_token\x18\x05 \x01(\t\x1a=\n\x07\x44\x61taset\x12\x1a\n\x0c\x64\x61taset_name\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x16\n\x0e\x64\x61taset_digest\x18\x02 \x01(\t\x1aj\n\x07OrderBy\x12\x18\n\nfield_name\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x17\n\tascending\x18\x02 \x01(\x08:\x04true\x12\x14\n\x0c\x64\x61taset_name\x18\x03 \x01(\t\x12\x16\n\x0e\x64\x61taset_digest\x18\x04 \x01(\t\x1aH\n\x08Response\x12#\n\x06models\x18\x01 \x03(\x0b\x32\x13.mlflow.LoggedModel\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xaf\x01\n\x12SetLoggedModelTags\x12\x16\n\x08model_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12$\n\x04tags\x18\x02 \x03(\x0b\x32\x16.mlflow.LoggedModelTag\x1a.\n\x08Response\x12\"\n\x05model\x18\x01 \x01(\x0b\x32\x13.mlflow.LoggedModel:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"~\n\x14\x44\x65leteLoggedModelTag\x12\x16\n\x08model_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x15\n\x07tag_key\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xec\x01\n\x18ListLoggedModelArtifacts\x12\x16\n\x08model_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x1f\n\x17\x61rtifact_directory_path\x18\x02 \x01(\t\x12\x12\n\npage_token\x18\x03 \x01(\t\x1aV\n\x08Response\x12\x10\n\x08root_uri\x18\x01 \x01(\t\x12\x1f\n\x05\x66iles\x18\x02 \x03(\x0b\x32\x10.mlflow.FileInfo\x12\x17\n\x0fnext_page_token\x18\x03 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x9c\x01\n\x1bLogLoggedModelParamsRequest\x12\x16\n\x08model_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12,\n\x06params\x18\x02 \x03(\x0b\x32\x1c.mlflow.LoggedModelParameter\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"[\n\x0bLoggedModel\x12%\n\x04info\x18\x01 \x01(\x0b\x32\x17.mlflow.LoggedModelInfo\x12%\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x17.mlflow.LoggedModelData\"\x84\x03\n\x0fLoggedModelInfo\x12\x10\n\x08model_id\x18\x01 \x01(\t\x12\x15\n\rexperiment_id\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x1d\n\x15\x63reation_timestamp_ms\x18\x04 \x01(\x03\x12!\n\x19last_updated_timestamp_ms\x18\x05 \x01(\x03\x12\x14\n\x0c\x61rtifact_uri\x18\x06 \x01(\t\x12)\n\x06status\x18\x07 \x01(\x0e\x32\x19.mlflow.LoggedModelStatus\x12\x12\n\ncreator_id\x18\x08 \x01(\x03\x12\x12\n\nmodel_type\x18\t \x01(\t\x12\x15\n\rsource_run_id\x18\n \x01(\t\x12\x16\n\x0estatus_message\x18\x0b \x01(\t\x12$\n\x04tags\x18\x0c \x03(\x0b\x32\x16.mlflow.LoggedModelTag\x12:\n\rregistrations\x18\r \x03(\x0b\x32#.mlflow.LoggedModelRegistrationInfo\",\n\x0eLoggedModelTag\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"<\n\x1bLoggedModelRegistrationInfo\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\t\"`\n\x0fLoggedModelData\x12,\n\x06params\x18\x01 \x03(\x0b\x32\x1c.mlflow.LoggedModelParameter\x12\x1f\n\x07metrics\x18\x02 \x03(\x0b\x32\x0e.mlflow.Metric\"2\n\x14LoggedModelParameter\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\x81\x02\n\x0eSearchTracesV3\x12(\n\tlocations\x18\x01 \x03(\x0b\x32\x15.mlflow.TraceLocation\x12\x0e\n\x06\x66ilter\x18\x02 \x01(\t\x12\x18\n\x0bmax_results\x18\x03 \x01(\x05:\x03\x31\x30\x30\x12\x10\n\x08order_by\x18\x04 \x03(\t\x12\x12\n\npage_token\x18\x05 \x01(\t\x1aH\n\x08Response\x12#\n\x06traces\x18\x01 \x03(\x0b\x32\x13.mlflow.TraceInfoV3\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xb8\x02\n\rCreateDataset\x12\x12\n\x04name\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x16\n\x0e\x65xperiment_ids\x18\x02 \x03(\t\x12\x44\n\x0bsource_type\x18\x03 \x01(\x0e\x32/.mlflow.datasets.DatasetRecordSource.SourceType\x12\x0e\n\x06source\x18\x04 \x01(\t\x12\x0e\n\x06schema\x18\x05 \x01(\t\x12\x0f\n\x07profile\x18\x06 \x01(\t\x12\x12\n\ncreated_by\x18\x07 \x01(\t\x12\x0c\n\x04tags\x18\x08 \x01(\t\x1a\x35\n\x08Response\x12)\n\x07\x64\x61taset\x18\x01 \x01(\x0b\x32\x18.mlflow.datasets.Dataset:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xb7\x01\n\nGetDataset\x12\x18\n\ndataset_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x12\n\npage_token\x18\x02 \x01(\t\x1aN\n\x08Response\x12)\n\x07\x64\x61taset\x18\x01 \x01(\x0b\x32\x18.mlflow.datasets.Dataset\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"b\n\rDeleteDataset\x12\x18\n\ndataset_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x88\x02\n\x18SearchEvaluationDatasets\x12\x16\n\x0e\x65xperiment_ids\x18\x01 \x03(\t\x12\x15\n\rfilter_string\x18\x02 \x01(\t\x12\x19\n\x0bmax_results\x18\x03 \x01(\x05:\x04\x31\x30\x30\x30\x12\x10\n\x08order_by\x18\x04 \x03(\t\x12\x12\n\npage_token\x18\x05 \x01(\t\x1aO\n\x08Response\x12*\n\x08\x64\x61tasets\x18\x01 \x03(\x0b\x32\x18.mlflow.datasets.Dataset\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xa2\x01\n\x0eSetDatasetTags\x12\x18\n\ndataset_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x12\n\x04tags\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x1a\x35\n\x08Response\x12)\n\x07\x64\x61taset\x18\x01 \x01(\x0b\x32\x18.mlflow.datasets.Dataset:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"x\n\x10\x44\x65leteDatasetTag\x12\x18\n\ndataset_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x11\n\x03key\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xc3\x01\n\x14UpsertDatasetRecords\x12\x18\n\ndataset_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x15\n\x07records\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12\x12\n\nupdated_by\x18\x03 \x01(\t\x1a\x39\n\x08Response\x12\x16\n\x0einserted_count\x18\x01 \x01(\x05\x12\x15\n\rupdated_count\x18\x02 \x01(\x05:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x84\x01\n\x17GetDatasetExperimentIds\x12\x18\n\ndataset_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a\"\n\x08Response\x12\x16\n\x0e\x65xperiment_ids\x18\x01 \x03(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xbf\x01\n\x11GetDatasetRecords\x12\x18\n\ndataset_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x19\n\x0bmax_results\x18\x02 \x01(\x05:\x04\x31\x30\x30\x30\x12\x12\n\npage_token\x18\x03 \x01(\t\x1a\x34\n\x08Response\x12\x0f\n\x07records\x18\x01 \x01(\t\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xaf\x01\n\x17\x41\x64\x64\x44\x61tasetToExperiments\x12\x18\n\ndataset_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x16\n\x0e\x65xperiment_ids\x18\x02 \x03(\t\x1a\x35\n\x08Response\x12)\n\x07\x64\x61taset\x18\x01 \x01(\x0b\x32\x18.mlflow.datasets.Dataset:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xb4\x01\n\x1cRemoveDatasetFromExperiments\x12\x18\n\ndataset_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x16\n\x0e\x65xperiment_ids\x18\x02 \x03(\t\x1a\x35\n\x08Response\x12)\n\x07\x64\x61taset\x18\x01 \x01(\x0b\x32\x18.mlflow.datasets.Dataset:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x85\x02\n\x0eRegisterScorer\x12\x15\n\rexperiment_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x19\n\x11serialized_scorer\x18\x03 \x01(\t\x1a\x85\x01\n\x08Response\x12\x0f\n\x07version\x18\x01 \x01(\x05\x12\x11\n\tscorer_id\x18\x02 \x01(\t\x12\x15\n\rexperiment_id\x18\x03 \x01(\t\x12\x0c\n\x04name\x18\x04 \x01(\t\x12\x19\n\x11serialized_scorer\x18\x05 \x01(\t\x12\x15\n\rcreation_time\x18\x06 \x01(\x03:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"~\n\x0bListScorers\x12\x15\n\rexperiment_id\x18\x01 \x01(\t\x1a+\n\x08Response\x12\x1f\n\x07scorers\x18\x01 \x03(\x0b\x32\x0e.mlflow.Scorer:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x93\x01\n\x12ListScorerVersions\x12\x15\n\rexperiment_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x1a+\n\x08Response\x12\x1f\n\x07scorers\x18\x01 \x03(\x0b\x32\x0e.mlflow.Scorer:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x9a\x01\n\tGetScorer\x12\x15\n\rexperiment_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\x05\x1a*\n\x08Response\x12\x1e\n\x06scorer\x18\x01 \x01(\x0b\x32\x0e.mlflow.Scorer:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"}\n\x0c\x44\x65leteScorer\x12\x15\n\rexperiment_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\x05\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x91\x01\n\x06Scorer\x12\x15\n\rexperiment_id\x18\x01 \x01(\x05\x12\x13\n\x0bscorer_name\x18\x02 \x01(\t\x12\x16\n\x0escorer_version\x18\x03 \x01(\x05\x12\x19\n\x11serialized_scorer\x18\x04 \x01(\t\x12\x15\n\rcreation_time\x18\x05 \x01(\x03\x12\x11\n\tscorer_id\x18\x06 \x01(\t*6\n\x08ViewType\x12\x0f\n\x0b\x41\x43TIVE_ONLY\x10\x01\x12\x10\n\x0c\x44\x45LETED_ONLY\x10\x02\x12\x07\n\x03\x41LL\x10\x03*I\n\nSourceType\x12\x0c\n\x08NOTEBOOK\x10\x01\x12\x07\n\x03JOB\x10\x02\x12\x0b\n\x07PROJECT\x10\x03\x12\t\n\x05LOCAL\x10\x04\x12\x0c\n\x07UNKNOWN\x10\xe8\x07*M\n\tRunStatus\x12\x0b\n\x07RUNNING\x10\x01\x12\r\n\tSCHEDULED\x10\x02\x12\x0c\n\x08\x46INISHED\x10\x03\x12\n\n\x06\x46\x41ILED\x10\x04\x12\n\n\x06KILLED\x10\x05*O\n\x0bTraceStatus\x12\x1c\n\x18TRACE_STATUS_UNSPECIFIED\x10\x00\x12\x06\n\x02OK\x10\x01\x12\t\n\x05\x45RROR\x10\x02\x12\x0f\n\x0bIN_PROGRESS\x10\x03*\x8a\x01\n\x11LoggedModelStatus\x12#\n\x1fLOGGED_MODEL_STATUS_UNSPECIFIED\x10\x00\x12\x18\n\x14LOGGED_MODEL_PENDING\x10\x01\x12\x16\n\x12LOGGED_MODEL_READY\x10\x02\x12\x1e\n\x1aLOGGED_MODEL_UPLOAD_FAILED\x10\x03\x32\xaaZ\n\rMlflowService\x12\xa6\x01\n\x13getExperimentByName\x12\x1b.mlflow.GetExperimentByName\x1a$.mlflow.GetExperimentByName.Response\"L\xf2\x86\x19H\n,\n\x03GET\x12\x1f/mlflow/experiments/get-by-name\x1a\x04\x08\x02\x10\x00\x10\x01*\x16Get Experiment By Name\x12\x94\x01\n\x10\x63reateExperiment\x12\x18.mlflow.CreateExperiment\x1a!.mlflow.CreateExperiment.Response\"C\xf2\x86\x19?\n(\n\x04POST\x12\x1a/mlflow/experiments/create\x1a\x04\x08\x02\x10\x00\x10\x01*\x11\x43reate Experiment\x12\xc1\x01\n\x11searchExperiments\x12\x19.mlflow.SearchExperiments\x1a\".mlflow.SearchExperiments.Response\"m\xf2\x86\x19i\n(\n\x04POST\x12\x1a/mlflow/experiments/search\x1a\x04\x08\x02\x10\x00\n\'\n\x03GET\x12\x1a/mlflow/experiments/search\x1a\x04\x08\x02\x10\x00\x10\x01*\x12Search Experiments\x12\x88\x01\n\rgetExperiment\x12\x15.mlflow.GetExperiment\x1a\x1e.mlflow.GetExperiment.Response\"@\xf2\x86\x19\x38\n$\n\x03GET\x12\x17/mlflow/experiments/get\x1a\x04\x08\x02\x10\x00\x10\x01*\x0eGet Experiment\xba\x8c\x19\x00\x12\x94\x01\n\x10\x64\x65leteExperiment\x12\x18.mlflow.DeleteExperiment\x1a!.mlflow.DeleteExperiment.Response\"C\xf2\x86\x19?\n(\n\x04POST\x12\x1a/mlflow/experiments/delete\x1a\x04\x08\x02\x10\x00\x10\x01*\x11\x44\x65lete Experiment\x12\x99\x01\n\x11restoreExperiment\x12\x19.mlflow.RestoreExperiment\x1a\".mlflow.RestoreExperiment.Response\"E\xf2\x86\x19\x41\n)\n\x04POST\x12\x1b/mlflow/experiments/restore\x1a\x04\x08\x02\x10\x00\x10\x01*\x12Restore Experiment\x12\x94\x01\n\x10updateExperiment\x12\x18.mlflow.UpdateExperiment\x1a!.mlflow.UpdateExperiment.Response\"C\xf2\x86\x19?\n(\n\x04POST\x12\x1a/mlflow/experiments/update\x1a\x04\x08\x02\x10\x00\x10\x01*\x11Update Experiment\x12q\n\tcreateRun\x12\x11.mlflow.CreateRun\x1a\x1a.mlflow.CreateRun.Response\"5\xf2\x86\x19\x31\n!\n\x04POST\x12\x13/mlflow/runs/create\x1a\x04\x08\x02\x10\x00\x10\x01*\nCreate Run\x12q\n\tupdateRun\x12\x11.mlflow.UpdateRun\x1a\x1a.mlflow.UpdateRun.Response\"5\xf2\x86\x19\x31\n!\n\x04POST\x12\x13/mlflow/runs/update\x1a\x04\x08\x02\x10\x00\x10\x01*\nUpdate Run\x12q\n\tdeleteRun\x12\x11.mlflow.DeleteRun\x1a\x1a.mlflow.DeleteRun.Response\"5\xf2\x86\x19\x31\n!\n\x04POST\x12\x13/mlflow/runs/delete\x1a\x04\x08\x02\x10\x00\x10\x01*\nDelete Run\x12v\n\nrestoreRun\x12\x12.mlflow.RestoreRun\x1a\x1b.mlflow.RestoreRun.Response\"7\xf2\x86\x19\x33\n\"\n\x04POST\x12\x14/mlflow/runs/restore\x1a\x04\x08\x02\x10\x00\x10\x01*\x0bRestore Run\x12u\n\tlogMetric\x12\x11.mlflow.LogMetric\x1a\x1a.mlflow.LogMetric.Response\"9\xf2\x86\x19\x35\n%\n\x04POST\x12\x17/mlflow/runs/log-metric\x1a\x04\x08\x02\x10\x00\x10\x01*\nLog Metric\x12t\n\x08logParam\x12\x10.mlflow.LogParam\x1a\x19.mlflow.LogParam.Response\";\xf2\x86\x19\x37\n(\n\x04POST\x12\x1a/mlflow/runs/log-parameter\x1a\x04\x08\x02\x10\x00\x10\x01*\tLog Param\x12\xa1\x01\n\x10setExperimentTag\x12\x18.mlflow.SetExperimentTag\x1a!.mlflow.SetExperimentTag.Response\"P\xf2\x86\x19L\n4\n\x04POST\x12&/mlflow/experiments/set-experiment-tag\x1a\x04\x08\x02\x10\x00\x10\x01*\x12Set Experiment Tag\x12\xb0\x01\n\x13\x64\x65leteExperimentTag\x12\x1b.mlflow.DeleteExperimentTag\x1a$.mlflow.DeleteExperimentTag.Response\"V\xf2\x86\x19R\n7\n\x04POST\x12)/mlflow/experiments/delete-experiment-tag\x1a\x04\x08\x02\x10\x00\x10\x01*\x15\x44\x65lete Experiment Tag\x12\x66\n\x06setTag\x12\x0e.mlflow.SetTag\x1a\x17.mlflow.SetTag.Response\"3\xf2\x86\x19/\n\"\n\x04POST\x12\x14/mlflow/runs/set-tag\x1a\x04\x08\x02\x10\x00\x10\x01*\x07Set Tag\x12\x88\x01\n\x0bsetTraceTag\x12\x13.mlflow.SetTraceTag\x1a\x1c.mlflow.SetTraceTag.Response\"F\xf2\x86\x19\x42\n/\n\x05PATCH\x12 /mlflow/traces/{request_id}/tags\x1a\x04\x08\x02\x10\x00\x10\x03*\rSet Trace Tag\x12\x8f\x01\n\rsetTraceTagV3\x12\x15.mlflow.SetTraceTagV3\x1a\x1e.mlflow.SetTraceTagV3.Response\"G\xf2\x86\x19\x43\n-\n\x05PATCH\x12\x1e/mlflow/traces/{trace_id}/tags\x1a\x04\x08\x03\x10\x00\x10\x03*\x10Set Trace Tag V3\x12\x95\x01\n\x0e\x64\x65leteTraceTag\x12\x16.mlflow.DeleteTraceTag\x1a\x1f.mlflow.DeleteTraceTag.Response\"J\xf2\x86\x19\x46\n0\n\x06\x44\x45LETE\x12 /mlflow/traces/{request_id}/tags\x1a\x04\x08\x02\x10\x00\x10\x03*\x10\x44\x65lete Trace Tag\x12\x9c\x01\n\x10\x64\x65leteTraceTagV3\x12\x18.mlflow.DeleteTraceTagV3\x1a!.mlflow.DeleteTraceTagV3.Response\"K\xf2\x86\x19G\n.\n\x06\x44\x45LETE\x12\x1e/mlflow/traces/{trace_id}/tags\x1a\x04\x08\x03\x10\x00\x10\x03*\x13\x44\x65lete Trace Tag V3\x12u\n\tdeleteTag\x12\x11.mlflow.DeleteTag\x1a\x1a.mlflow.DeleteTag.Response\"9\xf2\x86\x19\x35\n%\n\x04POST\x12\x17/mlflow/runs/delete-tag\x1a\x04\x08\x02\x10\x00\x10\x01*\nDelete Tag\x12\x65\n\x06getRun\x12\x0e.mlflow.GetRun\x1a\x17.mlflow.GetRun.Response\"2\xf2\x86\x19*\n\x1d\n\x03GET\x12\x10/mlflow/runs/get\x1a\x04\x08\x02\x10\x00\x10\x01*\x07Get Run\xba\x8c\x19\x00\x12y\n\nsearchRuns\x12\x12.mlflow.SearchRuns\x1a\x1b.mlflow.SearchRuns.Response\":\xf2\x86\x19\x32\n!\n\x04POST\x12\x13/mlflow/runs/search\x1a\x04\x08\x02\x10\x00\x10\x01*\x0bSearch Runs\xba\x8c\x19\x00\x12\x87\x01\n\rlistArtifacts\x12\x15.mlflow.ListArtifacts\x1a\x1e.mlflow.ListArtifacts.Response\"?\xf2\x86\x19\x37\n#\n\x03GET\x12\x16/mlflow/artifacts/list\x1a\x04\x08\x02\x10\x00\x10\x01*\x0eList Artifacts\xba\x8c\x19\x00\x12\x95\x01\n\x10getMetricHistory\x12\x18.mlflow.GetMetricHistory\x1a!.mlflow.GetMetricHistory.Response\"D\xf2\x86\x19@\n(\n\x03GET\x12\x1b/mlflow/metrics/get-history\x1a\x04\x08\x02\x10\x00\x10\x01*\x12Get Metric History\x12\xb7\x01\n\x1cgetMetricHistoryBulkInterval\x12$.mlflow.GetMetricHistoryBulkInterval\x1a-.mlflow.GetMetricHistoryBulkInterval.Response\"B\xf2\x86\x19:\n6\n\x03GET\x12)/mlflow/metrics/get-history-bulk-interval\x1a\x04\x08\x02\x10\x0b\x10\x03\xba\x8c\x19\x00\x12p\n\x08logBatch\x12\x10.mlflow.LogBatch\x1a\x19.mlflow.LogBatch.Response\"7\xf2\x86\x19\x33\n$\n\x04POST\x12\x16/mlflow/runs/log-batch\x1a\x04\x08\x02\x10\x00\x10\x01*\tLog Batch\x12p\n\x08logModel\x12\x10.mlflow.LogModel\x1a\x19.mlflow.LogModel.Response\"7\xf2\x86\x19\x33\n$\n\x04POST\x12\x16/mlflow/runs/log-model\x1a\x04\x08\x02\x10\x00\x10\x01*\tLog Model\x12u\n\tlogInputs\x12\x11.mlflow.LogInputs\x1a\x1a.mlflow.LogInputs.Response\"9\xf2\x86\x19\x35\n%\n\x04POST\x12\x17/mlflow/runs/log-inputs\x1a\x04\x08\x02\x10\x00\x10\x01*\nLog Inputs\x12v\n\nlogOutputs\x12\x12.mlflow.LogOutputs\x1a\x1b.mlflow.LogOutputs.Response\"7\xf2\x86\x19\x33\n\"\n\x04POST\x12\x14/mlflow/runs/outputs\x1a\x04\x08\x02\x10\x00\x10\x03*\x0bLog Outputs\x12\x87\x01\n\x0esearchDatasets\x12\x16.mlflow.SearchDatasets\x1a\x1f.mlflow.SearchDatasets.Response\"<\xf2\x86\x19\x34\n0\n\x04POST\x12\"mlflow/experiments/search-datasets\x1a\x04\x08\x02\x10\x00\x10\x03\xba\x8c\x19\x00\x12p\n\nstartTrace\x12\x12.mlflow.StartTrace\x1a\x1b.mlflow.StartTrace.Response\"1\xf2\x86\x19-\n\x1c\n\x04POST\x12\x0e/mlflow/traces\x1a\x04\x08\x02\x10\x00\x10\x03*\x0bStart Trace\x12v\n\x08\x65ndTrace\x12\x10.mlflow.EndTrace\x1a\x19.mlflow.EndTrace.Response\"=\xf2\x86\x19\x39\n*\n\x05PATCH\x12\x1b/mlflow/traces/{request_id}\x1a\x04\x08\x02\x10\x00\x10\x03*\tEnd Trace\x12\x89\x01\n\x0cgetTraceInfo\x12\x14.mlflow.GetTraceInfo\x1a\x1d.mlflow.GetTraceInfo.Response\"D\xf2\x86\x19@\n-\n\x03GET\x12 /mlflow/traces/{request_id}/info\x1a\x04\x08\x02\x10\x00\x10\x03*\rGet TraceInfo\x12\x8b\x01\n\x0egetTraceInfoV3\x12\x16.mlflow.GetTraceInfoV3\x1a\x1f.mlflow.GetTraceInfoV3.Response\"@\xf2\x86\x19<\n&\n\x03GET\x12\x19/mlflow/traces/{trace_id}\x1a\x04\x08\x03\x10\x00\x10\x03*\x10Get TraceInfo v3\x12n\n\x08getTrace\x12\x10.mlflow.GetTrace\x1a\x19.mlflow.GetTrace.Response\"5\xf2\x86\x19\x31\n\x1f\n\x03GET\x12\x12/mlflow/traces/get\x1a\x04\x08\x03\x10\x00\x10\x03*\x0cGet Trace v3\x12\x83\x01\n\x0e\x62\x61tchGetTraces\x12\x16.mlflow.BatchGetTraces\x1a\x1f.mlflow.BatchGetTraces.Response\"8\xf2\x86\x19\x34\n$\n\x03GET\x12\x17/mlflow/traces/batchGet\x1a\x04\x08\x03\x10\x00\x10\x03*\nGet Traces\x12w\n\x0csearchTraces\x12\x14.mlflow.SearchTraces\x1a\x1d.mlflow.SearchTraces.Response\"2\xf2\x86\x19.\n\x1b\n\x03GET\x12\x0e/mlflow/traces\x1a\x04\x08\x02\x10\x00\x10\x03*\rSearch Traces\x12\x88\x01\n\x0esearchTracesV3\x12\x16.mlflow.SearchTracesV3\x1a\x1f.mlflow.SearchTracesV3.Response\"=\xf2\x86\x19\x39\n#\n\x04POST\x12\x15/mlflow/traces/search\x1a\x04\x08\x03\x10\x00\x10\x03*\x10Search Traces V3\x12i\n\x0cstartTraceV3\x12\x14.mlflow.StartTraceV3\x1a\x1d.mlflow.StartTraceV3.Response\"$\xf2\x86\x19 \n\x1c\n\x04POST\x12\x0e/mlflow/traces\x1a\x04\x08\x03\x10\x00\x10\x03\x12\x92\x01\n\x0flinkTracesToRun\x12\x17.mlflow.LinkTracesToRun\x1a .mlflow.LinkTracesToRun.Response\"D\xf2\x86\x19@\n(\n\x04POST\x12\x1a/mlflow/traces/link-to-run\x1a\x04\x08\x02\x10\x00\x10\x03*\x12Link Traces to Run\x12\xa2\x01\n\x19searchUnifiedTraceHandler\x12\x1b.mlflow.SearchUnifiedTraces\x1a$.mlflow.SearchUnifiedTraces.Response\"B\xf2\x86\x19>\n#\n\x03GET\x12\x16/mlflow/unified-traces\x1a\x04\x08\x02\x10\x00\x10\x03*\x15Search Unified Traces\x12\xaf\x01\n\x15getOnlineTraceDetails\x12\x1d.mlflow.GetOnlineTraceDetails\x1a&.mlflow.GetOnlineTraceDetails.Response\"O\xf2\x86\x19K\n-\n\x03GET\x12 /mlflow/get-online-trace-details\x1a\x04\x08\x02\x10\x00\x10\x03*\x18Get Online Trace Details\x12\x86\x01\n\x0c\x64\x65leteTraces\x12\x14.mlflow.DeleteTraces\x1a\x1d.mlflow.DeleteTraces.Response\"A\xf2\x86\x19=\n*\n\x04POST\x12\x1c/mlflow/traces/delete-traces\x1a\x04\x08\x02\x10\x00\x10\x03*\rDelete Traces\x12\x8f\x01\n\x0e\x64\x65leteTracesV3\x12\x16.mlflow.DeleteTracesV3\x1a\x1f.mlflow.DeleteTracesV3.Response\"D\xf2\x86\x19@\n*\n\x04POST\x12\x1c/mlflow/traces/delete-traces\x1a\x04\x08\x03\x10\x00\x10\x03*\x10\x44\x65lete Traces V3\x12\xe3\x01\n\x1f\x63\x61lculateTraceFilterCorrelation\x12\'.mlflow.CalculateTraceFilterCorrelation\x1a\x30.mlflow.CalculateTraceFilterCorrelation.Response\"e\xf2\x86\x19\x61\n9\n\x04POST\x12+/mlflow/traces/calculate-filter-correlation\x1a\x04\x08\x03\x10\x00\x10\x03*\"Calculate Trace Filter Correlation\x12\x94\x01\n\x11\x63reateLoggedModel\x12\x19.mlflow.CreateLoggedModel\x1a\".mlflow.CreateLoggedModel.Response\"@\xf2\x86\x19<\n#\n\x04POST\x12\x15/mlflow/logged-models\x1a\x04\x08\x02\x10\x00\x10\x03*\x13\x43reate Logged Model\x12\xa8\x01\n\x13\x66inalizeLoggedModel\x12\x1b.mlflow.FinalizeLoggedModel\x1a$.mlflow.FinalizeLoggedModel.Response\"N\xf2\x86\x19J\n/\n\x05PATCH\x12 /mlflow/logged-models/{model_id}\x1a\x04\x08\x02\x10\x00\x10\x03*\x15\x46inalize Logged Model\x12\x92\x01\n\x0egetLoggedModel\x12\x16.mlflow.GetLoggedModel\x1a\x1f.mlflow.GetLoggedModel.Response\"G\xf2\x86\x19\x43\n-\n\x03GET\x12 /mlflow/logged-models/{model_id}\x1a\x04\x08\x02\x10\x00\x10\x03*\x10Get Logged Model\x12\xa3\x01\n\x11\x64\x65leteLoggedModel\x12\x19.mlflow.DeleteLoggedModel\x1a\".mlflow.DeleteLoggedModel.Response\"O\xf2\x86\x19K\n0\n\x06\x44\x45LETE\x12 /mlflow/logged-models/{model_id}\x1a\x04\x08\x02\x10\x00\x10\x03*\x15\x44\x65lete a Logged Model\x12\x9e\x01\n\x12searchLoggedModels\x12\x1a.mlflow.SearchLoggedModels\x1a#.mlflow.SearchLoggedModels.Response\"G\xf2\x86\x19\x43\n*\n\x04POST\x12\x1c/mlflow/logged-models/search\x1a\x04\x08\x02\x10\x00\x10\x03*\x13Search LoggedModels\x12\xa9\x01\n\x12setLoggedModelTags\x12\x1a.mlflow.SetLoggedModelTags\x1a#.mlflow.SetLoggedModelTags.Response\"R\xf2\x86\x19N\n4\n\x05PATCH\x12%/mlflow/logged-models/{model_id}/tags\x1a\x04\x08\x02\x10\x00\x10\x03*\x14Set Logged Model Tag\x12\xbd\x01\n\x14\x64\x65leteLoggedModelTag\x12\x1c.mlflow.DeleteLoggedModelTag\x1a%.mlflow.DeleteLoggedModelTag.Response\"`\xf2\x86\x19\\\n?\n\x06\x44\x45LETE\x12//mlflow/logged-models/{model_id}/tags/{tag_key}\x1a\x04\x08\x02\x10\x00\x10\x03*\x17\x44\x65lete Logged Model Tag\x12\xd6\x01\n\x18listLoggedModelArtifacts\x12 .mlflow.ListLoggedModelArtifacts\x1a).mlflow.ListLoggedModelArtifacts.Response\"m\xf2\x86\x19i\nC\n\x03GET\x12\x36/mlflow/logged-models/{model_id}/artifacts/directories\x1a\x04\x08\x02\x10\x00\x10\x03* List Artifacts for Logged Models\x12\xc1\x01\n\x14LogLoggedModelParams\x12#.mlflow.LogLoggedModelParamsRequest\x1a,.mlflow.LogLoggedModelParamsRequest.Response\"V\xf2\x86\x19R\n5\n\x04POST\x12\'/mlflow/logged-models/{model_id}/params\x1a\x04\x08\x02\x10\x00\x10\x03*\x17Log Logged Model Params\x12\xb0\x01\n\rGetAssessment\x12\x1c.mlflow.GetAssessmentRequest\x1a%.mlflow.GetAssessmentRequest.Response\"Z\xf2\x86\x19V\nB\n\x03GET\x12\x35/mlflow/traces/{trace_id}/assessments/{assessment_id}\x1a\x04\x08\x03\x10\x00\x10\x03*\x0eGet Assessment\x12\xdf\x01\n\x10\x63reateAssessment\x12\x18.mlflow.CreateAssessment\x1a!.mlflow.CreateAssessment.Response\"\x8d\x01\xf2\x86\x19\x88\x01\n>\n\x04POST\x12\x30/mlflow/traces/{assessment.trace_id}/assessments\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xee\x07\x18\x0c\x18\x01*:Create an assessment of a trace or a span within the trace\x12\xd0\x01\n\x10updateAssessment\x12\x18.mlflow.UpdateAssessment\x1a!.mlflow.UpdateAssessment.Response\"\x7f\xf2\x86\x19{\nD\n\x05PATCH\x12\x35/mlflow/traces/{trace_id}/assessments/{assessment_id}\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xee\x07\x18\x01*)Update an existing assessment on a trace.\x12\xb1\x01\n\x10\x64\x65leteAssessment\x12\x18.mlflow.DeleteAssessment\x1a!.mlflow.DeleteAssessment.Response\"`\xf2\x86\x19\\\nE\n\x06\x44\x45LETE\x12\x35/mlflow/traces/{trace_id}/assessments/{assessment_id}\x1a\x04\x08\x03\x10\x00\x10\x03*\x11\x44\x65lete Assessment\x12\x9a\x01\n\rcreateDataset\x12\x15.mlflow.CreateDataset\x1a\x1e.mlflow.CreateDataset.Response\"R\xf2\x86\x19N\n%\n\x04POST\x12\x17/mlflow/datasets/create\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xee\x07\x18\x0c\x18\x01*\x19\x43reate Evaluation Dataset\x12\x91\x01\n\ngetDataset\x12\x12.mlflow.GetDataset\x1a\x1b.mlflow.GetDataset.Response\"R\xf2\x86\x19N\n*\n\x03GET\x12\x1d/mlflow/datasets/{dataset_id}\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xba\x17\x18\x01*\x16Get Evaluation Dataset\x12\xa0\x01\n\rdeleteDataset\x12\x15.mlflow.DeleteDataset\x1a\x1e.mlflow.DeleteDataset.Response\"X\xf2\x86\x19T\n-\n\x06\x44\x45LETE\x12\x1d/mlflow/datasets/{dataset_id}\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xba\x17\x18\x01*\x19\x44\x65lete Evaluation Dataset\x12\xdd\x01\n\x18searchEvaluationDatasets\x12 .mlflow.SearchEvaluationDatasets\x1a).mlflow.SearchEvaluationDatasets.Response\"t\xf2\x86\x19p\n%\n\x04POST\x12\x17/mlflow/datasets/search\x1a\x04\x08\x03\x10\x00\n$\n\x03GET\x12\x17/mlflow/datasets/search\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\x01*\x1aSearch Evaluation Datasets\x12\xa9\x01\n\x0esetDatasetTags\x12\x16.mlflow.SetDatasetTags\x1a\x1f.mlflow.SetDatasetTags.Response\"^\xf2\x86\x19Z\n1\n\x05PATCH\x12\"/mlflow/datasets/{dataset_id}/tags\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xba\x17\x18\x01*\x1bSet Evaluation Dataset Tags\x12\xb8\x01\n\x10\x64\x65leteDatasetTag\x12\x18.mlflow.DeleteDatasetTag\x1a!.mlflow.DeleteDatasetTag.Response\"g\xf2\x86\x19\x63\n8\n\x06\x44\x45LETE\x12(/mlflow/datasets/{dataset_id}/tags/{key}\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xba\x17\x18\x01*\x1d\x44\x65lete Evaluation Dataset Tag\x12\xc3\x01\n\x14upsertDatasetRecords\x12\x1c.mlflow.UpsertDatasetRecords\x1a%.mlflow.UpsertDatasetRecords.Response\"f\xf2\x86\x19\x62\n3\n\x04POST\x12%/mlflow/datasets/{dataset_id}/records\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xba\x17\x18\x01*!Upsert Evaluation Dataset Records\x12\xd6\x01\n\x17getDatasetExperimentIds\x12\x1f.mlflow.GetDatasetExperimentIds\x1a(.mlflow.GetDatasetExperimentIds.Response\"p\xf2\x86\x19l\n9\n\x03GET\x12,/mlflow/datasets/{dataset_id}/experiment-ids\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xba\x17\x18\x01*%Get Evaluation Dataset Experiment IDs\x12\x8a\x01\n\x0eregisterScorer\x12\x16.mlflow.RegisterScorer\x1a\x1f.mlflow.RegisterScorer.Response\"?\xf2\x86\x19;\n&\n\x04POST\x12\x18/mlflow/scorers/register\x1a\x04\x08\x03\x10\x00\x10\x01*\x0fRegister Scorer\x12y\n\x0blistScorers\x12\x13.mlflow.ListScorers\x1a\x1c.mlflow.ListScorers.Response\"7\xf2\x86\x19\x33\n!\n\x03GET\x12\x14/mlflow/scorers/list\x1a\x04\x08\x03\x10\x00\x10\x01*\x0cList Scorers\x12\x9a\x01\n\x12listScorerVersions\x12\x1a.mlflow.ListScorerVersions\x1a#.mlflow.ListScorerVersions.Response\"C\xf2\x86\x19?\n%\n\x03GET\x12\x18/mlflow/scorers/versions\x1a\x04\x08\x03\x10\x00\x10\x01*\x14List Scorer Versions\x12p\n\tgetScorer\x12\x11.mlflow.GetScorer\x1a\x1a.mlflow.GetScorer.Response\"4\xf2\x86\x19\x30\n \n\x03GET\x12\x13/mlflow/scorers/get\x1a\x04\x08\x03\x10\x00\x10\x01*\nGet Scorer\x12\x82\x01\n\x0c\x64\x65leteScorer\x12\x14.mlflow.DeleteScorer\x1a\x1d.mlflow.DeleteScorer.Response\"=\xf2\x86\x19\x39\n&\n\x06\x44\x45LETE\x12\x16/mlflow/scorers/delete\x1a\x04\x08\x03\x10\x00\x10\x01*\rDelete Scorer\x12\xb6\x01\n\x11getDatasetRecords\x12\x19.mlflow.GetDatasetRecords\x1a\".mlflow.GetDatasetRecords.Response\"b\xf2\x86\x19^\n2\n\x03GET\x12%/mlflow/datasets/{dataset_id}/records\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xba\x17\x18\x01*\x1eGet Evaluation Dataset Records\x12\xcd\x01\n\x17\x61\x64\x64\x44\x61tasetToExperiments\x12\x1f.mlflow.AddDatasetToExperiments\x1a(.mlflow.AddDatasetToExperiments.Response\"g\xf2\x86\x19\x63\n;\n\x04POST\x12-/mlflow/datasets/{dataset_id}/add-experiments\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xba\x17\x18\x01*\x1a\x41\x64\x64 Dataset to Experiments\x12\xe4\x01\n\x1cremoveDatasetFromExperiments\x12$.mlflow.RemoveDatasetFromExperiments\x1a-.mlflow.RemoveDatasetFromExperiments.Response\"o\xf2\x86\x19k\n>\n\x04POST\x12\x30/mlflow/datasets/{dataset_id}/remove-experiments\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xba\x17\x18\x01*\x1fRemove Dataset from ExperimentsB\x1e\n\x14org.mlflow.api.proto\x90\x01\x01\xe2?\x02\x10\x01') + DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\rservice.proto\x12\x06mlflow\x1a\x11\x61ssessments.proto\x1a\x10\x64\x61tabricks.proto\x1a\x0e\x64\x61tasets.proto\x1a\x1egoogle/protobuf/duration.proto\x1a google/protobuf/field_mask.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a(opentelemetry/proto/trace/v1/trace.proto\x1a\x15scalapb/scalapb.proto\"\xb0\x01\n\x06Metric\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x01\x12\x11\n\ttimestamp\x18\x03 \x01(\x03\x12\x0f\n\x04step\x18\x04 \x01(\x03:\x01\x30\x12\x1a\n\x0c\x64\x61taset_name\x18\x05 \x01(\tB\x04\xf0\x86\x19\x03\x12\x1c\n\x0e\x64\x61taset_digest\x18\x06 \x01(\tB\x04\xf0\x86\x19\x03\x12\x16\n\x08model_id\x18\x07 \x01(\tB\x04\xf0\x86\x19\x03\x12\x14\n\x06run_id\x18\x08 \x01(\tB\x04\xf0\x86\x19\x03\"#\n\x05Param\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\x8b\x01\n\x03Run\x12\x1d\n\x04info\x18\x01 \x01(\x0b\x32\x0f.mlflow.RunInfo\x12\x1d\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x0f.mlflow.RunData\x12!\n\x06inputs\x18\x03 \x01(\x0b\x32\x11.mlflow.RunInputs\x12#\n\x07outputs\x18\x04 \x01(\x0b\x32\x12.mlflow.RunOutputs\"g\n\x07RunData\x12\x1f\n\x07metrics\x18\x01 \x03(\x0b\x32\x0e.mlflow.Metric\x12\x1d\n\x06params\x18\x02 \x03(\x0b\x32\r.mlflow.Param\x12\x1c\n\x04tags\x18\x03 \x03(\x0b\x32\x0e.mlflow.RunTag\"c\n\tRunInputs\x12,\n\x0e\x64\x61taset_inputs\x18\x01 \x03(\x0b\x32\x14.mlflow.DatasetInput\x12(\n\x0cmodel_inputs\x18\x02 \x03(\x0b\x32\x12.mlflow.ModelInput\"8\n\nRunOutputs\x12*\n\rmodel_outputs\x18\x01 \x03(\x0b\x32\x13.mlflow.ModelOutput\"$\n\x06RunTag\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"+\n\rExperimentTag\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\xdd\x01\n\x07RunInfo\x12\x0e\n\x06run_id\x18\x0f \x01(\t\x12\x10\n\x08run_uuid\x18\x01 \x01(\t\x12\x10\n\x08run_name\x18\x03 \x01(\t\x12\x15\n\rexperiment_id\x18\x02 \x01(\t\x12\x0f\n\x07user_id\x18\x06 \x01(\t\x12!\n\x06status\x18\x07 \x01(\x0e\x32\x11.mlflow.RunStatus\x12\x12\n\nstart_time\x18\x08 \x01(\x03\x12\x10\n\x08\x65nd_time\x18\t \x01(\x03\x12\x14\n\x0c\x61rtifact_uri\x18\r \x01(\t\x12\x17\n\x0flifecycle_stage\x18\x0e \x01(\t\"\xbb\x01\n\nExperiment\x12\x15\n\rexperiment_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x19\n\x11\x61rtifact_location\x18\x03 \x01(\t\x12\x17\n\x0flifecycle_stage\x18\x04 \x01(\t\x12\x18\n\x10last_update_time\x18\x05 \x01(\x03\x12\x15\n\rcreation_time\x18\x06 \x01(\x03\x12#\n\x04tags\x18\x07 \x03(\x0b\x32\x15.mlflow.ExperimentTag\"V\n\x0c\x44\x61tasetInput\x12\x1e\n\x04tags\x18\x01 \x03(\x0b\x32\x10.mlflow.InputTag\x12&\n\x07\x64\x61taset\x18\x02 \x01(\x0b\x32\x0f.mlflow.DatasetB\x04\xf8\x86\x19\x01\"$\n\nModelInput\x12\x16\n\x08model_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\"2\n\x08InputTag\x12\x11\n\x03key\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x13\n\x05value\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\"\x85\x01\n\x07\x44\x61taset\x12\x12\n\x04name\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x14\n\x06\x64igest\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12\x19\n\x0bsource_type\x18\x03 \x01(\tB\x04\xf8\x86\x19\x01\x12\x14\n\x06source\x18\x04 \x01(\tB\x04\xf8\x86\x19\x01\x12\x0e\n\x06schema\x18\x05 \x01(\t\x12\x0f\n\x07profile\x18\x06 \x01(\t\"9\n\x0bModelOutput\x12\x16\n\x08model_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x12\n\x04step\x18\x02 \x01(\x03\x42\x04\xf8\x86\x19\x01\"\xb6\x01\n\x10\x43reateExperiment\x12\x12\n\x04name\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x19\n\x11\x61rtifact_location\x18\x02 \x01(\t\x12#\n\x04tags\x18\x03 \x03(\x0b\x32\x15.mlflow.ExperimentTag\x1a!\n\x08Response\x12\x15\n\rexperiment_id\x18\x01 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xfe\x01\n\x11SearchExperiments\x12\x13\n\x0bmax_results\x18\x01 \x01(\x03\x12\x12\n\npage_token\x18\x02 \x01(\t\x12\x0e\n\x06\x66ilter\x18\x03 \x01(\t\x12\x10\n\x08order_by\x18\x04 \x03(\t\x12#\n\tview_type\x18\x05 \x01(\x0e\x32\x10.mlflow.ViewType\x1aL\n\x08Response\x12\'\n\x0b\x65xperiments\x18\x01 \x03(\x0b\x32\x12.mlflow.Experiment\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x8d\x01\n\rGetExperiment\x12\x1b\n\rexperiment_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a\x32\n\x08Response\x12&\n\nexperiment\x18\x01 \x01(\x0b\x32\x12.mlflow.Experiment:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"h\n\x10\x44\x65leteExperiment\x12\x1b\n\rexperiment_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"i\n\x11RestoreExperiment\x12\x1b\n\rexperiment_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"z\n\x10UpdateExperiment\x12\x1b\n\rexperiment_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x10\n\x08new_name\x18\x02 \x01(\t\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xca\x01\n\tCreateRun\x12\x15\n\rexperiment_id\x18\x01 \x01(\t\x12\x0f\n\x07user_id\x18\x02 \x01(\t\x12\x10\n\x08run_name\x18\x03 \x01(\t\x12\x12\n\nstart_time\x18\x07 \x01(\x03\x12\x1c\n\x04tags\x18\t \x03(\x0b\x32\x0e.mlflow.RunTag\x1a$\n\x08Response\x12\x18\n\x03run\x18\x01 \x01(\x0b\x32\x0b.mlflow.Run:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xd0\x01\n\tUpdateRun\x12\x0e\n\x06run_id\x18\x04 \x01(\t\x12\x10\n\x08run_uuid\x18\x01 \x01(\t\x12!\n\x06status\x18\x02 \x01(\x0e\x32\x11.mlflow.RunStatus\x12\x10\n\x08\x65nd_time\x18\x03 \x01(\x03\x12\x10\n\x08run_name\x18\x05 \x01(\t\x1a-\n\x08Response\x12!\n\x08run_info\x18\x01 \x01(\x0b\x32\x0f.mlflow.RunInfo:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"Z\n\tDeleteRun\x12\x14\n\x06run_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"[\n\nRestoreRun\x12\x14\n\x06run_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x8a\x02\n\tLogMetric\x12\x0e\n\x06run_id\x18\x06 \x01(\t\x12\x10\n\x08run_uuid\x18\x01 \x01(\t\x12\x11\n\x03key\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12\x13\n\x05value\x18\x03 \x01(\x01\x42\x04\xf8\x86\x19\x01\x12\x17\n\ttimestamp\x18\x04 \x01(\x03\x42\x04\xf8\x86\x19\x01\x12\x0f\n\x04step\x18\x05 \x01(\x03:\x01\x30\x12\x16\n\x08model_id\x18\x07 \x01(\tB\x04\xf0\x86\x19\x03\x12\x1a\n\x0c\x64\x61taset_name\x18\x08 \x01(\tB\x04\xf0\x86\x19\x03\x12\x1c\n\x0e\x64\x61taset_digest\x18\t \x01(\tB\x04\xf0\x86\x19\x03\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x8d\x01\n\x08LogParam\x12\x0e\n\x06run_id\x18\x04 \x01(\t\x12\x10\n\x08run_uuid\x18\x01 \x01(\t\x12\x11\n\x03key\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12\x13\n\x05value\x18\x03 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x90\x01\n\x10SetExperimentTag\x12\x1b\n\rexperiment_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x11\n\x03key\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12\x13\n\x05value\x18\x03 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"~\n\x13\x44\x65leteExperimentTag\x12\x1b\n\rexperiment_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x11\n\x03key\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x8b\x01\n\x06SetTag\x12\x0e\n\x06run_id\x18\x04 \x01(\t\x12\x10\n\x08run_uuid\x18\x01 \x01(\t\x12\x11\n\x03key\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12\x13\n\x05value\x18\x03 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"m\n\tDeleteTag\x12\x14\n\x06run_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x11\n\x03key\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"}\n\x06GetRun\x12\x0e\n\x06run_id\x18\x02 \x01(\t\x12\x10\n\x08run_uuid\x18\x01 \x01(\t\x1a$\n\x08Response\x12\x18\n\x03run\x18\x01 \x01(\x0b\x32\x0b.mlflow.Run:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x98\x02\n\nSearchRuns\x12\x16\n\x0e\x65xperiment_ids\x18\x01 \x03(\t\x12\x0e\n\x06\x66ilter\x18\x04 \x01(\t\x12\x34\n\rrun_view_type\x18\x03 \x01(\x0e\x32\x10.mlflow.ViewType:\x0b\x41\x43TIVE_ONLY\x12\x19\n\x0bmax_results\x18\x05 \x01(\x05:\x04\x31\x30\x30\x30\x12\x10\n\x08order_by\x18\x06 \x03(\t\x12\x12\n\npage_token\x18\x07 \x01(\t\x1a>\n\x08Response\x12\x19\n\x04runs\x18\x01 \x03(\x0b\x32\x0b.mlflow.Run\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xd8\x01\n\rListArtifacts\x12\x0e\n\x06run_id\x18\x03 \x01(\t\x12\x10\n\x08run_uuid\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\x12\x12\n\npage_token\x18\x04 \x01(\t\x1aV\n\x08Response\x12\x10\n\x08root_uri\x18\x01 \x01(\t\x12\x1f\n\x05\x66iles\x18\x02 \x03(\x0b\x32\x10.mlflow.FileInfo\x12\x17\n\x0fnext_page_token\x18\x03 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\";\n\x08\x46ileInfo\x12\x0c\n\x04path\x18\x01 \x01(\t\x12\x0e\n\x06is_dir\x18\x02 \x01(\x08\x12\x11\n\tfile_size\x18\x03 \x01(\x03\"\xea\x01\n\x10GetMetricHistory\x12\x0e\n\x06run_id\x18\x03 \x01(\t\x12\x10\n\x08run_uuid\x18\x01 \x01(\t\x12\x18\n\nmetric_key\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12\x12\n\npage_token\x18\x04 \x01(\t\x12\x13\n\x0bmax_results\x18\x05 \x01(\x05\x1a\x44\n\x08Response\x12\x1f\n\x07metrics\x18\x01 \x03(\x0b\x32\x0e.mlflow.Metric\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"a\n\x0fMetricWithRunId\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x01\x12\x11\n\ttimestamp\x18\x03 \x01(\x03\x12\x0f\n\x04step\x18\x04 \x01(\x03:\x01\x30\x12\x0e\n\x06run_id\x18\x05 \x01(\t\"\xe7\x01\n\x1cGetMetricHistoryBulkInterval\x12\x0f\n\x07run_ids\x18\x01 \x03(\t\x12\x18\n\nmetric_key\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12\x12\n\nstart_step\x18\x03 \x01(\x05\x12\x10\n\x08\x65nd_step\x18\x04 \x01(\x05\x12\x13\n\x0bmax_results\x18\x05 \x01(\x05\x1a\x34\n\x08Response\x12(\n\x07metrics\x18\x01 \x03(\x0b\x32\x17.mlflow.MetricWithRunId:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xb1\x01\n\x08LogBatch\x12\x0e\n\x06run_id\x18\x01 \x01(\t\x12\x1f\n\x07metrics\x18\x02 \x03(\x0b\x32\x0e.mlflow.Metric\x12\x1d\n\x06params\x18\x03 \x03(\x0b\x32\r.mlflow.Param\x12\x1c\n\x04tags\x18\x04 \x03(\x0b\x32\x0e.mlflow.RunTag\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"g\n\x08LogModel\x12\x0e\n\x06run_id\x18\x01 \x01(\t\x12\x12\n\nmodel_json\x18\x02 \x01(\t\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xac\x01\n\tLogInputs\x12\x14\n\x06run_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12&\n\x08\x64\x61tasets\x18\x02 \x03(\x0b\x32\x14.mlflow.DatasetInput\x12(\n\x06models\x18\x03 \x03(\x0b\x32\x12.mlflow.ModelInputB\x04\xf0\x86\x19\x03\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x80\x01\n\nLogOutputs\x12\x14\n\x06run_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12#\n\x06models\x18\x02 \x03(\x0b\x32\x13.mlflow.ModelOutput\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x95\x01\n\x13GetExperimentByName\x12\x1d\n\x0f\x65xperiment_name\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a\x32\n\x08Response\x12&\n\nexperiment\x18\x01 \x01(\x0b\x32\x12.mlflow.Experiment:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xb9\x01\n\x10\x43reateAssessment\x12\x38\n\nassessment\x18\x01 \x01(\x0b\x32\x1e.mlflow.assessments.AssessmentB\x04\xf8\x86\x19\x01\x1a>\n\x08Response\x12\x32\n\nassessment\x18\x01 \x01(\x0b\x32\x1e.mlflow.assessments.Assessment:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xf0\x01\n\x10UpdateAssessment\x12\x38\n\nassessment\x18\x01 \x01(\x0b\x32\x1e.mlflow.assessments.AssessmentB\x04\xf8\x86\x19\x01\x12\x35\n\x0bupdate_mask\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskB\x04\xf8\x86\x19\x01\x1a>\n\x08Response\x12\x32\n\nassessment\x18\x01 \x01(\x0b\x32\x1e.mlflow.assessments.Assessment:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x80\x01\n\x10\x44\x65leteAssessment\x12\x16\n\x08trace_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x1b\n\rassessment_id\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xb8\x01\n\x14GetAssessmentRequest\x12\x16\n\x08trace_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x1b\n\rassessment_id\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x1a>\n\x08Response\x12\x32\n\nassessment\x18\x01 \x01(\x0b\x32\x1e.mlflow.assessments.Assessment:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xe4\x01\n\tTraceInfo\x12\x12\n\nrequest_id\x18\x01 \x01(\t\x12\x15\n\rexperiment_id\x18\x02 \x01(\t\x12\x14\n\x0ctimestamp_ms\x18\x03 \x01(\x03\x12\x19\n\x11\x65xecution_time_ms\x18\x04 \x01(\x03\x12#\n\x06status\x18\x05 \x01(\x0e\x32\x13.mlflow.TraceStatus\x12\x36\n\x10request_metadata\x18\x06 \x03(\x0b\x32\x1c.mlflow.TraceRequestMetadata\x12\x1e\n\x04tags\x18\x07 \x03(\x0b\x32\x10.mlflow.TraceTag\"2\n\x14TraceRequestMetadata\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"&\n\x08TraceTag\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\xf1\x01\n\nStartTrace\x12\x15\n\rexperiment_id\x18\x01 \x01(\t\x12\x14\n\x0ctimestamp_ms\x18\x02 \x01(\x03\x12\x36\n\x10request_metadata\x18\x03 \x03(\x0b\x32\x1c.mlflow.TraceRequestMetadata\x12\x1e\n\x04tags\x18\x04 \x03(\x0b\x32\x10.mlflow.TraceTag\x1a\x31\n\x08Response\x12%\n\ntrace_info\x18\x01 \x01(\x0b\x32\x11.mlflow.TraceInfo:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x91\x02\n\x08\x45ndTrace\x12\x12\n\nrequest_id\x18\x01 \x01(\t\x12\x14\n\x0ctimestamp_ms\x18\x02 \x01(\x03\x12#\n\x06status\x18\x03 \x01(\x0e\x32\x13.mlflow.TraceStatus\x12\x36\n\x10request_metadata\x18\x04 \x03(\x0b\x32\x1c.mlflow.TraceRequestMetadata\x12\x1e\n\x04tags\x18\x05 \x03(\x0b\x32\x10.mlflow.TraceTag\x1a\x31\n\x08Response\x12%\n\ntrace_info\x18\x01 \x01(\x0b\x32\x11.mlflow.TraceInfo:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x82\x01\n\x0cGetTraceInfo\x12\x12\n\nrequest_id\x18\x01 \x01(\t\x1a\x31\n\x08Response\x12%\n\ntrace_info\x18\x01 \x01(\x0b\x32\x11.mlflow.TraceInfo:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"y\n\x0eGetTraceInfoV3\x12\x10\n\x08trace_id\x18\x01 \x01(\t\x1a(\n\x08Response\x12\x1c\n\x05trace\x18\x01 \x01(\x0b\x32\r.mlflow.Trace:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"{\n\x0e\x42\x61tchGetTraces\x12\x11\n\ttrace_ids\x18\x01 \x03(\t\x1a)\n\x08Response\x12\x1d\n\x06traces\x18\x01 \x03(\x0b\x32\r.mlflow.Trace:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x97\x01\n\x08GetTrace\x12\x16\n\x08trace_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x1c\n\rallow_partial\x18\x02 \x01(\x08:\x05\x66\x61lse\x1a(\n\x08Response\x12\x1c\n\x05trace\x18\x01 \x01(\x0b\x32\r.mlflow.Trace:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xeb\x01\n\x0cSearchTraces\x12\x16\n\x0e\x65xperiment_ids\x18\x01 \x03(\t\x12\x0e\n\x06\x66ilter\x18\x02 \x01(\t\x12\x18\n\x0bmax_results\x18\x03 \x01(\x05:\x03\x31\x30\x30\x12\x10\n\x08order_by\x18\x04 \x03(\t\x12\x12\n\npage_token\x18\x05 \x01(\t\x1a\x46\n\x08Response\x12!\n\x06traces\x18\x01 \x03(\x0b\x32\x11.mlflow.TraceInfo\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xaa\x02\n\x13SearchUnifiedTraces\x12\x16\n\x08model_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x1e\n\x10sql_warehouse_id\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12\x16\n\x0e\x65xperiment_ids\x18\x03 \x03(\t\x12\x0e\n\x06\x66ilter\x18\x04 \x01(\t\x12\x18\n\x0bmax_results\x18\x05 \x01(\x05:\x03\x31\x30\x30\x12\x10\n\x08order_by\x18\x06 \x03(\t\x12\x12\n\npage_token\x18\x07 \x01(\t\x1a\x46\n\x08Response\x12!\n\x06traces\x18\x01 \x03(\x0b\x32\x11.mlflow.TraceInfo\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xc1\x01\n\x15GetOnlineTraceDetails\x12\x16\n\x08trace_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x1e\n\x10sql_warehouse_id\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12$\n\x16source_inference_table\x18\x03 \x01(\tB\x04\xf8\x86\x19\x01\x12*\n\x1csource_databricks_request_id\x18\x04 \x01(\tB\x04\xf8\x86\x19\x01\x1a\x1e\n\x08Response\x12\x12\n\ntrace_data\x18\x01 \x01(\t\"\xc3\x01\n\x0c\x44\x65leteTraces\x12\x1b\n\rexperiment_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x1c\n\x14max_timestamp_millis\x18\x02 \x01(\x03\x12\x12\n\nmax_traces\x18\x03 \x01(\x05\x12\x13\n\x0brequest_ids\x18\x04 \x03(\t\x1a\"\n\x08Response\x12\x16\n\x0etraces_deleted\x18\x01 \x01(\x05:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xc5\x01\n\x0e\x44\x65leteTracesV3\x12\x1b\n\rexperiment_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x1c\n\x14max_timestamp_millis\x18\x02 \x01(\x03\x12\x12\n\nmax_traces\x18\x03 \x01(\x05\x12\x13\n\x0brequest_ids\x18\x04 \x03(\t\x1a\"\n\x08Response\x12\x16\n\x0etraces_deleted\x18\x01 \x01(\x05:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xb5\x02\n\x1f\x43\x61lculateTraceFilterCorrelation\x12\x16\n\x0e\x65xperiment_ids\x18\x01 \x03(\t\x12\x16\n\x0e\x66ilter_string1\x18\x02 \x01(\t\x12\x16\n\x0e\x66ilter_string2\x18\x03 \x01(\t\x12\x13\n\x0b\x62\x61se_filter\x18\x04 \x01(\t\x1a\x87\x01\n\x08Response\x12\x0c\n\x04npmi\x18\x01 \x01(\x01\x12\x15\n\rnpmi_smoothed\x18\x02 \x01(\x01\x12\x15\n\rfilter1_count\x18\x03 \x01(\x05\x12\x15\n\rfilter2_count\x18\x04 \x01(\x05\x12\x13\n\x0bjoint_count\x18\x05 \x01(\x05\x12\x13\n\x0btotal_count\x18\x06 \x01(\x05:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"v\n\x0bSetTraceTag\x12\x12\n\nrequest_id\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\x12\r\n\x05value\x18\x03 \x01(\t\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x88\x01\n\rSetTraceTagV3\x12\x10\n\x08trace_id\x18\x04 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\x12\r\n\x05value\x18\x03 \x01(\t\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]J\x04\x08\x01\x10\x02R\nrequest_id\"z\n\x0e\x44\x65leteTraceTag\x12\x10\n\x08trace_id\x18\x03 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]J\x04\x08\x01\x10\x02R\nrequest_id\"l\n\x10\x44\x65leteTraceTagV3\x12\x12\n\nrequest_id\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"c\n\x05Trace\x12\'\n\ntrace_info\x18\x01 \x01(\x0b\x32\x13.mlflow.TraceInfoV3\x12\x31\n\x05spans\x18\x02 \x03(\x0b\x32\".opentelemetry.proto.trace.v1.Span\"\xb6\x03\n\rTraceLocation\x12\x35\n\x04type\x18\x01 \x01(\x0e\x32\'.mlflow.TraceLocation.TraceLocationType\x12K\n\x11mlflow_experiment\x18\x02 \x01(\x0b\x32..mlflow.TraceLocation.MlflowExperimentLocationH\x00\x12G\n\x0finference_table\x18\x03 \x01(\x0b\x32,.mlflow.TraceLocation.InferenceTableLocationH\x00\x1a\x31\n\x18MlflowExperimentLocation\x12\x15\n\rexperiment_id\x18\x01 \x01(\t\x1a\x31\n\x16InferenceTableLocation\x12\x17\n\x0f\x66ull_table_name\x18\x01 \x01(\t\"d\n\x11TraceLocationType\x12#\n\x1fTRACE_LOCATION_TYPE_UNSPECIFIED\x10\x00\x12\x15\n\x11MLFLOW_EXPERIMENT\x10\x01\x12\x13\n\x0fINFERENCE_TABLE\x10\x02\x42\x0c\n\nidentifier\"\x9b\x05\n\x0bTraceInfoV3\x12\x10\n\x08trace_id\x18\x01 \x01(\t\x12\x19\n\x11\x63lient_request_id\x18\x02 \x01(\t\x12-\n\x0etrace_location\x18\x03 \x01(\x0b\x32\x15.mlflow.TraceLocation\x12\x0f\n\x07request\x18\x04 \x01(\t\x12\x10\n\x08response\x18\x05 \x01(\t\x12\x17\n\x0frequest_preview\x18\x0c \x01(\t\x12\x18\n\x10response_preview\x18\r \x01(\t\x12\x30\n\x0crequest_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x35\n\x12\x65xecution_duration\x18\x07 \x01(\x0b\x32\x19.google.protobuf.Duration\x12(\n\x05state\x18\x08 \x01(\x0e\x32\x19.mlflow.TraceInfoV3.State\x12>\n\x0etrace_metadata\x18\t \x03(\x0b\x32&.mlflow.TraceInfoV3.TraceMetadataEntry\x12\x33\n\x0b\x61ssessments\x18\n \x03(\x0b\x32\x1e.mlflow.assessments.Assessment\x12+\n\x04tags\x18\x0b \x03(\x0b\x32\x1d.mlflow.TraceInfoV3.TagsEntry\x1a\x34\n\x12TraceMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a+\n\tTagsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"B\n\x05State\x12\x15\n\x11STATE_UNSPECIFIED\x10\x00\x12\x06\n\x02OK\x10\x01\x12\t\n\x05\x45RROR\x10\x02\x12\x0f\n\x0bIN_PROGRESS\x10\x03\"\\\n\x0cStartTraceV3\x12\"\n\x05trace\x18\x01 \x01(\x0b\x32\r.mlflow.TraceB\x04\xf8\x86\x19\x01\x1a(\n\x08Response\x12\x1c\n\x05trace\x18\x01 \x01(\x0b\x32\r.mlflow.Trace\"F\n\x0fLinkTracesToRun\x12\x11\n\ttrace_ids\x18\x01 \x03(\t\x12\x14\n\x06run_id\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response\"h\n\x0e\x44\x61tasetSummary\x12\x1b\n\rexperiment_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x12\n\x04name\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12\x14\n\x06\x64igest\x18\x03 \x01(\tB\x04\xf8\x86\x19\x01\x12\x0f\n\x07\x63ontext\x18\x04 \x01(\t\"\x94\x01\n\x0eSearchDatasets\x12\x16\n\x0e\x65xperiment_ids\x18\x01 \x03(\t\x1a=\n\x08Response\x12\x31\n\x11\x64\x61taset_summaries\x18\x01 \x03(\x0b\x32\x16.mlflow.DatasetSummary:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x9a\x02\n\x11\x43reateLoggedModel\x12\x1b\n\rexperiment_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x12\n\nmodel_type\x18\x03 \x01(\t\x12\x15\n\rsource_run_id\x18\x04 \x01(\t\x12,\n\x06params\x18\x05 \x03(\x0b\x32\x1c.mlflow.LoggedModelParameter\x12$\n\x04tags\x18\x06 \x03(\x0b\x32\x16.mlflow.LoggedModelTag\x1a.\n\x08Response\x12\"\n\x05model\x18\x01 \x01(\x0b\x32\x13.mlflow.LoggedModel:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xbb\x01\n\x13\x46inalizeLoggedModel\x12\x16\n\x08model_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12/\n\x06status\x18\x02 \x01(\x0e\x32\x19.mlflow.LoggedModelStatusB\x04\xf8\x86\x19\x01\x1a.\n\x08Response\x12\"\n\x05model\x18\x01 \x01(\x0b\x32\x13.mlflow.LoggedModel:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x85\x01\n\x0eGetLoggedModel\x12\x16\n\x08model_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a.\n\x08Response\x12\"\n\x05model\x18\x01 \x01(\x0b\x32\x13.mlflow.LoggedModel:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"d\n\x11\x44\x65leteLoggedModel\x12\x16\n\x08model_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xf7\x03\n\x12SearchLoggedModels\x12\x16\n\x0e\x65xperiment_ids\x18\x01 \x03(\t\x12\x0e\n\x06\x66ilter\x18\x02 \x01(\t\x12\x34\n\x08\x64\x61tasets\x18\x06 \x03(\x0b\x32\".mlflow.SearchLoggedModels.Dataset\x12\x17\n\x0bmax_results\x18\x03 \x01(\x05:\x02\x35\x30\x12\x34\n\x08order_by\x18\x04 \x03(\x0b\x32\".mlflow.SearchLoggedModels.OrderBy\x12\x12\n\npage_token\x18\x05 \x01(\t\x1a=\n\x07\x44\x61taset\x12\x1a\n\x0c\x64\x61taset_name\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x16\n\x0e\x64\x61taset_digest\x18\x02 \x01(\t\x1aj\n\x07OrderBy\x12\x18\n\nfield_name\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x17\n\tascending\x18\x02 \x01(\x08:\x04true\x12\x14\n\x0c\x64\x61taset_name\x18\x03 \x01(\t\x12\x16\n\x0e\x64\x61taset_digest\x18\x04 \x01(\t\x1aH\n\x08Response\x12#\n\x06models\x18\x01 \x03(\x0b\x32\x13.mlflow.LoggedModel\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xaf\x01\n\x12SetLoggedModelTags\x12\x16\n\x08model_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12$\n\x04tags\x18\x02 \x03(\x0b\x32\x16.mlflow.LoggedModelTag\x1a.\n\x08Response\x12\"\n\x05model\x18\x01 \x01(\x0b\x32\x13.mlflow.LoggedModel:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"~\n\x14\x44\x65leteLoggedModelTag\x12\x16\n\x08model_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x15\n\x07tag_key\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xec\x01\n\x18ListLoggedModelArtifacts\x12\x16\n\x08model_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x1f\n\x17\x61rtifact_directory_path\x18\x02 \x01(\t\x12\x12\n\npage_token\x18\x03 \x01(\t\x1aV\n\x08Response\x12\x10\n\x08root_uri\x18\x01 \x01(\t\x12\x1f\n\x05\x66iles\x18\x02 \x03(\x0b\x32\x10.mlflow.FileInfo\x12\x17\n\x0fnext_page_token\x18\x03 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x9c\x01\n\x1bLogLoggedModelParamsRequest\x12\x16\n\x08model_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12,\n\x06params\x18\x02 \x03(\x0b\x32\x1c.mlflow.LoggedModelParameter\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"[\n\x0bLoggedModel\x12%\n\x04info\x18\x01 \x01(\x0b\x32\x17.mlflow.LoggedModelInfo\x12%\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x17.mlflow.LoggedModelData\"\x84\x03\n\x0fLoggedModelInfo\x12\x10\n\x08model_id\x18\x01 \x01(\t\x12\x15\n\rexperiment_id\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x1d\n\x15\x63reation_timestamp_ms\x18\x04 \x01(\x03\x12!\n\x19last_updated_timestamp_ms\x18\x05 \x01(\x03\x12\x14\n\x0c\x61rtifact_uri\x18\x06 \x01(\t\x12)\n\x06status\x18\x07 \x01(\x0e\x32\x19.mlflow.LoggedModelStatus\x12\x12\n\ncreator_id\x18\x08 \x01(\x03\x12\x12\n\nmodel_type\x18\t \x01(\t\x12\x15\n\rsource_run_id\x18\n \x01(\t\x12\x16\n\x0estatus_message\x18\x0b \x01(\t\x12$\n\x04tags\x18\x0c \x03(\x0b\x32\x16.mlflow.LoggedModelTag\x12:\n\rregistrations\x18\r \x03(\x0b\x32#.mlflow.LoggedModelRegistrationInfo\",\n\x0eLoggedModelTag\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"<\n\x1bLoggedModelRegistrationInfo\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\t\"`\n\x0fLoggedModelData\x12,\n\x06params\x18\x01 \x03(\x0b\x32\x1c.mlflow.LoggedModelParameter\x12\x1f\n\x07metrics\x18\x02 \x03(\x0b\x32\x0e.mlflow.Metric\"2\n\x14LoggedModelParameter\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\x81\x02\n\x0eSearchTracesV3\x12(\n\tlocations\x18\x01 \x03(\x0b\x32\x15.mlflow.TraceLocation\x12\x0e\n\x06\x66ilter\x18\x02 \x01(\t\x12\x18\n\x0bmax_results\x18\x03 \x01(\x05:\x03\x31\x30\x30\x12\x10\n\x08order_by\x18\x04 \x03(\t\x12\x12\n\npage_token\x18\x05 \x01(\t\x1aH\n\x08Response\x12#\n\x06traces\x18\x01 \x03(\x0b\x32\x13.mlflow.TraceInfoV3\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xb8\x02\n\rCreateDataset\x12\x12\n\x04name\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x16\n\x0e\x65xperiment_ids\x18\x02 \x03(\t\x12\x44\n\x0bsource_type\x18\x03 \x01(\x0e\x32/.mlflow.datasets.DatasetRecordSource.SourceType\x12\x0e\n\x06source\x18\x04 \x01(\t\x12\x0e\n\x06schema\x18\x05 \x01(\t\x12\x0f\n\x07profile\x18\x06 \x01(\t\x12\x12\n\ncreated_by\x18\x07 \x01(\t\x12\x0c\n\x04tags\x18\x08 \x01(\t\x1a\x35\n\x08Response\x12)\n\x07\x64\x61taset\x18\x01 \x01(\x0b\x32\x18.mlflow.datasets.Dataset:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xb7\x01\n\nGetDataset\x12\x18\n\ndataset_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x12\n\npage_token\x18\x02 \x01(\t\x1aN\n\x08Response\x12)\n\x07\x64\x61taset\x18\x01 \x01(\x0b\x32\x18.mlflow.datasets.Dataset\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"b\n\rDeleteDataset\x12\x18\n\ndataset_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x88\x02\n\x18SearchEvaluationDatasets\x12\x16\n\x0e\x65xperiment_ids\x18\x01 \x03(\t\x12\x15\n\rfilter_string\x18\x02 \x01(\t\x12\x19\n\x0bmax_results\x18\x03 \x01(\x05:\x04\x31\x30\x30\x30\x12\x10\n\x08order_by\x18\x04 \x03(\t\x12\x12\n\npage_token\x18\x05 \x01(\t\x1aO\n\x08Response\x12*\n\x08\x64\x61tasets\x18\x01 \x03(\x0b\x32\x18.mlflow.datasets.Dataset\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xa2\x01\n\x0eSetDatasetTags\x12\x18\n\ndataset_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x12\n\x04tags\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x1a\x35\n\x08Response\x12)\n\x07\x64\x61taset\x18\x01 \x01(\x0b\x32\x18.mlflow.datasets.Dataset:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"x\n\x10\x44\x65leteDatasetTag\x12\x18\n\ndataset_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x11\n\x03key\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xc3\x01\n\x14UpsertDatasetRecords\x12\x18\n\ndataset_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x15\n\x07records\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12\x12\n\nupdated_by\x18\x03 \x01(\t\x1a\x39\n\x08Response\x12\x16\n\x0einserted_count\x18\x01 \x01(\x05\x12\x15\n\rupdated_count\x18\x02 \x01(\x05:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x84\x01\n\x17GetDatasetExperimentIds\x12\x18\n\ndataset_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a\"\n\x08Response\x12\x16\n\x0e\x65xperiment_ids\x18\x01 \x03(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xbf\x01\n\x11GetDatasetRecords\x12\x18\n\ndataset_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x19\n\x0bmax_results\x18\x02 \x01(\x05:\x04\x31\x30\x30\x30\x12\x12\n\npage_token\x18\x03 \x01(\t\x1a\x34\n\x08Response\x12\x0f\n\x07records\x18\x01 \x01(\t\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xaf\x01\n\x17\x41\x64\x64\x44\x61tasetToExperiments\x12\x18\n\ndataset_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x16\n\x0e\x65xperiment_ids\x18\x02 \x03(\t\x1a\x35\n\x08Response\x12)\n\x07\x64\x61taset\x18\x01 \x01(\x0b\x32\x18.mlflow.datasets.Dataset:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xb4\x01\n\x1cRemoveDatasetFromExperiments\x12\x18\n\ndataset_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x16\n\x0e\x65xperiment_ids\x18\x02 \x03(\t\x1a\x35\n\x08Response\x12)\n\x07\x64\x61taset\x18\x01 \x01(\x0b\x32\x18.mlflow.datasets.Dataset:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x85\x02\n\x0eRegisterScorer\x12\x15\n\rexperiment_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x19\n\x11serialized_scorer\x18\x03 \x01(\t\x1a\x85\x01\n\x08Response\x12\x0f\n\x07version\x18\x01 \x01(\x05\x12\x11\n\tscorer_id\x18\x02 \x01(\t\x12\x15\n\rexperiment_id\x18\x03 \x01(\t\x12\x0c\n\x04name\x18\x04 \x01(\t\x12\x19\n\x11serialized_scorer\x18\x05 \x01(\t\x12\x15\n\rcreation_time\x18\x06 \x01(\x03:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"~\n\x0bListScorers\x12\x15\n\rexperiment_id\x18\x01 \x01(\t\x1a+\n\x08Response\x12\x1f\n\x07scorers\x18\x01 \x03(\x0b\x32\x0e.mlflow.Scorer:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x93\x01\n\x12ListScorerVersions\x12\x15\n\rexperiment_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x1a+\n\x08Response\x12\x1f\n\x07scorers\x18\x01 \x03(\x0b\x32\x0e.mlflow.Scorer:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x9a\x01\n\tGetScorer\x12\x15\n\rexperiment_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\x05\x1a*\n\x08Response\x12\x1e\n\x06scorer\x18\x01 \x01(\x0b\x32\x0e.mlflow.Scorer:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"}\n\x0c\x44\x65leteScorer\x12\x15\n\rexperiment_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\x05\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x91\x01\n\x06Scorer\x12\x15\n\rexperiment_id\x18\x01 \x01(\x05\x12\x13\n\x0bscorer_name\x18\x02 \x01(\t\x12\x16\n\x0escorer_version\x18\x03 \x01(\x05\x12\x19\n\x11serialized_scorer\x18\x04 \x01(\t\x12\x15\n\rcreation_time\x18\x05 \x01(\x03\x12\x11\n\tscorer_id\x18\x06 \x01(\t\"4\n\tWorkspace\x12\x12\n\x04name\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\"p\n\x0eListWorkspaces\x1a\x31\n\x08Response\x12%\n\nworkspaces\x18\x01 \x03(\x0b\x32\x11.mlflow.Workspace:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x99\x01\n\x0f\x43reateWorkspace\x12\x12\n\x04name\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x1a\x30\n\x08Response\x12$\n\tworkspace\x18\x01 \x01(\x0b\x32\x11.mlflow.Workspace:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x8b\x01\n\x0cGetWorkspace\x12\x1c\n\x0eworkspace_name\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a\x30\n\x08Response\x12$\n\tworkspace\x18\x01 \x01(\x0b\x32\x11.mlflow.Workspace:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xa3\x01\n\x0fUpdateWorkspace\x12\x1c\n\x0eworkspace_name\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x1a\x30\n\x08Response\x12$\n\tworkspace\x18\x01 \x01(\x0b\x32\x11.mlflow.Workspace:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"h\n\x0f\x44\x65leteWorkspace\x12\x1c\n\x0eworkspace_name\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]*6\n\x08ViewType\x12\x0f\n\x0b\x41\x43TIVE_ONLY\x10\x01\x12\x10\n\x0c\x44\x45LETED_ONLY\x10\x02\x12\x07\n\x03\x41LL\x10\x03*I\n\nSourceType\x12\x0c\n\x08NOTEBOOK\x10\x01\x12\x07\n\x03JOB\x10\x02\x12\x0b\n\x07PROJECT\x10\x03\x12\t\n\x05LOCAL\x10\x04\x12\x0c\n\x07UNKNOWN\x10\xe8\x07*M\n\tRunStatus\x12\x0b\n\x07RUNNING\x10\x01\x12\r\n\tSCHEDULED\x10\x02\x12\x0c\n\x08\x46INISHED\x10\x03\x12\n\n\x06\x46\x41ILED\x10\x04\x12\n\n\x06KILLED\x10\x05*O\n\x0bTraceStatus\x12\x1c\n\x18TRACE_STATUS_UNSPECIFIED\x10\x00\x12\x06\n\x02OK\x10\x01\x12\t\n\x05\x45RROR\x10\x02\x12\x0f\n\x0bIN_PROGRESS\x10\x03*\x8a\x01\n\x11LoggedModelStatus\x12#\n\x1fLOGGED_MODEL_STATUS_UNSPECIFIED\x10\x00\x12\x18\n\x14LOGGED_MODEL_PENDING\x10\x01\x12\x16\n\x12LOGGED_MODEL_READY\x10\x02\x12\x1e\n\x1aLOGGED_MODEL_UPLOAD_FAILED\x10\x03\x32\x85`\n\rMlflowService\x12\xa6\x01\n\x13getExperimentByName\x12\x1b.mlflow.GetExperimentByName\x1a$.mlflow.GetExperimentByName.Response\"L\xf2\x86\x19H\n,\n\x03GET\x12\x1f/mlflow/experiments/get-by-name\x1a\x04\x08\x02\x10\x00\x10\x01*\x16Get Experiment By Name\x12\x94\x01\n\x10\x63reateExperiment\x12\x18.mlflow.CreateExperiment\x1a!.mlflow.CreateExperiment.Response\"C\xf2\x86\x19?\n(\n\x04POST\x12\x1a/mlflow/experiments/create\x1a\x04\x08\x02\x10\x00\x10\x01*\x11\x43reate Experiment\x12\xc1\x01\n\x11searchExperiments\x12\x19.mlflow.SearchExperiments\x1a\".mlflow.SearchExperiments.Response\"m\xf2\x86\x19i\n(\n\x04POST\x12\x1a/mlflow/experiments/search\x1a\x04\x08\x02\x10\x00\n\'\n\x03GET\x12\x1a/mlflow/experiments/search\x1a\x04\x08\x02\x10\x00\x10\x01*\x12Search Experiments\x12\x88\x01\n\rgetExperiment\x12\x15.mlflow.GetExperiment\x1a\x1e.mlflow.GetExperiment.Response\"@\xf2\x86\x19\x38\n$\n\x03GET\x12\x17/mlflow/experiments/get\x1a\x04\x08\x02\x10\x00\x10\x01*\x0eGet Experiment\xba\x8c\x19\x00\x12\x94\x01\n\x10\x64\x65leteExperiment\x12\x18.mlflow.DeleteExperiment\x1a!.mlflow.DeleteExperiment.Response\"C\xf2\x86\x19?\n(\n\x04POST\x12\x1a/mlflow/experiments/delete\x1a\x04\x08\x02\x10\x00\x10\x01*\x11\x44\x65lete Experiment\x12\x99\x01\n\x11restoreExperiment\x12\x19.mlflow.RestoreExperiment\x1a\".mlflow.RestoreExperiment.Response\"E\xf2\x86\x19\x41\n)\n\x04POST\x12\x1b/mlflow/experiments/restore\x1a\x04\x08\x02\x10\x00\x10\x01*\x12Restore Experiment\x12\x94\x01\n\x10updateExperiment\x12\x18.mlflow.UpdateExperiment\x1a!.mlflow.UpdateExperiment.Response\"C\xf2\x86\x19?\n(\n\x04POST\x12\x1a/mlflow/experiments/update\x1a\x04\x08\x02\x10\x00\x10\x01*\x11Update Experiment\x12q\n\tcreateRun\x12\x11.mlflow.CreateRun\x1a\x1a.mlflow.CreateRun.Response\"5\xf2\x86\x19\x31\n!\n\x04POST\x12\x13/mlflow/runs/create\x1a\x04\x08\x02\x10\x00\x10\x01*\nCreate Run\x12q\n\tupdateRun\x12\x11.mlflow.UpdateRun\x1a\x1a.mlflow.UpdateRun.Response\"5\xf2\x86\x19\x31\n!\n\x04POST\x12\x13/mlflow/runs/update\x1a\x04\x08\x02\x10\x00\x10\x01*\nUpdate Run\x12q\n\tdeleteRun\x12\x11.mlflow.DeleteRun\x1a\x1a.mlflow.DeleteRun.Response\"5\xf2\x86\x19\x31\n!\n\x04POST\x12\x13/mlflow/runs/delete\x1a\x04\x08\x02\x10\x00\x10\x01*\nDelete Run\x12v\n\nrestoreRun\x12\x12.mlflow.RestoreRun\x1a\x1b.mlflow.RestoreRun.Response\"7\xf2\x86\x19\x33\n\"\n\x04POST\x12\x14/mlflow/runs/restore\x1a\x04\x08\x02\x10\x00\x10\x01*\x0bRestore Run\x12u\n\tlogMetric\x12\x11.mlflow.LogMetric\x1a\x1a.mlflow.LogMetric.Response\"9\xf2\x86\x19\x35\n%\n\x04POST\x12\x17/mlflow/runs/log-metric\x1a\x04\x08\x02\x10\x00\x10\x01*\nLog Metric\x12t\n\x08logParam\x12\x10.mlflow.LogParam\x1a\x19.mlflow.LogParam.Response\";\xf2\x86\x19\x37\n(\n\x04POST\x12\x1a/mlflow/runs/log-parameter\x1a\x04\x08\x02\x10\x00\x10\x01*\tLog Param\x12\xa1\x01\n\x10setExperimentTag\x12\x18.mlflow.SetExperimentTag\x1a!.mlflow.SetExperimentTag.Response\"P\xf2\x86\x19L\n4\n\x04POST\x12&/mlflow/experiments/set-experiment-tag\x1a\x04\x08\x02\x10\x00\x10\x01*\x12Set Experiment Tag\x12\xb0\x01\n\x13\x64\x65leteExperimentTag\x12\x1b.mlflow.DeleteExperimentTag\x1a$.mlflow.DeleteExperimentTag.Response\"V\xf2\x86\x19R\n7\n\x04POST\x12)/mlflow/experiments/delete-experiment-tag\x1a\x04\x08\x02\x10\x00\x10\x01*\x15\x44\x65lete Experiment Tag\x12\x66\n\x06setTag\x12\x0e.mlflow.SetTag\x1a\x17.mlflow.SetTag.Response\"3\xf2\x86\x19/\n\"\n\x04POST\x12\x14/mlflow/runs/set-tag\x1a\x04\x08\x02\x10\x00\x10\x01*\x07Set Tag\x12\x88\x01\n\x0bsetTraceTag\x12\x13.mlflow.SetTraceTag\x1a\x1c.mlflow.SetTraceTag.Response\"F\xf2\x86\x19\x42\n/\n\x05PATCH\x12 /mlflow/traces/{request_id}/tags\x1a\x04\x08\x02\x10\x00\x10\x03*\rSet Trace Tag\x12\x8f\x01\n\rsetTraceTagV3\x12\x15.mlflow.SetTraceTagV3\x1a\x1e.mlflow.SetTraceTagV3.Response\"G\xf2\x86\x19\x43\n-\n\x05PATCH\x12\x1e/mlflow/traces/{trace_id}/tags\x1a\x04\x08\x03\x10\x00\x10\x03*\x10Set Trace Tag V3\x12\x95\x01\n\x0e\x64\x65leteTraceTag\x12\x16.mlflow.DeleteTraceTag\x1a\x1f.mlflow.DeleteTraceTag.Response\"J\xf2\x86\x19\x46\n0\n\x06\x44\x45LETE\x12 /mlflow/traces/{request_id}/tags\x1a\x04\x08\x02\x10\x00\x10\x03*\x10\x44\x65lete Trace Tag\x12\x9c\x01\n\x10\x64\x65leteTraceTagV3\x12\x18.mlflow.DeleteTraceTagV3\x1a!.mlflow.DeleteTraceTagV3.Response\"K\xf2\x86\x19G\n.\n\x06\x44\x45LETE\x12\x1e/mlflow/traces/{trace_id}/tags\x1a\x04\x08\x03\x10\x00\x10\x03*\x13\x44\x65lete Trace Tag V3\x12u\n\tdeleteTag\x12\x11.mlflow.DeleteTag\x1a\x1a.mlflow.DeleteTag.Response\"9\xf2\x86\x19\x35\n%\n\x04POST\x12\x17/mlflow/runs/delete-tag\x1a\x04\x08\x02\x10\x00\x10\x01*\nDelete Tag\x12\x65\n\x06getRun\x12\x0e.mlflow.GetRun\x1a\x17.mlflow.GetRun.Response\"2\xf2\x86\x19*\n\x1d\n\x03GET\x12\x10/mlflow/runs/get\x1a\x04\x08\x02\x10\x00\x10\x01*\x07Get Run\xba\x8c\x19\x00\x12y\n\nsearchRuns\x12\x12.mlflow.SearchRuns\x1a\x1b.mlflow.SearchRuns.Response\":\xf2\x86\x19\x32\n!\n\x04POST\x12\x13/mlflow/runs/search\x1a\x04\x08\x02\x10\x00\x10\x01*\x0bSearch Runs\xba\x8c\x19\x00\x12\x87\x01\n\rlistArtifacts\x12\x15.mlflow.ListArtifacts\x1a\x1e.mlflow.ListArtifacts.Response\"?\xf2\x86\x19\x37\n#\n\x03GET\x12\x16/mlflow/artifacts/list\x1a\x04\x08\x02\x10\x00\x10\x01*\x0eList Artifacts\xba\x8c\x19\x00\x12\x95\x01\n\x10getMetricHistory\x12\x18.mlflow.GetMetricHistory\x1a!.mlflow.GetMetricHistory.Response\"D\xf2\x86\x19@\n(\n\x03GET\x12\x1b/mlflow/metrics/get-history\x1a\x04\x08\x02\x10\x00\x10\x01*\x12Get Metric History\x12\xb7\x01\n\x1cgetMetricHistoryBulkInterval\x12$.mlflow.GetMetricHistoryBulkInterval\x1a-.mlflow.GetMetricHistoryBulkInterval.Response\"B\xf2\x86\x19:\n6\n\x03GET\x12)/mlflow/metrics/get-history-bulk-interval\x1a\x04\x08\x02\x10\x0b\x10\x03\xba\x8c\x19\x00\x12p\n\x08logBatch\x12\x10.mlflow.LogBatch\x1a\x19.mlflow.LogBatch.Response\"7\xf2\x86\x19\x33\n$\n\x04POST\x12\x16/mlflow/runs/log-batch\x1a\x04\x08\x02\x10\x00\x10\x01*\tLog Batch\x12p\n\x08logModel\x12\x10.mlflow.LogModel\x1a\x19.mlflow.LogModel.Response\"7\xf2\x86\x19\x33\n$\n\x04POST\x12\x16/mlflow/runs/log-model\x1a\x04\x08\x02\x10\x00\x10\x01*\tLog Model\x12u\n\tlogInputs\x12\x11.mlflow.LogInputs\x1a\x1a.mlflow.LogInputs.Response\"9\xf2\x86\x19\x35\n%\n\x04POST\x12\x17/mlflow/runs/log-inputs\x1a\x04\x08\x02\x10\x00\x10\x01*\nLog Inputs\x12v\n\nlogOutputs\x12\x12.mlflow.LogOutputs\x1a\x1b.mlflow.LogOutputs.Response\"7\xf2\x86\x19\x33\n\"\n\x04POST\x12\x14/mlflow/runs/outputs\x1a\x04\x08\x02\x10\x00\x10\x03*\x0bLog Outputs\x12\x87\x01\n\x0esearchDatasets\x12\x16.mlflow.SearchDatasets\x1a\x1f.mlflow.SearchDatasets.Response\"<\xf2\x86\x19\x34\n0\n\x04POST\x12\"mlflow/experiments/search-datasets\x1a\x04\x08\x02\x10\x00\x10\x03\xba\x8c\x19\x00\x12p\n\nstartTrace\x12\x12.mlflow.StartTrace\x1a\x1b.mlflow.StartTrace.Response\"1\xf2\x86\x19-\n\x1c\n\x04POST\x12\x0e/mlflow/traces\x1a\x04\x08\x02\x10\x00\x10\x03*\x0bStart Trace\x12v\n\x08\x65ndTrace\x12\x10.mlflow.EndTrace\x1a\x19.mlflow.EndTrace.Response\"=\xf2\x86\x19\x39\n*\n\x05PATCH\x12\x1b/mlflow/traces/{request_id}\x1a\x04\x08\x02\x10\x00\x10\x03*\tEnd Trace\x12\x89\x01\n\x0cgetTraceInfo\x12\x14.mlflow.GetTraceInfo\x1a\x1d.mlflow.GetTraceInfo.Response\"D\xf2\x86\x19@\n-\n\x03GET\x12 /mlflow/traces/{request_id}/info\x1a\x04\x08\x02\x10\x00\x10\x03*\rGet TraceInfo\x12\x8b\x01\n\x0egetTraceInfoV3\x12\x16.mlflow.GetTraceInfoV3\x1a\x1f.mlflow.GetTraceInfoV3.Response\"@\xf2\x86\x19<\n&\n\x03GET\x12\x19/mlflow/traces/{trace_id}\x1a\x04\x08\x03\x10\x00\x10\x03*\x10Get TraceInfo v3\x12n\n\x08getTrace\x12\x10.mlflow.GetTrace\x1a\x19.mlflow.GetTrace.Response\"5\xf2\x86\x19\x31\n\x1f\n\x03GET\x12\x12/mlflow/traces/get\x1a\x04\x08\x03\x10\x00\x10\x03*\x0cGet Trace v3\x12\x83\x01\n\x0e\x62\x61tchGetTraces\x12\x16.mlflow.BatchGetTraces\x1a\x1f.mlflow.BatchGetTraces.Response\"8\xf2\x86\x19\x34\n$\n\x03GET\x12\x17/mlflow/traces/batchGet\x1a\x04\x08\x03\x10\x00\x10\x03*\nGet Traces\x12w\n\x0csearchTraces\x12\x14.mlflow.SearchTraces\x1a\x1d.mlflow.SearchTraces.Response\"2\xf2\x86\x19.\n\x1b\n\x03GET\x12\x0e/mlflow/traces\x1a\x04\x08\x02\x10\x00\x10\x03*\rSearch Traces\x12\x88\x01\n\x0esearchTracesV3\x12\x16.mlflow.SearchTracesV3\x1a\x1f.mlflow.SearchTracesV3.Response\"=\xf2\x86\x19\x39\n#\n\x04POST\x12\x15/mlflow/traces/search\x1a\x04\x08\x03\x10\x00\x10\x03*\x10Search Traces V3\x12i\n\x0cstartTraceV3\x12\x14.mlflow.StartTraceV3\x1a\x1d.mlflow.StartTraceV3.Response\"$\xf2\x86\x19 \n\x1c\n\x04POST\x12\x0e/mlflow/traces\x1a\x04\x08\x03\x10\x00\x10\x03\x12\x92\x01\n\x0flinkTracesToRun\x12\x17.mlflow.LinkTracesToRun\x1a .mlflow.LinkTracesToRun.Response\"D\xf2\x86\x19@\n(\n\x04POST\x12\x1a/mlflow/traces/link-to-run\x1a\x04\x08\x02\x10\x00\x10\x03*\x12Link Traces to Run\x12\xa2\x01\n\x19searchUnifiedTraceHandler\x12\x1b.mlflow.SearchUnifiedTraces\x1a$.mlflow.SearchUnifiedTraces.Response\"B\xf2\x86\x19>\n#\n\x03GET\x12\x16/mlflow/unified-traces\x1a\x04\x08\x02\x10\x00\x10\x03*\x15Search Unified Traces\x12\xaf\x01\n\x15getOnlineTraceDetails\x12\x1d.mlflow.GetOnlineTraceDetails\x1a&.mlflow.GetOnlineTraceDetails.Response\"O\xf2\x86\x19K\n-\n\x03GET\x12 /mlflow/get-online-trace-details\x1a\x04\x08\x02\x10\x00\x10\x03*\x18Get Online Trace Details\x12\x86\x01\n\x0c\x64\x65leteTraces\x12\x14.mlflow.DeleteTraces\x1a\x1d.mlflow.DeleteTraces.Response\"A\xf2\x86\x19=\n*\n\x04POST\x12\x1c/mlflow/traces/delete-traces\x1a\x04\x08\x02\x10\x00\x10\x03*\rDelete Traces\x12\x8f\x01\n\x0e\x64\x65leteTracesV3\x12\x16.mlflow.DeleteTracesV3\x1a\x1f.mlflow.DeleteTracesV3.Response\"D\xf2\x86\x19@\n*\n\x04POST\x12\x1c/mlflow/traces/delete-traces\x1a\x04\x08\x03\x10\x00\x10\x03*\x10\x44\x65lete Traces V3\x12\xe3\x01\n\x1f\x63\x61lculateTraceFilterCorrelation\x12\'.mlflow.CalculateTraceFilterCorrelation\x1a\x30.mlflow.CalculateTraceFilterCorrelation.Response\"e\xf2\x86\x19\x61\n9\n\x04POST\x12+/mlflow/traces/calculate-filter-correlation\x1a\x04\x08\x03\x10\x00\x10\x03*\"Calculate Trace Filter Correlation\x12\x83\x01\n\x0elistWorkspaces\x12\x16.mlflow.ListWorkspaces\x1a\x1f.mlflow.ListWorkspaces.Response\"8\xf2\x86\x19\x34\n\x1f\n\x03GET\x12\x12/mlflow/workspaces\x1a\x04\x08\x02\x10\x00\x10\x03*\x0fList Workspaces\x12\x88\x01\n\x0f\x63reateWorkspace\x12\x17.mlflow.CreateWorkspace\x1a .mlflow.CreateWorkspace.Response\":\xf2\x86\x19\x36\n \n\x04POST\x12\x12/mlflow/workspaces\x1a\x04\x08\x02\x10\x00\x10\x03*\x10\x43reate Workspace\x12\x8c\x01\n\x0cgetWorkspace\x12\x14.mlflow.GetWorkspace\x1a\x1d.mlflow.GetWorkspace.Response\"G\xf2\x86\x19\x43\n0\n\x03GET\x12#/mlflow/workspaces/{workspace_name}\x1a\x04\x08\x02\x10\x00\x10\x03*\rGet Workspace\x12\x9a\x01\n\x0fupdateWorkspace\x12\x17.mlflow.UpdateWorkspace\x1a .mlflow.UpdateWorkspace.Response\"L\xf2\x86\x19H\n2\n\x05PATCH\x12#/mlflow/workspaces/{workspace_name}\x1a\x04\x08\x02\x10\x00\x10\x03*\x10Update Workspace\x12\x9b\x01\n\x0f\x64\x65leteWorkspace\x12\x17.mlflow.DeleteWorkspace\x1a .mlflow.DeleteWorkspace.Response\"M\xf2\x86\x19I\n3\n\x06\x44\x45LETE\x12#/mlflow/workspaces/{workspace_name}\x1a\x04\x08\x02\x10\x00\x10\x03*\x10\x44\x65lete Workspace\x12\x94\x01\n\x11\x63reateLoggedModel\x12\x19.mlflow.CreateLoggedModel\x1a\".mlflow.CreateLoggedModel.Response\"@\xf2\x86\x19<\n#\n\x04POST\x12\x15/mlflow/logged-models\x1a\x04\x08\x02\x10\x00\x10\x03*\x13\x43reate Logged Model\x12\xa8\x01\n\x13\x66inalizeLoggedModel\x12\x1b.mlflow.FinalizeLoggedModel\x1a$.mlflow.FinalizeLoggedModel.Response\"N\xf2\x86\x19J\n/\n\x05PATCH\x12 /mlflow/logged-models/{model_id}\x1a\x04\x08\x02\x10\x00\x10\x03*\x15\x46inalize Logged Model\x12\x92\x01\n\x0egetLoggedModel\x12\x16.mlflow.GetLoggedModel\x1a\x1f.mlflow.GetLoggedModel.Response\"G\xf2\x86\x19\x43\n-\n\x03GET\x12 /mlflow/logged-models/{model_id}\x1a\x04\x08\x02\x10\x00\x10\x03*\x10Get Logged Model\x12\xa3\x01\n\x11\x64\x65leteLoggedModel\x12\x19.mlflow.DeleteLoggedModel\x1a\".mlflow.DeleteLoggedModel.Response\"O\xf2\x86\x19K\n0\n\x06\x44\x45LETE\x12 /mlflow/logged-models/{model_id}\x1a\x04\x08\x02\x10\x00\x10\x03*\x15\x44\x65lete a Logged Model\x12\x9e\x01\n\x12searchLoggedModels\x12\x1a.mlflow.SearchLoggedModels\x1a#.mlflow.SearchLoggedModels.Response\"G\xf2\x86\x19\x43\n*\n\x04POST\x12\x1c/mlflow/logged-models/search\x1a\x04\x08\x02\x10\x00\x10\x03*\x13Search LoggedModels\x12\xa9\x01\n\x12setLoggedModelTags\x12\x1a.mlflow.SetLoggedModelTags\x1a#.mlflow.SetLoggedModelTags.Response\"R\xf2\x86\x19N\n4\n\x05PATCH\x12%/mlflow/logged-models/{model_id}/tags\x1a\x04\x08\x02\x10\x00\x10\x03*\x14Set Logged Model Tag\x12\xbd\x01\n\x14\x64\x65leteLoggedModelTag\x12\x1c.mlflow.DeleteLoggedModelTag\x1a%.mlflow.DeleteLoggedModelTag.Response\"`\xf2\x86\x19\\\n?\n\x06\x44\x45LETE\x12//mlflow/logged-models/{model_id}/tags/{tag_key}\x1a\x04\x08\x02\x10\x00\x10\x03*\x17\x44\x65lete Logged Model Tag\x12\xd6\x01\n\x18listLoggedModelArtifacts\x12 .mlflow.ListLoggedModelArtifacts\x1a).mlflow.ListLoggedModelArtifacts.Response\"m\xf2\x86\x19i\nC\n\x03GET\x12\x36/mlflow/logged-models/{model_id}/artifacts/directories\x1a\x04\x08\x02\x10\x00\x10\x03* List Artifacts for Logged Models\x12\xc1\x01\n\x14LogLoggedModelParams\x12#.mlflow.LogLoggedModelParamsRequest\x1a,.mlflow.LogLoggedModelParamsRequest.Response\"V\xf2\x86\x19R\n5\n\x04POST\x12\'/mlflow/logged-models/{model_id}/params\x1a\x04\x08\x02\x10\x00\x10\x03*\x17Log Logged Model Params\x12\xb0\x01\n\rGetAssessment\x12\x1c.mlflow.GetAssessmentRequest\x1a%.mlflow.GetAssessmentRequest.Response\"Z\xf2\x86\x19V\nB\n\x03GET\x12\x35/mlflow/traces/{trace_id}/assessments/{assessment_id}\x1a\x04\x08\x03\x10\x00\x10\x03*\x0eGet Assessment\x12\xdf\x01\n\x10\x63reateAssessment\x12\x18.mlflow.CreateAssessment\x1a!.mlflow.CreateAssessment.Response\"\x8d\x01\xf2\x86\x19\x88\x01\n>\n\x04POST\x12\x30/mlflow/traces/{assessment.trace_id}/assessments\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xee\x07\x18\x0c\x18\x01*:Create an assessment of a trace or a span within the trace\x12\xd0\x01\n\x10updateAssessment\x12\x18.mlflow.UpdateAssessment\x1a!.mlflow.UpdateAssessment.Response\"\x7f\xf2\x86\x19{\nD\n\x05PATCH\x12\x35/mlflow/traces/{trace_id}/assessments/{assessment_id}\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xee\x07\x18\x01*)Update an existing assessment on a trace.\x12\xb1\x01\n\x10\x64\x65leteAssessment\x12\x18.mlflow.DeleteAssessment\x1a!.mlflow.DeleteAssessment.Response\"`\xf2\x86\x19\\\nE\n\x06\x44\x45LETE\x12\x35/mlflow/traces/{trace_id}/assessments/{assessment_id}\x1a\x04\x08\x03\x10\x00\x10\x03*\x11\x44\x65lete Assessment\x12\x9a\x01\n\rcreateDataset\x12\x15.mlflow.CreateDataset\x1a\x1e.mlflow.CreateDataset.Response\"R\xf2\x86\x19N\n%\n\x04POST\x12\x17/mlflow/datasets/create\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xee\x07\x18\x0c\x18\x01*\x19\x43reate Evaluation Dataset\x12\x91\x01\n\ngetDataset\x12\x12.mlflow.GetDataset\x1a\x1b.mlflow.GetDataset.Response\"R\xf2\x86\x19N\n*\n\x03GET\x12\x1d/mlflow/datasets/{dataset_id}\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xba\x17\x18\x01*\x16Get Evaluation Dataset\x12\xa0\x01\n\rdeleteDataset\x12\x15.mlflow.DeleteDataset\x1a\x1e.mlflow.DeleteDataset.Response\"X\xf2\x86\x19T\n-\n\x06\x44\x45LETE\x12\x1d/mlflow/datasets/{dataset_id}\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xba\x17\x18\x01*\x19\x44\x65lete Evaluation Dataset\x12\xdd\x01\n\x18searchEvaluationDatasets\x12 .mlflow.SearchEvaluationDatasets\x1a).mlflow.SearchEvaluationDatasets.Response\"t\xf2\x86\x19p\n%\n\x04POST\x12\x17/mlflow/datasets/search\x1a\x04\x08\x03\x10\x00\n$\n\x03GET\x12\x17/mlflow/datasets/search\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\x01*\x1aSearch Evaluation Datasets\x12\xa9\x01\n\x0esetDatasetTags\x12\x16.mlflow.SetDatasetTags\x1a\x1f.mlflow.SetDatasetTags.Response\"^\xf2\x86\x19Z\n1\n\x05PATCH\x12\"/mlflow/datasets/{dataset_id}/tags\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xba\x17\x18\x01*\x1bSet Evaluation Dataset Tags\x12\xb8\x01\n\x10\x64\x65leteDatasetTag\x12\x18.mlflow.DeleteDatasetTag\x1a!.mlflow.DeleteDatasetTag.Response\"g\xf2\x86\x19\x63\n8\n\x06\x44\x45LETE\x12(/mlflow/datasets/{dataset_id}/tags/{key}\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xba\x17\x18\x01*\x1d\x44\x65lete Evaluation Dataset Tag\x12\xc3\x01\n\x14upsertDatasetRecords\x12\x1c.mlflow.UpsertDatasetRecords\x1a%.mlflow.UpsertDatasetRecords.Response\"f\xf2\x86\x19\x62\n3\n\x04POST\x12%/mlflow/datasets/{dataset_id}/records\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xba\x17\x18\x01*!Upsert Evaluation Dataset Records\x12\xd6\x01\n\x17getDatasetExperimentIds\x12\x1f.mlflow.GetDatasetExperimentIds\x1a(.mlflow.GetDatasetExperimentIds.Response\"p\xf2\x86\x19l\n9\n\x03GET\x12,/mlflow/datasets/{dataset_id}/experiment-ids\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xba\x17\x18\x01*%Get Evaluation Dataset Experiment IDs\x12\x8a\x01\n\x0eregisterScorer\x12\x16.mlflow.RegisterScorer\x1a\x1f.mlflow.RegisterScorer.Response\"?\xf2\x86\x19;\n&\n\x04POST\x12\x18/mlflow/scorers/register\x1a\x04\x08\x03\x10\x00\x10\x01*\x0fRegister Scorer\x12y\n\x0blistScorers\x12\x13.mlflow.ListScorers\x1a\x1c.mlflow.ListScorers.Response\"7\xf2\x86\x19\x33\n!\n\x03GET\x12\x14/mlflow/scorers/list\x1a\x04\x08\x03\x10\x00\x10\x01*\x0cList Scorers\x12\x9a\x01\n\x12listScorerVersions\x12\x1a.mlflow.ListScorerVersions\x1a#.mlflow.ListScorerVersions.Response\"C\xf2\x86\x19?\n%\n\x03GET\x12\x18/mlflow/scorers/versions\x1a\x04\x08\x03\x10\x00\x10\x01*\x14List Scorer Versions\x12p\n\tgetScorer\x12\x11.mlflow.GetScorer\x1a\x1a.mlflow.GetScorer.Response\"4\xf2\x86\x19\x30\n \n\x03GET\x12\x13/mlflow/scorers/get\x1a\x04\x08\x03\x10\x00\x10\x01*\nGet Scorer\x12\x82\x01\n\x0c\x64\x65leteScorer\x12\x14.mlflow.DeleteScorer\x1a\x1d.mlflow.DeleteScorer.Response\"=\xf2\x86\x19\x39\n&\n\x06\x44\x45LETE\x12\x16/mlflow/scorers/delete\x1a\x04\x08\x03\x10\x00\x10\x01*\rDelete Scorer\x12\xb6\x01\n\x11getDatasetRecords\x12\x19.mlflow.GetDatasetRecords\x1a\".mlflow.GetDatasetRecords.Response\"b\xf2\x86\x19^\n2\n\x03GET\x12%/mlflow/datasets/{dataset_id}/records\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xba\x17\x18\x01*\x1eGet Evaluation Dataset Records\x12\xcd\x01\n\x17\x61\x64\x64\x44\x61tasetToExperiments\x12\x1f.mlflow.AddDatasetToExperiments\x1a(.mlflow.AddDatasetToExperiments.Response\"g\xf2\x86\x19\x63\n;\n\x04POST\x12-/mlflow/datasets/{dataset_id}/add-experiments\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xba\x17\x18\x01*\x1a\x41\x64\x64 Dataset to Experiments\x12\xe4\x01\n\x1cremoveDatasetFromExperiments\x12$.mlflow.RemoveDatasetFromExperiments\x1a-.mlflow.RemoveDatasetFromExperiments.Response\"o\xf2\x86\x19k\n>\n\x04POST\x12\x30/mlflow/datasets/{dataset_id}/remove-experiments\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xba\x17\x18\x01*\x1fRemove Dataset from ExperimentsB\x1e\n\x14org.mlflow.api.proto\x90\x01\x01\xe2?\x02\x10\x01') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -362,6 +362,26 @@ _globals['_GETSCORER']._serialized_options = b'\342?(\n&com.databricks.rpc.RPC[$this.Response]' _globals['_DELETESCORER']._loaded_options = None _globals['_DELETESCORER']._serialized_options = b'\342?(\n&com.databricks.rpc.RPC[$this.Response]' + _globals['_WORKSPACE'].fields_by_name['name']._loaded_options = None + _globals['_WORKSPACE'].fields_by_name['name']._serialized_options = b'\370\206\031\001' + _globals['_LISTWORKSPACES']._loaded_options = None + _globals['_LISTWORKSPACES']._serialized_options = b'\342?(\n&com.databricks.rpc.RPC[$this.Response]' + _globals['_CREATEWORKSPACE'].fields_by_name['name']._loaded_options = None + _globals['_CREATEWORKSPACE'].fields_by_name['name']._serialized_options = b'\370\206\031\001' + _globals['_CREATEWORKSPACE']._loaded_options = None + _globals['_CREATEWORKSPACE']._serialized_options = b'\342?(\n&com.databricks.rpc.RPC[$this.Response]' + _globals['_GETWORKSPACE'].fields_by_name['workspace_name']._loaded_options = None + _globals['_GETWORKSPACE'].fields_by_name['workspace_name']._serialized_options = b'\370\206\031\001' + _globals['_GETWORKSPACE']._loaded_options = None + _globals['_GETWORKSPACE']._serialized_options = b'\342?(\n&com.databricks.rpc.RPC[$this.Response]' + _globals['_UPDATEWORKSPACE'].fields_by_name['workspace_name']._loaded_options = None + _globals['_UPDATEWORKSPACE'].fields_by_name['workspace_name']._serialized_options = b'\370\206\031\001' + _globals['_UPDATEWORKSPACE']._loaded_options = None + _globals['_UPDATEWORKSPACE']._serialized_options = b'\342?(\n&com.databricks.rpc.RPC[$this.Response]' + _globals['_DELETEWORKSPACE'].fields_by_name['workspace_name']._loaded_options = None + _globals['_DELETEWORKSPACE'].fields_by_name['workspace_name']._serialized_options = b'\370\206\031\001' + _globals['_DELETEWORKSPACE']._loaded_options = None + _globals['_DELETEWORKSPACE']._serialized_options = b'\342?(\n&com.databricks.rpc.RPC[$this.Response]' _globals['_MLFLOWSERVICE'].methods_by_name['getExperimentByName']._loaded_options = None _globals['_MLFLOWSERVICE'].methods_by_name['getExperimentByName']._serialized_options = b'\362\206\031H\n,\n\003GET\022\037/mlflow/experiments/get-by-name\032\004\010\002\020\000\020\001*\026Get Experiment By Name' _globals['_MLFLOWSERVICE'].methods_by_name['createExperiment']._loaded_options = None @@ -454,6 +474,16 @@ _globals['_MLFLOWSERVICE'].methods_by_name['deleteTracesV3']._serialized_options = b'\362\206\031@\n*\n\004POST\022\034/mlflow/traces/delete-traces\032\004\010\003\020\000\020\003*\020Delete Traces V3' _globals['_MLFLOWSERVICE'].methods_by_name['calculateTraceFilterCorrelation']._loaded_options = None _globals['_MLFLOWSERVICE'].methods_by_name['calculateTraceFilterCorrelation']._serialized_options = b'\362\206\031a\n9\n\004POST\022+/mlflow/traces/calculate-filter-correlation\032\004\010\003\020\000\020\003*\"Calculate Trace Filter Correlation' + _globals['_MLFLOWSERVICE'].methods_by_name['listWorkspaces']._loaded_options = None + _globals['_MLFLOWSERVICE'].methods_by_name['listWorkspaces']._serialized_options = b'\362\206\0314\n\037\n\003GET\022\022/mlflow/workspaces\032\004\010\002\020\000\020\003*\017List Workspaces' + _globals['_MLFLOWSERVICE'].methods_by_name['createWorkspace']._loaded_options = None + _globals['_MLFLOWSERVICE'].methods_by_name['createWorkspace']._serialized_options = b'\362\206\0316\n \n\004POST\022\022/mlflow/workspaces\032\004\010\002\020\000\020\003*\020Create Workspace' + _globals['_MLFLOWSERVICE'].methods_by_name['getWorkspace']._loaded_options = None + _globals['_MLFLOWSERVICE'].methods_by_name['getWorkspace']._serialized_options = b'\362\206\031C\n0\n\003GET\022#/mlflow/workspaces/{workspace_name}\032\004\010\002\020\000\020\003*\rGet Workspace' + _globals['_MLFLOWSERVICE'].methods_by_name['updateWorkspace']._loaded_options = None + _globals['_MLFLOWSERVICE'].methods_by_name['updateWorkspace']._serialized_options = b'\362\206\031H\n2\n\005PATCH\022#/mlflow/workspaces/{workspace_name}\032\004\010\002\020\000\020\003*\020Update Workspace' + _globals['_MLFLOWSERVICE'].methods_by_name['deleteWorkspace']._loaded_options = None + _globals['_MLFLOWSERVICE'].methods_by_name['deleteWorkspace']._serialized_options = b'\362\206\031I\n3\n\006DELETE\022#/mlflow/workspaces/{workspace_name}\032\004\010\002\020\000\020\003*\020Delete Workspace' _globals['_MLFLOWSERVICE'].methods_by_name['createLoggedModel']._loaded_options = None _globals['_MLFLOWSERVICE'].methods_by_name['createLoggedModel']._serialized_options = b'\362\206\031<\n#\n\004POST\022\025/mlflow/logged-models\032\004\010\002\020\000\020\003*\023Create Logged Model' _globals['_MLFLOWSERVICE'].methods_by_name['finalizeLoggedModel']._loaded_options = None @@ -512,16 +542,16 @@ _globals['_MLFLOWSERVICE'].methods_by_name['addDatasetToExperiments']._serialized_options = b'\362\206\031c\n;\n\004POST\022-/mlflow/datasets/{dataset_id}/add-experiments\032\004\010\003\020\000\020\003\030\350\007\030\272\027\030\001*\032Add Dataset to Experiments' _globals['_MLFLOWSERVICE'].methods_by_name['removeDatasetFromExperiments']._loaded_options = None _globals['_MLFLOWSERVICE'].methods_by_name['removeDatasetFromExperiments']._serialized_options = b'\362\206\031k\n>\n\004POST\0220/mlflow/datasets/{dataset_id}/remove-experiments\032\004\010\003\020\000\020\003\030\350\007\030\272\027\030\001*\037Remove Dataset from Experiments' - _globals['_VIEWTYPE']._serialized_start=17844 - _globals['_VIEWTYPE']._serialized_end=17898 - _globals['_SOURCETYPE']._serialized_start=17900 - _globals['_SOURCETYPE']._serialized_end=17973 - _globals['_RUNSTATUS']._serialized_start=17975 - _globals['_RUNSTATUS']._serialized_end=18052 - _globals['_TRACESTATUS']._serialized_start=18054 - _globals['_TRACESTATUS']._serialized_end=18133 - _globals['_LOGGEDMODELSTATUS']._serialized_start=18136 - _globals['_LOGGEDMODELSTATUS']._serialized_end=18274 + _globals['_VIEWTYPE']._serialized_start=18582 + _globals['_VIEWTYPE']._serialized_end=18636 + _globals['_SOURCETYPE']._serialized_start=18638 + _globals['_SOURCETYPE']._serialized_end=18711 + _globals['_RUNSTATUS']._serialized_start=18713 + _globals['_RUNSTATUS']._serialized_end=18790 + _globals['_TRACESTATUS']._serialized_start=18792 + _globals['_TRACESTATUS']._serialized_end=18871 + _globals['_LOGGEDMODELSTATUS']._serialized_start=18874 + _globals['_LOGGEDMODELSTATUS']._serialized_end=19012 _globals['_METRIC']._serialized_start=243 _globals['_METRIC']._serialized_end=419 _globals['_PARAM']._serialized_start=421 @@ -900,8 +930,30 @@ _globals['_DELETESCORER_RESPONSE']._serialized_end=1849 _globals['_SCORER']._serialized_start=17697 _globals['_SCORER']._serialized_end=17842 - _globals['_MLFLOWSERVICE']._serialized_start=18277 - _globals['_MLFLOWSERVICE']._serialized_end=29839 + _globals['_WORKSPACE']._serialized_start=17844 + _globals['_WORKSPACE']._serialized_end=17896 + _globals['_LISTWORKSPACES']._serialized_start=17898 + _globals['_LISTWORKSPACES']._serialized_end=18010 + _globals['_LISTWORKSPACES_RESPONSE']._serialized_start=17916 + _globals['_LISTWORKSPACES_RESPONSE']._serialized_end=17965 + _globals['_CREATEWORKSPACE']._serialized_start=18013 + _globals['_CREATEWORKSPACE']._serialized_end=18166 + _globals['_CREATEWORKSPACE_RESPONSE']._serialized_start=18073 + _globals['_CREATEWORKSPACE_RESPONSE']._serialized_end=18121 + _globals['_GETWORKSPACE']._serialized_start=18169 + _globals['_GETWORKSPACE']._serialized_end=18308 + _globals['_GETWORKSPACE_RESPONSE']._serialized_start=18073 + _globals['_GETWORKSPACE_RESPONSE']._serialized_end=18121 + _globals['_UPDATEWORKSPACE']._serialized_start=18311 + _globals['_UPDATEWORKSPACE']._serialized_end=18474 + _globals['_UPDATEWORKSPACE_RESPONSE']._serialized_start=18073 + _globals['_UPDATEWORKSPACE_RESPONSE']._serialized_end=18121 + _globals['_DELETEWORKSPACE']._serialized_start=18476 + _globals['_DELETEWORKSPACE']._serialized_end=18580 + _globals['_DELETEWORKSPACE_RESPONSE']._serialized_start=1839 + _globals['_DELETEWORKSPACE_RESPONSE']._serialized_end=1849 + _globals['_MLFLOWSERVICE']._serialized_start=19015 + _globals['_MLFLOWSERVICE']._serialized_end=31308 _builder.BuildServices(DESCRIPTOR, 'service_pb2', _globals) # @@protoc_insertion_point(module_scope) @@ -933,7 +985,7 @@ from .scalapb import scalapb_pb2 as scalapb_dot_scalapb__pb2 - DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\rservice.proto\x12\x06mlflow\x1a\x11\x61ssessments.proto\x1a\x10\x64\x61tabricks.proto\x1a\x0e\x64\x61tasets.proto\x1a\x1egoogle/protobuf/duration.proto\x1a google/protobuf/field_mask.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a(opentelemetry/proto/trace/v1/trace.proto\x1a\x15scalapb/scalapb.proto\"\xb0\x01\n\x06Metric\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x01\x12\x11\n\ttimestamp\x18\x03 \x01(\x03\x12\x0f\n\x04step\x18\x04 \x01(\x03:\x01\x30\x12\x1a\n\x0c\x64\x61taset_name\x18\x05 \x01(\tB\x04\xf0\x86\x19\x03\x12\x1c\n\x0e\x64\x61taset_digest\x18\x06 \x01(\tB\x04\xf0\x86\x19\x03\x12\x16\n\x08model_id\x18\x07 \x01(\tB\x04\xf0\x86\x19\x03\x12\x14\n\x06run_id\x18\x08 \x01(\tB\x04\xf0\x86\x19\x03\"#\n\x05Param\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\x8b\x01\n\x03Run\x12\x1d\n\x04info\x18\x01 \x01(\x0b\x32\x0f.mlflow.RunInfo\x12\x1d\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x0f.mlflow.RunData\x12!\n\x06inputs\x18\x03 \x01(\x0b\x32\x11.mlflow.RunInputs\x12#\n\x07outputs\x18\x04 \x01(\x0b\x32\x12.mlflow.RunOutputs\"g\n\x07RunData\x12\x1f\n\x07metrics\x18\x01 \x03(\x0b\x32\x0e.mlflow.Metric\x12\x1d\n\x06params\x18\x02 \x03(\x0b\x32\r.mlflow.Param\x12\x1c\n\x04tags\x18\x03 \x03(\x0b\x32\x0e.mlflow.RunTag\"c\n\tRunInputs\x12,\n\x0e\x64\x61taset_inputs\x18\x01 \x03(\x0b\x32\x14.mlflow.DatasetInput\x12(\n\x0cmodel_inputs\x18\x02 \x03(\x0b\x32\x12.mlflow.ModelInput\"8\n\nRunOutputs\x12*\n\rmodel_outputs\x18\x01 \x03(\x0b\x32\x13.mlflow.ModelOutput\"$\n\x06RunTag\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"+\n\rExperimentTag\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\xdd\x01\n\x07RunInfo\x12\x0e\n\x06run_id\x18\x0f \x01(\t\x12\x10\n\x08run_uuid\x18\x01 \x01(\t\x12\x10\n\x08run_name\x18\x03 \x01(\t\x12\x15\n\rexperiment_id\x18\x02 \x01(\t\x12\x0f\n\x07user_id\x18\x06 \x01(\t\x12!\n\x06status\x18\x07 \x01(\x0e\x32\x11.mlflow.RunStatus\x12\x12\n\nstart_time\x18\x08 \x01(\x03\x12\x10\n\x08\x65nd_time\x18\t \x01(\x03\x12\x14\n\x0c\x61rtifact_uri\x18\r \x01(\t\x12\x17\n\x0flifecycle_stage\x18\x0e \x01(\t\"\xbb\x01\n\nExperiment\x12\x15\n\rexperiment_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x19\n\x11\x61rtifact_location\x18\x03 \x01(\t\x12\x17\n\x0flifecycle_stage\x18\x04 \x01(\t\x12\x18\n\x10last_update_time\x18\x05 \x01(\x03\x12\x15\n\rcreation_time\x18\x06 \x01(\x03\x12#\n\x04tags\x18\x07 \x03(\x0b\x32\x15.mlflow.ExperimentTag\"V\n\x0c\x44\x61tasetInput\x12\x1e\n\x04tags\x18\x01 \x03(\x0b\x32\x10.mlflow.InputTag\x12&\n\x07\x64\x61taset\x18\x02 \x01(\x0b\x32\x0f.mlflow.DatasetB\x04\xf8\x86\x19\x01\"$\n\nModelInput\x12\x16\n\x08model_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\"2\n\x08InputTag\x12\x11\n\x03key\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x13\n\x05value\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\"\x85\x01\n\x07\x44\x61taset\x12\x12\n\x04name\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x14\n\x06\x64igest\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12\x19\n\x0bsource_type\x18\x03 \x01(\tB\x04\xf8\x86\x19\x01\x12\x14\n\x06source\x18\x04 \x01(\tB\x04\xf8\x86\x19\x01\x12\x0e\n\x06schema\x18\x05 \x01(\t\x12\x0f\n\x07profile\x18\x06 \x01(\t\"9\n\x0bModelOutput\x12\x16\n\x08model_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x12\n\x04step\x18\x02 \x01(\x03\x42\x04\xf8\x86\x19\x01\"\xb6\x01\n\x10\x43reateExperiment\x12\x12\n\x04name\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x19\n\x11\x61rtifact_location\x18\x02 \x01(\t\x12#\n\x04tags\x18\x03 \x03(\x0b\x32\x15.mlflow.ExperimentTag\x1a!\n\x08Response\x12\x15\n\rexperiment_id\x18\x01 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xfe\x01\n\x11SearchExperiments\x12\x13\n\x0bmax_results\x18\x01 \x01(\x03\x12\x12\n\npage_token\x18\x02 \x01(\t\x12\x0e\n\x06\x66ilter\x18\x03 \x01(\t\x12\x10\n\x08order_by\x18\x04 \x03(\t\x12#\n\tview_type\x18\x05 \x01(\x0e\x32\x10.mlflow.ViewType\x1aL\n\x08Response\x12\'\n\x0b\x65xperiments\x18\x01 \x03(\x0b\x32\x12.mlflow.Experiment\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x8d\x01\n\rGetExperiment\x12\x1b\n\rexperiment_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a\x32\n\x08Response\x12&\n\nexperiment\x18\x01 \x01(\x0b\x32\x12.mlflow.Experiment:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"h\n\x10\x44\x65leteExperiment\x12\x1b\n\rexperiment_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"i\n\x11RestoreExperiment\x12\x1b\n\rexperiment_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"z\n\x10UpdateExperiment\x12\x1b\n\rexperiment_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x10\n\x08new_name\x18\x02 \x01(\t\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xca\x01\n\tCreateRun\x12\x15\n\rexperiment_id\x18\x01 \x01(\t\x12\x0f\n\x07user_id\x18\x02 \x01(\t\x12\x10\n\x08run_name\x18\x03 \x01(\t\x12\x12\n\nstart_time\x18\x07 \x01(\x03\x12\x1c\n\x04tags\x18\t \x03(\x0b\x32\x0e.mlflow.RunTag\x1a$\n\x08Response\x12\x18\n\x03run\x18\x01 \x01(\x0b\x32\x0b.mlflow.Run:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xd0\x01\n\tUpdateRun\x12\x0e\n\x06run_id\x18\x04 \x01(\t\x12\x10\n\x08run_uuid\x18\x01 \x01(\t\x12!\n\x06status\x18\x02 \x01(\x0e\x32\x11.mlflow.RunStatus\x12\x10\n\x08\x65nd_time\x18\x03 \x01(\x03\x12\x10\n\x08run_name\x18\x05 \x01(\t\x1a-\n\x08Response\x12!\n\x08run_info\x18\x01 \x01(\x0b\x32\x0f.mlflow.RunInfo:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"Z\n\tDeleteRun\x12\x14\n\x06run_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"[\n\nRestoreRun\x12\x14\n\x06run_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x8a\x02\n\tLogMetric\x12\x0e\n\x06run_id\x18\x06 \x01(\t\x12\x10\n\x08run_uuid\x18\x01 \x01(\t\x12\x11\n\x03key\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12\x13\n\x05value\x18\x03 \x01(\x01\x42\x04\xf8\x86\x19\x01\x12\x17\n\ttimestamp\x18\x04 \x01(\x03\x42\x04\xf8\x86\x19\x01\x12\x0f\n\x04step\x18\x05 \x01(\x03:\x01\x30\x12\x16\n\x08model_id\x18\x07 \x01(\tB\x04\xf0\x86\x19\x03\x12\x1a\n\x0c\x64\x61taset_name\x18\x08 \x01(\tB\x04\xf0\x86\x19\x03\x12\x1c\n\x0e\x64\x61taset_digest\x18\t \x01(\tB\x04\xf0\x86\x19\x03\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x8d\x01\n\x08LogParam\x12\x0e\n\x06run_id\x18\x04 \x01(\t\x12\x10\n\x08run_uuid\x18\x01 \x01(\t\x12\x11\n\x03key\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12\x13\n\x05value\x18\x03 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x90\x01\n\x10SetExperimentTag\x12\x1b\n\rexperiment_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x11\n\x03key\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12\x13\n\x05value\x18\x03 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"~\n\x13\x44\x65leteExperimentTag\x12\x1b\n\rexperiment_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x11\n\x03key\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x8b\x01\n\x06SetTag\x12\x0e\n\x06run_id\x18\x04 \x01(\t\x12\x10\n\x08run_uuid\x18\x01 \x01(\t\x12\x11\n\x03key\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12\x13\n\x05value\x18\x03 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"m\n\tDeleteTag\x12\x14\n\x06run_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x11\n\x03key\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"}\n\x06GetRun\x12\x0e\n\x06run_id\x18\x02 \x01(\t\x12\x10\n\x08run_uuid\x18\x01 \x01(\t\x1a$\n\x08Response\x12\x18\n\x03run\x18\x01 \x01(\x0b\x32\x0b.mlflow.Run:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x98\x02\n\nSearchRuns\x12\x16\n\x0e\x65xperiment_ids\x18\x01 \x03(\t\x12\x0e\n\x06\x66ilter\x18\x04 \x01(\t\x12\x34\n\rrun_view_type\x18\x03 \x01(\x0e\x32\x10.mlflow.ViewType:\x0b\x41\x43TIVE_ONLY\x12\x19\n\x0bmax_results\x18\x05 \x01(\x05:\x04\x31\x30\x30\x30\x12\x10\n\x08order_by\x18\x06 \x03(\t\x12\x12\n\npage_token\x18\x07 \x01(\t\x1a>\n\x08Response\x12\x19\n\x04runs\x18\x01 \x03(\x0b\x32\x0b.mlflow.Run\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xd8\x01\n\rListArtifacts\x12\x0e\n\x06run_id\x18\x03 \x01(\t\x12\x10\n\x08run_uuid\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\x12\x12\n\npage_token\x18\x04 \x01(\t\x1aV\n\x08Response\x12\x10\n\x08root_uri\x18\x01 \x01(\t\x12\x1f\n\x05\x66iles\x18\x02 \x03(\x0b\x32\x10.mlflow.FileInfo\x12\x17\n\x0fnext_page_token\x18\x03 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\";\n\x08\x46ileInfo\x12\x0c\n\x04path\x18\x01 \x01(\t\x12\x0e\n\x06is_dir\x18\x02 \x01(\x08\x12\x11\n\tfile_size\x18\x03 \x01(\x03\"\xea\x01\n\x10GetMetricHistory\x12\x0e\n\x06run_id\x18\x03 \x01(\t\x12\x10\n\x08run_uuid\x18\x01 \x01(\t\x12\x18\n\nmetric_key\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12\x12\n\npage_token\x18\x04 \x01(\t\x12\x13\n\x0bmax_results\x18\x05 \x01(\x05\x1a\x44\n\x08Response\x12\x1f\n\x07metrics\x18\x01 \x03(\x0b\x32\x0e.mlflow.Metric\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"a\n\x0fMetricWithRunId\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x01\x12\x11\n\ttimestamp\x18\x03 \x01(\x03\x12\x0f\n\x04step\x18\x04 \x01(\x03:\x01\x30\x12\x0e\n\x06run_id\x18\x05 \x01(\t\"\xe7\x01\n\x1cGetMetricHistoryBulkInterval\x12\x0f\n\x07run_ids\x18\x01 \x03(\t\x12\x18\n\nmetric_key\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12\x12\n\nstart_step\x18\x03 \x01(\x05\x12\x10\n\x08\x65nd_step\x18\x04 \x01(\x05\x12\x13\n\x0bmax_results\x18\x05 \x01(\x05\x1a\x34\n\x08Response\x12(\n\x07metrics\x18\x01 \x03(\x0b\x32\x17.mlflow.MetricWithRunId:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xb1\x01\n\x08LogBatch\x12\x0e\n\x06run_id\x18\x01 \x01(\t\x12\x1f\n\x07metrics\x18\x02 \x03(\x0b\x32\x0e.mlflow.Metric\x12\x1d\n\x06params\x18\x03 \x03(\x0b\x32\r.mlflow.Param\x12\x1c\n\x04tags\x18\x04 \x03(\x0b\x32\x0e.mlflow.RunTag\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"g\n\x08LogModel\x12\x0e\n\x06run_id\x18\x01 \x01(\t\x12\x12\n\nmodel_json\x18\x02 \x01(\t\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xac\x01\n\tLogInputs\x12\x14\n\x06run_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12&\n\x08\x64\x61tasets\x18\x02 \x03(\x0b\x32\x14.mlflow.DatasetInput\x12(\n\x06models\x18\x03 \x03(\x0b\x32\x12.mlflow.ModelInputB\x04\xf0\x86\x19\x03\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x80\x01\n\nLogOutputs\x12\x14\n\x06run_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12#\n\x06models\x18\x02 \x03(\x0b\x32\x13.mlflow.ModelOutput\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x95\x01\n\x13GetExperimentByName\x12\x1d\n\x0f\x65xperiment_name\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a\x32\n\x08Response\x12&\n\nexperiment\x18\x01 \x01(\x0b\x32\x12.mlflow.Experiment:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xb9\x01\n\x10\x43reateAssessment\x12\x38\n\nassessment\x18\x01 \x01(\x0b\x32\x1e.mlflow.assessments.AssessmentB\x04\xf8\x86\x19\x01\x1a>\n\x08Response\x12\x32\n\nassessment\x18\x01 \x01(\x0b\x32\x1e.mlflow.assessments.Assessment:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xf0\x01\n\x10UpdateAssessment\x12\x38\n\nassessment\x18\x01 \x01(\x0b\x32\x1e.mlflow.assessments.AssessmentB\x04\xf8\x86\x19\x01\x12\x35\n\x0bupdate_mask\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskB\x04\xf8\x86\x19\x01\x1a>\n\x08Response\x12\x32\n\nassessment\x18\x01 \x01(\x0b\x32\x1e.mlflow.assessments.Assessment:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x80\x01\n\x10\x44\x65leteAssessment\x12\x16\n\x08trace_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x1b\n\rassessment_id\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xb8\x01\n\x14GetAssessmentRequest\x12\x16\n\x08trace_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x1b\n\rassessment_id\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x1a>\n\x08Response\x12\x32\n\nassessment\x18\x01 \x01(\x0b\x32\x1e.mlflow.assessments.Assessment:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xe4\x01\n\tTraceInfo\x12\x12\n\nrequest_id\x18\x01 \x01(\t\x12\x15\n\rexperiment_id\x18\x02 \x01(\t\x12\x14\n\x0ctimestamp_ms\x18\x03 \x01(\x03\x12\x19\n\x11\x65xecution_time_ms\x18\x04 \x01(\x03\x12#\n\x06status\x18\x05 \x01(\x0e\x32\x13.mlflow.TraceStatus\x12\x36\n\x10request_metadata\x18\x06 \x03(\x0b\x32\x1c.mlflow.TraceRequestMetadata\x12\x1e\n\x04tags\x18\x07 \x03(\x0b\x32\x10.mlflow.TraceTag\"2\n\x14TraceRequestMetadata\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"&\n\x08TraceTag\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\xf1\x01\n\nStartTrace\x12\x15\n\rexperiment_id\x18\x01 \x01(\t\x12\x14\n\x0ctimestamp_ms\x18\x02 \x01(\x03\x12\x36\n\x10request_metadata\x18\x03 \x03(\x0b\x32\x1c.mlflow.TraceRequestMetadata\x12\x1e\n\x04tags\x18\x04 \x03(\x0b\x32\x10.mlflow.TraceTag\x1a\x31\n\x08Response\x12%\n\ntrace_info\x18\x01 \x01(\x0b\x32\x11.mlflow.TraceInfo:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x91\x02\n\x08\x45ndTrace\x12\x12\n\nrequest_id\x18\x01 \x01(\t\x12\x14\n\x0ctimestamp_ms\x18\x02 \x01(\x03\x12#\n\x06status\x18\x03 \x01(\x0e\x32\x13.mlflow.TraceStatus\x12\x36\n\x10request_metadata\x18\x04 \x03(\x0b\x32\x1c.mlflow.TraceRequestMetadata\x12\x1e\n\x04tags\x18\x05 \x03(\x0b\x32\x10.mlflow.TraceTag\x1a\x31\n\x08Response\x12%\n\ntrace_info\x18\x01 \x01(\x0b\x32\x11.mlflow.TraceInfo:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x82\x01\n\x0cGetTraceInfo\x12\x12\n\nrequest_id\x18\x01 \x01(\t\x1a\x31\n\x08Response\x12%\n\ntrace_info\x18\x01 \x01(\x0b\x32\x11.mlflow.TraceInfo:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"y\n\x0eGetTraceInfoV3\x12\x10\n\x08trace_id\x18\x01 \x01(\t\x1a(\n\x08Response\x12\x1c\n\x05trace\x18\x01 \x01(\x0b\x32\r.mlflow.Trace:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"{\n\x0e\x42\x61tchGetTraces\x12\x11\n\ttrace_ids\x18\x01 \x03(\t\x1a)\n\x08Response\x12\x1d\n\x06traces\x18\x01 \x03(\x0b\x32\r.mlflow.Trace:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x97\x01\n\x08GetTrace\x12\x16\n\x08trace_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x1c\n\rallow_partial\x18\x02 \x01(\x08:\x05\x66\x61lse\x1a(\n\x08Response\x12\x1c\n\x05trace\x18\x01 \x01(\x0b\x32\r.mlflow.Trace:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xeb\x01\n\x0cSearchTraces\x12\x16\n\x0e\x65xperiment_ids\x18\x01 \x03(\t\x12\x0e\n\x06\x66ilter\x18\x02 \x01(\t\x12\x18\n\x0bmax_results\x18\x03 \x01(\x05:\x03\x31\x30\x30\x12\x10\n\x08order_by\x18\x04 \x03(\t\x12\x12\n\npage_token\x18\x05 \x01(\t\x1a\x46\n\x08Response\x12!\n\x06traces\x18\x01 \x03(\x0b\x32\x11.mlflow.TraceInfo\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xaa\x02\n\x13SearchUnifiedTraces\x12\x16\n\x08model_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x1e\n\x10sql_warehouse_id\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12\x16\n\x0e\x65xperiment_ids\x18\x03 \x03(\t\x12\x0e\n\x06\x66ilter\x18\x04 \x01(\t\x12\x18\n\x0bmax_results\x18\x05 \x01(\x05:\x03\x31\x30\x30\x12\x10\n\x08order_by\x18\x06 \x03(\t\x12\x12\n\npage_token\x18\x07 \x01(\t\x1a\x46\n\x08Response\x12!\n\x06traces\x18\x01 \x03(\x0b\x32\x11.mlflow.TraceInfo\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xc1\x01\n\x15GetOnlineTraceDetails\x12\x16\n\x08trace_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x1e\n\x10sql_warehouse_id\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12$\n\x16source_inference_table\x18\x03 \x01(\tB\x04\xf8\x86\x19\x01\x12*\n\x1csource_databricks_request_id\x18\x04 \x01(\tB\x04\xf8\x86\x19\x01\x1a\x1e\n\x08Response\x12\x12\n\ntrace_data\x18\x01 \x01(\t\"\xc3\x01\n\x0c\x44\x65leteTraces\x12\x1b\n\rexperiment_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x1c\n\x14max_timestamp_millis\x18\x02 \x01(\x03\x12\x12\n\nmax_traces\x18\x03 \x01(\x05\x12\x13\n\x0brequest_ids\x18\x04 \x03(\t\x1a\"\n\x08Response\x12\x16\n\x0etraces_deleted\x18\x01 \x01(\x05:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xc5\x01\n\x0e\x44\x65leteTracesV3\x12\x1b\n\rexperiment_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x1c\n\x14max_timestamp_millis\x18\x02 \x01(\x03\x12\x12\n\nmax_traces\x18\x03 \x01(\x05\x12\x13\n\x0brequest_ids\x18\x04 \x03(\t\x1a\"\n\x08Response\x12\x16\n\x0etraces_deleted\x18\x01 \x01(\x05:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xb5\x02\n\x1f\x43\x61lculateTraceFilterCorrelation\x12\x16\n\x0e\x65xperiment_ids\x18\x01 \x03(\t\x12\x16\n\x0e\x66ilter_string1\x18\x02 \x01(\t\x12\x16\n\x0e\x66ilter_string2\x18\x03 \x01(\t\x12\x13\n\x0b\x62\x61se_filter\x18\x04 \x01(\t\x1a\x87\x01\n\x08Response\x12\x0c\n\x04npmi\x18\x01 \x01(\x01\x12\x15\n\rnpmi_smoothed\x18\x02 \x01(\x01\x12\x15\n\rfilter1_count\x18\x03 \x01(\x05\x12\x15\n\rfilter2_count\x18\x04 \x01(\x05\x12\x13\n\x0bjoint_count\x18\x05 \x01(\x05\x12\x13\n\x0btotal_count\x18\x06 \x01(\x05:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"v\n\x0bSetTraceTag\x12\x12\n\nrequest_id\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\x12\r\n\x05value\x18\x03 \x01(\t\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x88\x01\n\rSetTraceTagV3\x12\x10\n\x08trace_id\x18\x04 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\x12\r\n\x05value\x18\x03 \x01(\t\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]J\x04\x08\x01\x10\x02R\nrequest_id\"z\n\x0e\x44\x65leteTraceTag\x12\x10\n\x08trace_id\x18\x03 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]J\x04\x08\x01\x10\x02R\nrequest_id\"l\n\x10\x44\x65leteTraceTagV3\x12\x12\n\nrequest_id\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"c\n\x05Trace\x12\'\n\ntrace_info\x18\x01 \x01(\x0b\x32\x13.mlflow.TraceInfoV3\x12\x31\n\x05spans\x18\x02 \x03(\x0b\x32\".opentelemetry.proto.trace.v1.Span\"\xb6\x03\n\rTraceLocation\x12\x35\n\x04type\x18\x01 \x01(\x0e\x32\'.mlflow.TraceLocation.TraceLocationType\x12K\n\x11mlflow_experiment\x18\x02 \x01(\x0b\x32..mlflow.TraceLocation.MlflowExperimentLocationH\x00\x12G\n\x0finference_table\x18\x03 \x01(\x0b\x32,.mlflow.TraceLocation.InferenceTableLocationH\x00\x1a\x31\n\x18MlflowExperimentLocation\x12\x15\n\rexperiment_id\x18\x01 \x01(\t\x1a\x31\n\x16InferenceTableLocation\x12\x17\n\x0f\x66ull_table_name\x18\x01 \x01(\t\"d\n\x11TraceLocationType\x12#\n\x1fTRACE_LOCATION_TYPE_UNSPECIFIED\x10\x00\x12\x15\n\x11MLFLOW_EXPERIMENT\x10\x01\x12\x13\n\x0fINFERENCE_TABLE\x10\x02\x42\x0c\n\nidentifier\"\x9b\x05\n\x0bTraceInfoV3\x12\x10\n\x08trace_id\x18\x01 \x01(\t\x12\x19\n\x11\x63lient_request_id\x18\x02 \x01(\t\x12-\n\x0etrace_location\x18\x03 \x01(\x0b\x32\x15.mlflow.TraceLocation\x12\x0f\n\x07request\x18\x04 \x01(\t\x12\x10\n\x08response\x18\x05 \x01(\t\x12\x17\n\x0frequest_preview\x18\x0c \x01(\t\x12\x18\n\x10response_preview\x18\r \x01(\t\x12\x30\n\x0crequest_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x35\n\x12\x65xecution_duration\x18\x07 \x01(\x0b\x32\x19.google.protobuf.Duration\x12(\n\x05state\x18\x08 \x01(\x0e\x32\x19.mlflow.TraceInfoV3.State\x12>\n\x0etrace_metadata\x18\t \x03(\x0b\x32&.mlflow.TraceInfoV3.TraceMetadataEntry\x12\x33\n\x0b\x61ssessments\x18\n \x03(\x0b\x32\x1e.mlflow.assessments.Assessment\x12+\n\x04tags\x18\x0b \x03(\x0b\x32\x1d.mlflow.TraceInfoV3.TagsEntry\x1a\x34\n\x12TraceMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a+\n\tTagsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"B\n\x05State\x12\x15\n\x11STATE_UNSPECIFIED\x10\x00\x12\x06\n\x02OK\x10\x01\x12\t\n\x05\x45RROR\x10\x02\x12\x0f\n\x0bIN_PROGRESS\x10\x03\"\\\n\x0cStartTraceV3\x12\"\n\x05trace\x18\x01 \x01(\x0b\x32\r.mlflow.TraceB\x04\xf8\x86\x19\x01\x1a(\n\x08Response\x12\x1c\n\x05trace\x18\x01 \x01(\x0b\x32\r.mlflow.Trace\"F\n\x0fLinkTracesToRun\x12\x11\n\ttrace_ids\x18\x01 \x03(\t\x12\x14\n\x06run_id\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response\"h\n\x0e\x44\x61tasetSummary\x12\x1b\n\rexperiment_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x12\n\x04name\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12\x14\n\x06\x64igest\x18\x03 \x01(\tB\x04\xf8\x86\x19\x01\x12\x0f\n\x07\x63ontext\x18\x04 \x01(\t\"\x94\x01\n\x0eSearchDatasets\x12\x16\n\x0e\x65xperiment_ids\x18\x01 \x03(\t\x1a=\n\x08Response\x12\x31\n\x11\x64\x61taset_summaries\x18\x01 \x03(\x0b\x32\x16.mlflow.DatasetSummary:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x9a\x02\n\x11\x43reateLoggedModel\x12\x1b\n\rexperiment_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x12\n\nmodel_type\x18\x03 \x01(\t\x12\x15\n\rsource_run_id\x18\x04 \x01(\t\x12,\n\x06params\x18\x05 \x03(\x0b\x32\x1c.mlflow.LoggedModelParameter\x12$\n\x04tags\x18\x06 \x03(\x0b\x32\x16.mlflow.LoggedModelTag\x1a.\n\x08Response\x12\"\n\x05model\x18\x01 \x01(\x0b\x32\x13.mlflow.LoggedModel:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xbb\x01\n\x13\x46inalizeLoggedModel\x12\x16\n\x08model_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12/\n\x06status\x18\x02 \x01(\x0e\x32\x19.mlflow.LoggedModelStatusB\x04\xf8\x86\x19\x01\x1a.\n\x08Response\x12\"\n\x05model\x18\x01 \x01(\x0b\x32\x13.mlflow.LoggedModel:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x85\x01\n\x0eGetLoggedModel\x12\x16\n\x08model_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a.\n\x08Response\x12\"\n\x05model\x18\x01 \x01(\x0b\x32\x13.mlflow.LoggedModel:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"d\n\x11\x44\x65leteLoggedModel\x12\x16\n\x08model_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xf7\x03\n\x12SearchLoggedModels\x12\x16\n\x0e\x65xperiment_ids\x18\x01 \x03(\t\x12\x0e\n\x06\x66ilter\x18\x02 \x01(\t\x12\x34\n\x08\x64\x61tasets\x18\x06 \x03(\x0b\x32\".mlflow.SearchLoggedModels.Dataset\x12\x17\n\x0bmax_results\x18\x03 \x01(\x05:\x02\x35\x30\x12\x34\n\x08order_by\x18\x04 \x03(\x0b\x32\".mlflow.SearchLoggedModels.OrderBy\x12\x12\n\npage_token\x18\x05 \x01(\t\x1a=\n\x07\x44\x61taset\x12\x1a\n\x0c\x64\x61taset_name\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x16\n\x0e\x64\x61taset_digest\x18\x02 \x01(\t\x1aj\n\x07OrderBy\x12\x18\n\nfield_name\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x17\n\tascending\x18\x02 \x01(\x08:\x04true\x12\x14\n\x0c\x64\x61taset_name\x18\x03 \x01(\t\x12\x16\n\x0e\x64\x61taset_digest\x18\x04 \x01(\t\x1aH\n\x08Response\x12#\n\x06models\x18\x01 \x03(\x0b\x32\x13.mlflow.LoggedModel\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xaf\x01\n\x12SetLoggedModelTags\x12\x16\n\x08model_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12$\n\x04tags\x18\x02 \x03(\x0b\x32\x16.mlflow.LoggedModelTag\x1a.\n\x08Response\x12\"\n\x05model\x18\x01 \x01(\x0b\x32\x13.mlflow.LoggedModel:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"~\n\x14\x44\x65leteLoggedModelTag\x12\x16\n\x08model_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x15\n\x07tag_key\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xec\x01\n\x18ListLoggedModelArtifacts\x12\x16\n\x08model_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x1f\n\x17\x61rtifact_directory_path\x18\x02 \x01(\t\x12\x12\n\npage_token\x18\x03 \x01(\t\x1aV\n\x08Response\x12\x10\n\x08root_uri\x18\x01 \x01(\t\x12\x1f\n\x05\x66iles\x18\x02 \x03(\x0b\x32\x10.mlflow.FileInfo\x12\x17\n\x0fnext_page_token\x18\x03 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x9c\x01\n\x1bLogLoggedModelParamsRequest\x12\x16\n\x08model_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12,\n\x06params\x18\x02 \x03(\x0b\x32\x1c.mlflow.LoggedModelParameter\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"[\n\x0bLoggedModel\x12%\n\x04info\x18\x01 \x01(\x0b\x32\x17.mlflow.LoggedModelInfo\x12%\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x17.mlflow.LoggedModelData\"\x84\x03\n\x0fLoggedModelInfo\x12\x10\n\x08model_id\x18\x01 \x01(\t\x12\x15\n\rexperiment_id\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x1d\n\x15\x63reation_timestamp_ms\x18\x04 \x01(\x03\x12!\n\x19last_updated_timestamp_ms\x18\x05 \x01(\x03\x12\x14\n\x0c\x61rtifact_uri\x18\x06 \x01(\t\x12)\n\x06status\x18\x07 \x01(\x0e\x32\x19.mlflow.LoggedModelStatus\x12\x12\n\ncreator_id\x18\x08 \x01(\x03\x12\x12\n\nmodel_type\x18\t \x01(\t\x12\x15\n\rsource_run_id\x18\n \x01(\t\x12\x16\n\x0estatus_message\x18\x0b \x01(\t\x12$\n\x04tags\x18\x0c \x03(\x0b\x32\x16.mlflow.LoggedModelTag\x12:\n\rregistrations\x18\r \x03(\x0b\x32#.mlflow.LoggedModelRegistrationInfo\",\n\x0eLoggedModelTag\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"<\n\x1bLoggedModelRegistrationInfo\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\t\"`\n\x0fLoggedModelData\x12,\n\x06params\x18\x01 \x03(\x0b\x32\x1c.mlflow.LoggedModelParameter\x12\x1f\n\x07metrics\x18\x02 \x03(\x0b\x32\x0e.mlflow.Metric\"2\n\x14LoggedModelParameter\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\x81\x02\n\x0eSearchTracesV3\x12(\n\tlocations\x18\x01 \x03(\x0b\x32\x15.mlflow.TraceLocation\x12\x0e\n\x06\x66ilter\x18\x02 \x01(\t\x12\x18\n\x0bmax_results\x18\x03 \x01(\x05:\x03\x31\x30\x30\x12\x10\n\x08order_by\x18\x04 \x03(\t\x12\x12\n\npage_token\x18\x05 \x01(\t\x1aH\n\x08Response\x12#\n\x06traces\x18\x01 \x03(\x0b\x32\x13.mlflow.TraceInfoV3\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xb8\x02\n\rCreateDataset\x12\x12\n\x04name\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x16\n\x0e\x65xperiment_ids\x18\x02 \x03(\t\x12\x44\n\x0bsource_type\x18\x03 \x01(\x0e\x32/.mlflow.datasets.DatasetRecordSource.SourceType\x12\x0e\n\x06source\x18\x04 \x01(\t\x12\x0e\n\x06schema\x18\x05 \x01(\t\x12\x0f\n\x07profile\x18\x06 \x01(\t\x12\x12\n\ncreated_by\x18\x07 \x01(\t\x12\x0c\n\x04tags\x18\x08 \x01(\t\x1a\x35\n\x08Response\x12)\n\x07\x64\x61taset\x18\x01 \x01(\x0b\x32\x18.mlflow.datasets.Dataset:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xb7\x01\n\nGetDataset\x12\x18\n\ndataset_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x12\n\npage_token\x18\x02 \x01(\t\x1aN\n\x08Response\x12)\n\x07\x64\x61taset\x18\x01 \x01(\x0b\x32\x18.mlflow.datasets.Dataset\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"b\n\rDeleteDataset\x12\x18\n\ndataset_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x88\x02\n\x18SearchEvaluationDatasets\x12\x16\n\x0e\x65xperiment_ids\x18\x01 \x03(\t\x12\x15\n\rfilter_string\x18\x02 \x01(\t\x12\x19\n\x0bmax_results\x18\x03 \x01(\x05:\x04\x31\x30\x30\x30\x12\x10\n\x08order_by\x18\x04 \x03(\t\x12\x12\n\npage_token\x18\x05 \x01(\t\x1aO\n\x08Response\x12*\n\x08\x64\x61tasets\x18\x01 \x03(\x0b\x32\x18.mlflow.datasets.Dataset\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xa2\x01\n\x0eSetDatasetTags\x12\x18\n\ndataset_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x12\n\x04tags\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x1a\x35\n\x08Response\x12)\n\x07\x64\x61taset\x18\x01 \x01(\x0b\x32\x18.mlflow.datasets.Dataset:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"x\n\x10\x44\x65leteDatasetTag\x12\x18\n\ndataset_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x11\n\x03key\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xc3\x01\n\x14UpsertDatasetRecords\x12\x18\n\ndataset_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x15\n\x07records\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12\x12\n\nupdated_by\x18\x03 \x01(\t\x1a\x39\n\x08Response\x12\x16\n\x0einserted_count\x18\x01 \x01(\x05\x12\x15\n\rupdated_count\x18\x02 \x01(\x05:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x84\x01\n\x17GetDatasetExperimentIds\x12\x18\n\ndataset_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a\"\n\x08Response\x12\x16\n\x0e\x65xperiment_ids\x18\x01 \x03(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xbf\x01\n\x11GetDatasetRecords\x12\x18\n\ndataset_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x19\n\x0bmax_results\x18\x02 \x01(\x05:\x04\x31\x30\x30\x30\x12\x12\n\npage_token\x18\x03 \x01(\t\x1a\x34\n\x08Response\x12\x0f\n\x07records\x18\x01 \x01(\t\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xaf\x01\n\x17\x41\x64\x64\x44\x61tasetToExperiments\x12\x18\n\ndataset_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x16\n\x0e\x65xperiment_ids\x18\x02 \x03(\t\x1a\x35\n\x08Response\x12)\n\x07\x64\x61taset\x18\x01 \x01(\x0b\x32\x18.mlflow.datasets.Dataset:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xb4\x01\n\x1cRemoveDatasetFromExperiments\x12\x18\n\ndataset_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x16\n\x0e\x65xperiment_ids\x18\x02 \x03(\t\x1a\x35\n\x08Response\x12)\n\x07\x64\x61taset\x18\x01 \x01(\x0b\x32\x18.mlflow.datasets.Dataset:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x85\x02\n\x0eRegisterScorer\x12\x15\n\rexperiment_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x19\n\x11serialized_scorer\x18\x03 \x01(\t\x1a\x85\x01\n\x08Response\x12\x0f\n\x07version\x18\x01 \x01(\x05\x12\x11\n\tscorer_id\x18\x02 \x01(\t\x12\x15\n\rexperiment_id\x18\x03 \x01(\t\x12\x0c\n\x04name\x18\x04 \x01(\t\x12\x19\n\x11serialized_scorer\x18\x05 \x01(\t\x12\x15\n\rcreation_time\x18\x06 \x01(\x03:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"~\n\x0bListScorers\x12\x15\n\rexperiment_id\x18\x01 \x01(\t\x1a+\n\x08Response\x12\x1f\n\x07scorers\x18\x01 \x03(\x0b\x32\x0e.mlflow.Scorer:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x93\x01\n\x12ListScorerVersions\x12\x15\n\rexperiment_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x1a+\n\x08Response\x12\x1f\n\x07scorers\x18\x01 \x03(\x0b\x32\x0e.mlflow.Scorer:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x9a\x01\n\tGetScorer\x12\x15\n\rexperiment_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\x05\x1a*\n\x08Response\x12\x1e\n\x06scorer\x18\x01 \x01(\x0b\x32\x0e.mlflow.Scorer:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"}\n\x0c\x44\x65leteScorer\x12\x15\n\rexperiment_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\x05\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x91\x01\n\x06Scorer\x12\x15\n\rexperiment_id\x18\x01 \x01(\x05\x12\x13\n\x0bscorer_name\x18\x02 \x01(\t\x12\x16\n\x0escorer_version\x18\x03 \x01(\x05\x12\x19\n\x11serialized_scorer\x18\x04 \x01(\t\x12\x15\n\rcreation_time\x18\x05 \x01(\x03\x12\x11\n\tscorer_id\x18\x06 \x01(\t*6\n\x08ViewType\x12\x0f\n\x0b\x41\x43TIVE_ONLY\x10\x01\x12\x10\n\x0c\x44\x45LETED_ONLY\x10\x02\x12\x07\n\x03\x41LL\x10\x03*I\n\nSourceType\x12\x0c\n\x08NOTEBOOK\x10\x01\x12\x07\n\x03JOB\x10\x02\x12\x0b\n\x07PROJECT\x10\x03\x12\t\n\x05LOCAL\x10\x04\x12\x0c\n\x07UNKNOWN\x10\xe8\x07*M\n\tRunStatus\x12\x0b\n\x07RUNNING\x10\x01\x12\r\n\tSCHEDULED\x10\x02\x12\x0c\n\x08\x46INISHED\x10\x03\x12\n\n\x06\x46\x41ILED\x10\x04\x12\n\n\x06KILLED\x10\x05*O\n\x0bTraceStatus\x12\x1c\n\x18TRACE_STATUS_UNSPECIFIED\x10\x00\x12\x06\n\x02OK\x10\x01\x12\t\n\x05\x45RROR\x10\x02\x12\x0f\n\x0bIN_PROGRESS\x10\x03*\x8a\x01\n\x11LoggedModelStatus\x12#\n\x1fLOGGED_MODEL_STATUS_UNSPECIFIED\x10\x00\x12\x18\n\x14LOGGED_MODEL_PENDING\x10\x01\x12\x16\n\x12LOGGED_MODEL_READY\x10\x02\x12\x1e\n\x1aLOGGED_MODEL_UPLOAD_FAILED\x10\x03\x32\xaaZ\n\rMlflowService\x12\xa6\x01\n\x13getExperimentByName\x12\x1b.mlflow.GetExperimentByName\x1a$.mlflow.GetExperimentByName.Response\"L\xf2\x86\x19H\n,\n\x03GET\x12\x1f/mlflow/experiments/get-by-name\x1a\x04\x08\x02\x10\x00\x10\x01*\x16Get Experiment By Name\x12\x94\x01\n\x10\x63reateExperiment\x12\x18.mlflow.CreateExperiment\x1a!.mlflow.CreateExperiment.Response\"C\xf2\x86\x19?\n(\n\x04POST\x12\x1a/mlflow/experiments/create\x1a\x04\x08\x02\x10\x00\x10\x01*\x11\x43reate Experiment\x12\xc1\x01\n\x11searchExperiments\x12\x19.mlflow.SearchExperiments\x1a\".mlflow.SearchExperiments.Response\"m\xf2\x86\x19i\n(\n\x04POST\x12\x1a/mlflow/experiments/search\x1a\x04\x08\x02\x10\x00\n\'\n\x03GET\x12\x1a/mlflow/experiments/search\x1a\x04\x08\x02\x10\x00\x10\x01*\x12Search Experiments\x12\x88\x01\n\rgetExperiment\x12\x15.mlflow.GetExperiment\x1a\x1e.mlflow.GetExperiment.Response\"@\xf2\x86\x19\x38\n$\n\x03GET\x12\x17/mlflow/experiments/get\x1a\x04\x08\x02\x10\x00\x10\x01*\x0eGet Experiment\xba\x8c\x19\x00\x12\x94\x01\n\x10\x64\x65leteExperiment\x12\x18.mlflow.DeleteExperiment\x1a!.mlflow.DeleteExperiment.Response\"C\xf2\x86\x19?\n(\n\x04POST\x12\x1a/mlflow/experiments/delete\x1a\x04\x08\x02\x10\x00\x10\x01*\x11\x44\x65lete Experiment\x12\x99\x01\n\x11restoreExperiment\x12\x19.mlflow.RestoreExperiment\x1a\".mlflow.RestoreExperiment.Response\"E\xf2\x86\x19\x41\n)\n\x04POST\x12\x1b/mlflow/experiments/restore\x1a\x04\x08\x02\x10\x00\x10\x01*\x12Restore Experiment\x12\x94\x01\n\x10updateExperiment\x12\x18.mlflow.UpdateExperiment\x1a!.mlflow.UpdateExperiment.Response\"C\xf2\x86\x19?\n(\n\x04POST\x12\x1a/mlflow/experiments/update\x1a\x04\x08\x02\x10\x00\x10\x01*\x11Update Experiment\x12q\n\tcreateRun\x12\x11.mlflow.CreateRun\x1a\x1a.mlflow.CreateRun.Response\"5\xf2\x86\x19\x31\n!\n\x04POST\x12\x13/mlflow/runs/create\x1a\x04\x08\x02\x10\x00\x10\x01*\nCreate Run\x12q\n\tupdateRun\x12\x11.mlflow.UpdateRun\x1a\x1a.mlflow.UpdateRun.Response\"5\xf2\x86\x19\x31\n!\n\x04POST\x12\x13/mlflow/runs/update\x1a\x04\x08\x02\x10\x00\x10\x01*\nUpdate Run\x12q\n\tdeleteRun\x12\x11.mlflow.DeleteRun\x1a\x1a.mlflow.DeleteRun.Response\"5\xf2\x86\x19\x31\n!\n\x04POST\x12\x13/mlflow/runs/delete\x1a\x04\x08\x02\x10\x00\x10\x01*\nDelete Run\x12v\n\nrestoreRun\x12\x12.mlflow.RestoreRun\x1a\x1b.mlflow.RestoreRun.Response\"7\xf2\x86\x19\x33\n\"\n\x04POST\x12\x14/mlflow/runs/restore\x1a\x04\x08\x02\x10\x00\x10\x01*\x0bRestore Run\x12u\n\tlogMetric\x12\x11.mlflow.LogMetric\x1a\x1a.mlflow.LogMetric.Response\"9\xf2\x86\x19\x35\n%\n\x04POST\x12\x17/mlflow/runs/log-metric\x1a\x04\x08\x02\x10\x00\x10\x01*\nLog Metric\x12t\n\x08logParam\x12\x10.mlflow.LogParam\x1a\x19.mlflow.LogParam.Response\";\xf2\x86\x19\x37\n(\n\x04POST\x12\x1a/mlflow/runs/log-parameter\x1a\x04\x08\x02\x10\x00\x10\x01*\tLog Param\x12\xa1\x01\n\x10setExperimentTag\x12\x18.mlflow.SetExperimentTag\x1a!.mlflow.SetExperimentTag.Response\"P\xf2\x86\x19L\n4\n\x04POST\x12&/mlflow/experiments/set-experiment-tag\x1a\x04\x08\x02\x10\x00\x10\x01*\x12Set Experiment Tag\x12\xb0\x01\n\x13\x64\x65leteExperimentTag\x12\x1b.mlflow.DeleteExperimentTag\x1a$.mlflow.DeleteExperimentTag.Response\"V\xf2\x86\x19R\n7\n\x04POST\x12)/mlflow/experiments/delete-experiment-tag\x1a\x04\x08\x02\x10\x00\x10\x01*\x15\x44\x65lete Experiment Tag\x12\x66\n\x06setTag\x12\x0e.mlflow.SetTag\x1a\x17.mlflow.SetTag.Response\"3\xf2\x86\x19/\n\"\n\x04POST\x12\x14/mlflow/runs/set-tag\x1a\x04\x08\x02\x10\x00\x10\x01*\x07Set Tag\x12\x88\x01\n\x0bsetTraceTag\x12\x13.mlflow.SetTraceTag\x1a\x1c.mlflow.SetTraceTag.Response\"F\xf2\x86\x19\x42\n/\n\x05PATCH\x12 /mlflow/traces/{request_id}/tags\x1a\x04\x08\x02\x10\x00\x10\x03*\rSet Trace Tag\x12\x8f\x01\n\rsetTraceTagV3\x12\x15.mlflow.SetTraceTagV3\x1a\x1e.mlflow.SetTraceTagV3.Response\"G\xf2\x86\x19\x43\n-\n\x05PATCH\x12\x1e/mlflow/traces/{trace_id}/tags\x1a\x04\x08\x03\x10\x00\x10\x03*\x10Set Trace Tag V3\x12\x95\x01\n\x0e\x64\x65leteTraceTag\x12\x16.mlflow.DeleteTraceTag\x1a\x1f.mlflow.DeleteTraceTag.Response\"J\xf2\x86\x19\x46\n0\n\x06\x44\x45LETE\x12 /mlflow/traces/{request_id}/tags\x1a\x04\x08\x02\x10\x00\x10\x03*\x10\x44\x65lete Trace Tag\x12\x9c\x01\n\x10\x64\x65leteTraceTagV3\x12\x18.mlflow.DeleteTraceTagV3\x1a!.mlflow.DeleteTraceTagV3.Response\"K\xf2\x86\x19G\n.\n\x06\x44\x45LETE\x12\x1e/mlflow/traces/{trace_id}/tags\x1a\x04\x08\x03\x10\x00\x10\x03*\x13\x44\x65lete Trace Tag V3\x12u\n\tdeleteTag\x12\x11.mlflow.DeleteTag\x1a\x1a.mlflow.DeleteTag.Response\"9\xf2\x86\x19\x35\n%\n\x04POST\x12\x17/mlflow/runs/delete-tag\x1a\x04\x08\x02\x10\x00\x10\x01*\nDelete Tag\x12\x65\n\x06getRun\x12\x0e.mlflow.GetRun\x1a\x17.mlflow.GetRun.Response\"2\xf2\x86\x19*\n\x1d\n\x03GET\x12\x10/mlflow/runs/get\x1a\x04\x08\x02\x10\x00\x10\x01*\x07Get Run\xba\x8c\x19\x00\x12y\n\nsearchRuns\x12\x12.mlflow.SearchRuns\x1a\x1b.mlflow.SearchRuns.Response\":\xf2\x86\x19\x32\n!\n\x04POST\x12\x13/mlflow/runs/search\x1a\x04\x08\x02\x10\x00\x10\x01*\x0bSearch Runs\xba\x8c\x19\x00\x12\x87\x01\n\rlistArtifacts\x12\x15.mlflow.ListArtifacts\x1a\x1e.mlflow.ListArtifacts.Response\"?\xf2\x86\x19\x37\n#\n\x03GET\x12\x16/mlflow/artifacts/list\x1a\x04\x08\x02\x10\x00\x10\x01*\x0eList Artifacts\xba\x8c\x19\x00\x12\x95\x01\n\x10getMetricHistory\x12\x18.mlflow.GetMetricHistory\x1a!.mlflow.GetMetricHistory.Response\"D\xf2\x86\x19@\n(\n\x03GET\x12\x1b/mlflow/metrics/get-history\x1a\x04\x08\x02\x10\x00\x10\x01*\x12Get Metric History\x12\xb7\x01\n\x1cgetMetricHistoryBulkInterval\x12$.mlflow.GetMetricHistoryBulkInterval\x1a-.mlflow.GetMetricHistoryBulkInterval.Response\"B\xf2\x86\x19:\n6\n\x03GET\x12)/mlflow/metrics/get-history-bulk-interval\x1a\x04\x08\x02\x10\x0b\x10\x03\xba\x8c\x19\x00\x12p\n\x08logBatch\x12\x10.mlflow.LogBatch\x1a\x19.mlflow.LogBatch.Response\"7\xf2\x86\x19\x33\n$\n\x04POST\x12\x16/mlflow/runs/log-batch\x1a\x04\x08\x02\x10\x00\x10\x01*\tLog Batch\x12p\n\x08logModel\x12\x10.mlflow.LogModel\x1a\x19.mlflow.LogModel.Response\"7\xf2\x86\x19\x33\n$\n\x04POST\x12\x16/mlflow/runs/log-model\x1a\x04\x08\x02\x10\x00\x10\x01*\tLog Model\x12u\n\tlogInputs\x12\x11.mlflow.LogInputs\x1a\x1a.mlflow.LogInputs.Response\"9\xf2\x86\x19\x35\n%\n\x04POST\x12\x17/mlflow/runs/log-inputs\x1a\x04\x08\x02\x10\x00\x10\x01*\nLog Inputs\x12v\n\nlogOutputs\x12\x12.mlflow.LogOutputs\x1a\x1b.mlflow.LogOutputs.Response\"7\xf2\x86\x19\x33\n\"\n\x04POST\x12\x14/mlflow/runs/outputs\x1a\x04\x08\x02\x10\x00\x10\x03*\x0bLog Outputs\x12\x87\x01\n\x0esearchDatasets\x12\x16.mlflow.SearchDatasets\x1a\x1f.mlflow.SearchDatasets.Response\"<\xf2\x86\x19\x34\n0\n\x04POST\x12\"mlflow/experiments/search-datasets\x1a\x04\x08\x02\x10\x00\x10\x03\xba\x8c\x19\x00\x12p\n\nstartTrace\x12\x12.mlflow.StartTrace\x1a\x1b.mlflow.StartTrace.Response\"1\xf2\x86\x19-\n\x1c\n\x04POST\x12\x0e/mlflow/traces\x1a\x04\x08\x02\x10\x00\x10\x03*\x0bStart Trace\x12v\n\x08\x65ndTrace\x12\x10.mlflow.EndTrace\x1a\x19.mlflow.EndTrace.Response\"=\xf2\x86\x19\x39\n*\n\x05PATCH\x12\x1b/mlflow/traces/{request_id}\x1a\x04\x08\x02\x10\x00\x10\x03*\tEnd Trace\x12\x89\x01\n\x0cgetTraceInfo\x12\x14.mlflow.GetTraceInfo\x1a\x1d.mlflow.GetTraceInfo.Response\"D\xf2\x86\x19@\n-\n\x03GET\x12 /mlflow/traces/{request_id}/info\x1a\x04\x08\x02\x10\x00\x10\x03*\rGet TraceInfo\x12\x8b\x01\n\x0egetTraceInfoV3\x12\x16.mlflow.GetTraceInfoV3\x1a\x1f.mlflow.GetTraceInfoV3.Response\"@\xf2\x86\x19<\n&\n\x03GET\x12\x19/mlflow/traces/{trace_id}\x1a\x04\x08\x03\x10\x00\x10\x03*\x10Get TraceInfo v3\x12n\n\x08getTrace\x12\x10.mlflow.GetTrace\x1a\x19.mlflow.GetTrace.Response\"5\xf2\x86\x19\x31\n\x1f\n\x03GET\x12\x12/mlflow/traces/get\x1a\x04\x08\x03\x10\x00\x10\x03*\x0cGet Trace v3\x12\x83\x01\n\x0e\x62\x61tchGetTraces\x12\x16.mlflow.BatchGetTraces\x1a\x1f.mlflow.BatchGetTraces.Response\"8\xf2\x86\x19\x34\n$\n\x03GET\x12\x17/mlflow/traces/batchGet\x1a\x04\x08\x03\x10\x00\x10\x03*\nGet Traces\x12w\n\x0csearchTraces\x12\x14.mlflow.SearchTraces\x1a\x1d.mlflow.SearchTraces.Response\"2\xf2\x86\x19.\n\x1b\n\x03GET\x12\x0e/mlflow/traces\x1a\x04\x08\x02\x10\x00\x10\x03*\rSearch Traces\x12\x88\x01\n\x0esearchTracesV3\x12\x16.mlflow.SearchTracesV3\x1a\x1f.mlflow.SearchTracesV3.Response\"=\xf2\x86\x19\x39\n#\n\x04POST\x12\x15/mlflow/traces/search\x1a\x04\x08\x03\x10\x00\x10\x03*\x10Search Traces V3\x12i\n\x0cstartTraceV3\x12\x14.mlflow.StartTraceV3\x1a\x1d.mlflow.StartTraceV3.Response\"$\xf2\x86\x19 \n\x1c\n\x04POST\x12\x0e/mlflow/traces\x1a\x04\x08\x03\x10\x00\x10\x03\x12\x92\x01\n\x0flinkTracesToRun\x12\x17.mlflow.LinkTracesToRun\x1a .mlflow.LinkTracesToRun.Response\"D\xf2\x86\x19@\n(\n\x04POST\x12\x1a/mlflow/traces/link-to-run\x1a\x04\x08\x02\x10\x00\x10\x03*\x12Link Traces to Run\x12\xa2\x01\n\x19searchUnifiedTraceHandler\x12\x1b.mlflow.SearchUnifiedTraces\x1a$.mlflow.SearchUnifiedTraces.Response\"B\xf2\x86\x19>\n#\n\x03GET\x12\x16/mlflow/unified-traces\x1a\x04\x08\x02\x10\x00\x10\x03*\x15Search Unified Traces\x12\xaf\x01\n\x15getOnlineTraceDetails\x12\x1d.mlflow.GetOnlineTraceDetails\x1a&.mlflow.GetOnlineTraceDetails.Response\"O\xf2\x86\x19K\n-\n\x03GET\x12 /mlflow/get-online-trace-details\x1a\x04\x08\x02\x10\x00\x10\x03*\x18Get Online Trace Details\x12\x86\x01\n\x0c\x64\x65leteTraces\x12\x14.mlflow.DeleteTraces\x1a\x1d.mlflow.DeleteTraces.Response\"A\xf2\x86\x19=\n*\n\x04POST\x12\x1c/mlflow/traces/delete-traces\x1a\x04\x08\x02\x10\x00\x10\x03*\rDelete Traces\x12\x8f\x01\n\x0e\x64\x65leteTracesV3\x12\x16.mlflow.DeleteTracesV3\x1a\x1f.mlflow.DeleteTracesV3.Response\"D\xf2\x86\x19@\n*\n\x04POST\x12\x1c/mlflow/traces/delete-traces\x1a\x04\x08\x03\x10\x00\x10\x03*\x10\x44\x65lete Traces V3\x12\xe3\x01\n\x1f\x63\x61lculateTraceFilterCorrelation\x12\'.mlflow.CalculateTraceFilterCorrelation\x1a\x30.mlflow.CalculateTraceFilterCorrelation.Response\"e\xf2\x86\x19\x61\n9\n\x04POST\x12+/mlflow/traces/calculate-filter-correlation\x1a\x04\x08\x03\x10\x00\x10\x03*\"Calculate Trace Filter Correlation\x12\x94\x01\n\x11\x63reateLoggedModel\x12\x19.mlflow.CreateLoggedModel\x1a\".mlflow.CreateLoggedModel.Response\"@\xf2\x86\x19<\n#\n\x04POST\x12\x15/mlflow/logged-models\x1a\x04\x08\x02\x10\x00\x10\x03*\x13\x43reate Logged Model\x12\xa8\x01\n\x13\x66inalizeLoggedModel\x12\x1b.mlflow.FinalizeLoggedModel\x1a$.mlflow.FinalizeLoggedModel.Response\"N\xf2\x86\x19J\n/\n\x05PATCH\x12 /mlflow/logged-models/{model_id}\x1a\x04\x08\x02\x10\x00\x10\x03*\x15\x46inalize Logged Model\x12\x92\x01\n\x0egetLoggedModel\x12\x16.mlflow.GetLoggedModel\x1a\x1f.mlflow.GetLoggedModel.Response\"G\xf2\x86\x19\x43\n-\n\x03GET\x12 /mlflow/logged-models/{model_id}\x1a\x04\x08\x02\x10\x00\x10\x03*\x10Get Logged Model\x12\xa3\x01\n\x11\x64\x65leteLoggedModel\x12\x19.mlflow.DeleteLoggedModel\x1a\".mlflow.DeleteLoggedModel.Response\"O\xf2\x86\x19K\n0\n\x06\x44\x45LETE\x12 /mlflow/logged-models/{model_id}\x1a\x04\x08\x02\x10\x00\x10\x03*\x15\x44\x65lete a Logged Model\x12\x9e\x01\n\x12searchLoggedModels\x12\x1a.mlflow.SearchLoggedModels\x1a#.mlflow.SearchLoggedModels.Response\"G\xf2\x86\x19\x43\n*\n\x04POST\x12\x1c/mlflow/logged-models/search\x1a\x04\x08\x02\x10\x00\x10\x03*\x13Search LoggedModels\x12\xa9\x01\n\x12setLoggedModelTags\x12\x1a.mlflow.SetLoggedModelTags\x1a#.mlflow.SetLoggedModelTags.Response\"R\xf2\x86\x19N\n4\n\x05PATCH\x12%/mlflow/logged-models/{model_id}/tags\x1a\x04\x08\x02\x10\x00\x10\x03*\x14Set Logged Model Tag\x12\xbd\x01\n\x14\x64\x65leteLoggedModelTag\x12\x1c.mlflow.DeleteLoggedModelTag\x1a%.mlflow.DeleteLoggedModelTag.Response\"`\xf2\x86\x19\\\n?\n\x06\x44\x45LETE\x12//mlflow/logged-models/{model_id}/tags/{tag_key}\x1a\x04\x08\x02\x10\x00\x10\x03*\x17\x44\x65lete Logged Model Tag\x12\xd6\x01\n\x18listLoggedModelArtifacts\x12 .mlflow.ListLoggedModelArtifacts\x1a).mlflow.ListLoggedModelArtifacts.Response\"m\xf2\x86\x19i\nC\n\x03GET\x12\x36/mlflow/logged-models/{model_id}/artifacts/directories\x1a\x04\x08\x02\x10\x00\x10\x03* List Artifacts for Logged Models\x12\xc1\x01\n\x14LogLoggedModelParams\x12#.mlflow.LogLoggedModelParamsRequest\x1a,.mlflow.LogLoggedModelParamsRequest.Response\"V\xf2\x86\x19R\n5\n\x04POST\x12\'/mlflow/logged-models/{model_id}/params\x1a\x04\x08\x02\x10\x00\x10\x03*\x17Log Logged Model Params\x12\xb0\x01\n\rGetAssessment\x12\x1c.mlflow.GetAssessmentRequest\x1a%.mlflow.GetAssessmentRequest.Response\"Z\xf2\x86\x19V\nB\n\x03GET\x12\x35/mlflow/traces/{trace_id}/assessments/{assessment_id}\x1a\x04\x08\x03\x10\x00\x10\x03*\x0eGet Assessment\x12\xdf\x01\n\x10\x63reateAssessment\x12\x18.mlflow.CreateAssessment\x1a!.mlflow.CreateAssessment.Response\"\x8d\x01\xf2\x86\x19\x88\x01\n>\n\x04POST\x12\x30/mlflow/traces/{assessment.trace_id}/assessments\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xee\x07\x18\x0c\x18\x01*:Create an assessment of a trace or a span within the trace\x12\xd0\x01\n\x10updateAssessment\x12\x18.mlflow.UpdateAssessment\x1a!.mlflow.UpdateAssessment.Response\"\x7f\xf2\x86\x19{\nD\n\x05PATCH\x12\x35/mlflow/traces/{trace_id}/assessments/{assessment_id}\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xee\x07\x18\x01*)Update an existing assessment on a trace.\x12\xb1\x01\n\x10\x64\x65leteAssessment\x12\x18.mlflow.DeleteAssessment\x1a!.mlflow.DeleteAssessment.Response\"`\xf2\x86\x19\\\nE\n\x06\x44\x45LETE\x12\x35/mlflow/traces/{trace_id}/assessments/{assessment_id}\x1a\x04\x08\x03\x10\x00\x10\x03*\x11\x44\x65lete Assessment\x12\x9a\x01\n\rcreateDataset\x12\x15.mlflow.CreateDataset\x1a\x1e.mlflow.CreateDataset.Response\"R\xf2\x86\x19N\n%\n\x04POST\x12\x17/mlflow/datasets/create\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xee\x07\x18\x0c\x18\x01*\x19\x43reate Evaluation Dataset\x12\x91\x01\n\ngetDataset\x12\x12.mlflow.GetDataset\x1a\x1b.mlflow.GetDataset.Response\"R\xf2\x86\x19N\n*\n\x03GET\x12\x1d/mlflow/datasets/{dataset_id}\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xba\x17\x18\x01*\x16Get Evaluation Dataset\x12\xa0\x01\n\rdeleteDataset\x12\x15.mlflow.DeleteDataset\x1a\x1e.mlflow.DeleteDataset.Response\"X\xf2\x86\x19T\n-\n\x06\x44\x45LETE\x12\x1d/mlflow/datasets/{dataset_id}\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xba\x17\x18\x01*\x19\x44\x65lete Evaluation Dataset\x12\xdd\x01\n\x18searchEvaluationDatasets\x12 .mlflow.SearchEvaluationDatasets\x1a).mlflow.SearchEvaluationDatasets.Response\"t\xf2\x86\x19p\n%\n\x04POST\x12\x17/mlflow/datasets/search\x1a\x04\x08\x03\x10\x00\n$\n\x03GET\x12\x17/mlflow/datasets/search\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\x01*\x1aSearch Evaluation Datasets\x12\xa9\x01\n\x0esetDatasetTags\x12\x16.mlflow.SetDatasetTags\x1a\x1f.mlflow.SetDatasetTags.Response\"^\xf2\x86\x19Z\n1\n\x05PATCH\x12\"/mlflow/datasets/{dataset_id}/tags\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xba\x17\x18\x01*\x1bSet Evaluation Dataset Tags\x12\xb8\x01\n\x10\x64\x65leteDatasetTag\x12\x18.mlflow.DeleteDatasetTag\x1a!.mlflow.DeleteDatasetTag.Response\"g\xf2\x86\x19\x63\n8\n\x06\x44\x45LETE\x12(/mlflow/datasets/{dataset_id}/tags/{key}\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xba\x17\x18\x01*\x1d\x44\x65lete Evaluation Dataset Tag\x12\xc3\x01\n\x14upsertDatasetRecords\x12\x1c.mlflow.UpsertDatasetRecords\x1a%.mlflow.UpsertDatasetRecords.Response\"f\xf2\x86\x19\x62\n3\n\x04POST\x12%/mlflow/datasets/{dataset_id}/records\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xba\x17\x18\x01*!Upsert Evaluation Dataset Records\x12\xd6\x01\n\x17getDatasetExperimentIds\x12\x1f.mlflow.GetDatasetExperimentIds\x1a(.mlflow.GetDatasetExperimentIds.Response\"p\xf2\x86\x19l\n9\n\x03GET\x12,/mlflow/datasets/{dataset_id}/experiment-ids\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xba\x17\x18\x01*%Get Evaluation Dataset Experiment IDs\x12\x8a\x01\n\x0eregisterScorer\x12\x16.mlflow.RegisterScorer\x1a\x1f.mlflow.RegisterScorer.Response\"?\xf2\x86\x19;\n&\n\x04POST\x12\x18/mlflow/scorers/register\x1a\x04\x08\x03\x10\x00\x10\x01*\x0fRegister Scorer\x12y\n\x0blistScorers\x12\x13.mlflow.ListScorers\x1a\x1c.mlflow.ListScorers.Response\"7\xf2\x86\x19\x33\n!\n\x03GET\x12\x14/mlflow/scorers/list\x1a\x04\x08\x03\x10\x00\x10\x01*\x0cList Scorers\x12\x9a\x01\n\x12listScorerVersions\x12\x1a.mlflow.ListScorerVersions\x1a#.mlflow.ListScorerVersions.Response\"C\xf2\x86\x19?\n%\n\x03GET\x12\x18/mlflow/scorers/versions\x1a\x04\x08\x03\x10\x00\x10\x01*\x14List Scorer Versions\x12p\n\tgetScorer\x12\x11.mlflow.GetScorer\x1a\x1a.mlflow.GetScorer.Response\"4\xf2\x86\x19\x30\n \n\x03GET\x12\x13/mlflow/scorers/get\x1a\x04\x08\x03\x10\x00\x10\x01*\nGet Scorer\x12\x82\x01\n\x0c\x64\x65leteScorer\x12\x14.mlflow.DeleteScorer\x1a\x1d.mlflow.DeleteScorer.Response\"=\xf2\x86\x19\x39\n&\n\x06\x44\x45LETE\x12\x16/mlflow/scorers/delete\x1a\x04\x08\x03\x10\x00\x10\x01*\rDelete Scorer\x12\xb6\x01\n\x11getDatasetRecords\x12\x19.mlflow.GetDatasetRecords\x1a\".mlflow.GetDatasetRecords.Response\"b\xf2\x86\x19^\n2\n\x03GET\x12%/mlflow/datasets/{dataset_id}/records\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xba\x17\x18\x01*\x1eGet Evaluation Dataset Records\x12\xcd\x01\n\x17\x61\x64\x64\x44\x61tasetToExperiments\x12\x1f.mlflow.AddDatasetToExperiments\x1a(.mlflow.AddDatasetToExperiments.Response\"g\xf2\x86\x19\x63\n;\n\x04POST\x12-/mlflow/datasets/{dataset_id}/add-experiments\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xba\x17\x18\x01*\x1a\x41\x64\x64 Dataset to Experiments\x12\xe4\x01\n\x1cremoveDatasetFromExperiments\x12$.mlflow.RemoveDatasetFromExperiments\x1a-.mlflow.RemoveDatasetFromExperiments.Response\"o\xf2\x86\x19k\n>\n\x04POST\x12\x30/mlflow/datasets/{dataset_id}/remove-experiments\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xba\x17\x18\x01*\x1fRemove Dataset from ExperimentsB\x1e\n\x14org.mlflow.api.proto\x90\x01\x01\xe2?\x02\x10\x01') + DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\rservice.proto\x12\x06mlflow\x1a\x11\x61ssessments.proto\x1a\x10\x64\x61tabricks.proto\x1a\x0e\x64\x61tasets.proto\x1a\x1egoogle/protobuf/duration.proto\x1a google/protobuf/field_mask.proto\x1a\x1fgoogle/protobuf/timestamp.proto\x1a(opentelemetry/proto/trace/v1/trace.proto\x1a\x15scalapb/scalapb.proto\"\xb0\x01\n\x06Metric\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x01\x12\x11\n\ttimestamp\x18\x03 \x01(\x03\x12\x0f\n\x04step\x18\x04 \x01(\x03:\x01\x30\x12\x1a\n\x0c\x64\x61taset_name\x18\x05 \x01(\tB\x04\xf0\x86\x19\x03\x12\x1c\n\x0e\x64\x61taset_digest\x18\x06 \x01(\tB\x04\xf0\x86\x19\x03\x12\x16\n\x08model_id\x18\x07 \x01(\tB\x04\xf0\x86\x19\x03\x12\x14\n\x06run_id\x18\x08 \x01(\tB\x04\xf0\x86\x19\x03\"#\n\x05Param\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\x8b\x01\n\x03Run\x12\x1d\n\x04info\x18\x01 \x01(\x0b\x32\x0f.mlflow.RunInfo\x12\x1d\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x0f.mlflow.RunData\x12!\n\x06inputs\x18\x03 \x01(\x0b\x32\x11.mlflow.RunInputs\x12#\n\x07outputs\x18\x04 \x01(\x0b\x32\x12.mlflow.RunOutputs\"g\n\x07RunData\x12\x1f\n\x07metrics\x18\x01 \x03(\x0b\x32\x0e.mlflow.Metric\x12\x1d\n\x06params\x18\x02 \x03(\x0b\x32\r.mlflow.Param\x12\x1c\n\x04tags\x18\x03 \x03(\x0b\x32\x0e.mlflow.RunTag\"c\n\tRunInputs\x12,\n\x0e\x64\x61taset_inputs\x18\x01 \x03(\x0b\x32\x14.mlflow.DatasetInput\x12(\n\x0cmodel_inputs\x18\x02 \x03(\x0b\x32\x12.mlflow.ModelInput\"8\n\nRunOutputs\x12*\n\rmodel_outputs\x18\x01 \x03(\x0b\x32\x13.mlflow.ModelOutput\"$\n\x06RunTag\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"+\n\rExperimentTag\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\xdd\x01\n\x07RunInfo\x12\x0e\n\x06run_id\x18\x0f \x01(\t\x12\x10\n\x08run_uuid\x18\x01 \x01(\t\x12\x10\n\x08run_name\x18\x03 \x01(\t\x12\x15\n\rexperiment_id\x18\x02 \x01(\t\x12\x0f\n\x07user_id\x18\x06 \x01(\t\x12!\n\x06status\x18\x07 \x01(\x0e\x32\x11.mlflow.RunStatus\x12\x12\n\nstart_time\x18\x08 \x01(\x03\x12\x10\n\x08\x65nd_time\x18\t \x01(\x03\x12\x14\n\x0c\x61rtifact_uri\x18\r \x01(\t\x12\x17\n\x0flifecycle_stage\x18\x0e \x01(\t\"\xbb\x01\n\nExperiment\x12\x15\n\rexperiment_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x19\n\x11\x61rtifact_location\x18\x03 \x01(\t\x12\x17\n\x0flifecycle_stage\x18\x04 \x01(\t\x12\x18\n\x10last_update_time\x18\x05 \x01(\x03\x12\x15\n\rcreation_time\x18\x06 \x01(\x03\x12#\n\x04tags\x18\x07 \x03(\x0b\x32\x15.mlflow.ExperimentTag\"V\n\x0c\x44\x61tasetInput\x12\x1e\n\x04tags\x18\x01 \x03(\x0b\x32\x10.mlflow.InputTag\x12&\n\x07\x64\x61taset\x18\x02 \x01(\x0b\x32\x0f.mlflow.DatasetB\x04\xf8\x86\x19\x01\"$\n\nModelInput\x12\x16\n\x08model_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\"2\n\x08InputTag\x12\x11\n\x03key\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x13\n\x05value\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\"\x85\x01\n\x07\x44\x61taset\x12\x12\n\x04name\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x14\n\x06\x64igest\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12\x19\n\x0bsource_type\x18\x03 \x01(\tB\x04\xf8\x86\x19\x01\x12\x14\n\x06source\x18\x04 \x01(\tB\x04\xf8\x86\x19\x01\x12\x0e\n\x06schema\x18\x05 \x01(\t\x12\x0f\n\x07profile\x18\x06 \x01(\t\"9\n\x0bModelOutput\x12\x16\n\x08model_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x12\n\x04step\x18\x02 \x01(\x03\x42\x04\xf8\x86\x19\x01\"\xb6\x01\n\x10\x43reateExperiment\x12\x12\n\x04name\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x19\n\x11\x61rtifact_location\x18\x02 \x01(\t\x12#\n\x04tags\x18\x03 \x03(\x0b\x32\x15.mlflow.ExperimentTag\x1a!\n\x08Response\x12\x15\n\rexperiment_id\x18\x01 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xfe\x01\n\x11SearchExperiments\x12\x13\n\x0bmax_results\x18\x01 \x01(\x03\x12\x12\n\npage_token\x18\x02 \x01(\t\x12\x0e\n\x06\x66ilter\x18\x03 \x01(\t\x12\x10\n\x08order_by\x18\x04 \x03(\t\x12#\n\tview_type\x18\x05 \x01(\x0e\x32\x10.mlflow.ViewType\x1aL\n\x08Response\x12\'\n\x0b\x65xperiments\x18\x01 \x03(\x0b\x32\x12.mlflow.Experiment\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x8d\x01\n\rGetExperiment\x12\x1b\n\rexperiment_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a\x32\n\x08Response\x12&\n\nexperiment\x18\x01 \x01(\x0b\x32\x12.mlflow.Experiment:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"h\n\x10\x44\x65leteExperiment\x12\x1b\n\rexperiment_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"i\n\x11RestoreExperiment\x12\x1b\n\rexperiment_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"z\n\x10UpdateExperiment\x12\x1b\n\rexperiment_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x10\n\x08new_name\x18\x02 \x01(\t\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xca\x01\n\tCreateRun\x12\x15\n\rexperiment_id\x18\x01 \x01(\t\x12\x0f\n\x07user_id\x18\x02 \x01(\t\x12\x10\n\x08run_name\x18\x03 \x01(\t\x12\x12\n\nstart_time\x18\x07 \x01(\x03\x12\x1c\n\x04tags\x18\t \x03(\x0b\x32\x0e.mlflow.RunTag\x1a$\n\x08Response\x12\x18\n\x03run\x18\x01 \x01(\x0b\x32\x0b.mlflow.Run:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xd0\x01\n\tUpdateRun\x12\x0e\n\x06run_id\x18\x04 \x01(\t\x12\x10\n\x08run_uuid\x18\x01 \x01(\t\x12!\n\x06status\x18\x02 \x01(\x0e\x32\x11.mlflow.RunStatus\x12\x10\n\x08\x65nd_time\x18\x03 \x01(\x03\x12\x10\n\x08run_name\x18\x05 \x01(\t\x1a-\n\x08Response\x12!\n\x08run_info\x18\x01 \x01(\x0b\x32\x0f.mlflow.RunInfo:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"Z\n\tDeleteRun\x12\x14\n\x06run_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"[\n\nRestoreRun\x12\x14\n\x06run_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x8a\x02\n\tLogMetric\x12\x0e\n\x06run_id\x18\x06 \x01(\t\x12\x10\n\x08run_uuid\x18\x01 \x01(\t\x12\x11\n\x03key\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12\x13\n\x05value\x18\x03 \x01(\x01\x42\x04\xf8\x86\x19\x01\x12\x17\n\ttimestamp\x18\x04 \x01(\x03\x42\x04\xf8\x86\x19\x01\x12\x0f\n\x04step\x18\x05 \x01(\x03:\x01\x30\x12\x16\n\x08model_id\x18\x07 \x01(\tB\x04\xf0\x86\x19\x03\x12\x1a\n\x0c\x64\x61taset_name\x18\x08 \x01(\tB\x04\xf0\x86\x19\x03\x12\x1c\n\x0e\x64\x61taset_digest\x18\t \x01(\tB\x04\xf0\x86\x19\x03\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x8d\x01\n\x08LogParam\x12\x0e\n\x06run_id\x18\x04 \x01(\t\x12\x10\n\x08run_uuid\x18\x01 \x01(\t\x12\x11\n\x03key\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12\x13\n\x05value\x18\x03 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x90\x01\n\x10SetExperimentTag\x12\x1b\n\rexperiment_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x11\n\x03key\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12\x13\n\x05value\x18\x03 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"~\n\x13\x44\x65leteExperimentTag\x12\x1b\n\rexperiment_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x11\n\x03key\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x8b\x01\n\x06SetTag\x12\x0e\n\x06run_id\x18\x04 \x01(\t\x12\x10\n\x08run_uuid\x18\x01 \x01(\t\x12\x11\n\x03key\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12\x13\n\x05value\x18\x03 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"m\n\tDeleteTag\x12\x14\n\x06run_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x11\n\x03key\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"}\n\x06GetRun\x12\x0e\n\x06run_id\x18\x02 \x01(\t\x12\x10\n\x08run_uuid\x18\x01 \x01(\t\x1a$\n\x08Response\x12\x18\n\x03run\x18\x01 \x01(\x0b\x32\x0b.mlflow.Run:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x98\x02\n\nSearchRuns\x12\x16\n\x0e\x65xperiment_ids\x18\x01 \x03(\t\x12\x0e\n\x06\x66ilter\x18\x04 \x01(\t\x12\x34\n\rrun_view_type\x18\x03 \x01(\x0e\x32\x10.mlflow.ViewType:\x0b\x41\x43TIVE_ONLY\x12\x19\n\x0bmax_results\x18\x05 \x01(\x05:\x04\x31\x30\x30\x30\x12\x10\n\x08order_by\x18\x06 \x03(\t\x12\x12\n\npage_token\x18\x07 \x01(\t\x1a>\n\x08Response\x12\x19\n\x04runs\x18\x01 \x03(\x0b\x32\x0b.mlflow.Run\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xd8\x01\n\rListArtifacts\x12\x0e\n\x06run_id\x18\x03 \x01(\t\x12\x10\n\x08run_uuid\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\x12\x12\n\npage_token\x18\x04 \x01(\t\x1aV\n\x08Response\x12\x10\n\x08root_uri\x18\x01 \x01(\t\x12\x1f\n\x05\x66iles\x18\x02 \x03(\x0b\x32\x10.mlflow.FileInfo\x12\x17\n\x0fnext_page_token\x18\x03 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\";\n\x08\x46ileInfo\x12\x0c\n\x04path\x18\x01 \x01(\t\x12\x0e\n\x06is_dir\x18\x02 \x01(\x08\x12\x11\n\tfile_size\x18\x03 \x01(\x03\"\xea\x01\n\x10GetMetricHistory\x12\x0e\n\x06run_id\x18\x03 \x01(\t\x12\x10\n\x08run_uuid\x18\x01 \x01(\t\x12\x18\n\nmetric_key\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12\x12\n\npage_token\x18\x04 \x01(\t\x12\x13\n\x0bmax_results\x18\x05 \x01(\x05\x1a\x44\n\x08Response\x12\x1f\n\x07metrics\x18\x01 \x03(\x0b\x32\x0e.mlflow.Metric\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"a\n\x0fMetricWithRunId\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x01\x12\x11\n\ttimestamp\x18\x03 \x01(\x03\x12\x0f\n\x04step\x18\x04 \x01(\x03:\x01\x30\x12\x0e\n\x06run_id\x18\x05 \x01(\t\"\xe7\x01\n\x1cGetMetricHistoryBulkInterval\x12\x0f\n\x07run_ids\x18\x01 \x03(\t\x12\x18\n\nmetric_key\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12\x12\n\nstart_step\x18\x03 \x01(\x05\x12\x10\n\x08\x65nd_step\x18\x04 \x01(\x05\x12\x13\n\x0bmax_results\x18\x05 \x01(\x05\x1a\x34\n\x08Response\x12(\n\x07metrics\x18\x01 \x03(\x0b\x32\x17.mlflow.MetricWithRunId:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xb1\x01\n\x08LogBatch\x12\x0e\n\x06run_id\x18\x01 \x01(\t\x12\x1f\n\x07metrics\x18\x02 \x03(\x0b\x32\x0e.mlflow.Metric\x12\x1d\n\x06params\x18\x03 \x03(\x0b\x32\r.mlflow.Param\x12\x1c\n\x04tags\x18\x04 \x03(\x0b\x32\x0e.mlflow.RunTag\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"g\n\x08LogModel\x12\x0e\n\x06run_id\x18\x01 \x01(\t\x12\x12\n\nmodel_json\x18\x02 \x01(\t\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xac\x01\n\tLogInputs\x12\x14\n\x06run_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12&\n\x08\x64\x61tasets\x18\x02 \x03(\x0b\x32\x14.mlflow.DatasetInput\x12(\n\x06models\x18\x03 \x03(\x0b\x32\x12.mlflow.ModelInputB\x04\xf0\x86\x19\x03\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x80\x01\n\nLogOutputs\x12\x14\n\x06run_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12#\n\x06models\x18\x02 \x03(\x0b\x32\x13.mlflow.ModelOutput\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x95\x01\n\x13GetExperimentByName\x12\x1d\n\x0f\x65xperiment_name\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a\x32\n\x08Response\x12&\n\nexperiment\x18\x01 \x01(\x0b\x32\x12.mlflow.Experiment:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xb9\x01\n\x10\x43reateAssessment\x12\x38\n\nassessment\x18\x01 \x01(\x0b\x32\x1e.mlflow.assessments.AssessmentB\x04\xf8\x86\x19\x01\x1a>\n\x08Response\x12\x32\n\nassessment\x18\x01 \x01(\x0b\x32\x1e.mlflow.assessments.Assessment:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xf0\x01\n\x10UpdateAssessment\x12\x38\n\nassessment\x18\x01 \x01(\x0b\x32\x1e.mlflow.assessments.AssessmentB\x04\xf8\x86\x19\x01\x12\x35\n\x0bupdate_mask\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.FieldMaskB\x04\xf8\x86\x19\x01\x1a>\n\x08Response\x12\x32\n\nassessment\x18\x01 \x01(\x0b\x32\x1e.mlflow.assessments.Assessment:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x80\x01\n\x10\x44\x65leteAssessment\x12\x16\n\x08trace_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x1b\n\rassessment_id\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xb8\x01\n\x14GetAssessmentRequest\x12\x16\n\x08trace_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x1b\n\rassessment_id\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x1a>\n\x08Response\x12\x32\n\nassessment\x18\x01 \x01(\x0b\x32\x1e.mlflow.assessments.Assessment:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xe4\x01\n\tTraceInfo\x12\x12\n\nrequest_id\x18\x01 \x01(\t\x12\x15\n\rexperiment_id\x18\x02 \x01(\t\x12\x14\n\x0ctimestamp_ms\x18\x03 \x01(\x03\x12\x19\n\x11\x65xecution_time_ms\x18\x04 \x01(\x03\x12#\n\x06status\x18\x05 \x01(\x0e\x32\x13.mlflow.TraceStatus\x12\x36\n\x10request_metadata\x18\x06 \x03(\x0b\x32\x1c.mlflow.TraceRequestMetadata\x12\x1e\n\x04tags\x18\x07 \x03(\x0b\x32\x10.mlflow.TraceTag\"2\n\x14TraceRequestMetadata\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"&\n\x08TraceTag\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\xf1\x01\n\nStartTrace\x12\x15\n\rexperiment_id\x18\x01 \x01(\t\x12\x14\n\x0ctimestamp_ms\x18\x02 \x01(\x03\x12\x36\n\x10request_metadata\x18\x03 \x03(\x0b\x32\x1c.mlflow.TraceRequestMetadata\x12\x1e\n\x04tags\x18\x04 \x03(\x0b\x32\x10.mlflow.TraceTag\x1a\x31\n\x08Response\x12%\n\ntrace_info\x18\x01 \x01(\x0b\x32\x11.mlflow.TraceInfo:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x91\x02\n\x08\x45ndTrace\x12\x12\n\nrequest_id\x18\x01 \x01(\t\x12\x14\n\x0ctimestamp_ms\x18\x02 \x01(\x03\x12#\n\x06status\x18\x03 \x01(\x0e\x32\x13.mlflow.TraceStatus\x12\x36\n\x10request_metadata\x18\x04 \x03(\x0b\x32\x1c.mlflow.TraceRequestMetadata\x12\x1e\n\x04tags\x18\x05 \x03(\x0b\x32\x10.mlflow.TraceTag\x1a\x31\n\x08Response\x12%\n\ntrace_info\x18\x01 \x01(\x0b\x32\x11.mlflow.TraceInfo:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x82\x01\n\x0cGetTraceInfo\x12\x12\n\nrequest_id\x18\x01 \x01(\t\x1a\x31\n\x08Response\x12%\n\ntrace_info\x18\x01 \x01(\x0b\x32\x11.mlflow.TraceInfo:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"y\n\x0eGetTraceInfoV3\x12\x10\n\x08trace_id\x18\x01 \x01(\t\x1a(\n\x08Response\x12\x1c\n\x05trace\x18\x01 \x01(\x0b\x32\r.mlflow.Trace:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"{\n\x0e\x42\x61tchGetTraces\x12\x11\n\ttrace_ids\x18\x01 \x03(\t\x1a)\n\x08Response\x12\x1d\n\x06traces\x18\x01 \x03(\x0b\x32\r.mlflow.Trace:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x97\x01\n\x08GetTrace\x12\x16\n\x08trace_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x1c\n\rallow_partial\x18\x02 \x01(\x08:\x05\x66\x61lse\x1a(\n\x08Response\x12\x1c\n\x05trace\x18\x01 \x01(\x0b\x32\r.mlflow.Trace:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xeb\x01\n\x0cSearchTraces\x12\x16\n\x0e\x65xperiment_ids\x18\x01 \x03(\t\x12\x0e\n\x06\x66ilter\x18\x02 \x01(\t\x12\x18\n\x0bmax_results\x18\x03 \x01(\x05:\x03\x31\x30\x30\x12\x10\n\x08order_by\x18\x04 \x03(\t\x12\x12\n\npage_token\x18\x05 \x01(\t\x1a\x46\n\x08Response\x12!\n\x06traces\x18\x01 \x03(\x0b\x32\x11.mlflow.TraceInfo\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xaa\x02\n\x13SearchUnifiedTraces\x12\x16\n\x08model_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x1e\n\x10sql_warehouse_id\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12\x16\n\x0e\x65xperiment_ids\x18\x03 \x03(\t\x12\x0e\n\x06\x66ilter\x18\x04 \x01(\t\x12\x18\n\x0bmax_results\x18\x05 \x01(\x05:\x03\x31\x30\x30\x12\x10\n\x08order_by\x18\x06 \x03(\t\x12\x12\n\npage_token\x18\x07 \x01(\t\x1a\x46\n\x08Response\x12!\n\x06traces\x18\x01 \x03(\x0b\x32\x11.mlflow.TraceInfo\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xc1\x01\n\x15GetOnlineTraceDetails\x12\x16\n\x08trace_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x1e\n\x10sql_warehouse_id\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12$\n\x16source_inference_table\x18\x03 \x01(\tB\x04\xf8\x86\x19\x01\x12*\n\x1csource_databricks_request_id\x18\x04 \x01(\tB\x04\xf8\x86\x19\x01\x1a\x1e\n\x08Response\x12\x12\n\ntrace_data\x18\x01 \x01(\t\"\xc3\x01\n\x0c\x44\x65leteTraces\x12\x1b\n\rexperiment_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x1c\n\x14max_timestamp_millis\x18\x02 \x01(\x03\x12\x12\n\nmax_traces\x18\x03 \x01(\x05\x12\x13\n\x0brequest_ids\x18\x04 \x03(\t\x1a\"\n\x08Response\x12\x16\n\x0etraces_deleted\x18\x01 \x01(\x05:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xc5\x01\n\x0e\x44\x65leteTracesV3\x12\x1b\n\rexperiment_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x1c\n\x14max_timestamp_millis\x18\x02 \x01(\x03\x12\x12\n\nmax_traces\x18\x03 \x01(\x05\x12\x13\n\x0brequest_ids\x18\x04 \x03(\t\x1a\"\n\x08Response\x12\x16\n\x0etraces_deleted\x18\x01 \x01(\x05:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xb5\x02\n\x1f\x43\x61lculateTraceFilterCorrelation\x12\x16\n\x0e\x65xperiment_ids\x18\x01 \x03(\t\x12\x16\n\x0e\x66ilter_string1\x18\x02 \x01(\t\x12\x16\n\x0e\x66ilter_string2\x18\x03 \x01(\t\x12\x13\n\x0b\x62\x61se_filter\x18\x04 \x01(\t\x1a\x87\x01\n\x08Response\x12\x0c\n\x04npmi\x18\x01 \x01(\x01\x12\x15\n\rnpmi_smoothed\x18\x02 \x01(\x01\x12\x15\n\rfilter1_count\x18\x03 \x01(\x05\x12\x15\n\rfilter2_count\x18\x04 \x01(\x05\x12\x13\n\x0bjoint_count\x18\x05 \x01(\x05\x12\x13\n\x0btotal_count\x18\x06 \x01(\x05:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"v\n\x0bSetTraceTag\x12\x12\n\nrequest_id\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\x12\r\n\x05value\x18\x03 \x01(\t\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x88\x01\n\rSetTraceTagV3\x12\x10\n\x08trace_id\x18\x04 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\x12\r\n\x05value\x18\x03 \x01(\t\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]J\x04\x08\x01\x10\x02R\nrequest_id\"z\n\x0e\x44\x65leteTraceTag\x12\x10\n\x08trace_id\x18\x03 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]J\x04\x08\x01\x10\x02R\nrequest_id\"l\n\x10\x44\x65leteTraceTagV3\x12\x12\n\nrequest_id\x18\x01 \x01(\t\x12\x0b\n\x03key\x18\x02 \x01(\t\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"c\n\x05Trace\x12\'\n\ntrace_info\x18\x01 \x01(\x0b\x32\x13.mlflow.TraceInfoV3\x12\x31\n\x05spans\x18\x02 \x03(\x0b\x32\".opentelemetry.proto.trace.v1.Span\"\xb6\x03\n\rTraceLocation\x12\x35\n\x04type\x18\x01 \x01(\x0e\x32\'.mlflow.TraceLocation.TraceLocationType\x12K\n\x11mlflow_experiment\x18\x02 \x01(\x0b\x32..mlflow.TraceLocation.MlflowExperimentLocationH\x00\x12G\n\x0finference_table\x18\x03 \x01(\x0b\x32,.mlflow.TraceLocation.InferenceTableLocationH\x00\x1a\x31\n\x18MlflowExperimentLocation\x12\x15\n\rexperiment_id\x18\x01 \x01(\t\x1a\x31\n\x16InferenceTableLocation\x12\x17\n\x0f\x66ull_table_name\x18\x01 \x01(\t\"d\n\x11TraceLocationType\x12#\n\x1fTRACE_LOCATION_TYPE_UNSPECIFIED\x10\x00\x12\x15\n\x11MLFLOW_EXPERIMENT\x10\x01\x12\x13\n\x0fINFERENCE_TABLE\x10\x02\x42\x0c\n\nidentifier\"\x9b\x05\n\x0bTraceInfoV3\x12\x10\n\x08trace_id\x18\x01 \x01(\t\x12\x19\n\x11\x63lient_request_id\x18\x02 \x01(\t\x12-\n\x0etrace_location\x18\x03 \x01(\x0b\x32\x15.mlflow.TraceLocation\x12\x0f\n\x07request\x18\x04 \x01(\t\x12\x10\n\x08response\x18\x05 \x01(\t\x12\x17\n\x0frequest_preview\x18\x0c \x01(\t\x12\x18\n\x10response_preview\x18\r \x01(\t\x12\x30\n\x0crequest_time\x18\x06 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\x35\n\x12\x65xecution_duration\x18\x07 \x01(\x0b\x32\x19.google.protobuf.Duration\x12(\n\x05state\x18\x08 \x01(\x0e\x32\x19.mlflow.TraceInfoV3.State\x12>\n\x0etrace_metadata\x18\t \x03(\x0b\x32&.mlflow.TraceInfoV3.TraceMetadataEntry\x12\x33\n\x0b\x61ssessments\x18\n \x03(\x0b\x32\x1e.mlflow.assessments.Assessment\x12+\n\x04tags\x18\x0b \x03(\x0b\x32\x1d.mlflow.TraceInfoV3.TagsEntry\x1a\x34\n\x12TraceMetadataEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a+\n\tTagsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"B\n\x05State\x12\x15\n\x11STATE_UNSPECIFIED\x10\x00\x12\x06\n\x02OK\x10\x01\x12\t\n\x05\x45RROR\x10\x02\x12\x0f\n\x0bIN_PROGRESS\x10\x03\"\\\n\x0cStartTraceV3\x12\"\n\x05trace\x18\x01 \x01(\x0b\x32\r.mlflow.TraceB\x04\xf8\x86\x19\x01\x1a(\n\x08Response\x12\x1c\n\x05trace\x18\x01 \x01(\x0b\x32\r.mlflow.Trace\"F\n\x0fLinkTracesToRun\x12\x11\n\ttrace_ids\x18\x01 \x03(\t\x12\x14\n\x06run_id\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response\"h\n\x0e\x44\x61tasetSummary\x12\x1b\n\rexperiment_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x12\n\x04name\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12\x14\n\x06\x64igest\x18\x03 \x01(\tB\x04\xf8\x86\x19\x01\x12\x0f\n\x07\x63ontext\x18\x04 \x01(\t\"\x94\x01\n\x0eSearchDatasets\x12\x16\n\x0e\x65xperiment_ids\x18\x01 \x03(\t\x1a=\n\x08Response\x12\x31\n\x11\x64\x61taset_summaries\x18\x01 \x03(\x0b\x32\x16.mlflow.DatasetSummary:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x9a\x02\n\x11\x43reateLoggedModel\x12\x1b\n\rexperiment_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x12\n\nmodel_type\x18\x03 \x01(\t\x12\x15\n\rsource_run_id\x18\x04 \x01(\t\x12,\n\x06params\x18\x05 \x03(\x0b\x32\x1c.mlflow.LoggedModelParameter\x12$\n\x04tags\x18\x06 \x03(\x0b\x32\x16.mlflow.LoggedModelTag\x1a.\n\x08Response\x12\"\n\x05model\x18\x01 \x01(\x0b\x32\x13.mlflow.LoggedModel:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xbb\x01\n\x13\x46inalizeLoggedModel\x12\x16\n\x08model_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12/\n\x06status\x18\x02 \x01(\x0e\x32\x19.mlflow.LoggedModelStatusB\x04\xf8\x86\x19\x01\x1a.\n\x08Response\x12\"\n\x05model\x18\x01 \x01(\x0b\x32\x13.mlflow.LoggedModel:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x85\x01\n\x0eGetLoggedModel\x12\x16\n\x08model_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a.\n\x08Response\x12\"\n\x05model\x18\x01 \x01(\x0b\x32\x13.mlflow.LoggedModel:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"d\n\x11\x44\x65leteLoggedModel\x12\x16\n\x08model_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xf7\x03\n\x12SearchLoggedModels\x12\x16\n\x0e\x65xperiment_ids\x18\x01 \x03(\t\x12\x0e\n\x06\x66ilter\x18\x02 \x01(\t\x12\x34\n\x08\x64\x61tasets\x18\x06 \x03(\x0b\x32\".mlflow.SearchLoggedModels.Dataset\x12\x17\n\x0bmax_results\x18\x03 \x01(\x05:\x02\x35\x30\x12\x34\n\x08order_by\x18\x04 \x03(\x0b\x32\".mlflow.SearchLoggedModels.OrderBy\x12\x12\n\npage_token\x18\x05 \x01(\t\x1a=\n\x07\x44\x61taset\x12\x1a\n\x0c\x64\x61taset_name\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x16\n\x0e\x64\x61taset_digest\x18\x02 \x01(\t\x1aj\n\x07OrderBy\x12\x18\n\nfield_name\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x17\n\tascending\x18\x02 \x01(\x08:\x04true\x12\x14\n\x0c\x64\x61taset_name\x18\x03 \x01(\t\x12\x16\n\x0e\x64\x61taset_digest\x18\x04 \x01(\t\x1aH\n\x08Response\x12#\n\x06models\x18\x01 \x03(\x0b\x32\x13.mlflow.LoggedModel\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xaf\x01\n\x12SetLoggedModelTags\x12\x16\n\x08model_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12$\n\x04tags\x18\x02 \x03(\x0b\x32\x16.mlflow.LoggedModelTag\x1a.\n\x08Response\x12\"\n\x05model\x18\x01 \x01(\x0b\x32\x13.mlflow.LoggedModel:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"~\n\x14\x44\x65leteLoggedModelTag\x12\x16\n\x08model_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x15\n\x07tag_key\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xec\x01\n\x18ListLoggedModelArtifacts\x12\x16\n\x08model_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x1f\n\x17\x61rtifact_directory_path\x18\x02 \x01(\t\x12\x12\n\npage_token\x18\x03 \x01(\t\x1aV\n\x08Response\x12\x10\n\x08root_uri\x18\x01 \x01(\t\x12\x1f\n\x05\x66iles\x18\x02 \x03(\x0b\x32\x10.mlflow.FileInfo\x12\x17\n\x0fnext_page_token\x18\x03 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x9c\x01\n\x1bLogLoggedModelParamsRequest\x12\x16\n\x08model_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12,\n\x06params\x18\x02 \x03(\x0b\x32\x1c.mlflow.LoggedModelParameter\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"[\n\x0bLoggedModel\x12%\n\x04info\x18\x01 \x01(\x0b\x32\x17.mlflow.LoggedModelInfo\x12%\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x17.mlflow.LoggedModelData\"\x84\x03\n\x0fLoggedModelInfo\x12\x10\n\x08model_id\x18\x01 \x01(\t\x12\x15\n\rexperiment_id\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x1d\n\x15\x63reation_timestamp_ms\x18\x04 \x01(\x03\x12!\n\x19last_updated_timestamp_ms\x18\x05 \x01(\x03\x12\x14\n\x0c\x61rtifact_uri\x18\x06 \x01(\t\x12)\n\x06status\x18\x07 \x01(\x0e\x32\x19.mlflow.LoggedModelStatus\x12\x12\n\ncreator_id\x18\x08 \x01(\x03\x12\x12\n\nmodel_type\x18\t \x01(\t\x12\x15\n\rsource_run_id\x18\n \x01(\t\x12\x16\n\x0estatus_message\x18\x0b \x01(\t\x12$\n\x04tags\x18\x0c \x03(\x0b\x32\x16.mlflow.LoggedModelTag\x12:\n\rregistrations\x18\r \x03(\x0b\x32#.mlflow.LoggedModelRegistrationInfo\",\n\x0eLoggedModelTag\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"<\n\x1bLoggedModelRegistrationInfo\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\t\"`\n\x0fLoggedModelData\x12,\n\x06params\x18\x01 \x03(\x0b\x32\x1c.mlflow.LoggedModelParameter\x12\x1f\n\x07metrics\x18\x02 \x03(\x0b\x32\x0e.mlflow.Metric\"2\n\x14LoggedModelParameter\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\x81\x02\n\x0eSearchTracesV3\x12(\n\tlocations\x18\x01 \x03(\x0b\x32\x15.mlflow.TraceLocation\x12\x0e\n\x06\x66ilter\x18\x02 \x01(\t\x12\x18\n\x0bmax_results\x18\x03 \x01(\x05:\x03\x31\x30\x30\x12\x10\n\x08order_by\x18\x04 \x03(\t\x12\x12\n\npage_token\x18\x05 \x01(\t\x1aH\n\x08Response\x12#\n\x06traces\x18\x01 \x03(\x0b\x32\x13.mlflow.TraceInfoV3\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xb8\x02\n\rCreateDataset\x12\x12\n\x04name\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x16\n\x0e\x65xperiment_ids\x18\x02 \x03(\t\x12\x44\n\x0bsource_type\x18\x03 \x01(\x0e\x32/.mlflow.datasets.DatasetRecordSource.SourceType\x12\x0e\n\x06source\x18\x04 \x01(\t\x12\x0e\n\x06schema\x18\x05 \x01(\t\x12\x0f\n\x07profile\x18\x06 \x01(\t\x12\x12\n\ncreated_by\x18\x07 \x01(\t\x12\x0c\n\x04tags\x18\x08 \x01(\t\x1a\x35\n\x08Response\x12)\n\x07\x64\x61taset\x18\x01 \x01(\x0b\x32\x18.mlflow.datasets.Dataset:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xb7\x01\n\nGetDataset\x12\x18\n\ndataset_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x12\n\npage_token\x18\x02 \x01(\t\x1aN\n\x08Response\x12)\n\x07\x64\x61taset\x18\x01 \x01(\x0b\x32\x18.mlflow.datasets.Dataset\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"b\n\rDeleteDataset\x12\x18\n\ndataset_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x88\x02\n\x18SearchEvaluationDatasets\x12\x16\n\x0e\x65xperiment_ids\x18\x01 \x03(\t\x12\x15\n\rfilter_string\x18\x02 \x01(\t\x12\x19\n\x0bmax_results\x18\x03 \x01(\x05:\x04\x31\x30\x30\x30\x12\x10\n\x08order_by\x18\x04 \x03(\t\x12\x12\n\npage_token\x18\x05 \x01(\t\x1aO\n\x08Response\x12*\n\x08\x64\x61tasets\x18\x01 \x03(\x0b\x32\x18.mlflow.datasets.Dataset\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xa2\x01\n\x0eSetDatasetTags\x12\x18\n\ndataset_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x12\n\x04tags\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x1a\x35\n\x08Response\x12)\n\x07\x64\x61taset\x18\x01 \x01(\x0b\x32\x18.mlflow.datasets.Dataset:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"x\n\x10\x44\x65leteDatasetTag\x12\x18\n\ndataset_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x11\n\x03key\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xc3\x01\n\x14UpsertDatasetRecords\x12\x18\n\ndataset_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x15\n\x07records\x18\x02 \x01(\tB\x04\xf8\x86\x19\x01\x12\x12\n\nupdated_by\x18\x03 \x01(\t\x1a\x39\n\x08Response\x12\x16\n\x0einserted_count\x18\x01 \x01(\x05\x12\x15\n\rupdated_count\x18\x02 \x01(\x05:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x84\x01\n\x17GetDatasetExperimentIds\x12\x18\n\ndataset_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a\"\n\x08Response\x12\x16\n\x0e\x65xperiment_ids\x18\x01 \x03(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xbf\x01\n\x11GetDatasetRecords\x12\x18\n\ndataset_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x19\n\x0bmax_results\x18\x02 \x01(\x05:\x04\x31\x30\x30\x30\x12\x12\n\npage_token\x18\x03 \x01(\t\x1a\x34\n\x08Response\x12\x0f\n\x07records\x18\x01 \x01(\t\x12\x17\n\x0fnext_page_token\x18\x02 \x01(\t:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xaf\x01\n\x17\x41\x64\x64\x44\x61tasetToExperiments\x12\x18\n\ndataset_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x16\n\x0e\x65xperiment_ids\x18\x02 \x03(\t\x1a\x35\n\x08Response\x12)\n\x07\x64\x61taset\x18\x01 \x01(\x0b\x32\x18.mlflow.datasets.Dataset:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xb4\x01\n\x1cRemoveDatasetFromExperiments\x12\x18\n\ndataset_id\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x16\n\x0e\x65xperiment_ids\x18\x02 \x03(\t\x1a\x35\n\x08Response\x12)\n\x07\x64\x61taset\x18\x01 \x01(\x0b\x32\x18.mlflow.datasets.Dataset:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x85\x02\n\x0eRegisterScorer\x12\x15\n\rexperiment_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x19\n\x11serialized_scorer\x18\x03 \x01(\t\x1a\x85\x01\n\x08Response\x12\x0f\n\x07version\x18\x01 \x01(\x05\x12\x11\n\tscorer_id\x18\x02 \x01(\t\x12\x15\n\rexperiment_id\x18\x03 \x01(\t\x12\x0c\n\x04name\x18\x04 \x01(\t\x12\x19\n\x11serialized_scorer\x18\x05 \x01(\t\x12\x15\n\rcreation_time\x18\x06 \x01(\x03:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"~\n\x0bListScorers\x12\x15\n\rexperiment_id\x18\x01 \x01(\t\x1a+\n\x08Response\x12\x1f\n\x07scorers\x18\x01 \x03(\x0b\x32\x0e.mlflow.Scorer:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x93\x01\n\x12ListScorerVersions\x12\x15\n\rexperiment_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x1a+\n\x08Response\x12\x1f\n\x07scorers\x18\x01 \x03(\x0b\x32\x0e.mlflow.Scorer:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x9a\x01\n\tGetScorer\x12\x15\n\rexperiment_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\x05\x1a*\n\x08Response\x12\x1e\n\x06scorer\x18\x01 \x01(\x0b\x32\x0e.mlflow.Scorer:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"}\n\x0c\x44\x65leteScorer\x12\x15\n\rexperiment_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\x05\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x91\x01\n\x06Scorer\x12\x15\n\rexperiment_id\x18\x01 \x01(\x05\x12\x13\n\x0bscorer_name\x18\x02 \x01(\t\x12\x16\n\x0escorer_version\x18\x03 \x01(\x05\x12\x19\n\x11serialized_scorer\x18\x04 \x01(\t\x12\x15\n\rcreation_time\x18\x05 \x01(\x03\x12\x11\n\tscorer_id\x18\x06 \x01(\t\"4\n\tWorkspace\x12\x12\n\x04name\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\"p\n\x0eListWorkspaces\x1a\x31\n\x08Response\x12%\n\nworkspaces\x18\x01 \x03(\x0b\x32\x11.mlflow.Workspace:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x99\x01\n\x0f\x43reateWorkspace\x12\x12\n\x04name\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x1a\x30\n\x08Response\x12$\n\tworkspace\x18\x01 \x01(\x0b\x32\x11.mlflow.Workspace:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\x8b\x01\n\x0cGetWorkspace\x12\x1c\n\x0eworkspace_name\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a\x30\n\x08Response\x12$\n\tworkspace\x18\x01 \x01(\x0b\x32\x11.mlflow.Workspace:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"\xa3\x01\n\x0fUpdateWorkspace\x12\x1c\n\x0eworkspace_name\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\x1a\x30\n\x08Response\x12$\n\tworkspace\x18\x01 \x01(\x0b\x32\x11.mlflow.Workspace:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]\"h\n\x0f\x44\x65leteWorkspace\x12\x1c\n\x0eworkspace_name\x18\x01 \x01(\tB\x04\xf8\x86\x19\x01\x1a\n\n\x08Response:+\xe2?(\n&com.databricks.rpc.RPC[$this.Response]*6\n\x08ViewType\x12\x0f\n\x0b\x41\x43TIVE_ONLY\x10\x01\x12\x10\n\x0c\x44\x45LETED_ONLY\x10\x02\x12\x07\n\x03\x41LL\x10\x03*I\n\nSourceType\x12\x0c\n\x08NOTEBOOK\x10\x01\x12\x07\n\x03JOB\x10\x02\x12\x0b\n\x07PROJECT\x10\x03\x12\t\n\x05LOCAL\x10\x04\x12\x0c\n\x07UNKNOWN\x10\xe8\x07*M\n\tRunStatus\x12\x0b\n\x07RUNNING\x10\x01\x12\r\n\tSCHEDULED\x10\x02\x12\x0c\n\x08\x46INISHED\x10\x03\x12\n\n\x06\x46\x41ILED\x10\x04\x12\n\n\x06KILLED\x10\x05*O\n\x0bTraceStatus\x12\x1c\n\x18TRACE_STATUS_UNSPECIFIED\x10\x00\x12\x06\n\x02OK\x10\x01\x12\t\n\x05\x45RROR\x10\x02\x12\x0f\n\x0bIN_PROGRESS\x10\x03*\x8a\x01\n\x11LoggedModelStatus\x12#\n\x1fLOGGED_MODEL_STATUS_UNSPECIFIED\x10\x00\x12\x18\n\x14LOGGED_MODEL_PENDING\x10\x01\x12\x16\n\x12LOGGED_MODEL_READY\x10\x02\x12\x1e\n\x1aLOGGED_MODEL_UPLOAD_FAILED\x10\x03\x32\x85`\n\rMlflowService\x12\xa6\x01\n\x13getExperimentByName\x12\x1b.mlflow.GetExperimentByName\x1a$.mlflow.GetExperimentByName.Response\"L\xf2\x86\x19H\n,\n\x03GET\x12\x1f/mlflow/experiments/get-by-name\x1a\x04\x08\x02\x10\x00\x10\x01*\x16Get Experiment By Name\x12\x94\x01\n\x10\x63reateExperiment\x12\x18.mlflow.CreateExperiment\x1a!.mlflow.CreateExperiment.Response\"C\xf2\x86\x19?\n(\n\x04POST\x12\x1a/mlflow/experiments/create\x1a\x04\x08\x02\x10\x00\x10\x01*\x11\x43reate Experiment\x12\xc1\x01\n\x11searchExperiments\x12\x19.mlflow.SearchExperiments\x1a\".mlflow.SearchExperiments.Response\"m\xf2\x86\x19i\n(\n\x04POST\x12\x1a/mlflow/experiments/search\x1a\x04\x08\x02\x10\x00\n\'\n\x03GET\x12\x1a/mlflow/experiments/search\x1a\x04\x08\x02\x10\x00\x10\x01*\x12Search Experiments\x12\x88\x01\n\rgetExperiment\x12\x15.mlflow.GetExperiment\x1a\x1e.mlflow.GetExperiment.Response\"@\xf2\x86\x19\x38\n$\n\x03GET\x12\x17/mlflow/experiments/get\x1a\x04\x08\x02\x10\x00\x10\x01*\x0eGet Experiment\xba\x8c\x19\x00\x12\x94\x01\n\x10\x64\x65leteExperiment\x12\x18.mlflow.DeleteExperiment\x1a!.mlflow.DeleteExperiment.Response\"C\xf2\x86\x19?\n(\n\x04POST\x12\x1a/mlflow/experiments/delete\x1a\x04\x08\x02\x10\x00\x10\x01*\x11\x44\x65lete Experiment\x12\x99\x01\n\x11restoreExperiment\x12\x19.mlflow.RestoreExperiment\x1a\".mlflow.RestoreExperiment.Response\"E\xf2\x86\x19\x41\n)\n\x04POST\x12\x1b/mlflow/experiments/restore\x1a\x04\x08\x02\x10\x00\x10\x01*\x12Restore Experiment\x12\x94\x01\n\x10updateExperiment\x12\x18.mlflow.UpdateExperiment\x1a!.mlflow.UpdateExperiment.Response\"C\xf2\x86\x19?\n(\n\x04POST\x12\x1a/mlflow/experiments/update\x1a\x04\x08\x02\x10\x00\x10\x01*\x11Update Experiment\x12q\n\tcreateRun\x12\x11.mlflow.CreateRun\x1a\x1a.mlflow.CreateRun.Response\"5\xf2\x86\x19\x31\n!\n\x04POST\x12\x13/mlflow/runs/create\x1a\x04\x08\x02\x10\x00\x10\x01*\nCreate Run\x12q\n\tupdateRun\x12\x11.mlflow.UpdateRun\x1a\x1a.mlflow.UpdateRun.Response\"5\xf2\x86\x19\x31\n!\n\x04POST\x12\x13/mlflow/runs/update\x1a\x04\x08\x02\x10\x00\x10\x01*\nUpdate Run\x12q\n\tdeleteRun\x12\x11.mlflow.DeleteRun\x1a\x1a.mlflow.DeleteRun.Response\"5\xf2\x86\x19\x31\n!\n\x04POST\x12\x13/mlflow/runs/delete\x1a\x04\x08\x02\x10\x00\x10\x01*\nDelete Run\x12v\n\nrestoreRun\x12\x12.mlflow.RestoreRun\x1a\x1b.mlflow.RestoreRun.Response\"7\xf2\x86\x19\x33\n\"\n\x04POST\x12\x14/mlflow/runs/restore\x1a\x04\x08\x02\x10\x00\x10\x01*\x0bRestore Run\x12u\n\tlogMetric\x12\x11.mlflow.LogMetric\x1a\x1a.mlflow.LogMetric.Response\"9\xf2\x86\x19\x35\n%\n\x04POST\x12\x17/mlflow/runs/log-metric\x1a\x04\x08\x02\x10\x00\x10\x01*\nLog Metric\x12t\n\x08logParam\x12\x10.mlflow.LogParam\x1a\x19.mlflow.LogParam.Response\";\xf2\x86\x19\x37\n(\n\x04POST\x12\x1a/mlflow/runs/log-parameter\x1a\x04\x08\x02\x10\x00\x10\x01*\tLog Param\x12\xa1\x01\n\x10setExperimentTag\x12\x18.mlflow.SetExperimentTag\x1a!.mlflow.SetExperimentTag.Response\"P\xf2\x86\x19L\n4\n\x04POST\x12&/mlflow/experiments/set-experiment-tag\x1a\x04\x08\x02\x10\x00\x10\x01*\x12Set Experiment Tag\x12\xb0\x01\n\x13\x64\x65leteExperimentTag\x12\x1b.mlflow.DeleteExperimentTag\x1a$.mlflow.DeleteExperimentTag.Response\"V\xf2\x86\x19R\n7\n\x04POST\x12)/mlflow/experiments/delete-experiment-tag\x1a\x04\x08\x02\x10\x00\x10\x01*\x15\x44\x65lete Experiment Tag\x12\x66\n\x06setTag\x12\x0e.mlflow.SetTag\x1a\x17.mlflow.SetTag.Response\"3\xf2\x86\x19/\n\"\n\x04POST\x12\x14/mlflow/runs/set-tag\x1a\x04\x08\x02\x10\x00\x10\x01*\x07Set Tag\x12\x88\x01\n\x0bsetTraceTag\x12\x13.mlflow.SetTraceTag\x1a\x1c.mlflow.SetTraceTag.Response\"F\xf2\x86\x19\x42\n/\n\x05PATCH\x12 /mlflow/traces/{request_id}/tags\x1a\x04\x08\x02\x10\x00\x10\x03*\rSet Trace Tag\x12\x8f\x01\n\rsetTraceTagV3\x12\x15.mlflow.SetTraceTagV3\x1a\x1e.mlflow.SetTraceTagV3.Response\"G\xf2\x86\x19\x43\n-\n\x05PATCH\x12\x1e/mlflow/traces/{trace_id}/tags\x1a\x04\x08\x03\x10\x00\x10\x03*\x10Set Trace Tag V3\x12\x95\x01\n\x0e\x64\x65leteTraceTag\x12\x16.mlflow.DeleteTraceTag\x1a\x1f.mlflow.DeleteTraceTag.Response\"J\xf2\x86\x19\x46\n0\n\x06\x44\x45LETE\x12 /mlflow/traces/{request_id}/tags\x1a\x04\x08\x02\x10\x00\x10\x03*\x10\x44\x65lete Trace Tag\x12\x9c\x01\n\x10\x64\x65leteTraceTagV3\x12\x18.mlflow.DeleteTraceTagV3\x1a!.mlflow.DeleteTraceTagV3.Response\"K\xf2\x86\x19G\n.\n\x06\x44\x45LETE\x12\x1e/mlflow/traces/{trace_id}/tags\x1a\x04\x08\x03\x10\x00\x10\x03*\x13\x44\x65lete Trace Tag V3\x12u\n\tdeleteTag\x12\x11.mlflow.DeleteTag\x1a\x1a.mlflow.DeleteTag.Response\"9\xf2\x86\x19\x35\n%\n\x04POST\x12\x17/mlflow/runs/delete-tag\x1a\x04\x08\x02\x10\x00\x10\x01*\nDelete Tag\x12\x65\n\x06getRun\x12\x0e.mlflow.GetRun\x1a\x17.mlflow.GetRun.Response\"2\xf2\x86\x19*\n\x1d\n\x03GET\x12\x10/mlflow/runs/get\x1a\x04\x08\x02\x10\x00\x10\x01*\x07Get Run\xba\x8c\x19\x00\x12y\n\nsearchRuns\x12\x12.mlflow.SearchRuns\x1a\x1b.mlflow.SearchRuns.Response\":\xf2\x86\x19\x32\n!\n\x04POST\x12\x13/mlflow/runs/search\x1a\x04\x08\x02\x10\x00\x10\x01*\x0bSearch Runs\xba\x8c\x19\x00\x12\x87\x01\n\rlistArtifacts\x12\x15.mlflow.ListArtifacts\x1a\x1e.mlflow.ListArtifacts.Response\"?\xf2\x86\x19\x37\n#\n\x03GET\x12\x16/mlflow/artifacts/list\x1a\x04\x08\x02\x10\x00\x10\x01*\x0eList Artifacts\xba\x8c\x19\x00\x12\x95\x01\n\x10getMetricHistory\x12\x18.mlflow.GetMetricHistory\x1a!.mlflow.GetMetricHistory.Response\"D\xf2\x86\x19@\n(\n\x03GET\x12\x1b/mlflow/metrics/get-history\x1a\x04\x08\x02\x10\x00\x10\x01*\x12Get Metric History\x12\xb7\x01\n\x1cgetMetricHistoryBulkInterval\x12$.mlflow.GetMetricHistoryBulkInterval\x1a-.mlflow.GetMetricHistoryBulkInterval.Response\"B\xf2\x86\x19:\n6\n\x03GET\x12)/mlflow/metrics/get-history-bulk-interval\x1a\x04\x08\x02\x10\x0b\x10\x03\xba\x8c\x19\x00\x12p\n\x08logBatch\x12\x10.mlflow.LogBatch\x1a\x19.mlflow.LogBatch.Response\"7\xf2\x86\x19\x33\n$\n\x04POST\x12\x16/mlflow/runs/log-batch\x1a\x04\x08\x02\x10\x00\x10\x01*\tLog Batch\x12p\n\x08logModel\x12\x10.mlflow.LogModel\x1a\x19.mlflow.LogModel.Response\"7\xf2\x86\x19\x33\n$\n\x04POST\x12\x16/mlflow/runs/log-model\x1a\x04\x08\x02\x10\x00\x10\x01*\tLog Model\x12u\n\tlogInputs\x12\x11.mlflow.LogInputs\x1a\x1a.mlflow.LogInputs.Response\"9\xf2\x86\x19\x35\n%\n\x04POST\x12\x17/mlflow/runs/log-inputs\x1a\x04\x08\x02\x10\x00\x10\x01*\nLog Inputs\x12v\n\nlogOutputs\x12\x12.mlflow.LogOutputs\x1a\x1b.mlflow.LogOutputs.Response\"7\xf2\x86\x19\x33\n\"\n\x04POST\x12\x14/mlflow/runs/outputs\x1a\x04\x08\x02\x10\x00\x10\x03*\x0bLog Outputs\x12\x87\x01\n\x0esearchDatasets\x12\x16.mlflow.SearchDatasets\x1a\x1f.mlflow.SearchDatasets.Response\"<\xf2\x86\x19\x34\n0\n\x04POST\x12\"mlflow/experiments/search-datasets\x1a\x04\x08\x02\x10\x00\x10\x03\xba\x8c\x19\x00\x12p\n\nstartTrace\x12\x12.mlflow.StartTrace\x1a\x1b.mlflow.StartTrace.Response\"1\xf2\x86\x19-\n\x1c\n\x04POST\x12\x0e/mlflow/traces\x1a\x04\x08\x02\x10\x00\x10\x03*\x0bStart Trace\x12v\n\x08\x65ndTrace\x12\x10.mlflow.EndTrace\x1a\x19.mlflow.EndTrace.Response\"=\xf2\x86\x19\x39\n*\n\x05PATCH\x12\x1b/mlflow/traces/{request_id}\x1a\x04\x08\x02\x10\x00\x10\x03*\tEnd Trace\x12\x89\x01\n\x0cgetTraceInfo\x12\x14.mlflow.GetTraceInfo\x1a\x1d.mlflow.GetTraceInfo.Response\"D\xf2\x86\x19@\n-\n\x03GET\x12 /mlflow/traces/{request_id}/info\x1a\x04\x08\x02\x10\x00\x10\x03*\rGet TraceInfo\x12\x8b\x01\n\x0egetTraceInfoV3\x12\x16.mlflow.GetTraceInfoV3\x1a\x1f.mlflow.GetTraceInfoV3.Response\"@\xf2\x86\x19<\n&\n\x03GET\x12\x19/mlflow/traces/{trace_id}\x1a\x04\x08\x03\x10\x00\x10\x03*\x10Get TraceInfo v3\x12n\n\x08getTrace\x12\x10.mlflow.GetTrace\x1a\x19.mlflow.GetTrace.Response\"5\xf2\x86\x19\x31\n\x1f\n\x03GET\x12\x12/mlflow/traces/get\x1a\x04\x08\x03\x10\x00\x10\x03*\x0cGet Trace v3\x12\x83\x01\n\x0e\x62\x61tchGetTraces\x12\x16.mlflow.BatchGetTraces\x1a\x1f.mlflow.BatchGetTraces.Response\"8\xf2\x86\x19\x34\n$\n\x03GET\x12\x17/mlflow/traces/batchGet\x1a\x04\x08\x03\x10\x00\x10\x03*\nGet Traces\x12w\n\x0csearchTraces\x12\x14.mlflow.SearchTraces\x1a\x1d.mlflow.SearchTraces.Response\"2\xf2\x86\x19.\n\x1b\n\x03GET\x12\x0e/mlflow/traces\x1a\x04\x08\x02\x10\x00\x10\x03*\rSearch Traces\x12\x88\x01\n\x0esearchTracesV3\x12\x16.mlflow.SearchTracesV3\x1a\x1f.mlflow.SearchTracesV3.Response\"=\xf2\x86\x19\x39\n#\n\x04POST\x12\x15/mlflow/traces/search\x1a\x04\x08\x03\x10\x00\x10\x03*\x10Search Traces V3\x12i\n\x0cstartTraceV3\x12\x14.mlflow.StartTraceV3\x1a\x1d.mlflow.StartTraceV3.Response\"$\xf2\x86\x19 \n\x1c\n\x04POST\x12\x0e/mlflow/traces\x1a\x04\x08\x03\x10\x00\x10\x03\x12\x92\x01\n\x0flinkTracesToRun\x12\x17.mlflow.LinkTracesToRun\x1a .mlflow.LinkTracesToRun.Response\"D\xf2\x86\x19@\n(\n\x04POST\x12\x1a/mlflow/traces/link-to-run\x1a\x04\x08\x02\x10\x00\x10\x03*\x12Link Traces to Run\x12\xa2\x01\n\x19searchUnifiedTraceHandler\x12\x1b.mlflow.SearchUnifiedTraces\x1a$.mlflow.SearchUnifiedTraces.Response\"B\xf2\x86\x19>\n#\n\x03GET\x12\x16/mlflow/unified-traces\x1a\x04\x08\x02\x10\x00\x10\x03*\x15Search Unified Traces\x12\xaf\x01\n\x15getOnlineTraceDetails\x12\x1d.mlflow.GetOnlineTraceDetails\x1a&.mlflow.GetOnlineTraceDetails.Response\"O\xf2\x86\x19K\n-\n\x03GET\x12 /mlflow/get-online-trace-details\x1a\x04\x08\x02\x10\x00\x10\x03*\x18Get Online Trace Details\x12\x86\x01\n\x0c\x64\x65leteTraces\x12\x14.mlflow.DeleteTraces\x1a\x1d.mlflow.DeleteTraces.Response\"A\xf2\x86\x19=\n*\n\x04POST\x12\x1c/mlflow/traces/delete-traces\x1a\x04\x08\x02\x10\x00\x10\x03*\rDelete Traces\x12\x8f\x01\n\x0e\x64\x65leteTracesV3\x12\x16.mlflow.DeleteTracesV3\x1a\x1f.mlflow.DeleteTracesV3.Response\"D\xf2\x86\x19@\n*\n\x04POST\x12\x1c/mlflow/traces/delete-traces\x1a\x04\x08\x03\x10\x00\x10\x03*\x10\x44\x65lete Traces V3\x12\xe3\x01\n\x1f\x63\x61lculateTraceFilterCorrelation\x12\'.mlflow.CalculateTraceFilterCorrelation\x1a\x30.mlflow.CalculateTraceFilterCorrelation.Response\"e\xf2\x86\x19\x61\n9\n\x04POST\x12+/mlflow/traces/calculate-filter-correlation\x1a\x04\x08\x03\x10\x00\x10\x03*\"Calculate Trace Filter Correlation\x12\x83\x01\n\x0elistWorkspaces\x12\x16.mlflow.ListWorkspaces\x1a\x1f.mlflow.ListWorkspaces.Response\"8\xf2\x86\x19\x34\n\x1f\n\x03GET\x12\x12/mlflow/workspaces\x1a\x04\x08\x02\x10\x00\x10\x03*\x0fList Workspaces\x12\x88\x01\n\x0f\x63reateWorkspace\x12\x17.mlflow.CreateWorkspace\x1a .mlflow.CreateWorkspace.Response\":\xf2\x86\x19\x36\n \n\x04POST\x12\x12/mlflow/workspaces\x1a\x04\x08\x02\x10\x00\x10\x03*\x10\x43reate Workspace\x12\x8c\x01\n\x0cgetWorkspace\x12\x14.mlflow.GetWorkspace\x1a\x1d.mlflow.GetWorkspace.Response\"G\xf2\x86\x19\x43\n0\n\x03GET\x12#/mlflow/workspaces/{workspace_name}\x1a\x04\x08\x02\x10\x00\x10\x03*\rGet Workspace\x12\x9a\x01\n\x0fupdateWorkspace\x12\x17.mlflow.UpdateWorkspace\x1a .mlflow.UpdateWorkspace.Response\"L\xf2\x86\x19H\n2\n\x05PATCH\x12#/mlflow/workspaces/{workspace_name}\x1a\x04\x08\x02\x10\x00\x10\x03*\x10Update Workspace\x12\x9b\x01\n\x0f\x64\x65leteWorkspace\x12\x17.mlflow.DeleteWorkspace\x1a .mlflow.DeleteWorkspace.Response\"M\xf2\x86\x19I\n3\n\x06\x44\x45LETE\x12#/mlflow/workspaces/{workspace_name}\x1a\x04\x08\x02\x10\x00\x10\x03*\x10\x44\x65lete Workspace\x12\x94\x01\n\x11\x63reateLoggedModel\x12\x19.mlflow.CreateLoggedModel\x1a\".mlflow.CreateLoggedModel.Response\"@\xf2\x86\x19<\n#\n\x04POST\x12\x15/mlflow/logged-models\x1a\x04\x08\x02\x10\x00\x10\x03*\x13\x43reate Logged Model\x12\xa8\x01\n\x13\x66inalizeLoggedModel\x12\x1b.mlflow.FinalizeLoggedModel\x1a$.mlflow.FinalizeLoggedModel.Response\"N\xf2\x86\x19J\n/\n\x05PATCH\x12 /mlflow/logged-models/{model_id}\x1a\x04\x08\x02\x10\x00\x10\x03*\x15\x46inalize Logged Model\x12\x92\x01\n\x0egetLoggedModel\x12\x16.mlflow.GetLoggedModel\x1a\x1f.mlflow.GetLoggedModel.Response\"G\xf2\x86\x19\x43\n-\n\x03GET\x12 /mlflow/logged-models/{model_id}\x1a\x04\x08\x02\x10\x00\x10\x03*\x10Get Logged Model\x12\xa3\x01\n\x11\x64\x65leteLoggedModel\x12\x19.mlflow.DeleteLoggedModel\x1a\".mlflow.DeleteLoggedModel.Response\"O\xf2\x86\x19K\n0\n\x06\x44\x45LETE\x12 /mlflow/logged-models/{model_id}\x1a\x04\x08\x02\x10\x00\x10\x03*\x15\x44\x65lete a Logged Model\x12\x9e\x01\n\x12searchLoggedModels\x12\x1a.mlflow.SearchLoggedModels\x1a#.mlflow.SearchLoggedModels.Response\"G\xf2\x86\x19\x43\n*\n\x04POST\x12\x1c/mlflow/logged-models/search\x1a\x04\x08\x02\x10\x00\x10\x03*\x13Search LoggedModels\x12\xa9\x01\n\x12setLoggedModelTags\x12\x1a.mlflow.SetLoggedModelTags\x1a#.mlflow.SetLoggedModelTags.Response\"R\xf2\x86\x19N\n4\n\x05PATCH\x12%/mlflow/logged-models/{model_id}/tags\x1a\x04\x08\x02\x10\x00\x10\x03*\x14Set Logged Model Tag\x12\xbd\x01\n\x14\x64\x65leteLoggedModelTag\x12\x1c.mlflow.DeleteLoggedModelTag\x1a%.mlflow.DeleteLoggedModelTag.Response\"`\xf2\x86\x19\\\n?\n\x06\x44\x45LETE\x12//mlflow/logged-models/{model_id}/tags/{tag_key}\x1a\x04\x08\x02\x10\x00\x10\x03*\x17\x44\x65lete Logged Model Tag\x12\xd6\x01\n\x18listLoggedModelArtifacts\x12 .mlflow.ListLoggedModelArtifacts\x1a).mlflow.ListLoggedModelArtifacts.Response\"m\xf2\x86\x19i\nC\n\x03GET\x12\x36/mlflow/logged-models/{model_id}/artifacts/directories\x1a\x04\x08\x02\x10\x00\x10\x03* List Artifacts for Logged Models\x12\xc1\x01\n\x14LogLoggedModelParams\x12#.mlflow.LogLoggedModelParamsRequest\x1a,.mlflow.LogLoggedModelParamsRequest.Response\"V\xf2\x86\x19R\n5\n\x04POST\x12\'/mlflow/logged-models/{model_id}/params\x1a\x04\x08\x02\x10\x00\x10\x03*\x17Log Logged Model Params\x12\xb0\x01\n\rGetAssessment\x12\x1c.mlflow.GetAssessmentRequest\x1a%.mlflow.GetAssessmentRequest.Response\"Z\xf2\x86\x19V\nB\n\x03GET\x12\x35/mlflow/traces/{trace_id}/assessments/{assessment_id}\x1a\x04\x08\x03\x10\x00\x10\x03*\x0eGet Assessment\x12\xdf\x01\n\x10\x63reateAssessment\x12\x18.mlflow.CreateAssessment\x1a!.mlflow.CreateAssessment.Response\"\x8d\x01\xf2\x86\x19\x88\x01\n>\n\x04POST\x12\x30/mlflow/traces/{assessment.trace_id}/assessments\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xee\x07\x18\x0c\x18\x01*:Create an assessment of a trace or a span within the trace\x12\xd0\x01\n\x10updateAssessment\x12\x18.mlflow.UpdateAssessment\x1a!.mlflow.UpdateAssessment.Response\"\x7f\xf2\x86\x19{\nD\n\x05PATCH\x12\x35/mlflow/traces/{trace_id}/assessments/{assessment_id}\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xee\x07\x18\x01*)Update an existing assessment on a trace.\x12\xb1\x01\n\x10\x64\x65leteAssessment\x12\x18.mlflow.DeleteAssessment\x1a!.mlflow.DeleteAssessment.Response\"`\xf2\x86\x19\\\nE\n\x06\x44\x45LETE\x12\x35/mlflow/traces/{trace_id}/assessments/{assessment_id}\x1a\x04\x08\x03\x10\x00\x10\x03*\x11\x44\x65lete Assessment\x12\x9a\x01\n\rcreateDataset\x12\x15.mlflow.CreateDataset\x1a\x1e.mlflow.CreateDataset.Response\"R\xf2\x86\x19N\n%\n\x04POST\x12\x17/mlflow/datasets/create\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xee\x07\x18\x0c\x18\x01*\x19\x43reate Evaluation Dataset\x12\x91\x01\n\ngetDataset\x12\x12.mlflow.GetDataset\x1a\x1b.mlflow.GetDataset.Response\"R\xf2\x86\x19N\n*\n\x03GET\x12\x1d/mlflow/datasets/{dataset_id}\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xba\x17\x18\x01*\x16Get Evaluation Dataset\x12\xa0\x01\n\rdeleteDataset\x12\x15.mlflow.DeleteDataset\x1a\x1e.mlflow.DeleteDataset.Response\"X\xf2\x86\x19T\n-\n\x06\x44\x45LETE\x12\x1d/mlflow/datasets/{dataset_id}\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xba\x17\x18\x01*\x19\x44\x65lete Evaluation Dataset\x12\xdd\x01\n\x18searchEvaluationDatasets\x12 .mlflow.SearchEvaluationDatasets\x1a).mlflow.SearchEvaluationDatasets.Response\"t\xf2\x86\x19p\n%\n\x04POST\x12\x17/mlflow/datasets/search\x1a\x04\x08\x03\x10\x00\n$\n\x03GET\x12\x17/mlflow/datasets/search\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\x01*\x1aSearch Evaluation Datasets\x12\xa9\x01\n\x0esetDatasetTags\x12\x16.mlflow.SetDatasetTags\x1a\x1f.mlflow.SetDatasetTags.Response\"^\xf2\x86\x19Z\n1\n\x05PATCH\x12\"/mlflow/datasets/{dataset_id}/tags\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xba\x17\x18\x01*\x1bSet Evaluation Dataset Tags\x12\xb8\x01\n\x10\x64\x65leteDatasetTag\x12\x18.mlflow.DeleteDatasetTag\x1a!.mlflow.DeleteDatasetTag.Response\"g\xf2\x86\x19\x63\n8\n\x06\x44\x45LETE\x12(/mlflow/datasets/{dataset_id}/tags/{key}\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xba\x17\x18\x01*\x1d\x44\x65lete Evaluation Dataset Tag\x12\xc3\x01\n\x14upsertDatasetRecords\x12\x1c.mlflow.UpsertDatasetRecords\x1a%.mlflow.UpsertDatasetRecords.Response\"f\xf2\x86\x19\x62\n3\n\x04POST\x12%/mlflow/datasets/{dataset_id}/records\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xba\x17\x18\x01*!Upsert Evaluation Dataset Records\x12\xd6\x01\n\x17getDatasetExperimentIds\x12\x1f.mlflow.GetDatasetExperimentIds\x1a(.mlflow.GetDatasetExperimentIds.Response\"p\xf2\x86\x19l\n9\n\x03GET\x12,/mlflow/datasets/{dataset_id}/experiment-ids\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xba\x17\x18\x01*%Get Evaluation Dataset Experiment IDs\x12\x8a\x01\n\x0eregisterScorer\x12\x16.mlflow.RegisterScorer\x1a\x1f.mlflow.RegisterScorer.Response\"?\xf2\x86\x19;\n&\n\x04POST\x12\x18/mlflow/scorers/register\x1a\x04\x08\x03\x10\x00\x10\x01*\x0fRegister Scorer\x12y\n\x0blistScorers\x12\x13.mlflow.ListScorers\x1a\x1c.mlflow.ListScorers.Response\"7\xf2\x86\x19\x33\n!\n\x03GET\x12\x14/mlflow/scorers/list\x1a\x04\x08\x03\x10\x00\x10\x01*\x0cList Scorers\x12\x9a\x01\n\x12listScorerVersions\x12\x1a.mlflow.ListScorerVersions\x1a#.mlflow.ListScorerVersions.Response\"C\xf2\x86\x19?\n%\n\x03GET\x12\x18/mlflow/scorers/versions\x1a\x04\x08\x03\x10\x00\x10\x01*\x14List Scorer Versions\x12p\n\tgetScorer\x12\x11.mlflow.GetScorer\x1a\x1a.mlflow.GetScorer.Response\"4\xf2\x86\x19\x30\n \n\x03GET\x12\x13/mlflow/scorers/get\x1a\x04\x08\x03\x10\x00\x10\x01*\nGet Scorer\x12\x82\x01\n\x0c\x64\x65leteScorer\x12\x14.mlflow.DeleteScorer\x1a\x1d.mlflow.DeleteScorer.Response\"=\xf2\x86\x19\x39\n&\n\x06\x44\x45LETE\x12\x16/mlflow/scorers/delete\x1a\x04\x08\x03\x10\x00\x10\x01*\rDelete Scorer\x12\xb6\x01\n\x11getDatasetRecords\x12\x19.mlflow.GetDatasetRecords\x1a\".mlflow.GetDatasetRecords.Response\"b\xf2\x86\x19^\n2\n\x03GET\x12%/mlflow/datasets/{dataset_id}/records\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xba\x17\x18\x01*\x1eGet Evaluation Dataset Records\x12\xcd\x01\n\x17\x61\x64\x64\x44\x61tasetToExperiments\x12\x1f.mlflow.AddDatasetToExperiments\x1a(.mlflow.AddDatasetToExperiments.Response\"g\xf2\x86\x19\x63\n;\n\x04POST\x12-/mlflow/datasets/{dataset_id}/add-experiments\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xba\x17\x18\x01*\x1a\x41\x64\x64 Dataset to Experiments\x12\xe4\x01\n\x1cremoveDatasetFromExperiments\x12$.mlflow.RemoveDatasetFromExperiments\x1a-.mlflow.RemoveDatasetFromExperiments.Response\"o\xf2\x86\x19k\n>\n\x04POST\x12\x30/mlflow/datasets/{dataset_id}/remove-experiments\x1a\x04\x08\x03\x10\x00\x10\x03\x18\xe8\x07\x18\xba\x17\x18\x01*\x1fRemove Dataset from ExperimentsB\x1e\n\x14org.mlflow.api.proto\x90\x01\x01\xe2?\x02\x10\x01') _VIEWTYPE = DESCRIPTOR.enum_types_by_name['ViewType'] ViewType = enum_type_wrapper.EnumTypeWrapper(_VIEWTYPE) @@ -1155,6 +1207,17 @@ _DELETESCORER = DESCRIPTOR.message_types_by_name['DeleteScorer'] _DELETESCORER_RESPONSE = _DELETESCORER.nested_types_by_name['Response'] _SCORER = DESCRIPTOR.message_types_by_name['Scorer'] + _WORKSPACE = DESCRIPTOR.message_types_by_name['Workspace'] + _LISTWORKSPACES = DESCRIPTOR.message_types_by_name['ListWorkspaces'] + _LISTWORKSPACES_RESPONSE = _LISTWORKSPACES.nested_types_by_name['Response'] + _CREATEWORKSPACE = DESCRIPTOR.message_types_by_name['CreateWorkspace'] + _CREATEWORKSPACE_RESPONSE = _CREATEWORKSPACE.nested_types_by_name['Response'] + _GETWORKSPACE = DESCRIPTOR.message_types_by_name['GetWorkspace'] + _GETWORKSPACE_RESPONSE = _GETWORKSPACE.nested_types_by_name['Response'] + _UPDATEWORKSPACE = DESCRIPTOR.message_types_by_name['UpdateWorkspace'] + _UPDATEWORKSPACE_RESPONSE = _UPDATEWORKSPACE.nested_types_by_name['Response'] + _DELETEWORKSPACE = DESCRIPTOR.message_types_by_name['DeleteWorkspace'] + _DELETEWORKSPACE_RESPONSE = _DELETEWORKSPACE.nested_types_by_name['Response'] _TRACELOCATION_TRACELOCATIONTYPE = _TRACELOCATION.enum_types_by_name['TraceLocationType'] _TRACEINFOV3_STATE = _TRACEINFOV3.enum_types_by_name['State'] Metric = _reflection.GeneratedProtocolMessageType('Metric', (_message.Message,), { @@ -2547,6 +2610,88 @@ }) _sym_db.RegisterMessage(Scorer) + Workspace = _reflection.GeneratedProtocolMessageType('Workspace', (_message.Message,), { + 'DESCRIPTOR' : _WORKSPACE, + '__module__' : 'service_pb2' + # @@protoc_insertion_point(class_scope:mlflow.Workspace) + }) + _sym_db.RegisterMessage(Workspace) + + ListWorkspaces = _reflection.GeneratedProtocolMessageType('ListWorkspaces', (_message.Message,), { + + 'Response' : _reflection.GeneratedProtocolMessageType('Response', (_message.Message,), { + 'DESCRIPTOR' : _LISTWORKSPACES_RESPONSE, + '__module__' : 'service_pb2' + # @@protoc_insertion_point(class_scope:mlflow.ListWorkspaces.Response) + }) + , + 'DESCRIPTOR' : _LISTWORKSPACES, + '__module__' : 'service_pb2' + # @@protoc_insertion_point(class_scope:mlflow.ListWorkspaces) + }) + _sym_db.RegisterMessage(ListWorkspaces) + _sym_db.RegisterMessage(ListWorkspaces.Response) + + CreateWorkspace = _reflection.GeneratedProtocolMessageType('CreateWorkspace', (_message.Message,), { + + 'Response' : _reflection.GeneratedProtocolMessageType('Response', (_message.Message,), { + 'DESCRIPTOR' : _CREATEWORKSPACE_RESPONSE, + '__module__' : 'service_pb2' + # @@protoc_insertion_point(class_scope:mlflow.CreateWorkspace.Response) + }) + , + 'DESCRIPTOR' : _CREATEWORKSPACE, + '__module__' : 'service_pb2' + # @@protoc_insertion_point(class_scope:mlflow.CreateWorkspace) + }) + _sym_db.RegisterMessage(CreateWorkspace) + _sym_db.RegisterMessage(CreateWorkspace.Response) + + GetWorkspace = _reflection.GeneratedProtocolMessageType('GetWorkspace', (_message.Message,), { + + 'Response' : _reflection.GeneratedProtocolMessageType('Response', (_message.Message,), { + 'DESCRIPTOR' : _GETWORKSPACE_RESPONSE, + '__module__' : 'service_pb2' + # @@protoc_insertion_point(class_scope:mlflow.GetWorkspace.Response) + }) + , + 'DESCRIPTOR' : _GETWORKSPACE, + '__module__' : 'service_pb2' + # @@protoc_insertion_point(class_scope:mlflow.GetWorkspace) + }) + _sym_db.RegisterMessage(GetWorkspace) + _sym_db.RegisterMessage(GetWorkspace.Response) + + UpdateWorkspace = _reflection.GeneratedProtocolMessageType('UpdateWorkspace', (_message.Message,), { + + 'Response' : _reflection.GeneratedProtocolMessageType('Response', (_message.Message,), { + 'DESCRIPTOR' : _UPDATEWORKSPACE_RESPONSE, + '__module__' : 'service_pb2' + # @@protoc_insertion_point(class_scope:mlflow.UpdateWorkspace.Response) + }) + , + 'DESCRIPTOR' : _UPDATEWORKSPACE, + '__module__' : 'service_pb2' + # @@protoc_insertion_point(class_scope:mlflow.UpdateWorkspace) + }) + _sym_db.RegisterMessage(UpdateWorkspace) + _sym_db.RegisterMessage(UpdateWorkspace.Response) + + DeleteWorkspace = _reflection.GeneratedProtocolMessageType('DeleteWorkspace', (_message.Message,), { + + 'Response' : _reflection.GeneratedProtocolMessageType('Response', (_message.Message,), { + 'DESCRIPTOR' : _DELETEWORKSPACE_RESPONSE, + '__module__' : 'service_pb2' + # @@protoc_insertion_point(class_scope:mlflow.DeleteWorkspace.Response) + }) + , + 'DESCRIPTOR' : _DELETEWORKSPACE, + '__module__' : 'service_pb2' + # @@protoc_insertion_point(class_scope:mlflow.DeleteWorkspace) + }) + _sym_db.RegisterMessage(DeleteWorkspace) + _sym_db.RegisterMessage(DeleteWorkspace.Response) + _MLFLOWSERVICE = DESCRIPTOR.services_by_name['MlflowService'] if _descriptor._USE_C_DESCRIPTORS == False: @@ -2880,6 +3025,26 @@ _GETSCORER._serialized_options = b'\342?(\n&com.databricks.rpc.RPC[$this.Response]' _DELETESCORER._options = None _DELETESCORER._serialized_options = b'\342?(\n&com.databricks.rpc.RPC[$this.Response]' + _WORKSPACE.fields_by_name['name']._options = None + _WORKSPACE.fields_by_name['name']._serialized_options = b'\370\206\031\001' + _LISTWORKSPACES._options = None + _LISTWORKSPACES._serialized_options = b'\342?(\n&com.databricks.rpc.RPC[$this.Response]' + _CREATEWORKSPACE.fields_by_name['name']._options = None + _CREATEWORKSPACE.fields_by_name['name']._serialized_options = b'\370\206\031\001' + _CREATEWORKSPACE._options = None + _CREATEWORKSPACE._serialized_options = b'\342?(\n&com.databricks.rpc.RPC[$this.Response]' + _GETWORKSPACE.fields_by_name['workspace_name']._options = None + _GETWORKSPACE.fields_by_name['workspace_name']._serialized_options = b'\370\206\031\001' + _GETWORKSPACE._options = None + _GETWORKSPACE._serialized_options = b'\342?(\n&com.databricks.rpc.RPC[$this.Response]' + _UPDATEWORKSPACE.fields_by_name['workspace_name']._options = None + _UPDATEWORKSPACE.fields_by_name['workspace_name']._serialized_options = b'\370\206\031\001' + _UPDATEWORKSPACE._options = None + _UPDATEWORKSPACE._serialized_options = b'\342?(\n&com.databricks.rpc.RPC[$this.Response]' + _DELETEWORKSPACE.fields_by_name['workspace_name']._options = None + _DELETEWORKSPACE.fields_by_name['workspace_name']._serialized_options = b'\370\206\031\001' + _DELETEWORKSPACE._options = None + _DELETEWORKSPACE._serialized_options = b'\342?(\n&com.databricks.rpc.RPC[$this.Response]' _MLFLOWSERVICE.methods_by_name['getExperimentByName']._options = None _MLFLOWSERVICE.methods_by_name['getExperimentByName']._serialized_options = b'\362\206\031H\n,\n\003GET\022\037/mlflow/experiments/get-by-name\032\004\010\002\020\000\020\001*\026Get Experiment By Name' _MLFLOWSERVICE.methods_by_name['createExperiment']._options = None @@ -2972,6 +3137,16 @@ _MLFLOWSERVICE.methods_by_name['deleteTracesV3']._serialized_options = b'\362\206\031@\n*\n\004POST\022\034/mlflow/traces/delete-traces\032\004\010\003\020\000\020\003*\020Delete Traces V3' _MLFLOWSERVICE.methods_by_name['calculateTraceFilterCorrelation']._options = None _MLFLOWSERVICE.methods_by_name['calculateTraceFilterCorrelation']._serialized_options = b'\362\206\031a\n9\n\004POST\022+/mlflow/traces/calculate-filter-correlation\032\004\010\003\020\000\020\003*\"Calculate Trace Filter Correlation' + _MLFLOWSERVICE.methods_by_name['listWorkspaces']._options = None + _MLFLOWSERVICE.methods_by_name['listWorkspaces']._serialized_options = b'\362\206\0314\n\037\n\003GET\022\022/mlflow/workspaces\032\004\010\002\020\000\020\003*\017List Workspaces' + _MLFLOWSERVICE.methods_by_name['createWorkspace']._options = None + _MLFLOWSERVICE.methods_by_name['createWorkspace']._serialized_options = b'\362\206\0316\n \n\004POST\022\022/mlflow/workspaces\032\004\010\002\020\000\020\003*\020Create Workspace' + _MLFLOWSERVICE.methods_by_name['getWorkspace']._options = None + _MLFLOWSERVICE.methods_by_name['getWorkspace']._serialized_options = b'\362\206\031C\n0\n\003GET\022#/mlflow/workspaces/{workspace_name}\032\004\010\002\020\000\020\003*\rGet Workspace' + _MLFLOWSERVICE.methods_by_name['updateWorkspace']._options = None + _MLFLOWSERVICE.methods_by_name['updateWorkspace']._serialized_options = b'\362\206\031H\n2\n\005PATCH\022#/mlflow/workspaces/{workspace_name}\032\004\010\002\020\000\020\003*\020Update Workspace' + _MLFLOWSERVICE.methods_by_name['deleteWorkspace']._options = None + _MLFLOWSERVICE.methods_by_name['deleteWorkspace']._serialized_options = b'\362\206\031I\n3\n\006DELETE\022#/mlflow/workspaces/{workspace_name}\032\004\010\002\020\000\020\003*\020Delete Workspace' _MLFLOWSERVICE.methods_by_name['createLoggedModel']._options = None _MLFLOWSERVICE.methods_by_name['createLoggedModel']._serialized_options = b'\362\206\031<\n#\n\004POST\022\025/mlflow/logged-models\032\004\010\002\020\000\020\003*\023Create Logged Model' _MLFLOWSERVICE.methods_by_name['finalizeLoggedModel']._options = None @@ -3030,16 +3205,16 @@ _MLFLOWSERVICE.methods_by_name['addDatasetToExperiments']._serialized_options = b'\362\206\031c\n;\n\004POST\022-/mlflow/datasets/{dataset_id}/add-experiments\032\004\010\003\020\000\020\003\030\350\007\030\272\027\030\001*\032Add Dataset to Experiments' _MLFLOWSERVICE.methods_by_name['removeDatasetFromExperiments']._options = None _MLFLOWSERVICE.methods_by_name['removeDatasetFromExperiments']._serialized_options = b'\362\206\031k\n>\n\004POST\0220/mlflow/datasets/{dataset_id}/remove-experiments\032\004\010\003\020\000\020\003\030\350\007\030\272\027\030\001*\037Remove Dataset from Experiments' - _VIEWTYPE._serialized_start=17844 - _VIEWTYPE._serialized_end=17898 - _SOURCETYPE._serialized_start=17900 - _SOURCETYPE._serialized_end=17973 - _RUNSTATUS._serialized_start=17975 - _RUNSTATUS._serialized_end=18052 - _TRACESTATUS._serialized_start=18054 - _TRACESTATUS._serialized_end=18133 - _LOGGEDMODELSTATUS._serialized_start=18136 - _LOGGEDMODELSTATUS._serialized_end=18274 + _VIEWTYPE._serialized_start=18582 + _VIEWTYPE._serialized_end=18636 + _SOURCETYPE._serialized_start=18638 + _SOURCETYPE._serialized_end=18711 + _RUNSTATUS._serialized_start=18713 + _RUNSTATUS._serialized_end=18790 + _TRACESTATUS._serialized_start=18792 + _TRACESTATUS._serialized_end=18871 + _LOGGEDMODELSTATUS._serialized_start=18874 + _LOGGEDMODELSTATUS._serialized_end=19012 _METRIC._serialized_start=243 _METRIC._serialized_end=419 _PARAM._serialized_start=421 @@ -3418,8 +3593,30 @@ _DELETESCORER_RESPONSE._serialized_end=1849 _SCORER._serialized_start=17697 _SCORER._serialized_end=17842 - _MLFLOWSERVICE._serialized_start=18277 - _MLFLOWSERVICE._serialized_end=29839 + _WORKSPACE._serialized_start=17844 + _WORKSPACE._serialized_end=17896 + _LISTWORKSPACES._serialized_start=17898 + _LISTWORKSPACES._serialized_end=18010 + _LISTWORKSPACES_RESPONSE._serialized_start=17916 + _LISTWORKSPACES_RESPONSE._serialized_end=17965 + _CREATEWORKSPACE._serialized_start=18013 + _CREATEWORKSPACE._serialized_end=18166 + _CREATEWORKSPACE_RESPONSE._serialized_start=18073 + _CREATEWORKSPACE_RESPONSE._serialized_end=18121 + _GETWORKSPACE._serialized_start=18169 + _GETWORKSPACE._serialized_end=18308 + _GETWORKSPACE_RESPONSE._serialized_start=18073 + _GETWORKSPACE_RESPONSE._serialized_end=18121 + _UPDATEWORKSPACE._serialized_start=18311 + _UPDATEWORKSPACE._serialized_end=18474 + _UPDATEWORKSPACE_RESPONSE._serialized_start=18073 + _UPDATEWORKSPACE_RESPONSE._serialized_end=18121 + _DELETEWORKSPACE._serialized_start=18476 + _DELETEWORKSPACE._serialized_end=18580 + _DELETEWORKSPACE_RESPONSE._serialized_start=1839 + _DELETEWORKSPACE_RESPONSE._serialized_end=1849 + _MLFLOWSERVICE._serialized_start=19015 + _MLFLOWSERVICE._serialized_end=31308 MlflowService = service_reflection.GeneratedServiceType('MlflowService', (_service.Service,), dict( DESCRIPTOR = _MLFLOWSERVICE, __module__ = 'service_pb2' diff --git a/mlflow/protos/service_pb2.pyi b/mlflow/protos/service_pb2.pyi index 5125655c034dc..cf52422ac8fdc 100644 --- a/mlflow/protos/service_pb2.pyi +++ b/mlflow/protos/service_pb2.pyi @@ -1613,6 +1613,69 @@ class Scorer(_message.Message): scorer_id: str def __init__(self, experiment_id: _Optional[int] = ..., scorer_name: _Optional[str] = ..., scorer_version: _Optional[int] = ..., serialized_scorer: _Optional[str] = ..., creation_time: _Optional[int] = ..., scorer_id: _Optional[str] = ...) -> None: ... +class Workspace(_message.Message): + __slots__ = ("name", "description") + NAME_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + name: str + description: str + def __init__(self, name: _Optional[str] = ..., description: _Optional[str] = ...) -> None: ... + +class ListWorkspaces(_message.Message): + __slots__ = () + class Response(_message.Message): + __slots__ = ("workspaces",) + WORKSPACES_FIELD_NUMBER: _ClassVar[int] + workspaces: _containers.RepeatedCompositeFieldContainer[Workspace] + def __init__(self, workspaces: _Optional[_Iterable[_Union[Workspace, _Mapping]]] = ...) -> None: ... + def __init__(self) -> None: ... + +class CreateWorkspace(_message.Message): + __slots__ = ("name", "description") + class Response(_message.Message): + __slots__ = ("workspace",) + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + workspace: Workspace + def __init__(self, workspace: _Optional[_Union[Workspace, _Mapping]] = ...) -> None: ... + NAME_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + name: str + description: str + def __init__(self, name: _Optional[str] = ..., description: _Optional[str] = ...) -> None: ... + +class GetWorkspace(_message.Message): + __slots__ = ("workspace_name",) + class Response(_message.Message): + __slots__ = ("workspace",) + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + workspace: Workspace + def __init__(self, workspace: _Optional[_Union[Workspace, _Mapping]] = ...) -> None: ... + WORKSPACE_NAME_FIELD_NUMBER: _ClassVar[int] + workspace_name: str + def __init__(self, workspace_name: _Optional[str] = ...) -> None: ... + +class UpdateWorkspace(_message.Message): + __slots__ = ("workspace_name", "description") + class Response(_message.Message): + __slots__ = ("workspace",) + WORKSPACE_FIELD_NUMBER: _ClassVar[int] + workspace: Workspace + def __init__(self, workspace: _Optional[_Union[Workspace, _Mapping]] = ...) -> None: ... + WORKSPACE_NAME_FIELD_NUMBER: _ClassVar[int] + DESCRIPTION_FIELD_NUMBER: _ClassVar[int] + workspace_name: str + description: str + def __init__(self, workspace_name: _Optional[str] = ..., description: _Optional[str] = ...) -> None: ... + +class DeleteWorkspace(_message.Message): + __slots__ = ("workspace_name",) + class Response(_message.Message): + __slots__ = () + def __init__(self) -> None: ... + WORKSPACE_NAME_FIELD_NUMBER: _ClassVar[int] + workspace_name: str + def __init__(self, workspace_name: _Optional[str] = ...) -> None: ... + class MlflowService(_service.service): ... class MlflowService_Stub(MlflowService): ... diff --git a/mlflow/server/handlers.py b/mlflow/server/handlers.py index e10184a49c510..b68f053fb117d 100644 --- a/mlflow/server/handlers.py +++ b/mlflow/server/handlers.py @@ -28,6 +28,7 @@ Param, RunTag, ViewType, + Workspace, ) from mlflow.entities.logged_model import LoggedModel from mlflow.entities.logged_model_input import LoggedModelInput @@ -45,6 +46,7 @@ from mlflow.environment_variables import ( MLFLOW_CREATE_MODEL_VERSION_SOURCE_VALIDATION_REGEX, MLFLOW_DEPLOYMENTS_TARGET, + MLFLOW_ENABLE_WORKSPACES, ) from mlflow.exceptions import ( MlflowException, @@ -57,6 +59,7 @@ from mlflow.protos import databricks_pb2 from mlflow.protos.databricks_pb2 import ( BAD_REQUEST, + FEATURE_DISABLED, INVALID_PARAMETER_VALUE, RESOURCE_DOES_NOT_EXIST, ) @@ -105,6 +108,7 @@ CreateExperiment, CreateLoggedModel, CreateRun, + CreateWorkspace, DeleteAssessment, DeleteDataset, DeleteDatasetTag, @@ -119,6 +123,7 @@ DeleteTracesV3, DeleteTraceTag, DeleteTraceTagV3, + DeleteWorkspace, EndTrace, FinalizeLoggedModel, GetAssessmentRequest, @@ -135,11 +140,13 @@ GetTrace, GetTraceInfo, GetTraceInfoV3, + GetWorkspace, LinkTracesToRun, ListArtifacts, ListLoggedModelArtifacts, ListScorers, ListScorerVersions, + ListWorkspaces, LogBatch, LogInputs, LogLoggedModelParamsRequest, @@ -170,6 +177,7 @@ UpdateAssessment, UpdateExperiment, UpdateRun, + UpdateWorkspace, UpsertDatasetRecords, ) from mlflow.protos.service_pb2 import Trace as ProtoTrace @@ -183,6 +191,7 @@ WebhookService, ) from mlflow.server.validation import _validate_content_type +from mlflow.server.workspace_helpers import _get_workspace_store from mlflow.store.artifact.artifact_repo import MultipartUploadMixin from mlflow.store.artifact.artifact_repository_registry import get_artifact_repository from mlflow.store.db.db_types import DATABASE_ENGINES @@ -191,6 +200,7 @@ from mlflow.store.model_registry.rest_store import RestStore as ModelRegistryRestStore from mlflow.store.tracking.abstract_store import AbstractStore as AbstractTrackingStore from mlflow.store.tracking.databricks_rest_store import DatabricksTracingRestStore +from mlflow.store.workspace.abstract_store import WorkspaceNameValidator from mlflow.tracing.utils.artifact_utils import ( TRACE_DATA_FILE_NAME, get_artifact_uri_for_trace, @@ -779,6 +789,112 @@ def wrapper(*args, **kwargs): return wrapper +def _disable_if_workspaces_disabled(func): + @wraps(func) + def wrapper(*args, **kwargs): + if not MLFLOW_ENABLE_WORKSPACES.get(): + return Response( + ( + f"Endpoint: {request.url_rule} disabled because the server is running " + "without multi-tenancy support. To enable workspace functionality, run " + "`mlflow server` with `--enable-workspaces`" + ), + 503, + ) + return func(*args, **kwargs) + + return wrapper + + +def _workspace_not_supported(message: str) -> MlflowException: + return MlflowException(message, FEATURE_DISABLED) + + +@catch_mlflow_exception +@_disable_if_workspaces_disabled +def _list_workspaces_handler(): + _get_request_message(ListWorkspaces()) + workspaces = _get_workspace_store().list_workspaces() + response_message = ListWorkspaces.Response() + response_message.workspaces.extend([ws.to_proto() for ws in workspaces]) + return _wrap_response(response_message) + + +@catch_mlflow_exception +@_disable_if_workspaces_disabled +def _create_workspace_handler(): + request_message = _get_request_message( + CreateWorkspace(), + schema={ + "name": [_assert_required, _assert_string], + "description": [_assert_string], + }, + ) + + WorkspaceNameValidator.validate(request_message.name) + description = request_message.description if request_message.HasField("description") else None + store = _get_workspace_store() + try: + workspace = store.create_workspace( + Workspace(name=request_message.name, description=description) + ) + except NotImplementedError: + raise _workspace_not_supported("Workspace creation is not supported by this provider") + + response_message = CreateWorkspace.Response() + response_message.workspace.MergeFrom(workspace.to_proto()) + response = _wrap_response(response_message) + response.status_code = 201 + return response + + +@catch_mlflow_exception +@_disable_if_workspaces_disabled +def _get_workspace_handler(workspace_name: str): + WorkspaceNameValidator.validate(workspace_name) + workspace = _get_workspace_store().get_workspace(workspace_name) + response_message = GetWorkspace.Response() + response_message.workspace.MergeFrom(workspace.to_proto()) + return _wrap_response(response_message) + + +@catch_mlflow_exception +@_disable_if_workspaces_disabled +def _update_workspace_handler(workspace_name: str): + WorkspaceNameValidator.validate(workspace_name) + request_message = _get_request_message( + UpdateWorkspace(), + schema={"description": [_assert_string]}, + ) + + if not request_message.HasField("description"): + raise MlflowException.invalid_parameter_value("Workspace update must have at least one key") + + store = _get_workspace_store() + try: + workspace = store.update_workspace( + Workspace(name=workspace_name, description=request_message.description) + ) + except NotImplementedError: + raise _workspace_not_supported("Workspace updates are not supported by this provider") + + response_message = UpdateWorkspace.Response() + response_message.workspace.MergeFrom(workspace.to_proto()) + return _wrap_response(response_message) + + +@catch_mlflow_exception +@_disable_if_workspaces_disabled +def _delete_workspace_handler(workspace_name: str): + WorkspaceNameValidator.validate(workspace_name) + store = _get_workspace_store() + try: + store.delete_workspace(workspace_name) + except NotImplementedError: + raise _workspace_not_supported("Workspace deletion is not supported by this provider") + return Response(status=204) + + @catch_mlflow_exception def get_artifact_handler(): run_id = request.args.get("run_id") or request.args.get("run_uuid") @@ -4170,4 +4286,10 @@ def _get_dataset_records_handler(dataset_id): ListScorerVersions: _list_scorer_versions, GetScorer: _get_scorer, DeleteScorer: _delete_scorer, + # Workspace APIs + ListWorkspaces: _list_workspaces_handler, + CreateWorkspace: _create_workspace_handler, + GetWorkspace: _get_workspace_handler, + UpdateWorkspace: _update_workspace_handler, + DeleteWorkspace: _delete_workspace_handler, } diff --git a/mlflow/server/workspace_helpers.py b/mlflow/server/workspace_helpers.py new file mode 100644 index 0000000000000..afc106640783a --- /dev/null +++ b/mlflow/server/workspace_helpers.py @@ -0,0 +1,51 @@ +from __future__ import annotations + +import logging +import os + +from mlflow.environment_variables import MLFLOW_ENABLE_WORKSPACES, MLFLOW_WORKSPACE_STORE_URI +from mlflow.exceptions import MlflowException +from mlflow.protos import databricks_pb2 +from mlflow.tracking._workspace import utils as workspace_utils +from mlflow.tracking._workspace.registry import get_workspace_store + +_logger = logging.getLogger(__name__) + +_workspace_store = None + + +def _get_workspace_store(workspace_uri: str | None = None, tracking_uri: str | None = None): + """ + Resolve and cache the workspace store configured for this server process. + + The store is constructed on first invocation using the provided arguments (or their + environment-derived defaults) and memoized for all subsequent calls, regardless of any new + ``workspace_uri`` / ``tracking_uri`` values supplied later. + """ + if not MLFLOW_ENABLE_WORKSPACES.get(): + raise MlflowException( + "Workspace APIs are not available: multi-tenancy is not enabled on this server", + databricks_pb2.FEATURE_DISABLED, + ) + + global _workspace_store + if _workspace_store is not None: + return _workspace_store + + from mlflow.server import BACKEND_STORE_URI_ENV_VAR + + resolved_tracking_uri = tracking_uri or os.environ.get(BACKEND_STORE_URI_ENV_VAR) + resolved_workspace_uri = workspace_utils.resolve_workspace_store_uri( + workspace_uri, tracking_uri=resolved_tracking_uri + ) + if resolved_workspace_uri is None: + raise MlflowException.invalid_parameter_value( + "Workspace URI could not be resolved. Provide --workspace-store-uri or set " + f"{MLFLOW_WORKSPACE_STORE_URI.name}." + ) + + _workspace_store = get_workspace_store(workspace_uri=resolved_workspace_uri) + return _workspace_store + + +__all__ = ["_get_workspace_store"] diff --git a/mlflow/store/db/utils.py b/mlflow/store/db/utils.py index 03c3eb7a75f62..653a728c00c36 100644 --- a/mlflow/store/db/utils.py +++ b/mlflow/store/db/utils.py @@ -65,6 +65,7 @@ SqlTraceMetadata, SqlTraceTag, ) +from mlflow.store.workspace.dbmodels.models import SqlWorkspace _logger = logging.getLogger(__name__) @@ -105,6 +106,7 @@ def _all_tables_exist(engine): SqlScorer.__tablename__, SqlScorerVersion.__tablename__, SqlJob.__tablename__, + SqlWorkspace.__tablename__, } diff --git a/mlflow/store/workspace/__init__.py b/mlflow/store/workspace/__init__.py index e69de29bb2d1d..bdd4a6a3a01eb 100644 --- a/mlflow/store/workspace/__init__.py +++ b/mlflow/store/workspace/__init__.py @@ -0,0 +1,11 @@ +"""Public workspace store facade and re-exports.""" + +from mlflow.entities.workspace import Workspace +from mlflow.store.workspace.abstract_store import AbstractStore +from mlflow.store.workspace.rest_store import RestWorkspaceStore + +__all__ = [ + "Workspace", + "AbstractStore", + "RestWorkspaceStore", +] diff --git a/mlflow/store/workspace/abstract_store.py b/mlflow/store/workspace/abstract_store.py new file mode 100644 index 0000000000000..a67da6564295c --- /dev/null +++ b/mlflow/store/workspace/abstract_store.py @@ -0,0 +1,117 @@ +from __future__ import annotations + +import re +from abc import ABC, abstractmethod +from typing import Iterable + +from mlflow.entities import Workspace +from mlflow.exceptions import MlflowException +from mlflow.utils.workspace_utils import DEFAULT_WORKSPACE_NAME + + +# The workspace store can be backed by something other than the tracking store. For example, +# Kubeflow integrations map MLflow workspaces onto Kubernetes namespaces and rely on a +# workspace store plugin, so we keep this as a separate store rather than extending the +# tracking store. +class AbstractStore(ABC): + """Interface for resolving and managing workspaces in the tracking server.""" + + @abstractmethod + def list_workspaces(self) -> Iterable[Workspace]: + """ + Return the workspaces visible to the current request context. + + Implementations may inspect the request (e.g., for authN/Z context) to + determine which workspaces to expose. + """ + + @abstractmethod + def get_workspace(self, workspace_name: str) -> Workspace: + """ + Gets a workspace by name and return its metadata. + + Implementations should raise ``MlflowException`` with + ``RESOURCE_DOES_NOT_EXIST`` if the workspace cannot be found. + """ + + def create_workspace(self, workspace: Workspace) -> Workspace: + """Provision a new workspace. + + Raises ``NotImplementedError`` when the active provider is read-only. + Implementations should raise ``MlflowException`` with + ``RESOURCE_ALREADY_EXISTS`` when the workspace already exists or + ``INVALID_PARAMETER_VALUE`` when validation fails. + """ + + raise NotImplementedError + + def update_workspace(self, workspace: Workspace) -> Workspace: + """Update metadata for an existing workspace.""" + + raise NotImplementedError + + def delete_workspace(self, workspace_name: str) -> None: + """Delete an existing workspace.""" + + raise NotImplementedError + + def get_default_workspace(self) -> Workspace: + """ + Return the workspace to select when none is explicitly supplied. + + Implementations that require an explicit workspace should raise an + ``MlflowException`` with ``INVALID_PARAMETER_VALUE``. + """ + + raise NotImplementedError + + def resolve_artifact_root( + self, default_artifact_root: str, workspace_name: str | None = None + ) -> tuple[str, bool]: + """ + Allow a provider to customize artifact storage roots per workspace. + + Returns: + A tuple ``(root, append_workspace_prefix)`` where ``root`` is the base artifact + location to use for the workspace, and ``append_workspace_prefix`` controls whether + MLflow should append the ``/workspaces/`` suffix automatically. + """ + + return default_artifact_root, True + + +class WorkspaceNameValidator: + """Validator for workspace names based on Kubernetes naming conventions.""" + + _PATTERN = r"^[a-z0-9][-a-z0-9]*[a-z0-9]$" + _MIN_LENGTH = 2 + _MAX_LENGTH = 63 + _RESERVED = {DEFAULT_WORKSPACE_NAME, "workspaces", "api", "ajax-api", "static-files"} + + @classmethod + def pattern(cls) -> str: + return cls._PATTERN + + @classmethod + def validate(cls, name: str) -> None: + if not isinstance(name, str): + raise MlflowException.invalid_parameter_value( + f"Workspace name must be a string, got {type(name).__name__!s}." + ) + + if not (cls._MIN_LENGTH <= len(name) <= cls._MAX_LENGTH): + raise MlflowException.invalid_parameter_value( + f"Workspace name '{name}' must be between {cls._MIN_LENGTH} and " + f"{cls._MAX_LENGTH} characters." + ) + + if not re.match(cls._PATTERN, name): + raise MlflowException.invalid_parameter_value( + f"Workspace name '{name}' must match the pattern {cls.pattern()} " + "(lowercase alphanumeric with optional internal hyphens)." + ) + + if name in cls._RESERVED: + raise MlflowException.invalid_parameter_value( + f"Workspace name '{name}' is reserved and cannot be used." + ) diff --git a/mlflow/store/workspace/rest_store.py b/mlflow/store/workspace/rest_store.py new file mode 100644 index 0000000000000..35f6b7beea0b8 --- /dev/null +++ b/mlflow/store/workspace/rest_store.py @@ -0,0 +1,111 @@ +from __future__ import annotations + +from urllib.parse import quote + +from mlflow.entities import Workspace +from mlflow.exceptions import MlflowException, RestException +from mlflow.protos.databricks_pb2 import INVALID_STATE, RESOURCE_ALREADY_EXISTS +from mlflow.protos.service_pb2 import ( + CreateWorkspace, + DeleteWorkspace, + GetWorkspace, + ListWorkspaces, + UpdateWorkspace, +) +from mlflow.store.workspace.abstract_store import AbstractStore, WorkspaceNameValidator +from mlflow.utils.proto_json_utils import message_to_json +from mlflow.utils.rest_utils import call_endpoint + +WORKSPACES_ENDPOINT = "/api/2.0/mlflow/workspaces" + + +def _quote_workspace(workspace_name: str) -> str: + WorkspaceNameValidator.validate(workspace_name) + return quote(workspace_name, safe="") + + +class RestWorkspaceStore(AbstractStore): + """REST-backed workspace store implementation.""" + + def __init__(self, get_host_creds): + self.get_host_creds = get_host_creds + + def _workspace_from_proto(self, proto) -> Workspace: + if not proto.HasField("workspace"): + raise MlflowException( + "Workspace response payload was missing the 'workspace' field", + INVALID_STATE, + ) + return Workspace.from_proto(proto.workspace) + + def list_workspaces(self) -> list[Workspace]: + proto = call_endpoint( + host_creds=self.get_host_creds(), + endpoint=WORKSPACES_ENDPOINT, + method="GET", + json_body=None, + response_proto=ListWorkspaces.Response(), + ) + return [Workspace.from_proto(ws) for ws in proto.workspaces] + + def get_workspace(self, workspace_name: str) -> Workspace: + proto = call_endpoint( + host_creds=self.get_host_creds(), + endpoint=f"{WORKSPACES_ENDPOINT}/{_quote_workspace(workspace_name)}", + method="GET", + json_body=None, + response_proto=GetWorkspace.Response(), + ) + return self._workspace_from_proto(proto) + + def create_workspace(self, workspace: Workspace) -> Workspace: + WorkspaceNameValidator.validate(workspace.name) + request_message = CreateWorkspace(name=workspace.name) + if workspace.description is not None: + request_message.description = workspace.description + try: + proto = call_endpoint( + host_creds=self.get_host_creds(), + endpoint=WORKSPACES_ENDPOINT, + method="POST", + json_body=message_to_json(request_message), + response_proto=CreateWorkspace.Response(), + expected_status=201, + ) + except RestException as exc: + if exc.error_code == "RESOURCE_ALREADY_EXISTS": + message = exc.message or f"Workspace '{workspace.name}' already exists." + raise MlflowException(message, RESOURCE_ALREADY_EXISTS) from exc + raise + + return self._workspace_from_proto(proto) + + def update_workspace(self, workspace: Workspace) -> Workspace: + request_message = UpdateWorkspace() + if workspace.description is not None: + request_message.description = workspace.description + proto = call_endpoint( + host_creds=self.get_host_creds(), + endpoint=f"{WORKSPACES_ENDPOINT}/{_quote_workspace(workspace.name)}", + method="PATCH", + json_body=message_to_json(request_message), + response_proto=UpdateWorkspace.Response(), + ) + return self._workspace_from_proto(proto) + + def delete_workspace(self, workspace_name: str) -> None: + call_endpoint( + host_creds=self.get_host_creds(), + endpoint=f"{WORKSPACES_ENDPOINT}/{_quote_workspace(workspace_name)}", + method="DELETE", + json_body=None, + response_proto=DeleteWorkspace.Response(), + expected_status=204, + ) + + def get_default_workspace(self) -> Workspace: + raise MlflowException.invalid_parameter_value( + "REST workspace provider does not expose a default workspace; " + "please specify a workspace explicitly or omit a workspace to leverage the server's " + "configured default." + ) diff --git a/mlflow/store/workspace/sqlalchemy_store.py b/mlflow/store/workspace/sqlalchemy_store.py new file mode 100644 index 0000000000000..767ebc3665fee --- /dev/null +++ b/mlflow/store/workspace/sqlalchemy_store.py @@ -0,0 +1,102 @@ +from __future__ import annotations + +import logging +from typing import Iterable + +from sqlalchemy.exc import IntegrityError +from sqlalchemy.orm import sessionmaker + +from mlflow.entities.workspace import Workspace +from mlflow.exceptions import MlflowException +from mlflow.protos.databricks_pb2 import ( + INVALID_STATE, + RESOURCE_ALREADY_EXISTS, + RESOURCE_DOES_NOT_EXIST, +) +from mlflow.store.workspace.abstract_store import AbstractStore, WorkspaceNameValidator +from mlflow.store.workspace.dbmodels import SqlWorkspace +from mlflow.utils.uri import extract_db_type_from_uri +from mlflow.utils.workspace_utils import DEFAULT_WORKSPACE_NAME + +_logger = logging.getLogger(__name__) + + +class SqlAlchemyStore(AbstractStore): + """SQL-backed workspace store implementation.""" + + def __init__(self, db_uri: str): + from mlflow.store.db import utils as db_utils + + self._workspace_uri = db_uri + self._db_type = extract_db_type_from_uri(db_uri) + self._engine = db_utils.create_sqlalchemy_engine_with_retry(db_uri) + db_utils._safe_initialize_tables(self._engine) + session_factory = sessionmaker(bind=self._engine) + self.ManagedSessionMaker = db_utils._get_managed_session_maker( + session_factory, self._db_type + ) + + def list_workspaces(self) -> Iterable[Workspace]: + with self.ManagedSessionMaker() as session: + rows = session.query(SqlWorkspace).order_by(SqlWorkspace.name.asc()).all() + return [row.to_mlflow_entity() for row in rows] + + def get_workspace(self, workspace_name: str) -> Workspace: + with self.ManagedSessionMaker() as session: + workspace = self._get_workspace(session, workspace_name) + return workspace.to_mlflow_entity() + + def create_workspace(self, workspace: Workspace) -> Workspace: + WorkspaceNameValidator.validate(workspace.name) + with self.ManagedSessionMaker() as session: + try: + entity = SqlWorkspace(name=workspace.name, description=workspace.description) + session.add(entity) + session.flush() + workspace_entity = entity.to_mlflow_entity() + except IntegrityError as exc: + raise MlflowException( + f"Workspace '{workspace.name}' already exists. Error: {exc}", + RESOURCE_ALREADY_EXISTS, + ) from exc + + _logger.info("Created workspace '%s'", workspace.name) + return workspace_entity + + def update_workspace(self, workspace: Workspace) -> Workspace: + with self.ManagedSessionMaker() as session: + entity = self._get_workspace(session, workspace.name) + entity.description = workspace.description + session.flush() + + _logger.info("Updated workspace '%s'", workspace.name) + return entity.to_mlflow_entity() + + def delete_workspace(self, workspace_name: str) -> None: + if workspace_name == DEFAULT_WORKSPACE_NAME: + raise MlflowException( + f"Cannot delete the reserved '{DEFAULT_WORKSPACE_NAME}' workspace", + INVALID_STATE, + ) + + with self.ManagedSessionMaker() as session: + entity = self._get_workspace(session, workspace_name) + session.delete(entity) + _logger.info("Deleted workspace '%s'", workspace_name) + + def get_default_workspace(self) -> Workspace: + return self.get_workspace(DEFAULT_WORKSPACE_NAME) + + def resolve_artifact_root( + self, default_artifact_root: str, workspace_name: str | None = None + ) -> tuple[str, bool]: + return default_artifact_root, True + + def _get_workspace(self, session, workspace_name: str) -> SqlWorkspace: + workspace = session.get(SqlWorkspace, workspace_name) + if workspace is None: + raise MlflowException( + f"Workspace '{workspace_name}' not found", + RESOURCE_DOES_NOT_EXIST, + ) + return workspace diff --git a/mlflow/tracking/_workspace/__init__.py b/mlflow/tracking/_workspace/__init__.py new file mode 100644 index 0000000000000..a61f03194c6bb --- /dev/null +++ b/mlflow/tracking/_workspace/__init__.py @@ -0,0 +1,19 @@ +from mlflow.tracking._workspace.client import WorkspaceProviderClient +from mlflow.tracking._workspace.registry import ( + WorkspaceStoreRegistry, + get_workspace_store, +) +from mlflow.tracking._workspace.utils import ( + get_workspace_store_uri, + resolve_workspace_store_uri, + set_workspace_store_uri, +) + +__all__ = [ + "WorkspaceProviderClient", + "WorkspaceStoreRegistry", + "get_workspace_store", + "set_workspace_store_uri", + "get_workspace_store_uri", + "resolve_workspace_store_uri", +] diff --git a/mlflow/tracking/_workspace/client.py b/mlflow/tracking/_workspace/client.py new file mode 100644 index 0000000000000..4595aece2293f --- /dev/null +++ b/mlflow/tracking/_workspace/client.py @@ -0,0 +1,41 @@ +from __future__ import annotations + +from mlflow.entities.workspace import Workspace +from mlflow.tracking._workspace.registry import get_workspace_store + + +class WorkspaceProviderClient: + """ + Client that exposes workspace CRUD operations via the configured provider. + + The provider is resolved based on the workspace URI scheme + (for example ``sqlite`` or ``mysql``). + This mirrors the scheme-based resolution used by tracking and model registry stores. + """ + + def __init__(self, workspace_uri: str): + self._workspace_uri = workspace_uri + self._store = None + # Eagerly validate configuration to surface errors early. + self.store + + @property + def store(self): + if self._store is None: + self._store = get_workspace_store(workspace_uri=self._workspace_uri) + return self._store + + def list_workspaces(self) -> list[Workspace]: + return list(self.store.list_workspaces()) + + def create_workspace(self, name: str, description: str | None = None) -> Workspace: + return self.store.create_workspace(Workspace(name=name, description=description)) + + def get_workspace(self, name: str) -> Workspace: + return self.store.get_workspace(name) + + def update_workspace(self, name: str, description: str | None = None) -> Workspace: + return self.store.update_workspace(Workspace(name=name, description=description)) + + def delete_workspace(self, name: str) -> None: + self.store.delete_workspace(name) diff --git a/mlflow/tracking/_workspace/registry.py b/mlflow/tracking/_workspace/registry.py new file mode 100644 index 0000000000000..272a77b609e20 --- /dev/null +++ b/mlflow/tracking/_workspace/registry.py @@ -0,0 +1,112 @@ +from __future__ import annotations + +import threading +import warnings +from functools import lru_cache, partial + +from mlflow.exceptions import MlflowException +from mlflow.protos.databricks_pb2 import INVALID_PARAMETER_VALUE +from mlflow.store.db.db_types import DATABASE_ENGINES +from mlflow.tracking.registry import StoreRegistry +from mlflow.utils.credentials import get_default_host_creds +from mlflow.utils.plugins import get_entry_points + +_WORKSPACE_PROVIDER_ENTRYPOINT_GROUP = "mlflow.workspace_provider" +_building_workspace_store_lock = threading.RLock() + + +class UnsupportedWorkspaceStoreURIException(MlflowException): + """Exception thrown when building a workspace store with an unsupported URI.""" + + def __init__(self, unsupported_uri, supported_uri_schemes): + message = ( + "Workspace functionality is unavailable; got unsupported URI " + f"'{unsupported_uri}' for the workspace backend. Supported URI schemes are: " + f"{supported_uri_schemes}. See the workspace configuration guide for instructions." + ) + super().__init__(message, error_code=INVALID_PARAMETER_VALUE) + self.supported_uri_schemes = supported_uri_schemes + + +class WorkspaceStoreRegistry(StoreRegistry): + """Scheme-based registry for workspace store implementations.""" + + def __init__(self): + super().__init__(_WORKSPACE_PROVIDER_ENTRYPOINT_GROUP) + + def register_entrypoints(self): + """Register workspace stores provided by other packages.""" + for entrypoint in get_entry_points(self.group_name): + try: + self.register(entrypoint.name, entrypoint.load()) + except (AttributeError, ImportError) as exc: + warnings.warn( + f"Failure attempting to register workspace provider '{entrypoint.name}': {exc}", + stacklevel=2, + ) + + def get_store(self, workspace_uri: str): + """Return a workspace store instance for the provided URI.""" + + return self._get_store_with_resolved_uri(workspace_uri) + + @lru_cache(maxsize=100) + def _get_store_with_resolved_uri(self, workspace_uri: str): + with _building_workspace_store_lock: + try: + builder = self.get_store_builder(workspace_uri) + except MlflowException as exc: + raise UnsupportedWorkspaceStoreURIException( + unsupported_uri=workspace_uri, + supported_uri_schemes=list(self._registry.keys()), + ) from exc + return builder(workspace_uri=workspace_uri) + + +_workspace_store_registry: WorkspaceStoreRegistry | None = None + + +def _get_workspace_store_registry() -> WorkspaceStoreRegistry: + global _workspace_store_registry + if _workspace_store_registry is None: + with _building_workspace_store_lock: + # Double-check to avoid redundant initialization when multiple threads race. + if _workspace_store_registry is None: + registry = WorkspaceStoreRegistry() + _register_default_workspace_stores(registry) + registry.register_entrypoints() + _workspace_store_registry = registry + return _workspace_store_registry + + +def _get_sqlalchemy_workspace_store(workspace_uri: str): + from mlflow.store.workspace.sqlalchemy_store import SqlAlchemyStore + + return SqlAlchemyStore(workspace_uri) + + +def _get_rest_workspace_store(workspace_uri: str): + from mlflow.store.workspace.rest_store import RestWorkspaceStore + + return RestWorkspaceStore(partial(get_default_host_creds, workspace_uri)) + + +def _register_default_workspace_stores(registry: WorkspaceStoreRegistry) -> None: + # Register SQLAlchemy builder for common database schemes. + for scheme in DATABASE_ENGINES: + registry.register(scheme, _get_sqlalchemy_workspace_store) + + # Register REST-based workspace stores. + for scheme in ["http", "https"]: + registry.register(scheme, _get_rest_workspace_store) + + +def get_workspace_store(workspace_uri: str): + """ + Return a workspace store for the specified workspace URI. + + Args: + workspace_uri: Workspace backend URI. + """ + + return _get_workspace_store_registry().get_store(workspace_uri=workspace_uri) diff --git a/mlflow/tracking/_workspace/utils.py b/mlflow/tracking/_workspace/utils.py new file mode 100644 index 0000000000000..63a790cb64af0 --- /dev/null +++ b/mlflow/tracking/_workspace/utils.py @@ -0,0 +1,45 @@ +from __future__ import annotations + +from mlflow.environment_variables import MLFLOW_WORKSPACE_STORE_URI + +_workspace_store_uri: str | None = None + + +def set_workspace_store_uri(uri: str | None) -> None: + """Set the global workspace provider URI override.""" + + global _workspace_store_uri + _workspace_store_uri = uri + if uri is None: + MLFLOW_WORKSPACE_STORE_URI.unset() + else: + MLFLOW_WORKSPACE_STORE_URI.set(uri) + + +def get_workspace_store_uri() -> str | None: + """Get the current workspace provider URI, if any has been set.""" + return _workspace_store_uri or MLFLOW_WORKSPACE_STORE_URI.get() + + +def resolve_workspace_store_uri( + workspace_store_uri: str | None = None, tracking_uri: str | None = None +) -> str | None: + """ + Resolve the workspace provider URI with precedence: + + 1. Explicit ``workspace_store_uri`` argument. + 2. Value configured via :func:`set_workspace_store_uri` or ``MLFLOW_WORKSPACE_STORE_URI``. + 3. The resolved tracking URI. + """ + + if workspace_store_uri is not None: + return workspace_store_uri + + configured_uri = get_workspace_store_uri() + if configured_uri is not None: + return configured_uri + + # Lazy import to avoid circular dependency during module import. + from mlflow.tracking._tracking_service import utils as tracking_utils + + return tracking_utils._resolve_tracking_uri(tracking_uri) diff --git a/mlflow/tracking/client.py b/mlflow/tracking/client.py index 8a34c23cd7a9f..291ba46c71f75 100644 --- a/mlflow/tracking/client.py +++ b/mlflow/tracking/client.py @@ -42,6 +42,7 @@ SpanType, Trace, ViewType, + Workspace, ) from mlflow.entities.model_registry import ModelVersion, Prompt, PromptVersion, RegisteredModel from mlflow.entities.model_registry.model_version_stages import ALL_STAGES @@ -106,6 +107,9 @@ from mlflow.tracking._model_registry.client import ModelRegistryClient from mlflow.tracking._tracking_service import utils from mlflow.tracking._tracking_service.client import TrackingServiceClient +from mlflow.tracking._workspace import utils as workspace_utils +from mlflow.tracking._workspace.client import WorkspaceProviderClient +from mlflow.tracking._workspace.registry import UnsupportedWorkspaceStoreURIException from mlflow.tracking.artifact_utils import _upload_artifacts_to_databricks from mlflow.tracking.multimedia import Image, compress_image_size, convert_to_pil_image from mlflow.tracking.registry import UnsupportedModelRegistryStoreURIException @@ -197,12 +201,22 @@ def wrapper(self, *args, **kwargs): class MlflowClient: """ Client of an MLflow Tracking Server that creates and manages experiments and runs, and of an - MLflow Registry Server that creates and manages registered models and model versions. It's a - thin wrapper around TrackingServiceClient and RegistryClient so there is a unified API but we - can keep the implementation of the tracking and registry clients independent from each other. + MLflow Registry Server that creates and manages registered models and model versions. It also + exposes workspace CRUD via the configured workspace provider. It's a thin wrapper around: + + - TrackingServiceClient for tracking operations + - WorkspaceProviderClient for workspace operations + - ModelRegistryClient for registry operations + + This layered structure provides a unified API while preserving independent implementations. """ - def __init__(self, tracking_uri: str | None = None, registry_uri: str | None = None): + def __init__( + self, + tracking_uri: str | None = None, + registry_uri: str | None = None, + workspace_store_uri: str | None = None, + ): """ Args: tracking_uri: Address of local or remote tracking server. If not provided, defaults @@ -212,22 +226,38 @@ def __init__(self, tracking_uri: str | None = None, registry_uri: str | None = N registry_uri: Address of local or remote model registry server. If not provided, defaults to the service set by ``mlflow.tracking.set_registry_uri``. If no such service was set, defaults to the tracking uri of the client. + workspace_store_uri: Address of the workspace provider backend. Defaults to the tracking + URI when unspecified, but can be pointed at a dedicated workspace store. """ final_tracking_uri = utils._resolve_tracking_uri(tracking_uri) self._registry_uri = registry_utils._resolve_registry_uri(registry_uri, tracking_uri) self._tracking_client = TrackingServiceClient(final_tracking_uri) - self._tracing_client = TracingClient(tracking_uri) + self._workspace_store_uri = workspace_utils.resolve_workspace_store_uri( + workspace_store_uri, tracking_uri=final_tracking_uri + ) + self._tracing_client = TracingClient(final_tracking_uri) + self._workspace_client = None # `MlflowClient` also references a `ModelRegistryClient` instance that is provided by the # `MlflowClient._get_registry_client()` method. This `ModelRegistryClient` is not explicitly # defined as an instance variable in the `MlflowClient` constructor; an instance variable # is assigned lazily by `MlflowClient._get_registry_client()` and should not be referenced - # outside of the `MlflowClient._get_registry_client()` method + # outside of the `MlflowClient._get_registry_client()` method. The workspace provider client + # follows the same lazy initialization pattern and is only constructed on demand via + # `_get_workspace_client()`. @property def tracking_uri(self): return self._tracking_client.tracking_uri + def get_workspace_store_uri(self) -> str: + """ + Return the resolved workspace provider URI. This value is always non-null because + `resolve_workspace_store_uri()` falls back to the tracking URI when no workspace URI is + explicitly provided. + """ + return self._workspace_store_uri + def _get_registry_client(self): """Attempts to create a ModelRegistryClient if one does not already exist. @@ -265,6 +295,51 @@ def _get_registry_client(self): # Tracking API + def _get_workspace_client(self) -> WorkspaceProviderClient: + """ + Lazily construct and cache the WorkspaceProviderClient used for workspace operations. + """ + + if self._workspace_client is not None: + return self._workspace_client + + try: + self._workspace_client = WorkspaceProviderClient(self._workspace_store_uri) + except UnsupportedWorkspaceStoreURIException as exc: + raise MlflowException( + "Workspace operations are not supported by the configured workspace URI " + f"'{self._workspace_store_uri}'. Stores with the following URI schemes are " + + f"supported: {exc.supported_uri_schemes}. Configure a supported workspace store " + + "to use workspace APIs.", + error_code=FEATURE_DISABLED, + ) from exc + return self._workspace_client + + def list_workspaces(self) -> list[Workspace]: + """Return the list of workspaces available to the current user.""" + + return self._get_workspace_client().list_workspaces() + + def create_workspace(self, name: str, description: str | None = None) -> Workspace: + """Create a new workspace.""" + + return self._get_workspace_client().create_workspace(name, description) + + def get_workspace(self, name: str) -> Workspace: + """Return metadata for the specified workspace.""" + + return self._get_workspace_client().get_workspace(name) + + def update_workspace(self, name: str, description: str | None = None) -> Workspace: + """Update metadata for an existing workspace.""" + + return self._get_workspace_client().update_workspace(name, description) + + def delete_workspace(self, name: str) -> None: + """Delete an existing workspace.""" + + self._get_workspace_client().delete_workspace(name) + def get_run(self, run_id: str) -> Run: """ Fetch the run from backend store. The resulting :py:class:`Run ` diff --git a/mlflow/utils/rest_utils.py b/mlflow/utils/rest_utils.py index 368143ad854a2..6aec63693efe8 100644 --- a/mlflow/utils/rest_utils.py +++ b/mlflow/utils/rest_utils.py @@ -301,7 +301,11 @@ def http_request_safe(host_creds, endpoint, method, **kwargs): return verify_rest_response(response, endpoint) -def verify_rest_response(response, endpoint): +def verify_rest_response( + response, + endpoint, + expected_status: int = 200, +): """Verify the return code and format, raise exception if the request was not successful.""" # Handle Armeria-specific response case where response text is "200 OK" # v1/traces endpoint might return empty response @@ -309,20 +313,24 @@ def verify_rest_response(response, endpoint): response._content = b"{}" # Update response content to be an empty JSON dictionary return response - # Handle non-200 status codes - if response.status_code != 200: + # Handle non-expected status codes + if response.status_code != expected_status: if _can_parse_as_json_object(response.text): raise RestException(json.loads(response.text)) else: base_msg = ( f"API request to endpoint {endpoint} " - f"failed with error code {response.status_code} != 200" + f"failed with error code {response.status_code} " + f"!= {expected_status}" ) raise MlflowException( f"{base_msg}. Response body: '{response.text}'", error_code=get_error_code(response.status_code), ) + if response.status_code == 204: + return response + # Skip validation for endpoints (e.g. DBFS file-download API) which may return a non-JSON # response if endpoint.startswith(_REST_API_PATH_PREFIX) and not _can_parse_as_json_object(response.text): @@ -573,6 +581,7 @@ def call_endpoint( response_proto, extra_headers=None, retry_timeout_seconds=None, + expected_status: int = 200, ): # Convert json string to json dictionary, to pass to requests if json_body is not None: @@ -593,7 +602,14 @@ def call_endpoint( call_kwargs["json"] = json_body response = http_request(**call_kwargs) - response = verify_rest_response(response, endpoint) + response = verify_rest_response( + response, + endpoint, + expected_status=expected_status, + ) + if response.status_code == 204: + return response_proto + response_to_parse = response.text try: js_dict = json.loads(response_to_parse) diff --git a/mlflow/utils/workspace_utils.py b/mlflow/utils/workspace_utils.py index 3d6a81d00cca6..4cd3ac6f69ffd 100644 --- a/mlflow/utils/workspace_utils.py +++ b/mlflow/utils/workspace_utils.py @@ -1,4 +1,4 @@ -"""Utility helpers for workspace-aware database schema defaults.""" +"""Workspace-related utility constants.""" DEFAULT_WORKSPACE_NAME = "default" diff --git a/tests/server/test_workspace_endpoints.py b/tests/server/test_workspace_endpoints.py new file mode 100644 index 0000000000000..e2143ef27e01c --- /dev/null +++ b/tests/server/test_workspace_endpoints.py @@ -0,0 +1,101 @@ +from __future__ import annotations + +import json +from unittest import mock + +import pytest +from flask import Flask + +from mlflow.entities.workspace import Workspace +from mlflow.server.handlers import get_endpoints + + +@pytest.fixture(autouse=True) +def enable_workspaces(monkeypatch): + monkeypatch.setenv("MLFLOW_ENABLE_WORKSPACES", "true") + + +@pytest.fixture +def app(monkeypatch): + flask_app = Flask(__name__) + for rule, view_func, methods in get_endpoints(): + flask_app.add_url_rule(rule, view_func=view_func, methods=methods) + return flask_app + + +@pytest.fixture +def mock_workspace_store(monkeypatch): + store = mock.Mock() + monkeypatch.setattr( + "mlflow.server.handlers._get_workspace_store", + lambda *_, **__: store, + ) + return store + + +def _workspace_to_json(payload): + return json.loads(payload) + + +def test_list_workspaces_endpoint(app, mock_workspace_store): + mock_workspace_store.list_workspaces.return_value = [ + Workspace(name="default", description="Default"), + Workspace(name="team-a", description=None), + ] + with app.test_client() as client: + response = client.get("/api/2.0/mlflow/workspaces") + + assert response.status_code == 200 + payload = _workspace_to_json(response.get_data(True)) + assert payload["workspaces"][0] == {"name": "default", "description": "Default"} + assert payload["workspaces"][1] == {"name": "team-a"} + mock_workspace_store.list_workspaces.assert_called_once_with() + + +def test_create_workspace_endpoint(app, mock_workspace_store): + created = Workspace(name="team-b", description="Team B") + mock_workspace_store.create_workspace.return_value = created + with app.test_client() as client: + response = client.post( + "/api/2.0/mlflow/workspaces", + json={"name": "team-b", "description": "Team B"}, + ) + + assert response.status_code == 201 + payload = _workspace_to_json(response.get_data(True)) + assert payload == {"workspace": created.to_dict()} + mock_workspace_store.create_workspace.assert_called_once() + + +def test_get_workspace_endpoint(app, mock_workspace_store): + mock_workspace_store.get_workspace.return_value = Workspace(name="team-c", description="Team C") + with app.test_client() as client: + response = client.get("/api/2.0/mlflow/workspaces/team-c") + + assert response.status_code == 200 + payload = _workspace_to_json(response.get_data(True)) + assert payload == {"workspace": {"name": "team-c", "description": "Team C"}} + mock_workspace_store.get_workspace.assert_called_once_with("team-c") + + +def test_update_workspace_endpoint(app, mock_workspace_store): + updated = Workspace(name="team-d", description="Updated") + mock_workspace_store.update_workspace.return_value = updated + with app.test_client() as client: + response = client.patch( + "/api/2.0/mlflow/workspaces/team-d", + json={"description": "Updated"}, + ) + + assert response.status_code == 200 + payload = _workspace_to_json(response.get_data(True)) + assert payload == {"workspace": updated.to_dict()} + mock_workspace_store.update_workspace.assert_called_once() + + +def test_delete_workspace_endpoint(app, mock_workspace_store): + with app.test_client() as client: + response = client.delete("/api/2.0/mlflow/workspaces/team-e") + + assert response.status_code == 204 + mock_workspace_store.delete_workspace.assert_called_once_with("team-e") diff --git a/tests/store/workspace/__init__.py b/tests/store/workspace/__init__.py new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/tests/store/workspace/test_rest_store.py b/tests/store/workspace/test_rest_store.py new file mode 100644 index 0000000000000..81feb4624e9b7 --- /dev/null +++ b/tests/store/workspace/test_rest_store.py @@ -0,0 +1,167 @@ +from __future__ import annotations + +import json +from types import SimpleNamespace +from unittest import mock + +import pytest + +from mlflow.entities.workspace import Workspace +from mlflow.exceptions import MlflowException, RestException +from mlflow.protos.service_pb2 import ( + CreateWorkspace, + DeleteWorkspace, + GetWorkspace, + ListWorkspaces, + UpdateWorkspace, +) +from mlflow.store.workspace.rest_store import WORKSPACES_ENDPOINT, RestWorkspaceStore + + +@pytest.fixture +def host_creds(): + return SimpleNamespace() + + +@pytest.fixture +def store(host_creds): + return RestWorkspaceStore(lambda: host_creds) + + +def test_list_workspaces_parses_response(store, host_creds): + response = ListWorkspaces.Response() + response.workspaces.add(name="default", description="Default workspace") + response.workspaces.add(name="team-a", description="Team A") + with mock.patch( + "mlflow.store.workspace.rest_store.call_endpoint", return_value=response + ) as call_endpoint: + workspaces = store.list_workspaces() + + assert [ws.name for ws in workspaces] == ["default", "team-a"] + call_endpoint.assert_called_once() + kwargs = call_endpoint.call_args.kwargs + assert kwargs["host_creds"] is host_creds + assert kwargs["endpoint"] == WORKSPACES_ENDPOINT + assert kwargs["method"] == "GET" + assert kwargs["json_body"] is None + assert kwargs.get("expected_status", 200) == 200 + + +def test_get_workspace_returns_entity(store, host_creds): + response = GetWorkspace.Response() + response.workspace.name = "team-b" + response.workspace.description = "Team B" + with mock.patch( + "mlflow.store.workspace.rest_store.call_endpoint", return_value=response + ) as call_endpoint: + workspace = store.get_workspace("team-b") + + assert workspace.name == "team-b" + assert workspace.description == "Team B" + call_endpoint.assert_called_once() + kwargs = call_endpoint.call_args.kwargs + assert kwargs["endpoint"] == f"{WORKSPACES_ENDPOINT}/team-b" + assert kwargs["method"] == "GET" + + +def test_create_workspace_sends_payload(store, host_creds): + response = CreateWorkspace.Response() + response.workspace.name = "team-c" + response.workspace.description = "Team C" + with mock.patch( + "mlflow.store.workspace.rest_store.call_endpoint", return_value=response + ) as call_endpoint: + workspace = store.create_workspace(Workspace(name="team-c", description="Team C")) + + assert workspace.name == "team-c" + assert workspace.description == "Team C" + call_endpoint.assert_called_once() + kwargs = call_endpoint.call_args.kwargs + assert kwargs["endpoint"] == WORKSPACES_ENDPOINT + assert kwargs["method"] == "POST" + assert kwargs["expected_status"] == 201 + assert json.loads(kwargs["json_body"]) == {"name": "team-c", "description": "Team C"} + + +def test_create_workspace_conflict_raises_resource_exists(store, monkeypatch): + exc = RestException({"error_code": "RESOURCE_ALREADY_EXISTS", "message": "already exists"}) + monkeypatch.setattr( + "mlflow.store.workspace.rest_store.call_endpoint", + mock.Mock(side_effect=exc), + ) + + with pytest.raises( + MlflowException, + match="already exists", + ) as exc_info: + store.create_workspace(Workspace(name="team-a")) + + assert exc_info.value.error_code == "RESOURCE_ALREADY_EXISTS" + assert "already exists" in exc_info.value.message + + +def test_create_workspace_handles_400_resource_exists(store, monkeypatch): + exc = RestException({"error_code": "RESOURCE_ALREADY_EXISTS", "message": "already exists"}) + monkeypatch.setattr( + "mlflow.store.workspace.rest_store.call_endpoint", + mock.Mock(side_effect=exc), + ) + + with pytest.raises( + MlflowException, + match="already exists", + ) as exc_info: + store.create_workspace(Workspace(name="team-a")) + + assert exc_info.value.error_code == "RESOURCE_ALREADY_EXISTS" + + +def test_update_workspace_returns_new_description(store, host_creds): + response = UpdateWorkspace.Response() + response.workspace.name = "team-e" + response.workspace.description = "updated" + with mock.patch( + "mlflow.store.workspace.rest_store.call_endpoint", return_value=response + ) as call_endpoint: + workspace = store.update_workspace(Workspace(name="team-e", description="updated")) + + assert workspace.description == "updated" + call_endpoint.assert_called_once() + kwargs = call_endpoint.call_args.kwargs + assert kwargs["endpoint"] == f"{WORKSPACES_ENDPOINT}/team-e" + assert kwargs["method"] == "PATCH" + assert json.loads(kwargs["json_body"]) == {"description": "updated"} + + +def test_delete_workspace_returns_on_success(store, host_creds): + response = DeleteWorkspace.Response() + with mock.patch( + "mlflow.store.workspace.rest_store.call_endpoint", return_value=response + ) as call_endpoint: + store.delete_workspace("team-f") + + call_endpoint.assert_called_once() + kwargs = call_endpoint.call_args.kwargs + assert kwargs["endpoint"] == f"{WORKSPACES_ENDPOINT}/team-f" + assert kwargs["method"] == "DELETE" + assert kwargs["expected_status"] == 204 + assert kwargs["json_body"] is None + + +def test_get_default_workspace_not_supported(store): + with pytest.raises( + MlflowException, + match="REST workspace provider does not expose a default workspace", + ) as exc: + store.get_default_workspace() + assert exc.value.error_code == "INVALID_PARAMETER_VALUE" + + +def test_rest_store_validates_workspace_names_before_http(monkeypatch, store): + mock_call = mock.Mock() + monkeypatch.setattr("mlflow.store.workspace.rest_store.call_endpoint", mock_call) + + with pytest.raises(MlflowException, match="must match the pattern"): + store.get_workspace("Invalid") + + mock_call.assert_not_called() diff --git a/tests/store/workspace/test_sqlalchemy_store.py b/tests/store/workspace/test_sqlalchemy_store.py new file mode 100644 index 0000000000000..1803cfaab58c7 --- /dev/null +++ b/tests/store/workspace/test_sqlalchemy_store.py @@ -0,0 +1,161 @@ +import pytest +from sqlalchemy.exc import IntegrityError + +from mlflow.entities.workspace import Workspace +from mlflow.exceptions import MlflowException +from mlflow.store.workspace.dbmodels.models import SqlWorkspace +from mlflow.store.workspace.sqlalchemy_store import SqlAlchemyStore +from mlflow.utils.workspace_utils import DEFAULT_WORKSPACE_NAME + + +@pytest.fixture +def workspace_store(tmp_path, monkeypatch): + monkeypatch.setenv("MLFLOW_ENABLE_WORKSPACES", "true") + + db_path = tmp_path / "workspace.sqlite" + uri = f"sqlite:///{db_path}" + store = SqlAlchemyStore(uri) + + with store.ManagedSessionMaker() as session: + try: + session.add( + SqlWorkspace( + name=DEFAULT_WORKSPACE_NAME, + description="Default workspace", + ) + ) + session.commit() + except IntegrityError: + session.rollback() + + try: + yield store + finally: + store._engine.dispose() + + +def _workspace_rows(store): + with store.ManagedSessionMaker() as session: + return { + (row.name, row.description) + for row in session.query(SqlWorkspace).order_by(SqlWorkspace.name).all() + } + + +def test_list_workspaces_returns_all(workspace_store): + workspace_store.create_workspace(Workspace(name="team-a", description="Team A")) + workspace_store.create_workspace(Workspace(name="team-b", description=None)) + + workspaces = workspace_store.list_workspaces() + rows = {(ws.name, ws.description) for ws in workspaces} + default_description = next(desc for name, desc in rows if name == DEFAULT_WORKSPACE_NAME) + assert rows == { + (DEFAULT_WORKSPACE_NAME, default_description), + ("team-a", "Team A"), + ("team-b", None), + } + + +def test_get_workspace_success(workspace_store): + workspace_store.create_workspace(Workspace(name="team-a", description="Team A")) + + workspace = workspace_store.get_workspace("team-a") + assert workspace.name == "team-a" + assert workspace.description == "Team A" + + +def test_get_workspace_not_found(workspace_store): + with pytest.raises(MlflowException, match="Workspace 'unknown' not found") as exc: + workspace_store.get_workspace("unknown") + assert exc.value.error_code == "RESOURCE_DOES_NOT_EXIST" + + +def test_create_workspace_persists_record(workspace_store): + created = workspace_store.create_workspace( + Workspace(name="team-a", description="Team A"), + ) + assert created.name == "team-a" + assert created.description == "Team A" + assert ("team-a", "Team A") in _workspace_rows(workspace_store) + + +def test_create_workspace_duplicate_raises(workspace_store): + workspace_store.create_workspace(Workspace(name="team-a", description=None)) + + with pytest.raises( + MlflowException, + match="Workspace 'team-a' already exists\\.", + ) as exc: + workspace_store.create_workspace(Workspace(name="team-a", description=None)) + assert exc.value.error_code == "RESOURCE_ALREADY_EXISTS" + + +def test_create_workspace_invalid_name_raises(workspace_store): + with pytest.raises( + MlflowException, + match="Workspace name 'Team-A' must match the pattern", + ) as exc: + workspace_store.create_workspace(Workspace(name="Team-A", description=None)) + assert exc.value.error_code == "INVALID_PARAMETER_VALUE" + + +def test_update_workspace_changes_description(workspace_store): + workspace_store.create_workspace(Workspace(name="team-a", description="old")) + + updated = workspace_store.update_workspace( + Workspace(name="team-a", description="new description"), + ) + assert updated.description == "new description" + assert ("team-a", "new description") in _workspace_rows(workspace_store) + + +def test_delete_workspace_removes_empty_workspace(workspace_store): + workspace_store.create_workspace(Workspace(name="team-a", description=None)) + + workspace_store.delete_workspace("team-a") + rows = _workspace_rows(workspace_store) + assert ("team-a", None) not in rows + default_ws = workspace_store.get_default_workspace() + assert (DEFAULT_WORKSPACE_NAME, default_ws.description) in rows + + +def test_delete_default_workspace_rejected(workspace_store): + with pytest.raises( + MlflowException, + match=f"Cannot delete the reserved '{DEFAULT_WORKSPACE_NAME}' workspace", + ) as exc: + workspace_store.delete_workspace(DEFAULT_WORKSPACE_NAME) + assert exc.value.error_code == "INVALID_STATE" + + +def test_update_workspace_not_found(workspace_store): + with pytest.raises( + MlflowException, + match="Workspace 'unknown' not found", + ) as exc: + workspace_store.update_workspace(Workspace(name="unknown", description="new description")) + assert exc.value.error_code == "RESOURCE_DOES_NOT_EXIST" + + +def test_delete_workspace_not_found(workspace_store): + with pytest.raises( + MlflowException, + match="Workspace 'unknown' not found", + ) as exc: + workspace_store.delete_workspace("unknown") + assert exc.value.error_code == "RESOURCE_DOES_NOT_EXIST" + + +def test_resolve_artifact_root_returns_default(workspace_store): + default_root = "/default/path" + assert workspace_store.resolve_artifact_root(default_root) == (default_root, True) + assert workspace_store.resolve_artifact_root(default_root, workspace_name="team-a") == ( + default_root, + True, + ) + + +def test_get_default_workspace_returns_default(workspace_store): + default_ws = workspace_store.get_default_workspace() + assert default_ws.name == DEFAULT_WORKSPACE_NAME + assert default_ws.description is not None diff --git a/tests/store/workspace/test_workspace_validator.py b/tests/store/workspace/test_workspace_validator.py new file mode 100644 index 0000000000000..9ff9173711f8b --- /dev/null +++ b/tests/store/workspace/test_workspace_validator.py @@ -0,0 +1,38 @@ +import pytest + +from mlflow.exceptions import MlflowException +from mlflow.store.workspace.abstract_store import WorkspaceNameValidator + + +@pytest.mark.parametrize( + "name", + [ + "team-a", + "ab", + "a" * 63, + "123", + "a1-b2", + ], +) +def test_workspace_name_validator_accepts_valid_names(name): + WorkspaceNameValidator.validate(name) + + +@pytest.mark.parametrize( + ("name", "error_fragment"), + [ + (123, "must be a string"), + ("t", "must be between"), + ("a" * 64, "must be between"), + ("a" * 256, "must be between"), + ("Team-A", "must match the pattern"), + ("team_a", "must match the pattern"), + ("-team", "must match the pattern"), + ("team-", "must match the pattern"), + ("default", "is reserved"), + ("workspaces", "is reserved"), + ], +) +def test_workspace_name_validator_validate_raises(name, error_fragment): + with pytest.raises(MlflowException, match=error_fragment): + WorkspaceNameValidator.validate(name) diff --git a/tests/tracking/test_client_workspace.py b/tests/tracking/test_client_workspace.py new file mode 100644 index 0000000000000..9bac4db047af3 --- /dev/null +++ b/tests/tracking/test_client_workspace.py @@ -0,0 +1,52 @@ +from __future__ import annotations + +from mlflow import MlflowClient +from mlflow.environment_variables import MLFLOW_TRACKING_URI, MLFLOW_WORKSPACE_STORE_URI + + +def test_mlflow_client_resolves_workspace_uri(monkeypatch): + recorded: dict[str, str | None] = {} + + class DummyTrackingClient: + def __init__(self, tracking_uri: str): + recorded["tracking_uri"] = tracking_uri + self.tracking_uri = tracking_uri + + class DummyWorkspaceClient: + def __init__(self, workspace_uri: str | None = None): + recorded["workspace_uri"] = workspace_uri + + # Methods invoked downstream are irrelevant for this initialization test. + def list_workspaces(self): + return [] + + monkeypatch.setattr("mlflow.tracking.client.TrackingServiceClient", DummyTrackingClient) + monkeypatch.setattr("mlflow.tracking.client.TracingClient", lambda _: None) + monkeypatch.setattr("mlflow.tracking.client.WorkspaceProviderClient", DummyWorkspaceClient) + monkeypatch.setattr( + "mlflow.tracking.client.utils._resolve_tracking_uri", + lambda uri: uri or "sqlite:///tracking.db", + ) + monkeypatch.setattr( + "mlflow.tracking.client.registry_utils._resolve_registry_uri", + lambda registry_uri, tracking_uri: "registry-resolved", + ) + + monkeypatch.setenv(MLFLOW_TRACKING_URI.name, "sqlite:///tracking.db") + monkeypatch.setenv(MLFLOW_WORKSPACE_STORE_URI.name, "sqlite:///workspace.db") + + client = MlflowClient() + client.list_workspaces() + assert recorded["workspace_uri"] == "sqlite:///workspace.db" + + recorded.clear() + client = MlflowClient(workspace_store_uri="sqlite:///explicit.db") + client.list_workspaces() + assert recorded["workspace_uri"] == "sqlite:///explicit.db" + + recorded.clear() + monkeypatch.delenv(MLFLOW_WORKSPACE_STORE_URI.name, raising=False) + client = MlflowClient() + client.list_workspaces() + # Falls back to the tracking URI when workspace URI is unset. + assert recorded["workspace_uri"] == "sqlite:///tracking.db" diff --git a/tests/tracking/test_workspace_registry.py b/tests/tracking/test_workspace_registry.py new file mode 100644 index 0000000000000..ff7d604f7c7d5 --- /dev/null +++ b/tests/tracking/test_workspace_registry.py @@ -0,0 +1,40 @@ +from __future__ import annotations + +import pytest + +from mlflow.store.workspace.rest_store import RestWorkspaceStore +from mlflow.store.workspace.sqlalchemy_store import SqlAlchemyStore +from mlflow.tracking._workspace.registry import ( + UnsupportedWorkspaceStoreURIException, + _get_workspace_store_registry, + get_workspace_store, +) + + +@pytest.fixture(autouse=True) +def _clear_workspace_store_cache(): + registry = _get_workspace_store_registry() + registry._get_store_with_resolved_uri.cache_clear() + yield + registry._get_store_with_resolved_uri.cache_clear() + + +def test_get_workspace_store_resolves_sqlalchemy(tmp_path): + workspace_uri = f"sqlite:///{tmp_path / 'workspace.db'}" + store = get_workspace_store(workspace_uri=workspace_uri) + assert isinstance(store, SqlAlchemyStore) + assert store._workspace_uri == workspace_uri + store._engine.dispose() + + +def test_get_workspace_store_resolves_rest(): + store = get_workspace_store(workspace_uri="http://example.com") + assert isinstance(store, RestWorkspaceStore) + + +def test_get_workspace_store_unsupported_scheme(): + with pytest.raises( + UnsupportedWorkspaceStoreURIException, + match="got unsupported URI 'foo://workspace'", + ): + get_workspace_store(workspace_uri="foo://workspace") diff --git a/tests/tracking/test_workspace_utils.py b/tests/tracking/test_workspace_utils.py new file mode 100644 index 0000000000000..76756698aedda --- /dev/null +++ b/tests/tracking/test_workspace_utils.py @@ -0,0 +1,40 @@ +import pytest + +from mlflow.environment_variables import MLFLOW_TRACKING_URI, MLFLOW_WORKSPACE_STORE_URI +from mlflow.tracking._workspace import utils as workspace_utils + + +@pytest.fixture(autouse=True) +def _reset_workspace_uri(monkeypatch): + workspace_utils.set_workspace_store_uri(None) + monkeypatch.delenv(MLFLOW_WORKSPACE_STORE_URI.name, raising=False) + monkeypatch.delenv(MLFLOW_TRACKING_URI.name, raising=False) + yield + workspace_utils.set_workspace_store_uri(None) + monkeypatch.delenv(MLFLOW_WORKSPACE_STORE_URI.name, raising=False) + monkeypatch.delenv(MLFLOW_TRACKING_URI.name, raising=False) + + +def test_resolve_workspace_uri_prefers_explicit_argument(monkeypatch): + monkeypatch.setenv(MLFLOW_WORKSPACE_STORE_URI.name, "sqlite:///env-workspaces.db") + result = workspace_utils.resolve_workspace_store_uri("sqlite:///explicit.db") + assert result == "sqlite:///explicit.db" + + +def test_resolve_workspace_uri_uses_configured_value(monkeypatch): + workspace_utils.set_workspace_store_uri("sqlite:///configured.db") + result = workspace_utils.resolve_workspace_store_uri(tracking_uri="sqlite:///tracking.db") + assert result == "sqlite:///configured.db" + + +def test_resolve_workspace_uri_uses_environment(monkeypatch): + monkeypatch.setenv(MLFLOW_WORKSPACE_STORE_URI.name, "sqlite:///env.db") + result = workspace_utils.resolve_workspace_store_uri(tracking_uri="file:///mlruns") + assert result == "sqlite:///env.db" + + +def test_resolve_workspace_uri_defaults_to_tracking(monkeypatch): + result = workspace_utils.resolve_workspace_store_uri( + tracking_uri="sqlite:///tracking-default.db" + ) + assert result == "sqlite:///tracking-default.db"