// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: service.proto

package org.mlflow.api.proto;

public final class Service {
  private Service() {}
  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistryLite registry) {
  }

  public static void registerAllExtensions(
      com.google.protobuf.ExtensionRegistry registry) {
    registerAllExtensions(
        (com.google.protobuf.ExtensionRegistryLite) registry);
  }
  /**
   * <pre>
   * View type for ListExperiments query.
   * </pre>
   *
   * Protobuf enum {@code mlflow.ViewType}
   */
  public enum ViewType
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <pre>
     * Default. Return only active experiments.
     * </pre>
     *
     * <code>ACTIVE_ONLY = 1;</code>
     */
    ACTIVE_ONLY(1),
    /**
     * <pre>
     * Return only deleted experiments.
     * </pre>
     *
     * <code>DELETED_ONLY = 2;</code>
     */
    DELETED_ONLY(2),
    /**
     * <pre>
     * Get all experiments.
     * </pre>
     *
     * <code>ALL = 3;</code>
     */
    ALL(3),
    ;

    /**
     * <pre>
     * Default. Return only active experiments.
     * </pre>
     *
     * <code>ACTIVE_ONLY = 1;</code>
     */
    public static final int ACTIVE_ONLY_VALUE = 1;
    /**
     * <pre>
     * Return only deleted experiments.
     * </pre>
     *
     * <code>DELETED_ONLY = 2;</code>
     */
    public static final int DELETED_ONLY_VALUE = 2;
    /**
     * <pre>
     * Get all experiments.
     * </pre>
     *
     * <code>ALL = 3;</code>
     */
    public static final int ALL_VALUE = 3;


    public final int getNumber() {
      return value;
    }

    /**
     * @deprecated Use {@link #forNumber(int)} instead.
     */
    @java.lang.Deprecated
    public static ViewType valueOf(int value) {
      return forNumber(value);
    }

    public static ViewType forNumber(int value) {
      switch (value) {
        case 1: return ACTIVE_ONLY;
        case 2: return DELETED_ONLY;
        case 3: return ALL;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<ViewType>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static final com.google.protobuf.Internal.EnumLiteMap<
        ViewType> internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<ViewType>() {
            public ViewType findValueByNumber(int number) {
              return ViewType.forNumber(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(ordinal());
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return org.mlflow.api.proto.Service.getDescriptor().getEnumTypes().get(0);
    }

    private static final ViewType[] VALUES = values();

    public static ViewType valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int value;

    private ViewType(int value) {
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:mlflow.ViewType)
  }

  /**
   * <pre>
   * Source that generated a run.
   * </pre>
   *
   * Protobuf enum {@code mlflow.SourceType}
   */
  public enum SourceType
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <pre>
     * Databricks notebook environment.
     * </pre>
     *
     * <code>NOTEBOOK = 1;</code>
     */
    NOTEBOOK(1),
    /**
     * <pre>
     * Scheduled or Run Now job.
     * </pre>
     *
     * <code>JOB = 2;</code>
     */
    JOB(2),
    /**
     * <pre>
     * As a prepackaged project: either a Docker image or GitHub source, etc.
     * </pre>
     *
     * <code>PROJECT = 3;</code>
     */
    PROJECT(3),
    /**
     * <pre>
     * Local run: Using CLI, IDE, or local notebook.
     * </pre>
     *
     * <code>LOCAL = 4;</code>
     */
    LOCAL(4),
    /**
     * <pre>
     * Unknown source type.
     * </pre>
     *
     * <code>UNKNOWN = 1000;</code>
     */
    UNKNOWN(1000),
    ;

    /**
     * <pre>
     * Databricks notebook environment.
     * </pre>
     *
     * <code>NOTEBOOK = 1;</code>
     */
    public static final int NOTEBOOK_VALUE = 1;
    /**
     * <pre>
     * Scheduled or Run Now job.
     * </pre>
     *
     * <code>JOB = 2;</code>
     */
    public static final int JOB_VALUE = 2;
    /**
     * <pre>
     * As a prepackaged project: either a Docker image or GitHub source, etc.
     * </pre>
     *
     * <code>PROJECT = 3;</code>
     */
    public static final int PROJECT_VALUE = 3;
    /**
     * <pre>
     * Local run: Using CLI, IDE, or local notebook.
     * </pre>
     *
     * <code>LOCAL = 4;</code>
     */
    public static final int LOCAL_VALUE = 4;
    /**
     * <pre>
     * Unknown source type.
     * </pre>
     *
     * <code>UNKNOWN = 1000;</code>
     */
    public static final int UNKNOWN_VALUE = 1000;


    public final int getNumber() {
      return value;
    }

    /**
     * @deprecated Use {@link #forNumber(int)} instead.
     */
    @java.lang.Deprecated
    public static SourceType valueOf(int value) {
      return forNumber(value);
    }

    public static SourceType forNumber(int value) {
      switch (value) {
        case 1: return NOTEBOOK;
        case 2: return JOB;
        case 3: return PROJECT;
        case 4: return LOCAL;
        case 1000: return UNKNOWN;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<SourceType>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static final com.google.protobuf.Internal.EnumLiteMap<
        SourceType> internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<SourceType>() {
            public SourceType findValueByNumber(int number) {
              return SourceType.forNumber(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(ordinal());
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return org.mlflow.api.proto.Service.getDescriptor().getEnumTypes().get(1);
    }

    private static final SourceType[] VALUES = values();

    public static SourceType valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int value;

    private SourceType(int value) {
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:mlflow.SourceType)
  }

  /**
   * <pre>
   * Status of a run.
   * </pre>
   *
   * Protobuf enum {@code mlflow.RunStatus}
   */
  public enum RunStatus
      implements com.google.protobuf.ProtocolMessageEnum {
    /**
     * <pre>
     * Run has been initiated.
     * </pre>
     *
     * <code>RUNNING = 1;</code>
     */
    RUNNING(1),
    /**
     * <pre>
     * Run is scheduled to run at a later time.
     * </pre>
     *
     * <code>SCHEDULED = 2;</code>
     */
    SCHEDULED(2),
    /**
     * <pre>
     * Run has completed.
     * </pre>
     *
     * <code>FINISHED = 3;</code>
     */
    FINISHED(3),
    /**
     * <pre>
     * Run execution failed.
     * </pre>
     *
     * <code>FAILED = 4;</code>
     */
    FAILED(4),
    /**
     * <pre>
     * Run killed by user.
     * </pre>
     *
     * <code>KILLED = 5;</code>
     */
    KILLED(5),
    ;

    /**
     * <pre>
     * Run has been initiated.
     * </pre>
     *
     * <code>RUNNING = 1;</code>
     */
    public static final int RUNNING_VALUE = 1;
    /**
     * <pre>
     * Run is scheduled to run at a later time.
     * </pre>
     *
     * <code>SCHEDULED = 2;</code>
     */
    public static final int SCHEDULED_VALUE = 2;
    /**
     * <pre>
     * Run has completed.
     * </pre>
     *
     * <code>FINISHED = 3;</code>
     */
    public static final int FINISHED_VALUE = 3;
    /**
     * <pre>
     * Run execution failed.
     * </pre>
     *
     * <code>FAILED = 4;</code>
     */
    public static final int FAILED_VALUE = 4;
    /**
     * <pre>
     * Run killed by user.
     * </pre>
     *
     * <code>KILLED = 5;</code>
     */
    public static final int KILLED_VALUE = 5;


    public final int getNumber() {
      return value;
    }

    /**
     * @deprecated Use {@link #forNumber(int)} instead.
     */
    @java.lang.Deprecated
    public static RunStatus valueOf(int value) {
      return forNumber(value);
    }

    public static RunStatus forNumber(int value) {
      switch (value) {
        case 1: return RUNNING;
        case 2: return SCHEDULED;
        case 3: return FINISHED;
        case 4: return FAILED;
        case 5: return KILLED;
        default: return null;
      }
    }

    public static com.google.protobuf.Internal.EnumLiteMap<RunStatus>
        internalGetValueMap() {
      return internalValueMap;
    }
    private static final com.google.protobuf.Internal.EnumLiteMap<
        RunStatus> internalValueMap =
          new com.google.protobuf.Internal.EnumLiteMap<RunStatus>() {
            public RunStatus findValueByNumber(int number) {
              return RunStatus.forNumber(number);
            }
          };

    public final com.google.protobuf.Descriptors.EnumValueDescriptor
        getValueDescriptor() {
      return getDescriptor().getValues().get(ordinal());
    }
    public final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptorForType() {
      return getDescriptor();
    }
    public static final com.google.protobuf.Descriptors.EnumDescriptor
        getDescriptor() {
      return org.mlflow.api.proto.Service.getDescriptor().getEnumTypes().get(2);
    }

    private static final RunStatus[] VALUES = values();

    public static RunStatus valueOf(
        com.google.protobuf.Descriptors.EnumValueDescriptor desc) {
      if (desc.getType() != getDescriptor()) {
        throw new java.lang.IllegalArgumentException(
          "EnumValueDescriptor is not for this type.");
      }
      return VALUES[desc.getIndex()];
    }

    private final int value;

    private RunStatus(int value) {
      this.value = value;
    }

    // @@protoc_insertion_point(enum_scope:mlflow.RunStatus)
  }

  public interface MetricOrBuilder extends
      // @@protoc_insertion_point(interface_extends:mlflow.Metric)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Key identifying this metric.
     * </pre>
     *
     * <code>optional string key = 1;</code>
     */
    boolean hasKey();
    /**
     * <pre>
     * Key identifying this metric.
     * </pre>
     *
     * <code>optional string key = 1;</code>
     */
    java.lang.String getKey();
    /**
     * <pre>
     * Key identifying this metric.
     * </pre>
     *
     * <code>optional string key = 1;</code>
     */
    com.google.protobuf.ByteString
        getKeyBytes();

    /**
     * <pre>
     * Value associated with this metric.
     * </pre>
     *
     * <code>optional double value = 2;</code>
     */
    boolean hasValue();
    /**
     * <pre>
     * Value associated with this metric.
     * </pre>
     *
     * <code>optional double value = 2;</code>
     */
    double getValue();

    /**
     * <pre>
     * The timestamp at which this metric was recorded.
     * </pre>
     *
     * <code>optional int64 timestamp = 3;</code>
     */
    boolean hasTimestamp();
    /**
     * <pre>
     * The timestamp at which this metric was recorded.
     * </pre>
     *
     * <code>optional int64 timestamp = 3;</code>
     */
    long getTimestamp();
  }
  /**
   * <pre>
   * Metric associated with a run, represented as a key-value pair.
   * </pre>
   *
   * Protobuf type {@code mlflow.Metric}
   */
  public  static final class Metric extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:mlflow.Metric)
      MetricOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Metric.newBuilder() to construct.
    private Metric(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Metric() {
      key_ = "";
      value_ = 0D;
      timestamp_ = 0L;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Metric(
        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;
              key_ = bs;
              break;
            }
            case 17: {
              bitField0_ |= 0x00000002;
              value_ = input.readDouble();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              timestamp_ = input.readInt64();
              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_Metric_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.mlflow.api.proto.Service.internal_static_mlflow_Metric_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.mlflow.api.proto.Service.Metric.class, org.mlflow.api.proto.Service.Metric.Builder.class);
    }

    private int bitField0_;
    public static final int KEY_FIELD_NUMBER = 1;
    private volatile java.lang.Object key_;
    /**
     * <pre>
     * Key identifying this metric.
     * </pre>
     *
     * <code>optional string key = 1;</code>
     */
    public boolean hasKey() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * Key identifying this metric.
     * </pre>
     *
     * <code>optional string key = 1;</code>
     */
    public java.lang.String getKey() {
      java.lang.Object ref = key_;
      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()) {
          key_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Key identifying this metric.
     * </pre>
     *
     * <code>optional string key = 1;</code>
     */
    public com.google.protobuf.ByteString
        getKeyBytes() {
      java.lang.Object ref = key_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        key_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int VALUE_FIELD_NUMBER = 2;
    private double value_;
    /**
     * <pre>
     * Value associated with this metric.
     * </pre>
     *
     * <code>optional double value = 2;</code>
     */
    public boolean hasValue() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     * Value associated with this metric.
     * </pre>
     *
     * <code>optional double value = 2;</code>
     */
    public double getValue() {
      return value_;
    }

    public static final int TIMESTAMP_FIELD_NUMBER = 3;
    private long timestamp_;
    /**
     * <pre>
     * The timestamp at which this metric was recorded.
     * </pre>
     *
     * <code>optional int64 timestamp = 3;</code>
     */
    public boolean hasTimestamp() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <pre>
     * The timestamp at which this metric was recorded.
     * </pre>
     *
     * <code>optional int64 timestamp = 3;</code>
     */
    public long getTimestamp() {
      return timestamp_;
    }

    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) == 0x00000001)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, key_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeDouble(2, value_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt64(3, timestamp_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, key_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(2, value_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(3, timestamp_);
      }
      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.Metric)) {
        return super.equals(obj);
      }
      org.mlflow.api.proto.Service.Metric other = (org.mlflow.api.proto.Service.Metric) obj;

      boolean result = true;
      result = result && (hasKey() == other.hasKey());
      if (hasKey()) {
        result = result && getKey()
            .equals(other.getKey());
      }
      result = result && (hasValue() == other.hasValue());
      if (hasValue()) {
        result = result && (
            java.lang.Double.doubleToLongBits(getValue())
            == java.lang.Double.doubleToLongBits(
                other.getValue()));
      }
      result = result && (hasTimestamp() == other.hasTimestamp());
      if (hasTimestamp()) {
        result = result && (getTimestamp()
            == other.getTimestamp());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasKey()) {
        hash = (37 * hash) + KEY_FIELD_NUMBER;
        hash = (53 * hash) + getKey().hashCode();
      }
      if (hasValue()) {
        hash = (37 * hash) + VALUE_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            java.lang.Double.doubleToLongBits(getValue()));
      }
      if (hasTimestamp()) {
        hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            getTimestamp());
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.mlflow.api.proto.Service.Metric parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.Metric 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.Metric parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.Metric 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.Metric parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.Metric 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.Metric parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.Metric 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.Metric parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.Metric 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.Metric 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.Metric 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.Metric 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;
    }
    /**
     * <pre>
     * Metric associated with a run, represented as a key-value pair.
     * </pre>
     *
     * Protobuf type {@code mlflow.Metric}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:mlflow.Metric)
        org.mlflow.api.proto.Service.MetricOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_Metric_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_Metric_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.Metric.class, org.mlflow.api.proto.Service.Metric.Builder.class);
      }

      // Construct using org.mlflow.api.proto.Service.Metric.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();
        key_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        value_ = 0D;
        bitField0_ = (bitField0_ & ~0x00000002);
        timestamp_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_Metric_descriptor;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.Metric getDefaultInstanceForType() {
        return org.mlflow.api.proto.Service.Metric.getDefaultInstance();
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.Metric build() {
        org.mlflow.api.proto.Service.Metric result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.Metric buildPartial() {
        org.mlflow.api.proto.Service.Metric result = new org.mlflow.api.proto.Service.Metric(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.key_ = key_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.value_ = value_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.timestamp_ = timestamp_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.mlflow.api.proto.Service.Metric) {
          return mergeFrom((org.mlflow.api.proto.Service.Metric)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.mlflow.api.proto.Service.Metric other) {
        if (other == org.mlflow.api.proto.Service.Metric.getDefaultInstance()) return this;
        if (other.hasKey()) {
          bitField0_ |= 0x00000001;
          key_ = other.key_;
          onChanged();
        }
        if (other.hasValue()) {
          setValue(other.getValue());
        }
        if (other.hasTimestamp()) {
          setTimestamp(other.getTimestamp());
        }
        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.Metric parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.mlflow.api.proto.Service.Metric) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object key_ = "";
      /**
       * <pre>
       * Key identifying this metric.
       * </pre>
       *
       * <code>optional string key = 1;</code>
       */
      public boolean hasKey() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * Key identifying this metric.
       * </pre>
       *
       * <code>optional string key = 1;</code>
       */
      public java.lang.String getKey() {
        java.lang.Object ref = key_;
        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()) {
            key_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Key identifying this metric.
       * </pre>
       *
       * <code>optional string key = 1;</code>
       */
      public com.google.protobuf.ByteString
          getKeyBytes() {
        java.lang.Object ref = key_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          key_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Key identifying this metric.
       * </pre>
       *
       * <code>optional string key = 1;</code>
       */
      public Builder setKey(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        key_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Key identifying this metric.
       * </pre>
       *
       * <code>optional string key = 1;</code>
       */
      public Builder clearKey() {
        bitField0_ = (bitField0_ & ~0x00000001);
        key_ = getDefaultInstance().getKey();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Key identifying this metric.
       * </pre>
       *
       * <code>optional string key = 1;</code>
       */
      public Builder setKeyBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        key_ = value;
        onChanged();
        return this;
      }

      private double value_ ;
      /**
       * <pre>
       * Value associated with this metric.
       * </pre>
       *
       * <code>optional double value = 2;</code>
       */
      public boolean hasValue() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * Value associated with this metric.
       * </pre>
       *
       * <code>optional double value = 2;</code>
       */
      public double getValue() {
        return value_;
      }
      /**
       * <pre>
       * Value associated with this metric.
       * </pre>
       *
       * <code>optional double value = 2;</code>
       */
      public Builder setValue(double value) {
        bitField0_ |= 0x00000002;
        value_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Value associated with this metric.
       * </pre>
       *
       * <code>optional double value = 2;</code>
       */
      public Builder clearValue() {
        bitField0_ = (bitField0_ & ~0x00000002);
        value_ = 0D;
        onChanged();
        return this;
      }

      private long timestamp_ ;
      /**
       * <pre>
       * The timestamp at which this metric was recorded.
       * </pre>
       *
       * <code>optional int64 timestamp = 3;</code>
       */
      public boolean hasTimestamp() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <pre>
       * The timestamp at which this metric was recorded.
       * </pre>
       *
       * <code>optional int64 timestamp = 3;</code>
       */
      public long getTimestamp() {
        return timestamp_;
      }
      /**
       * <pre>
       * The timestamp at which this metric was recorded.
       * </pre>
       *
       * <code>optional int64 timestamp = 3;</code>
       */
      public Builder setTimestamp(long value) {
        bitField0_ |= 0x00000004;
        timestamp_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The timestamp at which this metric was recorded.
       * </pre>
       *
       * <code>optional int64 timestamp = 3;</code>
       */
      public Builder clearTimestamp() {
        bitField0_ = (bitField0_ & ~0x00000004);
        timestamp_ = 0L;
        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.Metric)
    }

    // @@protoc_insertion_point(class_scope:mlflow.Metric)
    private static final org.mlflow.api.proto.Service.Metric DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.Metric();
    }

    public static org.mlflow.api.proto.Service.Metric getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<Metric>
        PARSER = new com.google.protobuf.AbstractParser<Metric>() {
      @java.lang.Override
      public Metric parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Metric(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<Metric> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<Metric> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public org.mlflow.api.proto.Service.Metric getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ParamOrBuilder extends
      // @@protoc_insertion_point(interface_extends:mlflow.Param)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Key identifying this param.
     * </pre>
     *
     * <code>optional string key = 1;</code>
     */
    boolean hasKey();
    /**
     * <pre>
     * Key identifying this param.
     * </pre>
     *
     * <code>optional string key = 1;</code>
     */
    java.lang.String getKey();
    /**
     * <pre>
     * Key identifying this param.
     * </pre>
     *
     * <code>optional string key = 1;</code>
     */
    com.google.protobuf.ByteString
        getKeyBytes();

    /**
     * <pre>
     * Value associated with this param.
     * </pre>
     *
     * <code>optional string value = 2;</code>
     */
    boolean hasValue();
    /**
     * <pre>
     * Value associated with this param.
     * </pre>
     *
     * <code>optional string value = 2;</code>
     */
    java.lang.String getValue();
    /**
     * <pre>
     * Value associated with this param.
     * </pre>
     *
     * <code>optional string value = 2;</code>
     */
    com.google.protobuf.ByteString
        getValueBytes();
  }
  /**
   * <pre>
   * Param associated with a run.
   * </pre>
   *
   * Protobuf type {@code mlflow.Param}
   */
  public  static final class Param extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:mlflow.Param)
      ParamOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Param.newBuilder() to construct.
    private Param(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Param() {
      key_ = "";
      value_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Param(
        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;
              key_ = bs;
              break;
            }
            case 18: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000002;
              value_ = 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_Param_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.mlflow.api.proto.Service.internal_static_mlflow_Param_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.mlflow.api.proto.Service.Param.class, org.mlflow.api.proto.Service.Param.Builder.class);
    }

    private int bitField0_;
    public static final int KEY_FIELD_NUMBER = 1;
    private volatile java.lang.Object key_;
    /**
     * <pre>
     * Key identifying this param.
     * </pre>
     *
     * <code>optional string key = 1;</code>
     */
    public boolean hasKey() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * Key identifying this param.
     * </pre>
     *
     * <code>optional string key = 1;</code>
     */
    public java.lang.String getKey() {
      java.lang.Object ref = key_;
      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()) {
          key_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Key identifying this param.
     * </pre>
     *
     * <code>optional string key = 1;</code>
     */
    public com.google.protobuf.ByteString
        getKeyBytes() {
      java.lang.Object ref = key_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        key_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int VALUE_FIELD_NUMBER = 2;
    private volatile java.lang.Object value_;
    /**
     * <pre>
     * Value associated with this param.
     * </pre>
     *
     * <code>optional string value = 2;</code>
     */
    public boolean hasValue() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     * Value associated with this param.
     * </pre>
     *
     * <code>optional string value = 2;</code>
     */
    public java.lang.String getValue() {
      java.lang.Object ref = value_;
      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()) {
          value_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Value associated with this param.
     * </pre>
     *
     * <code>optional string value = 2;</code>
     */
    public com.google.protobuf.ByteString
        getValueBytes() {
      java.lang.Object ref = value_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        value_ = 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) == 0x00000001)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, key_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, value_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, key_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, value_);
      }
      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.Param)) {
        return super.equals(obj);
      }
      org.mlflow.api.proto.Service.Param other = (org.mlflow.api.proto.Service.Param) obj;

      boolean result = true;
      result = result && (hasKey() == other.hasKey());
      if (hasKey()) {
        result = result && getKey()
            .equals(other.getKey());
      }
      result = result && (hasValue() == other.hasValue());
      if (hasValue()) {
        result = result && getValue()
            .equals(other.getValue());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasKey()) {
        hash = (37 * hash) + KEY_FIELD_NUMBER;
        hash = (53 * hash) + getKey().hashCode();
      }
      if (hasValue()) {
        hash = (37 * hash) + VALUE_FIELD_NUMBER;
        hash = (53 * hash) + getValue().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.mlflow.api.proto.Service.Param parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.Param 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.Param parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.Param 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.Param parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.Param 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.Param parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.Param 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.Param parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.Param 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.Param 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.Param 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.Param 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;
    }
    /**
     * <pre>
     * Param associated with a run.
     * </pre>
     *
     * Protobuf type {@code mlflow.Param}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:mlflow.Param)
        org.mlflow.api.proto.Service.ParamOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_Param_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_Param_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.Param.class, org.mlflow.api.proto.Service.Param.Builder.class);
      }

      // Construct using org.mlflow.api.proto.Service.Param.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();
        key_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        value_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_Param_descriptor;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.Param getDefaultInstanceForType() {
        return org.mlflow.api.proto.Service.Param.getDefaultInstance();
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.Param build() {
        org.mlflow.api.proto.Service.Param result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.Param buildPartial() {
        org.mlflow.api.proto.Service.Param result = new org.mlflow.api.proto.Service.Param(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.key_ = key_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.value_ = value_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.mlflow.api.proto.Service.Param) {
          return mergeFrom((org.mlflow.api.proto.Service.Param)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.mlflow.api.proto.Service.Param other) {
        if (other == org.mlflow.api.proto.Service.Param.getDefaultInstance()) return this;
        if (other.hasKey()) {
          bitField0_ |= 0x00000001;
          key_ = other.key_;
          onChanged();
        }
        if (other.hasValue()) {
          bitField0_ |= 0x00000002;
          value_ = other.value_;
          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.Param parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.mlflow.api.proto.Service.Param) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object key_ = "";
      /**
       * <pre>
       * Key identifying this param.
       * </pre>
       *
       * <code>optional string key = 1;</code>
       */
      public boolean hasKey() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * Key identifying this param.
       * </pre>
       *
       * <code>optional string key = 1;</code>
       */
      public java.lang.String getKey() {
        java.lang.Object ref = key_;
        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()) {
            key_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Key identifying this param.
       * </pre>
       *
       * <code>optional string key = 1;</code>
       */
      public com.google.protobuf.ByteString
          getKeyBytes() {
        java.lang.Object ref = key_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          key_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Key identifying this param.
       * </pre>
       *
       * <code>optional string key = 1;</code>
       */
      public Builder setKey(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        key_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Key identifying this param.
       * </pre>
       *
       * <code>optional string key = 1;</code>
       */
      public Builder clearKey() {
        bitField0_ = (bitField0_ & ~0x00000001);
        key_ = getDefaultInstance().getKey();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Key identifying this param.
       * </pre>
       *
       * <code>optional string key = 1;</code>
       */
      public Builder setKeyBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        key_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object value_ = "";
      /**
       * <pre>
       * Value associated with this param.
       * </pre>
       *
       * <code>optional string value = 2;</code>
       */
      public boolean hasValue() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * Value associated with this param.
       * </pre>
       *
       * <code>optional string value = 2;</code>
       */
      public java.lang.String getValue() {
        java.lang.Object ref = value_;
        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()) {
            value_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Value associated with this param.
       * </pre>
       *
       * <code>optional string value = 2;</code>
       */
      public com.google.protobuf.ByteString
          getValueBytes() {
        java.lang.Object ref = value_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          value_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Value associated with this param.
       * </pre>
       *
       * <code>optional string value = 2;</code>
       */
      public Builder setValue(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        value_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Value associated with this param.
       * </pre>
       *
       * <code>optional string value = 2;</code>
       */
      public Builder clearValue() {
        bitField0_ = (bitField0_ & ~0x00000002);
        value_ = getDefaultInstance().getValue();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Value associated with this param.
       * </pre>
       *
       * <code>optional string value = 2;</code>
       */
      public Builder setValueBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        value_ = 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.Param)
    }

    // @@protoc_insertion_point(class_scope:mlflow.Param)
    private static final org.mlflow.api.proto.Service.Param DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.Param();
    }

    public static org.mlflow.api.proto.Service.Param getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<Param>
        PARSER = new com.google.protobuf.AbstractParser<Param>() {
      @java.lang.Override
      public Param parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Param(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<Param> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<Param> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public org.mlflow.api.proto.Service.Param getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface RunOrBuilder extends
      // @@protoc_insertion_point(interface_extends:mlflow.Run)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Run metadata.
     * </pre>
     *
     * <code>optional .mlflow.RunInfo info = 1;</code>
     */
    boolean hasInfo();
    /**
     * <pre>
     * Run metadata.
     * </pre>
     *
     * <code>optional .mlflow.RunInfo info = 1;</code>
     */
    org.mlflow.api.proto.Service.RunInfo getInfo();
    /**
     * <pre>
     * Run metadata.
     * </pre>
     *
     * <code>optional .mlflow.RunInfo info = 1;</code>
     */
    org.mlflow.api.proto.Service.RunInfoOrBuilder getInfoOrBuilder();

    /**
     * <pre>
     * Run data.
     * </pre>
     *
     * <code>optional .mlflow.RunData data = 2;</code>
     */
    boolean hasData();
    /**
     * <pre>
     * Run data.
     * </pre>
     *
     * <code>optional .mlflow.RunData data = 2;</code>
     */
    org.mlflow.api.proto.Service.RunData getData();
    /**
     * <pre>
     * Run data.
     * </pre>
     *
     * <code>optional .mlflow.RunData data = 2;</code>
     */
    org.mlflow.api.proto.Service.RunDataOrBuilder getDataOrBuilder();
  }
  /**
   * <pre>
   * A single run.
   * </pre>
   *
   * Protobuf type {@code mlflow.Run}
   */
  public  static final class Run extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:mlflow.Run)
      RunOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Run.newBuilder() to construct.
    private Run(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Run() {
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Run(
        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.RunInfo.Builder subBuilder = null;
              if (((bitField0_ & 0x00000001) == 0x00000001)) {
                subBuilder = info_.toBuilder();
              }
              info_ = input.readMessage(org.mlflow.api.proto.Service.RunInfo.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(info_);
                info_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000001;
              break;
            }
            case 18: {
              org.mlflow.api.proto.Service.RunData.Builder subBuilder = null;
              if (((bitField0_ & 0x00000002) == 0x00000002)) {
                subBuilder = data_.toBuilder();
              }
              data_ = input.readMessage(org.mlflow.api.proto.Service.RunData.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom(data_);
                data_ = subBuilder.buildPartial();
              }
              bitField0_ |= 0x00000002;
              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_Run_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.mlflow.api.proto.Service.internal_static_mlflow_Run_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.mlflow.api.proto.Service.Run.class, org.mlflow.api.proto.Service.Run.Builder.class);
    }

    private int bitField0_;
    public static final int INFO_FIELD_NUMBER = 1;
    private org.mlflow.api.proto.Service.RunInfo info_;
    /**
     * <pre>
     * Run metadata.
     * </pre>
     *
     * <code>optional .mlflow.RunInfo info = 1;</code>
     */
    public boolean hasInfo() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * Run metadata.
     * </pre>
     *
     * <code>optional .mlflow.RunInfo info = 1;</code>
     */
    public org.mlflow.api.proto.Service.RunInfo getInfo() {
      return info_ == null ? org.mlflow.api.proto.Service.RunInfo.getDefaultInstance() : info_;
    }
    /**
     * <pre>
     * Run metadata.
     * </pre>
     *
     * <code>optional .mlflow.RunInfo info = 1;</code>
     */
    public org.mlflow.api.proto.Service.RunInfoOrBuilder getInfoOrBuilder() {
      return info_ == null ? org.mlflow.api.proto.Service.RunInfo.getDefaultInstance() : info_;
    }

    public static final int DATA_FIELD_NUMBER = 2;
    private org.mlflow.api.proto.Service.RunData data_;
    /**
     * <pre>
     * Run data.
     * </pre>
     *
     * <code>optional .mlflow.RunData data = 2;</code>
     */
    public boolean hasData() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     * Run data.
     * </pre>
     *
     * <code>optional .mlflow.RunData data = 2;</code>
     */
    public org.mlflow.api.proto.Service.RunData getData() {
      return data_ == null ? org.mlflow.api.proto.Service.RunData.getDefaultInstance() : data_;
    }
    /**
     * <pre>
     * Run data.
     * </pre>
     *
     * <code>optional .mlflow.RunData data = 2;</code>
     */
    public org.mlflow.api.proto.Service.RunDataOrBuilder getDataOrBuilder() {
      return data_ == null ? org.mlflow.api.proto.Service.RunData.getDefaultInstance() : data_;
    }

    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) == 0x00000001)) {
        output.writeMessage(1, getInfo());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeMessage(2, getData());
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, getInfo());
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, getData());
      }
      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.Run)) {
        return super.equals(obj);
      }
      org.mlflow.api.proto.Service.Run other = (org.mlflow.api.proto.Service.Run) obj;

      boolean result = true;
      result = result && (hasInfo() == other.hasInfo());
      if (hasInfo()) {
        result = result && getInfo()
            .equals(other.getInfo());
      }
      result = result && (hasData() == other.hasData());
      if (hasData()) {
        result = result && getData()
            .equals(other.getData());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasInfo()) {
        hash = (37 * hash) + INFO_FIELD_NUMBER;
        hash = (53 * hash) + getInfo().hashCode();
      }
      if (hasData()) {
        hash = (37 * hash) + DATA_FIELD_NUMBER;
        hash = (53 * hash) + getData().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.mlflow.api.proto.Service.Run parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.Run 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.Run parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.Run 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.Run parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.Run 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.Run parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.Run 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.Run parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.Run 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.Run 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.Run 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.Run 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;
    }
    /**
     * <pre>
     * A single run.
     * </pre>
     *
     * Protobuf type {@code mlflow.Run}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:mlflow.Run)
        org.mlflow.api.proto.Service.RunOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_Run_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_Run_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.Run.class, org.mlflow.api.proto.Service.Run.Builder.class);
      }

      // Construct using org.mlflow.api.proto.Service.Run.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getInfoFieldBuilder();
          getDataFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (infoBuilder_ == null) {
          info_ = null;
        } else {
          infoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        if (dataBuilder_ == null) {
          data_ = null;
        } else {
          dataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_Run_descriptor;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.Run getDefaultInstanceForType() {
        return org.mlflow.api.proto.Service.Run.getDefaultInstance();
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.Run build() {
        org.mlflow.api.proto.Service.Run result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.Run buildPartial() {
        org.mlflow.api.proto.Service.Run result = new org.mlflow.api.proto.Service.Run(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        if (infoBuilder_ == null) {
          result.info_ = info_;
        } else {
          result.info_ = infoBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        if (dataBuilder_ == null) {
          result.data_ = data_;
        } else {
          result.data_ = dataBuilder_.build();
        }
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.mlflow.api.proto.Service.Run) {
          return mergeFrom((org.mlflow.api.proto.Service.Run)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.mlflow.api.proto.Service.Run other) {
        if (other == org.mlflow.api.proto.Service.Run.getDefaultInstance()) return this;
        if (other.hasInfo()) {
          mergeInfo(other.getInfo());
        }
        if (other.hasData()) {
          mergeData(other.getData());
        }
        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.Run parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.mlflow.api.proto.Service.Run) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private org.mlflow.api.proto.Service.RunInfo info_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          org.mlflow.api.proto.Service.RunInfo, org.mlflow.api.proto.Service.RunInfo.Builder, org.mlflow.api.proto.Service.RunInfoOrBuilder> infoBuilder_;
      /**
       * <pre>
       * Run metadata.
       * </pre>
       *
       * <code>optional .mlflow.RunInfo info = 1;</code>
       */
      public boolean hasInfo() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * Run metadata.
       * </pre>
       *
       * <code>optional .mlflow.RunInfo info = 1;</code>
       */
      public org.mlflow.api.proto.Service.RunInfo getInfo() {
        if (infoBuilder_ == null) {
          return info_ == null ? org.mlflow.api.proto.Service.RunInfo.getDefaultInstance() : info_;
        } else {
          return infoBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * Run metadata.
       * </pre>
       *
       * <code>optional .mlflow.RunInfo info = 1;</code>
       */
      public Builder setInfo(org.mlflow.api.proto.Service.RunInfo value) {
        if (infoBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          info_ = value;
          onChanged();
        } else {
          infoBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <pre>
       * Run metadata.
       * </pre>
       *
       * <code>optional .mlflow.RunInfo info = 1;</code>
       */
      public Builder setInfo(
          org.mlflow.api.proto.Service.RunInfo.Builder builderForValue) {
        if (infoBuilder_ == null) {
          info_ = builderForValue.build();
          onChanged();
        } else {
          infoBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <pre>
       * Run metadata.
       * </pre>
       *
       * <code>optional .mlflow.RunInfo info = 1;</code>
       */
      public Builder mergeInfo(org.mlflow.api.proto.Service.RunInfo value) {
        if (infoBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001) &&
              info_ != null &&
              info_ != org.mlflow.api.proto.Service.RunInfo.getDefaultInstance()) {
            info_ =
              org.mlflow.api.proto.Service.RunInfo.newBuilder(info_).mergeFrom(value).buildPartial();
          } else {
            info_ = value;
          }
          onChanged();
        } else {
          infoBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000001;
        return this;
      }
      /**
       * <pre>
       * Run metadata.
       * </pre>
       *
       * <code>optional .mlflow.RunInfo info = 1;</code>
       */
      public Builder clearInfo() {
        if (infoBuilder_ == null) {
          info_ = null;
          onChanged();
        } else {
          infoBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }
      /**
       * <pre>
       * Run metadata.
       * </pre>
       *
       * <code>optional .mlflow.RunInfo info = 1;</code>
       */
      public org.mlflow.api.proto.Service.RunInfo.Builder getInfoBuilder() {
        bitField0_ |= 0x00000001;
        onChanged();
        return getInfoFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Run metadata.
       * </pre>
       *
       * <code>optional .mlflow.RunInfo info = 1;</code>
       */
      public org.mlflow.api.proto.Service.RunInfoOrBuilder getInfoOrBuilder() {
        if (infoBuilder_ != null) {
          return infoBuilder_.getMessageOrBuilder();
        } else {
          return info_ == null ?
              org.mlflow.api.proto.Service.RunInfo.getDefaultInstance() : info_;
        }
      }
      /**
       * <pre>
       * Run metadata.
       * </pre>
       *
       * <code>optional .mlflow.RunInfo info = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          org.mlflow.api.proto.Service.RunInfo, org.mlflow.api.proto.Service.RunInfo.Builder, org.mlflow.api.proto.Service.RunInfoOrBuilder> 
          getInfoFieldBuilder() {
        if (infoBuilder_ == null) {
          infoBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              org.mlflow.api.proto.Service.RunInfo, org.mlflow.api.proto.Service.RunInfo.Builder, org.mlflow.api.proto.Service.RunInfoOrBuilder>(
                  getInfo(),
                  getParentForChildren(),
                  isClean());
          info_ = null;
        }
        return infoBuilder_;
      }

      private org.mlflow.api.proto.Service.RunData data_ = null;
      private com.google.protobuf.SingleFieldBuilderV3<
          org.mlflow.api.proto.Service.RunData, org.mlflow.api.proto.Service.RunData.Builder, org.mlflow.api.proto.Service.RunDataOrBuilder> dataBuilder_;
      /**
       * <pre>
       * Run data.
       * </pre>
       *
       * <code>optional .mlflow.RunData data = 2;</code>
       */
      public boolean hasData() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * Run data.
       * </pre>
       *
       * <code>optional .mlflow.RunData data = 2;</code>
       */
      public org.mlflow.api.proto.Service.RunData getData() {
        if (dataBuilder_ == null) {
          return data_ == null ? org.mlflow.api.proto.Service.RunData.getDefaultInstance() : data_;
        } else {
          return dataBuilder_.getMessage();
        }
      }
      /**
       * <pre>
       * Run data.
       * </pre>
       *
       * <code>optional .mlflow.RunData data = 2;</code>
       */
      public Builder setData(org.mlflow.api.proto.Service.RunData value) {
        if (dataBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          data_ = value;
          onChanged();
        } else {
          dataBuilder_.setMessage(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <pre>
       * Run data.
       * </pre>
       *
       * <code>optional .mlflow.RunData data = 2;</code>
       */
      public Builder setData(
          org.mlflow.api.proto.Service.RunData.Builder builderForValue) {
        if (dataBuilder_ == null) {
          data_ = builderForValue.build();
          onChanged();
        } else {
          dataBuilder_.setMessage(builderForValue.build());
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <pre>
       * Run data.
       * </pre>
       *
       * <code>optional .mlflow.RunData data = 2;</code>
       */
      public Builder mergeData(org.mlflow.api.proto.Service.RunData value) {
        if (dataBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002) &&
              data_ != null &&
              data_ != org.mlflow.api.proto.Service.RunData.getDefaultInstance()) {
            data_ =
              org.mlflow.api.proto.Service.RunData.newBuilder(data_).mergeFrom(value).buildPartial();
          } else {
            data_ = value;
          }
          onChanged();
        } else {
          dataBuilder_.mergeFrom(value);
        }
        bitField0_ |= 0x00000002;
        return this;
      }
      /**
       * <pre>
       * Run data.
       * </pre>
       *
       * <code>optional .mlflow.RunData data = 2;</code>
       */
      public Builder clearData() {
        if (dataBuilder_ == null) {
          data_ = null;
          onChanged();
        } else {
          dataBuilder_.clear();
        }
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }
      /**
       * <pre>
       * Run data.
       * </pre>
       *
       * <code>optional .mlflow.RunData data = 2;</code>
       */
      public org.mlflow.api.proto.Service.RunData.Builder getDataBuilder() {
        bitField0_ |= 0x00000002;
        onChanged();
        return getDataFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Run data.
       * </pre>
       *
       * <code>optional .mlflow.RunData data = 2;</code>
       */
      public org.mlflow.api.proto.Service.RunDataOrBuilder getDataOrBuilder() {
        if (dataBuilder_ != null) {
          return dataBuilder_.getMessageOrBuilder();
        } else {
          return data_ == null ?
              org.mlflow.api.proto.Service.RunData.getDefaultInstance() : data_;
        }
      }
      /**
       * <pre>
       * Run data.
       * </pre>
       *
       * <code>optional .mlflow.RunData data = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          org.mlflow.api.proto.Service.RunData, org.mlflow.api.proto.Service.RunData.Builder, org.mlflow.api.proto.Service.RunDataOrBuilder> 
          getDataFieldBuilder() {
        if (dataBuilder_ == null) {
          dataBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              org.mlflow.api.proto.Service.RunData, org.mlflow.api.proto.Service.RunData.Builder, org.mlflow.api.proto.Service.RunDataOrBuilder>(
                  getData(),
                  getParentForChildren(),
                  isClean());
          data_ = null;
        }
        return dataBuilder_;
      }
      @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.Run)
    }

    // @@protoc_insertion_point(class_scope:mlflow.Run)
    private static final org.mlflow.api.proto.Service.Run DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.Run();
    }

    public static org.mlflow.api.proto.Service.Run getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<Run>
        PARSER = new com.google.protobuf.AbstractParser<Run>() {
      @java.lang.Override
      public Run parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Run(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<Run> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<Run> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public org.mlflow.api.proto.Service.Run getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface RunDataOrBuilder extends
      // @@protoc_insertion_point(interface_extends:mlflow.RunData)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Run metrics.
     * </pre>
     *
     * <code>repeated .mlflow.Metric metrics = 1;</code>
     */
    java.util.List<org.mlflow.api.proto.Service.Metric> 
        getMetricsList();
    /**
     * <pre>
     * Run metrics.
     * </pre>
     *
     * <code>repeated .mlflow.Metric metrics = 1;</code>
     */
    org.mlflow.api.proto.Service.Metric getMetrics(int index);
    /**
     * <pre>
     * Run metrics.
     * </pre>
     *
     * <code>repeated .mlflow.Metric metrics = 1;</code>
     */
    int getMetricsCount();
    /**
     * <pre>
     * Run metrics.
     * </pre>
     *
     * <code>repeated .mlflow.Metric metrics = 1;</code>
     */
    java.util.List<? extends org.mlflow.api.proto.Service.MetricOrBuilder> 
        getMetricsOrBuilderList();
    /**
     * <pre>
     * Run metrics.
     * </pre>
     *
     * <code>repeated .mlflow.Metric metrics = 1;</code>
     */
    org.mlflow.api.proto.Service.MetricOrBuilder getMetricsOrBuilder(
        int index);

    /**
     * <pre>
     * Run parameters.
     * </pre>
     *
     * <code>repeated .mlflow.Param params = 2;</code>
     */
    java.util.List<org.mlflow.api.proto.Service.Param> 
        getParamsList();
    /**
     * <pre>
     * Run parameters.
     * </pre>
     *
     * <code>repeated .mlflow.Param params = 2;</code>
     */
    org.mlflow.api.proto.Service.Param getParams(int index);
    /**
     * <pre>
     * Run parameters.
     * </pre>
     *
     * <code>repeated .mlflow.Param params = 2;</code>
     */
    int getParamsCount();
    /**
     * <pre>
     * Run parameters.
     * </pre>
     *
     * <code>repeated .mlflow.Param params = 2;</code>
     */
    java.util.List<? extends org.mlflow.api.proto.Service.ParamOrBuilder> 
        getParamsOrBuilderList();
    /**
     * <pre>
     * Run parameters.
     * </pre>
     *
     * <code>repeated .mlflow.Param params = 2;</code>
     */
    org.mlflow.api.proto.Service.ParamOrBuilder getParamsOrBuilder(
        int index);

    /**
     * <pre>
     * Additional metadata key-value pairs.
     * </pre>
     *
     * <code>repeated .mlflow.RunTag tags = 3;</code>
     */
    java.util.List<org.mlflow.api.proto.Service.RunTag> 
        getTagsList();
    /**
     * <pre>
     * Additional metadata key-value pairs.
     * </pre>
     *
     * <code>repeated .mlflow.RunTag tags = 3;</code>
     */
    org.mlflow.api.proto.Service.RunTag getTags(int index);
    /**
     * <pre>
     * Additional metadata key-value pairs.
     * </pre>
     *
     * <code>repeated .mlflow.RunTag tags = 3;</code>
     */
    int getTagsCount();
    /**
     * <pre>
     * Additional metadata key-value pairs.
     * </pre>
     *
     * <code>repeated .mlflow.RunTag tags = 3;</code>
     */
    java.util.List<? extends org.mlflow.api.proto.Service.RunTagOrBuilder> 
        getTagsOrBuilderList();
    /**
     * <pre>
     * Additional metadata key-value pairs.
     * </pre>
     *
     * <code>repeated .mlflow.RunTag tags = 3;</code>
     */
    org.mlflow.api.proto.Service.RunTagOrBuilder getTagsOrBuilder(
        int index);
  }
  /**
   * <pre>
   * Run data (metrics, params, etc).
   * </pre>
   *
   * Protobuf type {@code mlflow.RunData}
   */
  public  static final class RunData extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:mlflow.RunData)
      RunDataOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use RunData.newBuilder() to construct.
    private RunData(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private RunData() {
      metrics_ = java.util.Collections.emptyList();
      params_ = java.util.Collections.emptyList();
      tags_ = java.util.Collections.emptyList();
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private RunData(
        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) == 0x00000001)) {
                metrics_ = new java.util.ArrayList<org.mlflow.api.proto.Service.Metric>();
                mutable_bitField0_ |= 0x00000001;
              }
              metrics_.add(
                  input.readMessage(org.mlflow.api.proto.Service.Metric.PARSER, extensionRegistry));
              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                params_ = new java.util.ArrayList<org.mlflow.api.proto.Service.Param>();
                mutable_bitField0_ |= 0x00000002;
              }
              params_.add(
                  input.readMessage(org.mlflow.api.proto.Service.Param.PARSER, extensionRegistry));
              break;
            }
            case 26: {
              if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
                tags_ = new java.util.ArrayList<org.mlflow.api.proto.Service.RunTag>();
                mutable_bitField0_ |= 0x00000004;
              }
              tags_.add(
                  input.readMessage(org.mlflow.api.proto.Service.RunTag.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) == 0x00000001)) {
          metrics_ = java.util.Collections.unmodifiableList(metrics_);
        }
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          params_ = java.util.Collections.unmodifiableList(params_);
        }
        if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) {
          tags_ = java.util.Collections.unmodifiableList(tags_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.mlflow.api.proto.Service.internal_static_mlflow_RunData_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.mlflow.api.proto.Service.internal_static_mlflow_RunData_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.mlflow.api.proto.Service.RunData.class, org.mlflow.api.proto.Service.RunData.Builder.class);
    }

    public static final int METRICS_FIELD_NUMBER = 1;
    private java.util.List<org.mlflow.api.proto.Service.Metric> metrics_;
    /**
     * <pre>
     * Run metrics.
     * </pre>
     *
     * <code>repeated .mlflow.Metric metrics = 1;</code>
     */
    public java.util.List<org.mlflow.api.proto.Service.Metric> getMetricsList() {
      return metrics_;
    }
    /**
     * <pre>
     * Run metrics.
     * </pre>
     *
     * <code>repeated .mlflow.Metric metrics = 1;</code>
     */
    public java.util.List<? extends org.mlflow.api.proto.Service.MetricOrBuilder> 
        getMetricsOrBuilderList() {
      return metrics_;
    }
    /**
     * <pre>
     * Run metrics.
     * </pre>
     *
     * <code>repeated .mlflow.Metric metrics = 1;</code>
     */
    public int getMetricsCount() {
      return metrics_.size();
    }
    /**
     * <pre>
     * Run metrics.
     * </pre>
     *
     * <code>repeated .mlflow.Metric metrics = 1;</code>
     */
    public org.mlflow.api.proto.Service.Metric getMetrics(int index) {
      return metrics_.get(index);
    }
    /**
     * <pre>
     * Run metrics.
     * </pre>
     *
     * <code>repeated .mlflow.Metric metrics = 1;</code>
     */
    public org.mlflow.api.proto.Service.MetricOrBuilder getMetricsOrBuilder(
        int index) {
      return metrics_.get(index);
    }

    public static final int PARAMS_FIELD_NUMBER = 2;
    private java.util.List<org.mlflow.api.proto.Service.Param> params_;
    /**
     * <pre>
     * Run parameters.
     * </pre>
     *
     * <code>repeated .mlflow.Param params = 2;</code>
     */
    public java.util.List<org.mlflow.api.proto.Service.Param> getParamsList() {
      return params_;
    }
    /**
     * <pre>
     * Run parameters.
     * </pre>
     *
     * <code>repeated .mlflow.Param params = 2;</code>
     */
    public java.util.List<? extends org.mlflow.api.proto.Service.ParamOrBuilder> 
        getParamsOrBuilderList() {
      return params_;
    }
    /**
     * <pre>
     * Run parameters.
     * </pre>
     *
     * <code>repeated .mlflow.Param params = 2;</code>
     */
    public int getParamsCount() {
      return params_.size();
    }
    /**
     * <pre>
     * Run parameters.
     * </pre>
     *
     * <code>repeated .mlflow.Param params = 2;</code>
     */
    public org.mlflow.api.proto.Service.Param getParams(int index) {
      return params_.get(index);
    }
    /**
     * <pre>
     * Run parameters.
     * </pre>
     *
     * <code>repeated .mlflow.Param params = 2;</code>
     */
    public org.mlflow.api.proto.Service.ParamOrBuilder getParamsOrBuilder(
        int index) {
      return params_.get(index);
    }

    public static final int TAGS_FIELD_NUMBER = 3;
    private java.util.List<org.mlflow.api.proto.Service.RunTag> tags_;
    /**
     * <pre>
     * Additional metadata key-value pairs.
     * </pre>
     *
     * <code>repeated .mlflow.RunTag tags = 3;</code>
     */
    public java.util.List<org.mlflow.api.proto.Service.RunTag> getTagsList() {
      return tags_;
    }
    /**
     * <pre>
     * Additional metadata key-value pairs.
     * </pre>
     *
     * <code>repeated .mlflow.RunTag tags = 3;</code>
     */
    public java.util.List<? extends org.mlflow.api.proto.Service.RunTagOrBuilder> 
        getTagsOrBuilderList() {
      return tags_;
    }
    /**
     * <pre>
     * Additional metadata key-value pairs.
     * </pre>
     *
     * <code>repeated .mlflow.RunTag tags = 3;</code>
     */
    public int getTagsCount() {
      return tags_.size();
    }
    /**
     * <pre>
     * Additional metadata key-value pairs.
     * </pre>
     *
     * <code>repeated .mlflow.RunTag tags = 3;</code>
     */
    public org.mlflow.api.proto.Service.RunTag getTags(int index) {
      return tags_.get(index);
    }
    /**
     * <pre>
     * Additional metadata key-value pairs.
     * </pre>
     *
     * <code>repeated .mlflow.RunTag tags = 3;</code>
     */
    public org.mlflow.api.proto.Service.RunTagOrBuilder getTagsOrBuilder(
        int index) {
      return tags_.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 < metrics_.size(); i++) {
        output.writeMessage(1, metrics_.get(i));
      }
      for (int i = 0; i < params_.size(); i++) {
        output.writeMessage(2, params_.get(i));
      }
      for (int i = 0; i < tags_.size(); i++) {
        output.writeMessage(3, tags_.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 < metrics_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, metrics_.get(i));
      }
      for (int i = 0; i < params_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, params_.get(i));
      }
      for (int i = 0; i < tags_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, tags_.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.RunData)) {
        return super.equals(obj);
      }
      org.mlflow.api.proto.Service.RunData other = (org.mlflow.api.proto.Service.RunData) obj;

      boolean result = true;
      result = result && getMetricsList()
          .equals(other.getMetricsList());
      result = result && getParamsList()
          .equals(other.getParamsList());
      result = result && getTagsList()
          .equals(other.getTagsList());
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getMetricsCount() > 0) {
        hash = (37 * hash) + METRICS_FIELD_NUMBER;
        hash = (53 * hash) + getMetricsList().hashCode();
      }
      if (getParamsCount() > 0) {
        hash = (37 * hash) + PARAMS_FIELD_NUMBER;
        hash = (53 * hash) + getParamsList().hashCode();
      }
      if (getTagsCount() > 0) {
        hash = (37 * hash) + TAGS_FIELD_NUMBER;
        hash = (53 * hash) + getTagsList().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.mlflow.api.proto.Service.RunData parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.RunData 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.RunData parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.RunData 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.RunData parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.RunData 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.RunData parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.RunData 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.RunData parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.RunData 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.RunData 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.RunData 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.RunData 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;
    }
    /**
     * <pre>
     * Run data (metrics, params, etc).
     * </pre>
     *
     * Protobuf type {@code mlflow.RunData}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:mlflow.RunData)
        org.mlflow.api.proto.Service.RunDataOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_RunData_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_RunData_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.RunData.class, org.mlflow.api.proto.Service.RunData.Builder.class);
      }

      // Construct using org.mlflow.api.proto.Service.RunData.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getMetricsFieldBuilder();
          getParamsFieldBuilder();
          getTagsFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        if (metricsBuilder_ == null) {
          metrics_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
        } else {
          metricsBuilder_.clear();
        }
        if (paramsBuilder_ == null) {
          params_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          paramsBuilder_.clear();
        }
        if (tagsBuilder_ == null) {
          tags_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
        } else {
          tagsBuilder_.clear();
        }
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_RunData_descriptor;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.RunData getDefaultInstanceForType() {
        return org.mlflow.api.proto.Service.RunData.getDefaultInstance();
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.RunData build() {
        org.mlflow.api.proto.Service.RunData result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.RunData buildPartial() {
        org.mlflow.api.proto.Service.RunData result = new org.mlflow.api.proto.Service.RunData(this);
        int from_bitField0_ = bitField0_;
        if (metricsBuilder_ == null) {
          if (((bitField0_ & 0x00000001) == 0x00000001)) {
            metrics_ = java.util.Collections.unmodifiableList(metrics_);
            bitField0_ = (bitField0_ & ~0x00000001);
          }
          result.metrics_ = metrics_;
        } else {
          result.metrics_ = metricsBuilder_.build();
        }
        if (paramsBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            params_ = java.util.Collections.unmodifiableList(params_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.params_ = params_;
        } else {
          result.params_ = paramsBuilder_.build();
        }
        if (tagsBuilder_ == null) {
          if (((bitField0_ & 0x00000004) == 0x00000004)) {
            tags_ = java.util.Collections.unmodifiableList(tags_);
            bitField0_ = (bitField0_ & ~0x00000004);
          }
          result.tags_ = tags_;
        } else {
          result.tags_ = tagsBuilder_.build();
        }
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.mlflow.api.proto.Service.RunData) {
          return mergeFrom((org.mlflow.api.proto.Service.RunData)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.mlflow.api.proto.Service.RunData other) {
        if (other == org.mlflow.api.proto.Service.RunData.getDefaultInstance()) return this;
        if (metricsBuilder_ == null) {
          if (!other.metrics_.isEmpty()) {
            if (metrics_.isEmpty()) {
              metrics_ = other.metrics_;
              bitField0_ = (bitField0_ & ~0x00000001);
            } else {
              ensureMetricsIsMutable();
              metrics_.addAll(other.metrics_);
            }
            onChanged();
          }
        } else {
          if (!other.metrics_.isEmpty()) {
            if (metricsBuilder_.isEmpty()) {
              metricsBuilder_.dispose();
              metricsBuilder_ = null;
              metrics_ = other.metrics_;
              bitField0_ = (bitField0_ & ~0x00000001);
              metricsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getMetricsFieldBuilder() : null;
            } else {
              metricsBuilder_.addAllMessages(other.metrics_);
            }
          }
        }
        if (paramsBuilder_ == null) {
          if (!other.params_.isEmpty()) {
            if (params_.isEmpty()) {
              params_ = other.params_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureParamsIsMutable();
              params_.addAll(other.params_);
            }
            onChanged();
          }
        } else {
          if (!other.params_.isEmpty()) {
            if (paramsBuilder_.isEmpty()) {
              paramsBuilder_.dispose();
              paramsBuilder_ = null;
              params_ = other.params_;
              bitField0_ = (bitField0_ & ~0x00000002);
              paramsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getParamsFieldBuilder() : null;
            } else {
              paramsBuilder_.addAllMessages(other.params_);
            }
          }
        }
        if (tagsBuilder_ == null) {
          if (!other.tags_.isEmpty()) {
            if (tags_.isEmpty()) {
              tags_ = other.tags_;
              bitField0_ = (bitField0_ & ~0x00000004);
            } else {
              ensureTagsIsMutable();
              tags_.addAll(other.tags_);
            }
            onChanged();
          }
        } else {
          if (!other.tags_.isEmpty()) {
            if (tagsBuilder_.isEmpty()) {
              tagsBuilder_.dispose();
              tagsBuilder_ = null;
              tags_ = other.tags_;
              bitField0_ = (bitField0_ & ~0x00000004);
              tagsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getTagsFieldBuilder() : null;
            } else {
              tagsBuilder_.addAllMessages(other.tags_);
            }
          }
        }
        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.RunData parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.mlflow.api.proto.Service.RunData) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<org.mlflow.api.proto.Service.Metric> metrics_ =
        java.util.Collections.emptyList();
      private void ensureMetricsIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          metrics_ = new java.util.ArrayList<org.mlflow.api.proto.Service.Metric>(metrics_);
          bitField0_ |= 0x00000001;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.mlflow.api.proto.Service.Metric, org.mlflow.api.proto.Service.Metric.Builder, org.mlflow.api.proto.Service.MetricOrBuilder> metricsBuilder_;

      /**
       * <pre>
       * Run metrics.
       * </pre>
       *
       * <code>repeated .mlflow.Metric metrics = 1;</code>
       */
      public java.util.List<org.mlflow.api.proto.Service.Metric> getMetricsList() {
        if (metricsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(metrics_);
        } else {
          return metricsBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * Run metrics.
       * </pre>
       *
       * <code>repeated .mlflow.Metric metrics = 1;</code>
       */
      public int getMetricsCount() {
        if (metricsBuilder_ == null) {
          return metrics_.size();
        } else {
          return metricsBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * Run metrics.
       * </pre>
       *
       * <code>repeated .mlflow.Metric metrics = 1;</code>
       */
      public org.mlflow.api.proto.Service.Metric getMetrics(int index) {
        if (metricsBuilder_ == null) {
          return metrics_.get(index);
        } else {
          return metricsBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * Run metrics.
       * </pre>
       *
       * <code>repeated .mlflow.Metric metrics = 1;</code>
       */
      public Builder setMetrics(
          int index, org.mlflow.api.proto.Service.Metric value) {
        if (metricsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMetricsIsMutable();
          metrics_.set(index, value);
          onChanged();
        } else {
          metricsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Run metrics.
       * </pre>
       *
       * <code>repeated .mlflow.Metric metrics = 1;</code>
       */
      public Builder setMetrics(
          int index, org.mlflow.api.proto.Service.Metric.Builder builderForValue) {
        if (metricsBuilder_ == null) {
          ensureMetricsIsMutable();
          metrics_.set(index, builderForValue.build());
          onChanged();
        } else {
          metricsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Run metrics.
       * </pre>
       *
       * <code>repeated .mlflow.Metric metrics = 1;</code>
       */
      public Builder addMetrics(org.mlflow.api.proto.Service.Metric value) {
        if (metricsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMetricsIsMutable();
          metrics_.add(value);
          onChanged();
        } else {
          metricsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * Run metrics.
       * </pre>
       *
       * <code>repeated .mlflow.Metric metrics = 1;</code>
       */
      public Builder addMetrics(
          int index, org.mlflow.api.proto.Service.Metric value) {
        if (metricsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureMetricsIsMutable();
          metrics_.add(index, value);
          onChanged();
        } else {
          metricsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Run metrics.
       * </pre>
       *
       * <code>repeated .mlflow.Metric metrics = 1;</code>
       */
      public Builder addMetrics(
          org.mlflow.api.proto.Service.Metric.Builder builderForValue) {
        if (metricsBuilder_ == null) {
          ensureMetricsIsMutable();
          metrics_.add(builderForValue.build());
          onChanged();
        } else {
          metricsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Run metrics.
       * </pre>
       *
       * <code>repeated .mlflow.Metric metrics = 1;</code>
       */
      public Builder addMetrics(
          int index, org.mlflow.api.proto.Service.Metric.Builder builderForValue) {
        if (metricsBuilder_ == null) {
          ensureMetricsIsMutable();
          metrics_.add(index, builderForValue.build());
          onChanged();
        } else {
          metricsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Run metrics.
       * </pre>
       *
       * <code>repeated .mlflow.Metric metrics = 1;</code>
       */
      public Builder addAllMetrics(
          java.lang.Iterable<? extends org.mlflow.api.proto.Service.Metric> values) {
        if (metricsBuilder_ == null) {
          ensureMetricsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, metrics_);
          onChanged();
        } else {
          metricsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * Run metrics.
       * </pre>
       *
       * <code>repeated .mlflow.Metric metrics = 1;</code>
       */
      public Builder clearMetrics() {
        if (metricsBuilder_ == null) {
          metrics_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000001);
          onChanged();
        } else {
          metricsBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * Run metrics.
       * </pre>
       *
       * <code>repeated .mlflow.Metric metrics = 1;</code>
       */
      public Builder removeMetrics(int index) {
        if (metricsBuilder_ == null) {
          ensureMetricsIsMutable();
          metrics_.remove(index);
          onChanged();
        } else {
          metricsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * Run metrics.
       * </pre>
       *
       * <code>repeated .mlflow.Metric metrics = 1;</code>
       */
      public org.mlflow.api.proto.Service.Metric.Builder getMetricsBuilder(
          int index) {
        return getMetricsFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * Run metrics.
       * </pre>
       *
       * <code>repeated .mlflow.Metric metrics = 1;</code>
       */
      public org.mlflow.api.proto.Service.MetricOrBuilder getMetricsOrBuilder(
          int index) {
        if (metricsBuilder_ == null) {
          return metrics_.get(index);  } else {
          return metricsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * Run metrics.
       * </pre>
       *
       * <code>repeated .mlflow.Metric metrics = 1;</code>
       */
      public java.util.List<? extends org.mlflow.api.proto.Service.MetricOrBuilder> 
           getMetricsOrBuilderList() {
        if (metricsBuilder_ != null) {
          return metricsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(metrics_);
        }
      }
      /**
       * <pre>
       * Run metrics.
       * </pre>
       *
       * <code>repeated .mlflow.Metric metrics = 1;</code>
       */
      public org.mlflow.api.proto.Service.Metric.Builder addMetricsBuilder() {
        return getMetricsFieldBuilder().addBuilder(
            org.mlflow.api.proto.Service.Metric.getDefaultInstance());
      }
      /**
       * <pre>
       * Run metrics.
       * </pre>
       *
       * <code>repeated .mlflow.Metric metrics = 1;</code>
       */
      public org.mlflow.api.proto.Service.Metric.Builder addMetricsBuilder(
          int index) {
        return getMetricsFieldBuilder().addBuilder(
            index, org.mlflow.api.proto.Service.Metric.getDefaultInstance());
      }
      /**
       * <pre>
       * Run metrics.
       * </pre>
       *
       * <code>repeated .mlflow.Metric metrics = 1;</code>
       */
      public java.util.List<org.mlflow.api.proto.Service.Metric.Builder> 
           getMetricsBuilderList() {
        return getMetricsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.mlflow.api.proto.Service.Metric, org.mlflow.api.proto.Service.Metric.Builder, org.mlflow.api.proto.Service.MetricOrBuilder> 
          getMetricsFieldBuilder() {
        if (metricsBuilder_ == null) {
          metricsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              org.mlflow.api.proto.Service.Metric, org.mlflow.api.proto.Service.Metric.Builder, org.mlflow.api.proto.Service.MetricOrBuilder>(
                  metrics_,
                  ((bitField0_ & 0x00000001) == 0x00000001),
                  getParentForChildren(),
                  isClean());
          metrics_ = null;
        }
        return metricsBuilder_;
      }

      private java.util.List<org.mlflow.api.proto.Service.Param> params_ =
        java.util.Collections.emptyList();
      private void ensureParamsIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          params_ = new java.util.ArrayList<org.mlflow.api.proto.Service.Param>(params_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.mlflow.api.proto.Service.Param, org.mlflow.api.proto.Service.Param.Builder, org.mlflow.api.proto.Service.ParamOrBuilder> paramsBuilder_;

      /**
       * <pre>
       * Run parameters.
       * </pre>
       *
       * <code>repeated .mlflow.Param params = 2;</code>
       */
      public java.util.List<org.mlflow.api.proto.Service.Param> getParamsList() {
        if (paramsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(params_);
        } else {
          return paramsBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * Run parameters.
       * </pre>
       *
       * <code>repeated .mlflow.Param params = 2;</code>
       */
      public int getParamsCount() {
        if (paramsBuilder_ == null) {
          return params_.size();
        } else {
          return paramsBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * Run parameters.
       * </pre>
       *
       * <code>repeated .mlflow.Param params = 2;</code>
       */
      public org.mlflow.api.proto.Service.Param getParams(int index) {
        if (paramsBuilder_ == null) {
          return params_.get(index);
        } else {
          return paramsBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * Run parameters.
       * </pre>
       *
       * <code>repeated .mlflow.Param params = 2;</code>
       */
      public Builder setParams(
          int index, org.mlflow.api.proto.Service.Param value) {
        if (paramsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureParamsIsMutable();
          params_.set(index, value);
          onChanged();
        } else {
          paramsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Run parameters.
       * </pre>
       *
       * <code>repeated .mlflow.Param params = 2;</code>
       */
      public Builder setParams(
          int index, org.mlflow.api.proto.Service.Param.Builder builderForValue) {
        if (paramsBuilder_ == null) {
          ensureParamsIsMutable();
          params_.set(index, builderForValue.build());
          onChanged();
        } else {
          paramsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Run parameters.
       * </pre>
       *
       * <code>repeated .mlflow.Param params = 2;</code>
       */
      public Builder addParams(org.mlflow.api.proto.Service.Param value) {
        if (paramsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureParamsIsMutable();
          params_.add(value);
          onChanged();
        } else {
          paramsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * Run parameters.
       * </pre>
       *
       * <code>repeated .mlflow.Param params = 2;</code>
       */
      public Builder addParams(
          int index, org.mlflow.api.proto.Service.Param value) {
        if (paramsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureParamsIsMutable();
          params_.add(index, value);
          onChanged();
        } else {
          paramsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Run parameters.
       * </pre>
       *
       * <code>repeated .mlflow.Param params = 2;</code>
       */
      public Builder addParams(
          org.mlflow.api.proto.Service.Param.Builder builderForValue) {
        if (paramsBuilder_ == null) {
          ensureParamsIsMutable();
          params_.add(builderForValue.build());
          onChanged();
        } else {
          paramsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Run parameters.
       * </pre>
       *
       * <code>repeated .mlflow.Param params = 2;</code>
       */
      public Builder addParams(
          int index, org.mlflow.api.proto.Service.Param.Builder builderForValue) {
        if (paramsBuilder_ == null) {
          ensureParamsIsMutable();
          params_.add(index, builderForValue.build());
          onChanged();
        } else {
          paramsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Run parameters.
       * </pre>
       *
       * <code>repeated .mlflow.Param params = 2;</code>
       */
      public Builder addAllParams(
          java.lang.Iterable<? extends org.mlflow.api.proto.Service.Param> values) {
        if (paramsBuilder_ == null) {
          ensureParamsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, params_);
          onChanged();
        } else {
          paramsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * Run parameters.
       * </pre>
       *
       * <code>repeated .mlflow.Param params = 2;</code>
       */
      public Builder clearParams() {
        if (paramsBuilder_ == null) {
          params_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          paramsBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * Run parameters.
       * </pre>
       *
       * <code>repeated .mlflow.Param params = 2;</code>
       */
      public Builder removeParams(int index) {
        if (paramsBuilder_ == null) {
          ensureParamsIsMutable();
          params_.remove(index);
          onChanged();
        } else {
          paramsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * Run parameters.
       * </pre>
       *
       * <code>repeated .mlflow.Param params = 2;</code>
       */
      public org.mlflow.api.proto.Service.Param.Builder getParamsBuilder(
          int index) {
        return getParamsFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * Run parameters.
       * </pre>
       *
       * <code>repeated .mlflow.Param params = 2;</code>
       */
      public org.mlflow.api.proto.Service.ParamOrBuilder getParamsOrBuilder(
          int index) {
        if (paramsBuilder_ == null) {
          return params_.get(index);  } else {
          return paramsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * Run parameters.
       * </pre>
       *
       * <code>repeated .mlflow.Param params = 2;</code>
       */
      public java.util.List<? extends org.mlflow.api.proto.Service.ParamOrBuilder> 
           getParamsOrBuilderList() {
        if (paramsBuilder_ != null) {
          return paramsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(params_);
        }
      }
      /**
       * <pre>
       * Run parameters.
       * </pre>
       *
       * <code>repeated .mlflow.Param params = 2;</code>
       */
      public org.mlflow.api.proto.Service.Param.Builder addParamsBuilder() {
        return getParamsFieldBuilder().addBuilder(
            org.mlflow.api.proto.Service.Param.getDefaultInstance());
      }
      /**
       * <pre>
       * Run parameters.
       * </pre>
       *
       * <code>repeated .mlflow.Param params = 2;</code>
       */
      public org.mlflow.api.proto.Service.Param.Builder addParamsBuilder(
          int index) {
        return getParamsFieldBuilder().addBuilder(
            index, org.mlflow.api.proto.Service.Param.getDefaultInstance());
      }
      /**
       * <pre>
       * Run parameters.
       * </pre>
       *
       * <code>repeated .mlflow.Param params = 2;</code>
       */
      public java.util.List<org.mlflow.api.proto.Service.Param.Builder> 
           getParamsBuilderList() {
        return getParamsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.mlflow.api.proto.Service.Param, org.mlflow.api.proto.Service.Param.Builder, org.mlflow.api.proto.Service.ParamOrBuilder> 
          getParamsFieldBuilder() {
        if (paramsBuilder_ == null) {
          paramsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              org.mlflow.api.proto.Service.Param, org.mlflow.api.proto.Service.Param.Builder, org.mlflow.api.proto.Service.ParamOrBuilder>(
                  params_,
                  ((bitField0_ & 0x00000002) == 0x00000002),
                  getParentForChildren(),
                  isClean());
          params_ = null;
        }
        return paramsBuilder_;
      }

      private java.util.List<org.mlflow.api.proto.Service.RunTag> tags_ =
        java.util.Collections.emptyList();
      private void ensureTagsIsMutable() {
        if (!((bitField0_ & 0x00000004) == 0x00000004)) {
          tags_ = new java.util.ArrayList<org.mlflow.api.proto.Service.RunTag>(tags_);
          bitField0_ |= 0x00000004;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.mlflow.api.proto.Service.RunTag, org.mlflow.api.proto.Service.RunTag.Builder, org.mlflow.api.proto.Service.RunTagOrBuilder> tagsBuilder_;

      /**
       * <pre>
       * Additional metadata key-value pairs.
       * </pre>
       *
       * <code>repeated .mlflow.RunTag tags = 3;</code>
       */
      public java.util.List<org.mlflow.api.proto.Service.RunTag> getTagsList() {
        if (tagsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(tags_);
        } else {
          return tagsBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * Additional metadata key-value pairs.
       * </pre>
       *
       * <code>repeated .mlflow.RunTag tags = 3;</code>
       */
      public int getTagsCount() {
        if (tagsBuilder_ == null) {
          return tags_.size();
        } else {
          return tagsBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * Additional metadata key-value pairs.
       * </pre>
       *
       * <code>repeated .mlflow.RunTag tags = 3;</code>
       */
      public org.mlflow.api.proto.Service.RunTag getTags(int index) {
        if (tagsBuilder_ == null) {
          return tags_.get(index);
        } else {
          return tagsBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * Additional metadata key-value pairs.
       * </pre>
       *
       * <code>repeated .mlflow.RunTag tags = 3;</code>
       */
      public Builder setTags(
          int index, org.mlflow.api.proto.Service.RunTag value) {
        if (tagsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTagsIsMutable();
          tags_.set(index, value);
          onChanged();
        } else {
          tagsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Additional metadata key-value pairs.
       * </pre>
       *
       * <code>repeated .mlflow.RunTag tags = 3;</code>
       */
      public Builder setTags(
          int index, org.mlflow.api.proto.Service.RunTag.Builder builderForValue) {
        if (tagsBuilder_ == null) {
          ensureTagsIsMutable();
          tags_.set(index, builderForValue.build());
          onChanged();
        } else {
          tagsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Additional metadata key-value pairs.
       * </pre>
       *
       * <code>repeated .mlflow.RunTag tags = 3;</code>
       */
      public Builder addTags(org.mlflow.api.proto.Service.RunTag value) {
        if (tagsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTagsIsMutable();
          tags_.add(value);
          onChanged();
        } else {
          tagsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * Additional metadata key-value pairs.
       * </pre>
       *
       * <code>repeated .mlflow.RunTag tags = 3;</code>
       */
      public Builder addTags(
          int index, org.mlflow.api.proto.Service.RunTag value) {
        if (tagsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTagsIsMutable();
          tags_.add(index, value);
          onChanged();
        } else {
          tagsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Additional metadata key-value pairs.
       * </pre>
       *
       * <code>repeated .mlflow.RunTag tags = 3;</code>
       */
      public Builder addTags(
          org.mlflow.api.proto.Service.RunTag.Builder builderForValue) {
        if (tagsBuilder_ == null) {
          ensureTagsIsMutable();
          tags_.add(builderForValue.build());
          onChanged();
        } else {
          tagsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Additional metadata key-value pairs.
       * </pre>
       *
       * <code>repeated .mlflow.RunTag tags = 3;</code>
       */
      public Builder addTags(
          int index, org.mlflow.api.proto.Service.RunTag.Builder builderForValue) {
        if (tagsBuilder_ == null) {
          ensureTagsIsMutable();
          tags_.add(index, builderForValue.build());
          onChanged();
        } else {
          tagsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Additional metadata key-value pairs.
       * </pre>
       *
       * <code>repeated .mlflow.RunTag tags = 3;</code>
       */
      public Builder addAllTags(
          java.lang.Iterable<? extends org.mlflow.api.proto.Service.RunTag> values) {
        if (tagsBuilder_ == null) {
          ensureTagsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, tags_);
          onChanged();
        } else {
          tagsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * Additional metadata key-value pairs.
       * </pre>
       *
       * <code>repeated .mlflow.RunTag tags = 3;</code>
       */
      public Builder clearTags() {
        if (tagsBuilder_ == null) {
          tags_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000004);
          onChanged();
        } else {
          tagsBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * Additional metadata key-value pairs.
       * </pre>
       *
       * <code>repeated .mlflow.RunTag tags = 3;</code>
       */
      public Builder removeTags(int index) {
        if (tagsBuilder_ == null) {
          ensureTagsIsMutable();
          tags_.remove(index);
          onChanged();
        } else {
          tagsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * Additional metadata key-value pairs.
       * </pre>
       *
       * <code>repeated .mlflow.RunTag tags = 3;</code>
       */
      public org.mlflow.api.proto.Service.RunTag.Builder getTagsBuilder(
          int index) {
        return getTagsFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * Additional metadata key-value pairs.
       * </pre>
       *
       * <code>repeated .mlflow.RunTag tags = 3;</code>
       */
      public org.mlflow.api.proto.Service.RunTagOrBuilder getTagsOrBuilder(
          int index) {
        if (tagsBuilder_ == null) {
          return tags_.get(index);  } else {
          return tagsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * Additional metadata key-value pairs.
       * </pre>
       *
       * <code>repeated .mlflow.RunTag tags = 3;</code>
       */
      public java.util.List<? extends org.mlflow.api.proto.Service.RunTagOrBuilder> 
           getTagsOrBuilderList() {
        if (tagsBuilder_ != null) {
          return tagsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(tags_);
        }
      }
      /**
       * <pre>
       * Additional metadata key-value pairs.
       * </pre>
       *
       * <code>repeated .mlflow.RunTag tags = 3;</code>
       */
      public org.mlflow.api.proto.Service.RunTag.Builder addTagsBuilder() {
        return getTagsFieldBuilder().addBuilder(
            org.mlflow.api.proto.Service.RunTag.getDefaultInstance());
      }
      /**
       * <pre>
       * Additional metadata key-value pairs.
       * </pre>
       *
       * <code>repeated .mlflow.RunTag tags = 3;</code>
       */
      public org.mlflow.api.proto.Service.RunTag.Builder addTagsBuilder(
          int index) {
        return getTagsFieldBuilder().addBuilder(
            index, org.mlflow.api.proto.Service.RunTag.getDefaultInstance());
      }
      /**
       * <pre>
       * Additional metadata key-value pairs.
       * </pre>
       *
       * <code>repeated .mlflow.RunTag tags = 3;</code>
       */
      public java.util.List<org.mlflow.api.proto.Service.RunTag.Builder> 
           getTagsBuilderList() {
        return getTagsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.mlflow.api.proto.Service.RunTag, org.mlflow.api.proto.Service.RunTag.Builder, org.mlflow.api.proto.Service.RunTagOrBuilder> 
          getTagsFieldBuilder() {
        if (tagsBuilder_ == null) {
          tagsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              org.mlflow.api.proto.Service.RunTag, org.mlflow.api.proto.Service.RunTag.Builder, org.mlflow.api.proto.Service.RunTagOrBuilder>(
                  tags_,
                  ((bitField0_ & 0x00000004) == 0x00000004),
                  getParentForChildren(),
                  isClean());
          tags_ = null;
        }
        return tagsBuilder_;
      }
      @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.RunData)
    }

    // @@protoc_insertion_point(class_scope:mlflow.RunData)
    private static final org.mlflow.api.proto.Service.RunData DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.RunData();
    }

    public static org.mlflow.api.proto.Service.RunData getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<RunData>
        PARSER = new com.google.protobuf.AbstractParser<RunData>() {
      @java.lang.Override
      public RunData parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new RunData(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<RunData> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<RunData> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public org.mlflow.api.proto.Service.RunData getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface RunTagOrBuilder extends
      // @@protoc_insertion_point(interface_extends:mlflow.RunTag)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional string key = 1;</code>
     */
    boolean hasKey();
    /**
     * <code>optional string key = 1;</code>
     */
    java.lang.String getKey();
    /**
     * <code>optional string key = 1;</code>
     */
    com.google.protobuf.ByteString
        getKeyBytes();

    /**
     * <code>optional string value = 2;</code>
     */
    boolean hasValue();
    /**
     * <code>optional string value = 2;</code>
     */
    java.lang.String getValue();
    /**
     * <code>optional string value = 2;</code>
     */
    com.google.protobuf.ByteString
        getValueBytes();
  }
  /**
   * <pre>
   * Tag for a run.
   * </pre>
   *
   * Protobuf type {@code mlflow.RunTag}
   */
  public  static final class RunTag extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:mlflow.RunTag)
      RunTagOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use RunTag.newBuilder() to construct.
    private RunTag(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private RunTag() {
      key_ = "";
      value_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private RunTag(
        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;
              key_ = bs;
              break;
            }
            case 18: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000002;
              value_ = 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_RunTag_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.mlflow.api.proto.Service.internal_static_mlflow_RunTag_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.mlflow.api.proto.Service.RunTag.class, org.mlflow.api.proto.Service.RunTag.Builder.class);
    }

    private int bitField0_;
    public static final int KEY_FIELD_NUMBER = 1;
    private volatile java.lang.Object key_;
    /**
     * <code>optional string key = 1;</code>
     */
    public boolean hasKey() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string key = 1;</code>
     */
    public java.lang.String getKey() {
      java.lang.Object ref = key_;
      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()) {
          key_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string key = 1;</code>
     */
    public com.google.protobuf.ByteString
        getKeyBytes() {
      java.lang.Object ref = key_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        key_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int VALUE_FIELD_NUMBER = 2;
    private volatile java.lang.Object value_;
    /**
     * <code>optional string value = 2;</code>
     */
    public boolean hasValue() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <code>optional string value = 2;</code>
     */
    public java.lang.String getValue() {
      java.lang.Object ref = value_;
      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()) {
          value_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string value = 2;</code>
     */
    public com.google.protobuf.ByteString
        getValueBytes() {
      java.lang.Object ref = value_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        value_ = 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) == 0x00000001)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, key_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, value_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, key_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, value_);
      }
      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.RunTag)) {
        return super.equals(obj);
      }
      org.mlflow.api.proto.Service.RunTag other = (org.mlflow.api.proto.Service.RunTag) obj;

      boolean result = true;
      result = result && (hasKey() == other.hasKey());
      if (hasKey()) {
        result = result && getKey()
            .equals(other.getKey());
      }
      result = result && (hasValue() == other.hasValue());
      if (hasValue()) {
        result = result && getValue()
            .equals(other.getValue());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasKey()) {
        hash = (37 * hash) + KEY_FIELD_NUMBER;
        hash = (53 * hash) + getKey().hashCode();
      }
      if (hasValue()) {
        hash = (37 * hash) + VALUE_FIELD_NUMBER;
        hash = (53 * hash) + getValue().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.mlflow.api.proto.Service.RunTag parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.RunTag 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.RunTag parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.RunTag 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.RunTag parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.RunTag 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.RunTag parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.RunTag 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.RunTag parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.RunTag 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.RunTag 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.RunTag 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.RunTag 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;
    }
    /**
     * <pre>
     * Tag for a run.
     * </pre>
     *
     * Protobuf type {@code mlflow.RunTag}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:mlflow.RunTag)
        org.mlflow.api.proto.Service.RunTagOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_RunTag_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_RunTag_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.RunTag.class, org.mlflow.api.proto.Service.RunTag.Builder.class);
      }

      // Construct using org.mlflow.api.proto.Service.RunTag.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();
        key_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        value_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_RunTag_descriptor;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.RunTag getDefaultInstanceForType() {
        return org.mlflow.api.proto.Service.RunTag.getDefaultInstance();
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.RunTag build() {
        org.mlflow.api.proto.Service.RunTag result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.RunTag buildPartial() {
        org.mlflow.api.proto.Service.RunTag result = new org.mlflow.api.proto.Service.RunTag(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.key_ = key_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.value_ = value_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.mlflow.api.proto.Service.RunTag) {
          return mergeFrom((org.mlflow.api.proto.Service.RunTag)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.mlflow.api.proto.Service.RunTag other) {
        if (other == org.mlflow.api.proto.Service.RunTag.getDefaultInstance()) return this;
        if (other.hasKey()) {
          bitField0_ |= 0x00000001;
          key_ = other.key_;
          onChanged();
        }
        if (other.hasValue()) {
          bitField0_ |= 0x00000002;
          value_ = other.value_;
          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.RunTag parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.mlflow.api.proto.Service.RunTag) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object key_ = "";
      /**
       * <code>optional string key = 1;</code>
       */
      public boolean hasKey() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string key = 1;</code>
       */
      public java.lang.String getKey() {
        java.lang.Object ref = key_;
        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()) {
            key_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string key = 1;</code>
       */
      public com.google.protobuf.ByteString
          getKeyBytes() {
        java.lang.Object ref = key_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          key_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string key = 1;</code>
       */
      public Builder setKey(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        key_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string key = 1;</code>
       */
      public Builder clearKey() {
        bitField0_ = (bitField0_ & ~0x00000001);
        key_ = getDefaultInstance().getKey();
        onChanged();
        return this;
      }
      /**
       * <code>optional string key = 1;</code>
       */
      public Builder setKeyBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        key_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object value_ = "";
      /**
       * <code>optional string value = 2;</code>
       */
      public boolean hasValue() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <code>optional string value = 2;</code>
       */
      public java.lang.String getValue() {
        java.lang.Object ref = value_;
        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()) {
            value_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string value = 2;</code>
       */
      public com.google.protobuf.ByteString
          getValueBytes() {
        java.lang.Object ref = value_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          value_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string value = 2;</code>
       */
      public Builder setValue(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        value_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string value = 2;</code>
       */
      public Builder clearValue() {
        bitField0_ = (bitField0_ & ~0x00000002);
        value_ = getDefaultInstance().getValue();
        onChanged();
        return this;
      }
      /**
       * <code>optional string value = 2;</code>
       */
      public Builder setValueBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        value_ = 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.RunTag)
    }

    // @@protoc_insertion_point(class_scope:mlflow.RunTag)
    private static final org.mlflow.api.proto.Service.RunTag DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.RunTag();
    }

    public static org.mlflow.api.proto.Service.RunTag getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<RunTag>
        PARSER = new com.google.protobuf.AbstractParser<RunTag>() {
      @java.lang.Override
      public RunTag parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new RunTag(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<RunTag> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<RunTag> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public org.mlflow.api.proto.Service.RunTag getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface RunInfoOrBuilder extends
      // @@protoc_insertion_point(interface_extends:mlflow.RunInfo)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Unique identifier for the run.
     * </pre>
     *
     * <code>optional string run_uuid = 1;</code>
     */
    boolean hasRunUuid();
    /**
     * <pre>
     * Unique identifier for the run.
     * </pre>
     *
     * <code>optional string run_uuid = 1;</code>
     */
    java.lang.String getRunUuid();
    /**
     * <pre>
     * Unique identifier for the run.
     * </pre>
     *
     * <code>optional string run_uuid = 1;</code>
     */
    com.google.protobuf.ByteString
        getRunUuidBytes();

    /**
     * <pre>
     * The experiment ID.
     * </pre>
     *
     * <code>optional int64 experiment_id = 2;</code>
     */
    boolean hasExperimentId();
    /**
     * <pre>
     * The experiment ID.
     * </pre>
     *
     * <code>optional int64 experiment_id = 2;</code>
     */
    long getExperimentId();

    /**
     * <pre>
     * Human readable name that identifies this run.
     * </pre>
     *
     * <code>optional string name = 3;</code>
     */
    boolean hasName();
    /**
     * <pre>
     * Human readable name that identifies this run.
     * </pre>
     *
     * <code>optional string name = 3;</code>
     */
    java.lang.String getName();
    /**
     * <pre>
     * Human readable name that identifies this run.
     * </pre>
     *
     * <code>optional string name = 3;</code>
     */
    com.google.protobuf.ByteString
        getNameBytes();

    /**
     * <pre>
     * Source type.
     * </pre>
     *
     * <code>optional .mlflow.SourceType source_type = 4;</code>
     */
    boolean hasSourceType();
    /**
     * <pre>
     * Source type.
     * </pre>
     *
     * <code>optional .mlflow.SourceType source_type = 4;</code>
     */
    org.mlflow.api.proto.Service.SourceType getSourceType();

    /**
     * <pre>
     * Source identifier: GitHub URL, name of notebook, name of job, etc.
     * </pre>
     *
     * <code>optional string source_name = 5;</code>
     */
    boolean hasSourceName();
    /**
     * <pre>
     * Source identifier: GitHub URL, name of notebook, name of job, etc.
     * </pre>
     *
     * <code>optional string source_name = 5;</code>
     */
    java.lang.String getSourceName();
    /**
     * <pre>
     * Source identifier: GitHub URL, name of notebook, name of job, etc.
     * </pre>
     *
     * <code>optional string source_name = 5;</code>
     */
    com.google.protobuf.ByteString
        getSourceNameBytes();

    /**
     * <pre>
     * User who initiated the run.
     * </pre>
     *
     * <code>optional string user_id = 6;</code>
     */
    boolean hasUserId();
    /**
     * <pre>
     * User who initiated the run.
     * </pre>
     *
     * <code>optional string user_id = 6;</code>
     */
    java.lang.String getUserId();
    /**
     * <pre>
     * User who initiated the run.
     * </pre>
     *
     * <code>optional string user_id = 6;</code>
     */
    com.google.protobuf.ByteString
        getUserIdBytes();

    /**
     * <pre>
     * Current status of the run.
     * </pre>
     *
     * <code>optional .mlflow.RunStatus status = 7;</code>
     */
    boolean hasStatus();
    /**
     * <pre>
     * Current status of the run.
     * </pre>
     *
     * <code>optional .mlflow.RunStatus status = 7;</code>
     */
    org.mlflow.api.proto.Service.RunStatus getStatus();

    /**
     * <pre>
     * Unix timestamp of when the run started in milliseconds.
     * </pre>
     *
     * <code>optional int64 start_time = 8;</code>
     */
    boolean hasStartTime();
    /**
     * <pre>
     * Unix timestamp of when the run started in milliseconds.
     * </pre>
     *
     * <code>optional int64 start_time = 8;</code>
     */
    long getStartTime();

    /**
     * <pre>
     * Unix timestamp of when the run ended in milliseconds.
     * </pre>
     *
     * <code>optional int64 end_time = 9;</code>
     */
    boolean hasEndTime();
    /**
     * <pre>
     * Unix timestamp of when the run ended in milliseconds.
     * </pre>
     *
     * <code>optional int64 end_time = 9;</code>
     */
    long getEndTime();

    /**
     * <pre>
     * Git commit hash of the code used for the run.
     * </pre>
     *
     * <code>optional string source_version = 10;</code>
     */
    boolean hasSourceVersion();
    /**
     * <pre>
     * Git commit hash of the code used for the run.
     * </pre>
     *
     * <code>optional string source_version = 10;</code>
     */
    java.lang.String getSourceVersion();
    /**
     * <pre>
     * Git commit hash of the code used for the run.
     * </pre>
     *
     * <code>optional string source_version = 10;</code>
     */
    com.google.protobuf.ByteString
        getSourceVersionBytes();

    /**
     * <pre>
     * Name of the entry point for the run.
     * </pre>
     *
     * <code>optional string entry_point_name = 11;</code>
     */
    boolean hasEntryPointName();
    /**
     * <pre>
     * Name of the entry point for the run.
     * </pre>
     *
     * <code>optional string entry_point_name = 11;</code>
     */
    java.lang.String getEntryPointName();
    /**
     * <pre>
     * Name of the entry point for the run.
     * </pre>
     *
     * <code>optional string entry_point_name = 11;</code>
     */
    com.google.protobuf.ByteString
        getEntryPointNameBytes();

    /**
     * <pre>
     * URI of the directory where artifacts should be uploaded.
     * This can be a local path (starting with "/"), or a distributed file system (DFS)
     * path, like ``s3://bucket/directory`` or ``dbfs:/my/directory``.
     * If not set, the local ``./mlruns`` directory is  chosen.
     * </pre>
     *
     * <code>optional string artifact_uri = 13;</code>
     */
    boolean hasArtifactUri();
    /**
     * <pre>
     * URI of the directory where artifacts should be uploaded.
     * This can be a local path (starting with "/"), or a distributed file system (DFS)
     * path, like ``s3://bucket/directory`` or ``dbfs:/my/directory``.
     * If not set, the local ``./mlruns`` directory is  chosen.
     * </pre>
     *
     * <code>optional string artifact_uri = 13;</code>
     */
    java.lang.String getArtifactUri();
    /**
     * <pre>
     * URI of the directory where artifacts should be uploaded.
     * This can be a local path (starting with "/"), or a distributed file system (DFS)
     * path, like ``s3://bucket/directory`` or ``dbfs:/my/directory``.
     * If not set, the local ``./mlruns`` directory is  chosen.
     * </pre>
     *
     * <code>optional string artifact_uri = 13;</code>
     */
    com.google.protobuf.ByteString
        getArtifactUriBytes();

    /**
     * <pre>
     * Current life cycle stage of the experiment : OneOf("active", "deleted")
     * </pre>
     *
     * <code>optional string lifecycle_stage = 14;</code>
     */
    boolean hasLifecycleStage();
    /**
     * <pre>
     * Current life cycle stage of the experiment : OneOf("active", "deleted")
     * </pre>
     *
     * <code>optional string lifecycle_stage = 14;</code>
     */
    java.lang.String getLifecycleStage();
    /**
     * <pre>
     * Current life cycle stage of the experiment : OneOf("active", "deleted")
     * </pre>
     *
     * <code>optional string lifecycle_stage = 14;</code>
     */
    com.google.protobuf.ByteString
        getLifecycleStageBytes();
  }
  /**
   * <pre>
   * Metadata of a single run.
   * </pre>
   *
   * Protobuf type {@code mlflow.RunInfo}
   */
  public  static final class RunInfo extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:mlflow.RunInfo)
      RunInfoOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use RunInfo.newBuilder() to construct.
    private RunInfo(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private RunInfo() {
      runUuid_ = "";
      experimentId_ = 0L;
      name_ = "";
      sourceType_ = 1;
      sourceName_ = "";
      userId_ = "";
      status_ = 1;
      startTime_ = 0L;
      endTime_ = 0L;
      sourceVersion_ = "";
      entryPointName_ = "";
      artifactUri_ = "";
      lifecycleStage_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private RunInfo(
        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;
              runUuid_ = bs;
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              experimentId_ = input.readInt64();
              break;
            }
            case 26: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000004;
              name_ = bs;
              break;
            }
            case 32: {
              int rawValue = input.readEnum();
                @SuppressWarnings("deprecation")
              org.mlflow.api.proto.Service.SourceType value = org.mlflow.api.proto.Service.SourceType.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(4, rawValue);
              } else {
                bitField0_ |= 0x00000008;
                sourceType_ = rawValue;
              }
              break;
            }
            case 42: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000010;
              sourceName_ = bs;
              break;
            }
            case 50: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000020;
              userId_ = bs;
              break;
            }
            case 56: {
              int rawValue = input.readEnum();
                @SuppressWarnings("deprecation")
              org.mlflow.api.proto.Service.RunStatus value = org.mlflow.api.proto.Service.RunStatus.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(7, rawValue);
              } else {
                bitField0_ |= 0x00000040;
                status_ = rawValue;
              }
              break;
            }
            case 64: {
              bitField0_ |= 0x00000080;
              startTime_ = input.readInt64();
              break;
            }
            case 72: {
              bitField0_ |= 0x00000100;
              endTime_ = input.readInt64();
              break;
            }
            case 82: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000200;
              sourceVersion_ = bs;
              break;
            }
            case 90: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000400;
              entryPointName_ = bs;
              break;
            }
            case 106: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000800;
              artifactUri_ = bs;
              break;
            }
            case 114: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00001000;
              lifecycleStage_ = 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_RunInfo_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.mlflow.api.proto.Service.internal_static_mlflow_RunInfo_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.mlflow.api.proto.Service.RunInfo.class, org.mlflow.api.proto.Service.RunInfo.Builder.class);
    }

    private int bitField0_;
    public static final int RUN_UUID_FIELD_NUMBER = 1;
    private volatile java.lang.Object runUuid_;
    /**
     * <pre>
     * Unique identifier for the run.
     * </pre>
     *
     * <code>optional string run_uuid = 1;</code>
     */
    public boolean hasRunUuid() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * Unique identifier for the run.
     * </pre>
     *
     * <code>optional string run_uuid = 1;</code>
     */
    public java.lang.String getRunUuid() {
      java.lang.Object ref = runUuid_;
      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()) {
          runUuid_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Unique identifier for the run.
     * </pre>
     *
     * <code>optional string run_uuid = 1;</code>
     */
    public com.google.protobuf.ByteString
        getRunUuidBytes() {
      java.lang.Object ref = runUuid_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        runUuid_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int EXPERIMENT_ID_FIELD_NUMBER = 2;
    private long experimentId_;
    /**
     * <pre>
     * The experiment ID.
     * </pre>
     *
     * <code>optional int64 experiment_id = 2;</code>
     */
    public boolean hasExperimentId() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     * The experiment ID.
     * </pre>
     *
     * <code>optional int64 experiment_id = 2;</code>
     */
    public long getExperimentId() {
      return experimentId_;
    }

    public static final int NAME_FIELD_NUMBER = 3;
    private volatile java.lang.Object name_;
    /**
     * <pre>
     * Human readable name that identifies this run.
     * </pre>
     *
     * <code>optional string name = 3;</code>
     */
    public boolean hasName() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <pre>
     * Human readable name that identifies this run.
     * </pre>
     *
     * <code>optional string name = 3;</code>
     */
    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;
      }
    }
    /**
     * <pre>
     * Human readable name that identifies this run.
     * </pre>
     *
     * <code>optional string name = 3;</code>
     */
    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 SOURCE_TYPE_FIELD_NUMBER = 4;
    private int sourceType_;
    /**
     * <pre>
     * Source type.
     * </pre>
     *
     * <code>optional .mlflow.SourceType source_type = 4;</code>
     */
    public boolean hasSourceType() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <pre>
     * Source type.
     * </pre>
     *
     * <code>optional .mlflow.SourceType source_type = 4;</code>
     */
    public org.mlflow.api.proto.Service.SourceType getSourceType() {
      @SuppressWarnings("deprecation")
      org.mlflow.api.proto.Service.SourceType result = org.mlflow.api.proto.Service.SourceType.valueOf(sourceType_);
      return result == null ? org.mlflow.api.proto.Service.SourceType.NOTEBOOK : result;
    }

    public static final int SOURCE_NAME_FIELD_NUMBER = 5;
    private volatile java.lang.Object sourceName_;
    /**
     * <pre>
     * Source identifier: GitHub URL, name of notebook, name of job, etc.
     * </pre>
     *
     * <code>optional string source_name = 5;</code>
     */
    public boolean hasSourceName() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <pre>
     * Source identifier: GitHub URL, name of notebook, name of job, etc.
     * </pre>
     *
     * <code>optional string source_name = 5;</code>
     */
    public java.lang.String getSourceName() {
      java.lang.Object ref = sourceName_;
      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()) {
          sourceName_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Source identifier: GitHub URL, name of notebook, name of job, etc.
     * </pre>
     *
     * <code>optional string source_name = 5;</code>
     */
    public com.google.protobuf.ByteString
        getSourceNameBytes() {
      java.lang.Object ref = sourceName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        sourceName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int USER_ID_FIELD_NUMBER = 6;
    private volatile java.lang.Object userId_;
    /**
     * <pre>
     * User who initiated the run.
     * </pre>
     *
     * <code>optional string user_id = 6;</code>
     */
    public boolean hasUserId() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <pre>
     * User who initiated the run.
     * </pre>
     *
     * <code>optional string user_id = 6;</code>
     */
    public java.lang.String getUserId() {
      java.lang.Object ref = userId_;
      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()) {
          userId_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * User who initiated the run.
     * </pre>
     *
     * <code>optional string user_id = 6;</code>
     */
    public com.google.protobuf.ByteString
        getUserIdBytes() {
      java.lang.Object ref = userId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        userId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int STATUS_FIELD_NUMBER = 7;
    private int status_;
    /**
     * <pre>
     * Current status of the run.
     * </pre>
     *
     * <code>optional .mlflow.RunStatus status = 7;</code>
     */
    public boolean hasStatus() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <pre>
     * Current status of the run.
     * </pre>
     *
     * <code>optional .mlflow.RunStatus status = 7;</code>
     */
    public org.mlflow.api.proto.Service.RunStatus getStatus() {
      @SuppressWarnings("deprecation")
      org.mlflow.api.proto.Service.RunStatus result = org.mlflow.api.proto.Service.RunStatus.valueOf(status_);
      return result == null ? org.mlflow.api.proto.Service.RunStatus.RUNNING : result;
    }

    public static final int START_TIME_FIELD_NUMBER = 8;
    private long startTime_;
    /**
     * <pre>
     * Unix timestamp of when the run started in milliseconds.
     * </pre>
     *
     * <code>optional int64 start_time = 8;</code>
     */
    public boolean hasStartTime() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <pre>
     * Unix timestamp of when the run started in milliseconds.
     * </pre>
     *
     * <code>optional int64 start_time = 8;</code>
     */
    public long getStartTime() {
      return startTime_;
    }

    public static final int END_TIME_FIELD_NUMBER = 9;
    private long endTime_;
    /**
     * <pre>
     * Unix timestamp of when the run ended in milliseconds.
     * </pre>
     *
     * <code>optional int64 end_time = 9;</code>
     */
    public boolean hasEndTime() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     * <pre>
     * Unix timestamp of when the run ended in milliseconds.
     * </pre>
     *
     * <code>optional int64 end_time = 9;</code>
     */
    public long getEndTime() {
      return endTime_;
    }

    public static final int SOURCE_VERSION_FIELD_NUMBER = 10;
    private volatile java.lang.Object sourceVersion_;
    /**
     * <pre>
     * Git commit hash of the code used for the run.
     * </pre>
     *
     * <code>optional string source_version = 10;</code>
     */
    public boolean hasSourceVersion() {
      return ((bitField0_ & 0x00000200) == 0x00000200);
    }
    /**
     * <pre>
     * Git commit hash of the code used for the run.
     * </pre>
     *
     * <code>optional string source_version = 10;</code>
     */
    public java.lang.String getSourceVersion() {
      java.lang.Object ref = sourceVersion_;
      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()) {
          sourceVersion_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Git commit hash of the code used for the run.
     * </pre>
     *
     * <code>optional string source_version = 10;</code>
     */
    public com.google.protobuf.ByteString
        getSourceVersionBytes() {
      java.lang.Object ref = sourceVersion_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        sourceVersion_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int ENTRY_POINT_NAME_FIELD_NUMBER = 11;
    private volatile java.lang.Object entryPointName_;
    /**
     * <pre>
     * Name of the entry point for the run.
     * </pre>
     *
     * <code>optional string entry_point_name = 11;</code>
     */
    public boolean hasEntryPointName() {
      return ((bitField0_ & 0x00000400) == 0x00000400);
    }
    /**
     * <pre>
     * Name of the entry point for the run.
     * </pre>
     *
     * <code>optional string entry_point_name = 11;</code>
     */
    public java.lang.String getEntryPointName() {
      java.lang.Object ref = entryPointName_;
      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()) {
          entryPointName_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Name of the entry point for the run.
     * </pre>
     *
     * <code>optional string entry_point_name = 11;</code>
     */
    public com.google.protobuf.ByteString
        getEntryPointNameBytes() {
      java.lang.Object ref = entryPointName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        entryPointName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int ARTIFACT_URI_FIELD_NUMBER = 13;
    private volatile java.lang.Object artifactUri_;
    /**
     * <pre>
     * URI of the directory where artifacts should be uploaded.
     * This can be a local path (starting with "/"), or a distributed file system (DFS)
     * path, like ``s3://bucket/directory`` or ``dbfs:/my/directory``.
     * If not set, the local ``./mlruns`` directory is  chosen.
     * </pre>
     *
     * <code>optional string artifact_uri = 13;</code>
     */
    public boolean hasArtifactUri() {
      return ((bitField0_ & 0x00000800) == 0x00000800);
    }
    /**
     * <pre>
     * URI of the directory where artifacts should be uploaded.
     * This can be a local path (starting with "/"), or a distributed file system (DFS)
     * path, like ``s3://bucket/directory`` or ``dbfs:/my/directory``.
     * If not set, the local ``./mlruns`` directory is  chosen.
     * </pre>
     *
     * <code>optional string artifact_uri = 13;</code>
     */
    public java.lang.String getArtifactUri() {
      java.lang.Object ref = artifactUri_;
      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()) {
          artifactUri_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * URI of the directory where artifacts should be uploaded.
     * This can be a local path (starting with "/"), or a distributed file system (DFS)
     * path, like ``s3://bucket/directory`` or ``dbfs:/my/directory``.
     * If not set, the local ``./mlruns`` directory is  chosen.
     * </pre>
     *
     * <code>optional string artifact_uri = 13;</code>
     */
    public com.google.protobuf.ByteString
        getArtifactUriBytes() {
      java.lang.Object ref = artifactUri_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        artifactUri_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int LIFECYCLE_STAGE_FIELD_NUMBER = 14;
    private volatile java.lang.Object lifecycleStage_;
    /**
     * <pre>
     * Current life cycle stage of the experiment : OneOf("active", "deleted")
     * </pre>
     *
     * <code>optional string lifecycle_stage = 14;</code>
     */
    public boolean hasLifecycleStage() {
      return ((bitField0_ & 0x00001000) == 0x00001000);
    }
    /**
     * <pre>
     * Current life cycle stage of the experiment : OneOf("active", "deleted")
     * </pre>
     *
     * <code>optional string lifecycle_stage = 14;</code>
     */
    public java.lang.String getLifecycleStage() {
      java.lang.Object ref = lifecycleStage_;
      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()) {
          lifecycleStage_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Current life cycle stage of the experiment : OneOf("active", "deleted")
     * </pre>
     *
     * <code>optional string lifecycle_stage = 14;</code>
     */
    public com.google.protobuf.ByteString
        getLifecycleStageBytes() {
      java.lang.Object ref = lifecycleStage_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        lifecycleStage_ = 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) == 0x00000001)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, runUuid_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeInt64(2, experimentId_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, name_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeEnum(4, sourceType_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, sourceName_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 6, userId_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeEnum(7, status_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        output.writeInt64(8, startTime_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        output.writeInt64(9, endTime_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 10, sourceVersion_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 11, entryPointName_);
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 13, artifactUri_);
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 14, lifecycleStage_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, runUuid_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(2, experimentId_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, name_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(4, sourceType_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, sourceName_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, userId_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(7, status_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(8, startTime_);
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(9, endTime_);
      }
      if (((bitField0_ & 0x00000200) == 0x00000200)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(10, sourceVersion_);
      }
      if (((bitField0_ & 0x00000400) == 0x00000400)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(11, entryPointName_);
      }
      if (((bitField0_ & 0x00000800) == 0x00000800)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(13, artifactUri_);
      }
      if (((bitField0_ & 0x00001000) == 0x00001000)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(14, lifecycleStage_);
      }
      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.RunInfo)) {
        return super.equals(obj);
      }
      org.mlflow.api.proto.Service.RunInfo other = (org.mlflow.api.proto.Service.RunInfo) obj;

      boolean result = true;
      result = result && (hasRunUuid() == other.hasRunUuid());
      if (hasRunUuid()) {
        result = result && getRunUuid()
            .equals(other.getRunUuid());
      }
      result = result && (hasExperimentId() == other.hasExperimentId());
      if (hasExperimentId()) {
        result = result && (getExperimentId()
            == other.getExperimentId());
      }
      result = result && (hasName() == other.hasName());
      if (hasName()) {
        result = result && getName()
            .equals(other.getName());
      }
      result = result && (hasSourceType() == other.hasSourceType());
      if (hasSourceType()) {
        result = result && sourceType_ == other.sourceType_;
      }
      result = result && (hasSourceName() == other.hasSourceName());
      if (hasSourceName()) {
        result = result && getSourceName()
            .equals(other.getSourceName());
      }
      result = result && (hasUserId() == other.hasUserId());
      if (hasUserId()) {
        result = result && getUserId()
            .equals(other.getUserId());
      }
      result = result && (hasStatus() == other.hasStatus());
      if (hasStatus()) {
        result = result && status_ == other.status_;
      }
      result = result && (hasStartTime() == other.hasStartTime());
      if (hasStartTime()) {
        result = result && (getStartTime()
            == other.getStartTime());
      }
      result = result && (hasEndTime() == other.hasEndTime());
      if (hasEndTime()) {
        result = result && (getEndTime()
            == other.getEndTime());
      }
      result = result && (hasSourceVersion() == other.hasSourceVersion());
      if (hasSourceVersion()) {
        result = result && getSourceVersion()
            .equals(other.getSourceVersion());
      }
      result = result && (hasEntryPointName() == other.hasEntryPointName());
      if (hasEntryPointName()) {
        result = result && getEntryPointName()
            .equals(other.getEntryPointName());
      }
      result = result && (hasArtifactUri() == other.hasArtifactUri());
      if (hasArtifactUri()) {
        result = result && getArtifactUri()
            .equals(other.getArtifactUri());
      }
      result = result && (hasLifecycleStage() == other.hasLifecycleStage());
      if (hasLifecycleStage()) {
        result = result && getLifecycleStage()
            .equals(other.getLifecycleStage());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasRunUuid()) {
        hash = (37 * hash) + RUN_UUID_FIELD_NUMBER;
        hash = (53 * hash) + getRunUuid().hashCode();
      }
      if (hasExperimentId()) {
        hash = (37 * hash) + EXPERIMENT_ID_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            getExperimentId());
      }
      if (hasName()) {
        hash = (37 * hash) + NAME_FIELD_NUMBER;
        hash = (53 * hash) + getName().hashCode();
      }
      if (hasSourceType()) {
        hash = (37 * hash) + SOURCE_TYPE_FIELD_NUMBER;
        hash = (53 * hash) + sourceType_;
      }
      if (hasSourceName()) {
        hash = (37 * hash) + SOURCE_NAME_FIELD_NUMBER;
        hash = (53 * hash) + getSourceName().hashCode();
      }
      if (hasUserId()) {
        hash = (37 * hash) + USER_ID_FIELD_NUMBER;
        hash = (53 * hash) + getUserId().hashCode();
      }
      if (hasStatus()) {
        hash = (37 * hash) + STATUS_FIELD_NUMBER;
        hash = (53 * hash) + status_;
      }
      if (hasStartTime()) {
        hash = (37 * hash) + START_TIME_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            getStartTime());
      }
      if (hasEndTime()) {
        hash = (37 * hash) + END_TIME_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            getEndTime());
      }
      if (hasSourceVersion()) {
        hash = (37 * hash) + SOURCE_VERSION_FIELD_NUMBER;
        hash = (53 * hash) + getSourceVersion().hashCode();
      }
      if (hasEntryPointName()) {
        hash = (37 * hash) + ENTRY_POINT_NAME_FIELD_NUMBER;
        hash = (53 * hash) + getEntryPointName().hashCode();
      }
      if (hasArtifactUri()) {
        hash = (37 * hash) + ARTIFACT_URI_FIELD_NUMBER;
        hash = (53 * hash) + getArtifactUri().hashCode();
      }
      if (hasLifecycleStage()) {
        hash = (37 * hash) + LIFECYCLE_STAGE_FIELD_NUMBER;
        hash = (53 * hash) + getLifecycleStage().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.mlflow.api.proto.Service.RunInfo parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.RunInfo 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.RunInfo parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.RunInfo 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.RunInfo parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.RunInfo 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.RunInfo parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.RunInfo 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.RunInfo parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.RunInfo 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.RunInfo 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.RunInfo 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.RunInfo 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;
    }
    /**
     * <pre>
     * Metadata of a single run.
     * </pre>
     *
     * Protobuf type {@code mlflow.RunInfo}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:mlflow.RunInfo)
        org.mlflow.api.proto.Service.RunInfoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_RunInfo_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_RunInfo_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.RunInfo.class, org.mlflow.api.proto.Service.RunInfo.Builder.class);
      }

      // Construct using org.mlflow.api.proto.Service.RunInfo.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();
        runUuid_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        experimentId_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000002);
        name_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        sourceType_ = 1;
        bitField0_ = (bitField0_ & ~0x00000008);
        sourceName_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        userId_ = "";
        bitField0_ = (bitField0_ & ~0x00000020);
        status_ = 1;
        bitField0_ = (bitField0_ & ~0x00000040);
        startTime_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000080);
        endTime_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000100);
        sourceVersion_ = "";
        bitField0_ = (bitField0_ & ~0x00000200);
        entryPointName_ = "";
        bitField0_ = (bitField0_ & ~0x00000400);
        artifactUri_ = "";
        bitField0_ = (bitField0_ & ~0x00000800);
        lifecycleStage_ = "";
        bitField0_ = (bitField0_ & ~0x00001000);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_RunInfo_descriptor;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.RunInfo getDefaultInstanceForType() {
        return org.mlflow.api.proto.Service.RunInfo.getDefaultInstance();
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.RunInfo build() {
        org.mlflow.api.proto.Service.RunInfo result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.RunInfo buildPartial() {
        org.mlflow.api.proto.Service.RunInfo result = new org.mlflow.api.proto.Service.RunInfo(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.runUuid_ = runUuid_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.experimentId_ = experimentId_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.name_ = name_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.sourceType_ = sourceType_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.sourceName_ = sourceName_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.userId_ = userId_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        result.status_ = status_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        result.startTime_ = startTime_;
        if (((from_bitField0_ & 0x00000100) == 0x00000100)) {
          to_bitField0_ |= 0x00000100;
        }
        result.endTime_ = endTime_;
        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
          to_bitField0_ |= 0x00000200;
        }
        result.sourceVersion_ = sourceVersion_;
        if (((from_bitField0_ & 0x00000400) == 0x00000400)) {
          to_bitField0_ |= 0x00000400;
        }
        result.entryPointName_ = entryPointName_;
        if (((from_bitField0_ & 0x00000800) == 0x00000800)) {
          to_bitField0_ |= 0x00000800;
        }
        result.artifactUri_ = artifactUri_;
        if (((from_bitField0_ & 0x00001000) == 0x00001000)) {
          to_bitField0_ |= 0x00001000;
        }
        result.lifecycleStage_ = lifecycleStage_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.mlflow.api.proto.Service.RunInfo) {
          return mergeFrom((org.mlflow.api.proto.Service.RunInfo)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.mlflow.api.proto.Service.RunInfo other) {
        if (other == org.mlflow.api.proto.Service.RunInfo.getDefaultInstance()) return this;
        if (other.hasRunUuid()) {
          bitField0_ |= 0x00000001;
          runUuid_ = other.runUuid_;
          onChanged();
        }
        if (other.hasExperimentId()) {
          setExperimentId(other.getExperimentId());
        }
        if (other.hasName()) {
          bitField0_ |= 0x00000004;
          name_ = other.name_;
          onChanged();
        }
        if (other.hasSourceType()) {
          setSourceType(other.getSourceType());
        }
        if (other.hasSourceName()) {
          bitField0_ |= 0x00000010;
          sourceName_ = other.sourceName_;
          onChanged();
        }
        if (other.hasUserId()) {
          bitField0_ |= 0x00000020;
          userId_ = other.userId_;
          onChanged();
        }
        if (other.hasStatus()) {
          setStatus(other.getStatus());
        }
        if (other.hasStartTime()) {
          setStartTime(other.getStartTime());
        }
        if (other.hasEndTime()) {
          setEndTime(other.getEndTime());
        }
        if (other.hasSourceVersion()) {
          bitField0_ |= 0x00000200;
          sourceVersion_ = other.sourceVersion_;
          onChanged();
        }
        if (other.hasEntryPointName()) {
          bitField0_ |= 0x00000400;
          entryPointName_ = other.entryPointName_;
          onChanged();
        }
        if (other.hasArtifactUri()) {
          bitField0_ |= 0x00000800;
          artifactUri_ = other.artifactUri_;
          onChanged();
        }
        if (other.hasLifecycleStage()) {
          bitField0_ |= 0x00001000;
          lifecycleStage_ = other.lifecycleStage_;
          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.RunInfo parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.mlflow.api.proto.Service.RunInfo) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object runUuid_ = "";
      /**
       * <pre>
       * Unique identifier for the run.
       * </pre>
       *
       * <code>optional string run_uuid = 1;</code>
       */
      public boolean hasRunUuid() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * Unique identifier for the run.
       * </pre>
       *
       * <code>optional string run_uuid = 1;</code>
       */
      public java.lang.String getRunUuid() {
        java.lang.Object ref = runUuid_;
        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()) {
            runUuid_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Unique identifier for the run.
       * </pre>
       *
       * <code>optional string run_uuid = 1;</code>
       */
      public com.google.protobuf.ByteString
          getRunUuidBytes() {
        java.lang.Object ref = runUuid_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          runUuid_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Unique identifier for the run.
       * </pre>
       *
       * <code>optional string run_uuid = 1;</code>
       */
      public Builder setRunUuid(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        runUuid_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Unique identifier for the run.
       * </pre>
       *
       * <code>optional string run_uuid = 1;</code>
       */
      public Builder clearRunUuid() {
        bitField0_ = (bitField0_ & ~0x00000001);
        runUuid_ = getDefaultInstance().getRunUuid();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Unique identifier for the run.
       * </pre>
       *
       * <code>optional string run_uuid = 1;</code>
       */
      public Builder setRunUuidBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        runUuid_ = value;
        onChanged();
        return this;
      }

      private long experimentId_ ;
      /**
       * <pre>
       * The experiment ID.
       * </pre>
       *
       * <code>optional int64 experiment_id = 2;</code>
       */
      public boolean hasExperimentId() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * The experiment ID.
       * </pre>
       *
       * <code>optional int64 experiment_id = 2;</code>
       */
      public long getExperimentId() {
        return experimentId_;
      }
      /**
       * <pre>
       * The experiment ID.
       * </pre>
       *
       * <code>optional int64 experiment_id = 2;</code>
       */
      public Builder setExperimentId(long value) {
        bitField0_ |= 0x00000002;
        experimentId_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * The experiment ID.
       * </pre>
       *
       * <code>optional int64 experiment_id = 2;</code>
       */
      public Builder clearExperimentId() {
        bitField0_ = (bitField0_ & ~0x00000002);
        experimentId_ = 0L;
        onChanged();
        return this;
      }

      private java.lang.Object name_ = "";
      /**
       * <pre>
       * Human readable name that identifies this run.
       * </pre>
       *
       * <code>optional string name = 3;</code>
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <pre>
       * Human readable name that identifies this run.
       * </pre>
       *
       * <code>optional string name = 3;</code>
       */
      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;
        }
      }
      /**
       * <pre>
       * Human readable name that identifies this run.
       * </pre>
       *
       * <code>optional string name = 3;</code>
       */
      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;
        }
      }
      /**
       * <pre>
       * Human readable name that identifies this run.
       * </pre>
       *
       * <code>optional string name = 3;</code>
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Human readable name that identifies this run.
       * </pre>
       *
       * <code>optional string name = 3;</code>
       */
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000004);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Human readable name that identifies this run.
       * </pre>
       *
       * <code>optional string name = 3;</code>
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        name_ = value;
        onChanged();
        return this;
      }

      private int sourceType_ = 1;
      /**
       * <pre>
       * Source type.
       * </pre>
       *
       * <code>optional .mlflow.SourceType source_type = 4;</code>
       */
      public boolean hasSourceType() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <pre>
       * Source type.
       * </pre>
       *
       * <code>optional .mlflow.SourceType source_type = 4;</code>
       */
      public org.mlflow.api.proto.Service.SourceType getSourceType() {
        @SuppressWarnings("deprecation")
        org.mlflow.api.proto.Service.SourceType result = org.mlflow.api.proto.Service.SourceType.valueOf(sourceType_);
        return result == null ? org.mlflow.api.proto.Service.SourceType.NOTEBOOK : result;
      }
      /**
       * <pre>
       * Source type.
       * </pre>
       *
       * <code>optional .mlflow.SourceType source_type = 4;</code>
       */
      public Builder setSourceType(org.mlflow.api.proto.Service.SourceType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000008;
        sourceType_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Source type.
       * </pre>
       *
       * <code>optional .mlflow.SourceType source_type = 4;</code>
       */
      public Builder clearSourceType() {
        bitField0_ = (bitField0_ & ~0x00000008);
        sourceType_ = 1;
        onChanged();
        return this;
      }

      private java.lang.Object sourceName_ = "";
      /**
       * <pre>
       * Source identifier: GitHub URL, name of notebook, name of job, etc.
       * </pre>
       *
       * <code>optional string source_name = 5;</code>
       */
      public boolean hasSourceName() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <pre>
       * Source identifier: GitHub URL, name of notebook, name of job, etc.
       * </pre>
       *
       * <code>optional string source_name = 5;</code>
       */
      public java.lang.String getSourceName() {
        java.lang.Object ref = sourceName_;
        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()) {
            sourceName_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Source identifier: GitHub URL, name of notebook, name of job, etc.
       * </pre>
       *
       * <code>optional string source_name = 5;</code>
       */
      public com.google.protobuf.ByteString
          getSourceNameBytes() {
        java.lang.Object ref = sourceName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          sourceName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Source identifier: GitHub URL, name of notebook, name of job, etc.
       * </pre>
       *
       * <code>optional string source_name = 5;</code>
       */
      public Builder setSourceName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        sourceName_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Source identifier: GitHub URL, name of notebook, name of job, etc.
       * </pre>
       *
       * <code>optional string source_name = 5;</code>
       */
      public Builder clearSourceName() {
        bitField0_ = (bitField0_ & ~0x00000010);
        sourceName_ = getDefaultInstance().getSourceName();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Source identifier: GitHub URL, name of notebook, name of job, etc.
       * </pre>
       *
       * <code>optional string source_name = 5;</code>
       */
      public Builder setSourceNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        sourceName_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object userId_ = "";
      /**
       * <pre>
       * User who initiated the run.
       * </pre>
       *
       * <code>optional string user_id = 6;</code>
       */
      public boolean hasUserId() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <pre>
       * User who initiated the run.
       * </pre>
       *
       * <code>optional string user_id = 6;</code>
       */
      public java.lang.String getUserId() {
        java.lang.Object ref = userId_;
        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()) {
            userId_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * User who initiated the run.
       * </pre>
       *
       * <code>optional string user_id = 6;</code>
       */
      public com.google.protobuf.ByteString
          getUserIdBytes() {
        java.lang.Object ref = userId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          userId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * User who initiated the run.
       * </pre>
       *
       * <code>optional string user_id = 6;</code>
       */
      public Builder setUserId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        userId_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * User who initiated the run.
       * </pre>
       *
       * <code>optional string user_id = 6;</code>
       */
      public Builder clearUserId() {
        bitField0_ = (bitField0_ & ~0x00000020);
        userId_ = getDefaultInstance().getUserId();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * User who initiated the run.
       * </pre>
       *
       * <code>optional string user_id = 6;</code>
       */
      public Builder setUserIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        userId_ = value;
        onChanged();
        return this;
      }

      private int status_ = 1;
      /**
       * <pre>
       * Current status of the run.
       * </pre>
       *
       * <code>optional .mlflow.RunStatus status = 7;</code>
       */
      public boolean hasStatus() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <pre>
       * Current status of the run.
       * </pre>
       *
       * <code>optional .mlflow.RunStatus status = 7;</code>
       */
      public org.mlflow.api.proto.Service.RunStatus getStatus() {
        @SuppressWarnings("deprecation")
        org.mlflow.api.proto.Service.RunStatus result = org.mlflow.api.proto.Service.RunStatus.valueOf(status_);
        return result == null ? org.mlflow.api.proto.Service.RunStatus.RUNNING : result;
      }
      /**
       * <pre>
       * Current status of the run.
       * </pre>
       *
       * <code>optional .mlflow.RunStatus status = 7;</code>
       */
      public Builder setStatus(org.mlflow.api.proto.Service.RunStatus value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000040;
        status_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Current status of the run.
       * </pre>
       *
       * <code>optional .mlflow.RunStatus status = 7;</code>
       */
      public Builder clearStatus() {
        bitField0_ = (bitField0_ & ~0x00000040);
        status_ = 1;
        onChanged();
        return this;
      }

      private long startTime_ ;
      /**
       * <pre>
       * Unix timestamp of when the run started in milliseconds.
       * </pre>
       *
       * <code>optional int64 start_time = 8;</code>
       */
      public boolean hasStartTime() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <pre>
       * Unix timestamp of when the run started in milliseconds.
       * </pre>
       *
       * <code>optional int64 start_time = 8;</code>
       */
      public long getStartTime() {
        return startTime_;
      }
      /**
       * <pre>
       * Unix timestamp of when the run started in milliseconds.
       * </pre>
       *
       * <code>optional int64 start_time = 8;</code>
       */
      public Builder setStartTime(long value) {
        bitField0_ |= 0x00000080;
        startTime_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Unix timestamp of when the run started in milliseconds.
       * </pre>
       *
       * <code>optional int64 start_time = 8;</code>
       */
      public Builder clearStartTime() {
        bitField0_ = (bitField0_ & ~0x00000080);
        startTime_ = 0L;
        onChanged();
        return this;
      }

      private long endTime_ ;
      /**
       * <pre>
       * Unix timestamp of when the run ended in milliseconds.
       * </pre>
       *
       * <code>optional int64 end_time = 9;</code>
       */
      public boolean hasEndTime() {
        return ((bitField0_ & 0x00000100) == 0x00000100);
      }
      /**
       * <pre>
       * Unix timestamp of when the run ended in milliseconds.
       * </pre>
       *
       * <code>optional int64 end_time = 9;</code>
       */
      public long getEndTime() {
        return endTime_;
      }
      /**
       * <pre>
       * Unix timestamp of when the run ended in milliseconds.
       * </pre>
       *
       * <code>optional int64 end_time = 9;</code>
       */
      public Builder setEndTime(long value) {
        bitField0_ |= 0x00000100;
        endTime_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Unix timestamp of when the run ended in milliseconds.
       * </pre>
       *
       * <code>optional int64 end_time = 9;</code>
       */
      public Builder clearEndTime() {
        bitField0_ = (bitField0_ & ~0x00000100);
        endTime_ = 0L;
        onChanged();
        return this;
      }

      private java.lang.Object sourceVersion_ = "";
      /**
       * <pre>
       * Git commit hash of the code used for the run.
       * </pre>
       *
       * <code>optional string source_version = 10;</code>
       */
      public boolean hasSourceVersion() {
        return ((bitField0_ & 0x00000200) == 0x00000200);
      }
      /**
       * <pre>
       * Git commit hash of the code used for the run.
       * </pre>
       *
       * <code>optional string source_version = 10;</code>
       */
      public java.lang.String getSourceVersion() {
        java.lang.Object ref = sourceVersion_;
        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()) {
            sourceVersion_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Git commit hash of the code used for the run.
       * </pre>
       *
       * <code>optional string source_version = 10;</code>
       */
      public com.google.protobuf.ByteString
          getSourceVersionBytes() {
        java.lang.Object ref = sourceVersion_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          sourceVersion_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Git commit hash of the code used for the run.
       * </pre>
       *
       * <code>optional string source_version = 10;</code>
       */
      public Builder setSourceVersion(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000200;
        sourceVersion_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Git commit hash of the code used for the run.
       * </pre>
       *
       * <code>optional string source_version = 10;</code>
       */
      public Builder clearSourceVersion() {
        bitField0_ = (bitField0_ & ~0x00000200);
        sourceVersion_ = getDefaultInstance().getSourceVersion();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Git commit hash of the code used for the run.
       * </pre>
       *
       * <code>optional string source_version = 10;</code>
       */
      public Builder setSourceVersionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000200;
        sourceVersion_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object entryPointName_ = "";
      /**
       * <pre>
       * Name of the entry point for the run.
       * </pre>
       *
       * <code>optional string entry_point_name = 11;</code>
       */
      public boolean hasEntryPointName() {
        return ((bitField0_ & 0x00000400) == 0x00000400);
      }
      /**
       * <pre>
       * Name of the entry point for the run.
       * </pre>
       *
       * <code>optional string entry_point_name = 11;</code>
       */
      public java.lang.String getEntryPointName() {
        java.lang.Object ref = entryPointName_;
        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()) {
            entryPointName_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Name of the entry point for the run.
       * </pre>
       *
       * <code>optional string entry_point_name = 11;</code>
       */
      public com.google.protobuf.ByteString
          getEntryPointNameBytes() {
        java.lang.Object ref = entryPointName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          entryPointName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Name of the entry point for the run.
       * </pre>
       *
       * <code>optional string entry_point_name = 11;</code>
       */
      public Builder setEntryPointName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000400;
        entryPointName_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Name of the entry point for the run.
       * </pre>
       *
       * <code>optional string entry_point_name = 11;</code>
       */
      public Builder clearEntryPointName() {
        bitField0_ = (bitField0_ & ~0x00000400);
        entryPointName_ = getDefaultInstance().getEntryPointName();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Name of the entry point for the run.
       * </pre>
       *
       * <code>optional string entry_point_name = 11;</code>
       */
      public Builder setEntryPointNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000400;
        entryPointName_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object artifactUri_ = "";
      /**
       * <pre>
       * URI of the directory where artifacts should be uploaded.
       * This can be a local path (starting with "/"), or a distributed file system (DFS)
       * path, like ``s3://bucket/directory`` or ``dbfs:/my/directory``.
       * If not set, the local ``./mlruns`` directory is  chosen.
       * </pre>
       *
       * <code>optional string artifact_uri = 13;</code>
       */
      public boolean hasArtifactUri() {
        return ((bitField0_ & 0x00000800) == 0x00000800);
      }
      /**
       * <pre>
       * URI of the directory where artifacts should be uploaded.
       * This can be a local path (starting with "/"), or a distributed file system (DFS)
       * path, like ``s3://bucket/directory`` or ``dbfs:/my/directory``.
       * If not set, the local ``./mlruns`` directory is  chosen.
       * </pre>
       *
       * <code>optional string artifact_uri = 13;</code>
       */
      public java.lang.String getArtifactUri() {
        java.lang.Object ref = artifactUri_;
        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()) {
            artifactUri_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * URI of the directory where artifacts should be uploaded.
       * This can be a local path (starting with "/"), or a distributed file system (DFS)
       * path, like ``s3://bucket/directory`` or ``dbfs:/my/directory``.
       * If not set, the local ``./mlruns`` directory is  chosen.
       * </pre>
       *
       * <code>optional string artifact_uri = 13;</code>
       */
      public com.google.protobuf.ByteString
          getArtifactUriBytes() {
        java.lang.Object ref = artifactUri_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          artifactUri_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * URI of the directory where artifacts should be uploaded.
       * This can be a local path (starting with "/"), or a distributed file system (DFS)
       * path, like ``s3://bucket/directory`` or ``dbfs:/my/directory``.
       * If not set, the local ``./mlruns`` directory is  chosen.
       * </pre>
       *
       * <code>optional string artifact_uri = 13;</code>
       */
      public Builder setArtifactUri(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000800;
        artifactUri_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * URI of the directory where artifacts should be uploaded.
       * This can be a local path (starting with "/"), or a distributed file system (DFS)
       * path, like ``s3://bucket/directory`` or ``dbfs:/my/directory``.
       * If not set, the local ``./mlruns`` directory is  chosen.
       * </pre>
       *
       * <code>optional string artifact_uri = 13;</code>
       */
      public Builder clearArtifactUri() {
        bitField0_ = (bitField0_ & ~0x00000800);
        artifactUri_ = getDefaultInstance().getArtifactUri();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * URI of the directory where artifacts should be uploaded.
       * This can be a local path (starting with "/"), or a distributed file system (DFS)
       * path, like ``s3://bucket/directory`` or ``dbfs:/my/directory``.
       * If not set, the local ``./mlruns`` directory is  chosen.
       * </pre>
       *
       * <code>optional string artifact_uri = 13;</code>
       */
      public Builder setArtifactUriBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000800;
        artifactUri_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object lifecycleStage_ = "";
      /**
       * <pre>
       * Current life cycle stage of the experiment : OneOf("active", "deleted")
       * </pre>
       *
       * <code>optional string lifecycle_stage = 14;</code>
       */
      public boolean hasLifecycleStage() {
        return ((bitField0_ & 0x00001000) == 0x00001000);
      }
      /**
       * <pre>
       * Current life cycle stage of the experiment : OneOf("active", "deleted")
       * </pre>
       *
       * <code>optional string lifecycle_stage = 14;</code>
       */
      public java.lang.String getLifecycleStage() {
        java.lang.Object ref = lifecycleStage_;
        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()) {
            lifecycleStage_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Current life cycle stage of the experiment : OneOf("active", "deleted")
       * </pre>
       *
       * <code>optional string lifecycle_stage = 14;</code>
       */
      public com.google.protobuf.ByteString
          getLifecycleStageBytes() {
        java.lang.Object ref = lifecycleStage_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          lifecycleStage_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Current life cycle stage of the experiment : OneOf("active", "deleted")
       * </pre>
       *
       * <code>optional string lifecycle_stage = 14;</code>
       */
      public Builder setLifecycleStage(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00001000;
        lifecycleStage_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Current life cycle stage of the experiment : OneOf("active", "deleted")
       * </pre>
       *
       * <code>optional string lifecycle_stage = 14;</code>
       */
      public Builder clearLifecycleStage() {
        bitField0_ = (bitField0_ & ~0x00001000);
        lifecycleStage_ = getDefaultInstance().getLifecycleStage();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Current life cycle stage of the experiment : OneOf("active", "deleted")
       * </pre>
       *
       * <code>optional string lifecycle_stage = 14;</code>
       */
      public Builder setLifecycleStageBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00001000;
        lifecycleStage_ = 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.RunInfo)
    }

    // @@protoc_insertion_point(class_scope:mlflow.RunInfo)
    private static final org.mlflow.api.proto.Service.RunInfo DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.RunInfo();
    }

    public static org.mlflow.api.proto.Service.RunInfo getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<RunInfo>
        PARSER = new com.google.protobuf.AbstractParser<RunInfo>() {
      @java.lang.Override
      public RunInfo parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new RunInfo(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<RunInfo> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<RunInfo> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public org.mlflow.api.proto.Service.RunInfo getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ExperimentOrBuilder extends
      // @@protoc_insertion_point(interface_extends:mlflow.Experiment)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Unique identifier for the experiment.
     * </pre>
     *
     * <code>optional int64 experiment_id = 1;</code>
     */
    boolean hasExperimentId();
    /**
     * <pre>
     * Unique identifier for the experiment.
     * </pre>
     *
     * <code>optional int64 experiment_id = 1;</code>
     */
    long getExperimentId();

    /**
     * <pre>
     * Human readable name that identifies the experiment.
     * </pre>
     *
     * <code>optional string name = 2;</code>
     */
    boolean hasName();
    /**
     * <pre>
     * Human readable name that identifies the experiment.
     * </pre>
     *
     * <code>optional string name = 2;</code>
     */
    java.lang.String getName();
    /**
     * <pre>
     * Human readable name that identifies the experiment.
     * </pre>
     *
     * <code>optional string name = 2;</code>
     */
    com.google.protobuf.ByteString
        getNameBytes();

    /**
     * <pre>
     * Location where artifacts for the experiment are stored.
     * </pre>
     *
     * <code>optional string artifact_location = 3;</code>
     */
    boolean hasArtifactLocation();
    /**
     * <pre>
     * Location where artifacts for the experiment are stored.
     * </pre>
     *
     * <code>optional string artifact_location = 3;</code>
     */
    java.lang.String getArtifactLocation();
    /**
     * <pre>
     * Location where artifacts for the experiment are stored.
     * </pre>
     *
     * <code>optional string artifact_location = 3;</code>
     */
    com.google.protobuf.ByteString
        getArtifactLocationBytes();

    /**
     * <pre>
     * Current life cycle stage of the experiment: "active" or "deleted".
     * Deleted experiments are not returned by APIs.
     * </pre>
     *
     * <code>optional string lifecycle_stage = 4;</code>
     */
    boolean hasLifecycleStage();
    /**
     * <pre>
     * Current life cycle stage of the experiment: "active" or "deleted".
     * Deleted experiments are not returned by APIs.
     * </pre>
     *
     * <code>optional string lifecycle_stage = 4;</code>
     */
    java.lang.String getLifecycleStage();
    /**
     * <pre>
     * Current life cycle stage of the experiment: "active" or "deleted".
     * Deleted experiments are not returned by APIs.
     * </pre>
     *
     * <code>optional string lifecycle_stage = 4;</code>
     */
    com.google.protobuf.ByteString
        getLifecycleStageBytes();

    /**
     * <pre>
     * Last update time
     * </pre>
     *
     * <code>optional int64 last_update_time = 5;</code>
     */
    boolean hasLastUpdateTime();
    /**
     * <pre>
     * Last update time
     * </pre>
     *
     * <code>optional int64 last_update_time = 5;</code>
     */
    long getLastUpdateTime();

    /**
     * <pre>
     * Creation time
     * </pre>
     *
     * <code>optional int64 creation_time = 6;</code>
     */
    boolean hasCreationTime();
    /**
     * <pre>
     * Creation time
     * </pre>
     *
     * <code>optional int64 creation_time = 6;</code>
     */
    long getCreationTime();
  }
  /**
   * <pre>
   * Experiment
   * </pre>
   *
   * Protobuf type {@code mlflow.Experiment}
   */
  public  static final class Experiment extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:mlflow.Experiment)
      ExperimentOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use Experiment.newBuilder() to construct.
    private Experiment(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private Experiment() {
      experimentId_ = 0L;
      name_ = "";
      artifactLocation_ = "";
      lifecycleStage_ = "";
      lastUpdateTime_ = 0L;
      creationTime_ = 0L;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private Experiment(
        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 8: {
              bitField0_ |= 0x00000001;
              experimentId_ = input.readInt64();
              break;
            }
            case 18: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000002;
              name_ = bs;
              break;
            }
            case 26: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000004;
              artifactLocation_ = bs;
              break;
            }
            case 34: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000008;
              lifecycleStage_ = bs;
              break;
            }
            case 40: {
              bitField0_ |= 0x00000010;
              lastUpdateTime_ = input.readInt64();
              break;
            }
            case 48: {
              bitField0_ |= 0x00000020;
              creationTime_ = input.readInt64();
              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_Experiment_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.mlflow.api.proto.Service.internal_static_mlflow_Experiment_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.mlflow.api.proto.Service.Experiment.class, org.mlflow.api.proto.Service.Experiment.Builder.class);
    }

    private int bitField0_;
    public static final int EXPERIMENT_ID_FIELD_NUMBER = 1;
    private long experimentId_;
    /**
     * <pre>
     * Unique identifier for the experiment.
     * </pre>
     *
     * <code>optional int64 experiment_id = 1;</code>
     */
    public boolean hasExperimentId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * Unique identifier for the experiment.
     * </pre>
     *
     * <code>optional int64 experiment_id = 1;</code>
     */
    public long getExperimentId() {
      return experimentId_;
    }

    public static final int NAME_FIELD_NUMBER = 2;
    private volatile java.lang.Object name_;
    /**
     * <pre>
     * Human readable name that identifies the experiment.
     * </pre>
     *
     * <code>optional string name = 2;</code>
     */
    public boolean hasName() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     * Human readable name that identifies the experiment.
     * </pre>
     *
     * <code>optional string name = 2;</code>
     */
    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;
      }
    }
    /**
     * <pre>
     * Human readable name that identifies the experiment.
     * </pre>
     *
     * <code>optional string name = 2;</code>
     */
    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 ARTIFACT_LOCATION_FIELD_NUMBER = 3;
    private volatile java.lang.Object artifactLocation_;
    /**
     * <pre>
     * Location where artifacts for the experiment are stored.
     * </pre>
     *
     * <code>optional string artifact_location = 3;</code>
     */
    public boolean hasArtifactLocation() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <pre>
     * Location where artifacts for the experiment are stored.
     * </pre>
     *
     * <code>optional string artifact_location = 3;</code>
     */
    public java.lang.String getArtifactLocation() {
      java.lang.Object ref = artifactLocation_;
      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()) {
          artifactLocation_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Location where artifacts for the experiment are stored.
     * </pre>
     *
     * <code>optional string artifact_location = 3;</code>
     */
    public com.google.protobuf.ByteString
        getArtifactLocationBytes() {
      java.lang.Object ref = artifactLocation_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        artifactLocation_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int LIFECYCLE_STAGE_FIELD_NUMBER = 4;
    private volatile java.lang.Object lifecycleStage_;
    /**
     * <pre>
     * Current life cycle stage of the experiment: "active" or "deleted".
     * Deleted experiments are not returned by APIs.
     * </pre>
     *
     * <code>optional string lifecycle_stage = 4;</code>
     */
    public boolean hasLifecycleStage() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <pre>
     * Current life cycle stage of the experiment: "active" or "deleted".
     * Deleted experiments are not returned by APIs.
     * </pre>
     *
     * <code>optional string lifecycle_stage = 4;</code>
     */
    public java.lang.String getLifecycleStage() {
      java.lang.Object ref = lifecycleStage_;
      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()) {
          lifecycleStage_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Current life cycle stage of the experiment: "active" or "deleted".
     * Deleted experiments are not returned by APIs.
     * </pre>
     *
     * <code>optional string lifecycle_stage = 4;</code>
     */
    public com.google.protobuf.ByteString
        getLifecycleStageBytes() {
      java.lang.Object ref = lifecycleStage_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        lifecycleStage_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int LAST_UPDATE_TIME_FIELD_NUMBER = 5;
    private long lastUpdateTime_;
    /**
     * <pre>
     * Last update time
     * </pre>
     *
     * <code>optional int64 last_update_time = 5;</code>
     */
    public boolean hasLastUpdateTime() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <pre>
     * Last update time
     * </pre>
     *
     * <code>optional int64 last_update_time = 5;</code>
     */
    public long getLastUpdateTime() {
      return lastUpdateTime_;
    }

    public static final int CREATION_TIME_FIELD_NUMBER = 6;
    private long creationTime_;
    /**
     * <pre>
     * Creation time
     * </pre>
     *
     * <code>optional int64 creation_time = 6;</code>
     */
    public boolean hasCreationTime() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <pre>
     * Creation time
     * </pre>
     *
     * <code>optional int64 creation_time = 6;</code>
     */
    public long getCreationTime() {
      return creationTime_;
    }

    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) == 0x00000001)) {
        output.writeInt64(1, experimentId_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, name_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, artifactLocation_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 4, lifecycleStage_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        output.writeInt64(5, lastUpdateTime_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        output.writeInt64(6, creationTime_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, experimentId_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, name_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, artifactLocation_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, lifecycleStage_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(5, lastUpdateTime_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(6, creationTime_);
      }
      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.Experiment)) {
        return super.equals(obj);
      }
      org.mlflow.api.proto.Service.Experiment other = (org.mlflow.api.proto.Service.Experiment) obj;

      boolean result = true;
      result = result && (hasExperimentId() == other.hasExperimentId());
      if (hasExperimentId()) {
        result = result && (getExperimentId()
            == other.getExperimentId());
      }
      result = result && (hasName() == other.hasName());
      if (hasName()) {
        result = result && getName()
            .equals(other.getName());
      }
      result = result && (hasArtifactLocation() == other.hasArtifactLocation());
      if (hasArtifactLocation()) {
        result = result && getArtifactLocation()
            .equals(other.getArtifactLocation());
      }
      result = result && (hasLifecycleStage() == other.hasLifecycleStage());
      if (hasLifecycleStage()) {
        result = result && getLifecycleStage()
            .equals(other.getLifecycleStage());
      }
      result = result && (hasLastUpdateTime() == other.hasLastUpdateTime());
      if (hasLastUpdateTime()) {
        result = result && (getLastUpdateTime()
            == other.getLastUpdateTime());
      }
      result = result && (hasCreationTime() == other.hasCreationTime());
      if (hasCreationTime()) {
        result = result && (getCreationTime()
            == other.getCreationTime());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasExperimentId()) {
        hash = (37 * hash) + EXPERIMENT_ID_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            getExperimentId());
      }
      if (hasName()) {
        hash = (37 * hash) + NAME_FIELD_NUMBER;
        hash = (53 * hash) + getName().hashCode();
      }
      if (hasArtifactLocation()) {
        hash = (37 * hash) + ARTIFACT_LOCATION_FIELD_NUMBER;
        hash = (53 * hash) + getArtifactLocation().hashCode();
      }
      if (hasLifecycleStage()) {
        hash = (37 * hash) + LIFECYCLE_STAGE_FIELD_NUMBER;
        hash = (53 * hash) + getLifecycleStage().hashCode();
      }
      if (hasLastUpdateTime()) {
        hash = (37 * hash) + LAST_UPDATE_TIME_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            getLastUpdateTime());
      }
      if (hasCreationTime()) {
        hash = (37 * hash) + CREATION_TIME_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            getCreationTime());
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.mlflow.api.proto.Service.Experiment parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.Experiment 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.Experiment parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.Experiment 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.Experiment parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.Experiment 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.Experiment parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.Experiment 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.Experiment parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.Experiment 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.Experiment 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.Experiment 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.Experiment 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;
    }
    /**
     * <pre>
     * Experiment
     * </pre>
     *
     * Protobuf type {@code mlflow.Experiment}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:mlflow.Experiment)
        org.mlflow.api.proto.Service.ExperimentOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_Experiment_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_Experiment_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.Experiment.class, org.mlflow.api.proto.Service.Experiment.Builder.class);
      }

      // Construct using org.mlflow.api.proto.Service.Experiment.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();
        experimentId_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        name_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        artifactLocation_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        lifecycleStage_ = "";
        bitField0_ = (bitField0_ & ~0x00000008);
        lastUpdateTime_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000010);
        creationTime_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000020);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_Experiment_descriptor;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.Experiment getDefaultInstanceForType() {
        return org.mlflow.api.proto.Service.Experiment.getDefaultInstance();
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.Experiment build() {
        org.mlflow.api.proto.Service.Experiment result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.Experiment buildPartial() {
        org.mlflow.api.proto.Service.Experiment result = new org.mlflow.api.proto.Service.Experiment(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.experimentId_ = experimentId_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.name_ = name_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.artifactLocation_ = artifactLocation_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.lifecycleStage_ = lifecycleStage_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.lastUpdateTime_ = lastUpdateTime_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.creationTime_ = creationTime_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.mlflow.api.proto.Service.Experiment) {
          return mergeFrom((org.mlflow.api.proto.Service.Experiment)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.mlflow.api.proto.Service.Experiment other) {
        if (other == org.mlflow.api.proto.Service.Experiment.getDefaultInstance()) return this;
        if (other.hasExperimentId()) {
          setExperimentId(other.getExperimentId());
        }
        if (other.hasName()) {
          bitField0_ |= 0x00000002;
          name_ = other.name_;
          onChanged();
        }
        if (other.hasArtifactLocation()) {
          bitField0_ |= 0x00000004;
          artifactLocation_ = other.artifactLocation_;
          onChanged();
        }
        if (other.hasLifecycleStage()) {
          bitField0_ |= 0x00000008;
          lifecycleStage_ = other.lifecycleStage_;
          onChanged();
        }
        if (other.hasLastUpdateTime()) {
          setLastUpdateTime(other.getLastUpdateTime());
        }
        if (other.hasCreationTime()) {
          setCreationTime(other.getCreationTime());
        }
        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.Experiment parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.mlflow.api.proto.Service.Experiment) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private long experimentId_ ;
      /**
       * <pre>
       * Unique identifier for the experiment.
       * </pre>
       *
       * <code>optional int64 experiment_id = 1;</code>
       */
      public boolean hasExperimentId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * Unique identifier for the experiment.
       * </pre>
       *
       * <code>optional int64 experiment_id = 1;</code>
       */
      public long getExperimentId() {
        return experimentId_;
      }
      /**
       * <pre>
       * Unique identifier for the experiment.
       * </pre>
       *
       * <code>optional int64 experiment_id = 1;</code>
       */
      public Builder setExperimentId(long value) {
        bitField0_ |= 0x00000001;
        experimentId_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Unique identifier for the experiment.
       * </pre>
       *
       * <code>optional int64 experiment_id = 1;</code>
       */
      public Builder clearExperimentId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        experimentId_ = 0L;
        onChanged();
        return this;
      }

      private java.lang.Object name_ = "";
      /**
       * <pre>
       * Human readable name that identifies the experiment.
       * </pre>
       *
       * <code>optional string name = 2;</code>
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * Human readable name that identifies the experiment.
       * </pre>
       *
       * <code>optional string name = 2;</code>
       */
      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;
        }
      }
      /**
       * <pre>
       * Human readable name that identifies the experiment.
       * </pre>
       *
       * <code>optional string name = 2;</code>
       */
      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;
        }
      }
      /**
       * <pre>
       * Human readable name that identifies the experiment.
       * </pre>
       *
       * <code>optional string name = 2;</code>
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Human readable name that identifies the experiment.
       * </pre>
       *
       * <code>optional string name = 2;</code>
       */
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000002);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Human readable name that identifies the experiment.
       * </pre>
       *
       * <code>optional string name = 2;</code>
       */
      public Builder setNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        name_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object artifactLocation_ = "";
      /**
       * <pre>
       * Location where artifacts for the experiment are stored.
       * </pre>
       *
       * <code>optional string artifact_location = 3;</code>
       */
      public boolean hasArtifactLocation() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <pre>
       * Location where artifacts for the experiment are stored.
       * </pre>
       *
       * <code>optional string artifact_location = 3;</code>
       */
      public java.lang.String getArtifactLocation() {
        java.lang.Object ref = artifactLocation_;
        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()) {
            artifactLocation_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Location where artifacts for the experiment are stored.
       * </pre>
       *
       * <code>optional string artifact_location = 3;</code>
       */
      public com.google.protobuf.ByteString
          getArtifactLocationBytes() {
        java.lang.Object ref = artifactLocation_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          artifactLocation_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Location where artifacts for the experiment are stored.
       * </pre>
       *
       * <code>optional string artifact_location = 3;</code>
       */
      public Builder setArtifactLocation(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        artifactLocation_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Location where artifacts for the experiment are stored.
       * </pre>
       *
       * <code>optional string artifact_location = 3;</code>
       */
      public Builder clearArtifactLocation() {
        bitField0_ = (bitField0_ & ~0x00000004);
        artifactLocation_ = getDefaultInstance().getArtifactLocation();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Location where artifacts for the experiment are stored.
       * </pre>
       *
       * <code>optional string artifact_location = 3;</code>
       */
      public Builder setArtifactLocationBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        artifactLocation_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object lifecycleStage_ = "";
      /**
       * <pre>
       * Current life cycle stage of the experiment: "active" or "deleted".
       * Deleted experiments are not returned by APIs.
       * </pre>
       *
       * <code>optional string lifecycle_stage = 4;</code>
       */
      public boolean hasLifecycleStage() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <pre>
       * Current life cycle stage of the experiment: "active" or "deleted".
       * Deleted experiments are not returned by APIs.
       * </pre>
       *
       * <code>optional string lifecycle_stage = 4;</code>
       */
      public java.lang.String getLifecycleStage() {
        java.lang.Object ref = lifecycleStage_;
        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()) {
            lifecycleStage_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Current life cycle stage of the experiment: "active" or "deleted".
       * Deleted experiments are not returned by APIs.
       * </pre>
       *
       * <code>optional string lifecycle_stage = 4;</code>
       */
      public com.google.protobuf.ByteString
          getLifecycleStageBytes() {
        java.lang.Object ref = lifecycleStage_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          lifecycleStage_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Current life cycle stage of the experiment: "active" or "deleted".
       * Deleted experiments are not returned by APIs.
       * </pre>
       *
       * <code>optional string lifecycle_stage = 4;</code>
       */
      public Builder setLifecycleStage(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        lifecycleStage_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Current life cycle stage of the experiment: "active" or "deleted".
       * Deleted experiments are not returned by APIs.
       * </pre>
       *
       * <code>optional string lifecycle_stage = 4;</code>
       */
      public Builder clearLifecycleStage() {
        bitField0_ = (bitField0_ & ~0x00000008);
        lifecycleStage_ = getDefaultInstance().getLifecycleStage();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Current life cycle stage of the experiment: "active" or "deleted".
       * Deleted experiments are not returned by APIs.
       * </pre>
       *
       * <code>optional string lifecycle_stage = 4;</code>
       */
      public Builder setLifecycleStageBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000008;
        lifecycleStage_ = value;
        onChanged();
        return this;
      }

      private long lastUpdateTime_ ;
      /**
       * <pre>
       * Last update time
       * </pre>
       *
       * <code>optional int64 last_update_time = 5;</code>
       */
      public boolean hasLastUpdateTime() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <pre>
       * Last update time
       * </pre>
       *
       * <code>optional int64 last_update_time = 5;</code>
       */
      public long getLastUpdateTime() {
        return lastUpdateTime_;
      }
      /**
       * <pre>
       * Last update time
       * </pre>
       *
       * <code>optional int64 last_update_time = 5;</code>
       */
      public Builder setLastUpdateTime(long value) {
        bitField0_ |= 0x00000010;
        lastUpdateTime_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Last update time
       * </pre>
       *
       * <code>optional int64 last_update_time = 5;</code>
       */
      public Builder clearLastUpdateTime() {
        bitField0_ = (bitField0_ & ~0x00000010);
        lastUpdateTime_ = 0L;
        onChanged();
        return this;
      }

      private long creationTime_ ;
      /**
       * <pre>
       * Creation time
       * </pre>
       *
       * <code>optional int64 creation_time = 6;</code>
       */
      public boolean hasCreationTime() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <pre>
       * Creation time
       * </pre>
       *
       * <code>optional int64 creation_time = 6;</code>
       */
      public long getCreationTime() {
        return creationTime_;
      }
      /**
       * <pre>
       * Creation time
       * </pre>
       *
       * <code>optional int64 creation_time = 6;</code>
       */
      public Builder setCreationTime(long value) {
        bitField0_ |= 0x00000020;
        creationTime_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Creation time
       * </pre>
       *
       * <code>optional int64 creation_time = 6;</code>
       */
      public Builder clearCreationTime() {
        bitField0_ = (bitField0_ & ~0x00000020);
        creationTime_ = 0L;
        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.Experiment)
    }

    // @@protoc_insertion_point(class_scope:mlflow.Experiment)
    private static final org.mlflow.api.proto.Service.Experiment DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.Experiment();
    }

    public static org.mlflow.api.proto.Service.Experiment getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<Experiment>
        PARSER = new com.google.protobuf.AbstractParser<Experiment>() {
      @java.lang.Override
      public Experiment parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new Experiment(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<Experiment> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<Experiment> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public org.mlflow.api.proto.Service.Experiment getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface CreateExperimentOrBuilder extends
      // @@protoc_insertion_point(interface_extends:mlflow.CreateExperiment)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Experiment name.
     * </pre>
     *
     * <code>optional string name = 1 [(.validate_required) = true];</code>
     */
    boolean hasName();
    /**
     * <pre>
     * Experiment name.
     * </pre>
     *
     * <code>optional string name = 1 [(.validate_required) = true];</code>
     */
    java.lang.String getName();
    /**
     * <pre>
     * Experiment name.
     * </pre>
     *
     * <code>optional string name = 1 [(.validate_required) = true];</code>
     */
    com.google.protobuf.ByteString
        getNameBytes();

    /**
     * <pre>
     * Location where all artifacts for the experiment are stored.
     * If not provided, the remote server will select an appropriate default.
     * </pre>
     *
     * <code>optional string artifact_location = 2;</code>
     */
    boolean hasArtifactLocation();
    /**
     * <pre>
     * Location where all artifacts for the experiment are stored.
     * If not provided, the remote server will select an appropriate default.
     * </pre>
     *
     * <code>optional string artifact_location = 2;</code>
     */
    java.lang.String getArtifactLocation();
    /**
     * <pre>
     * Location where all artifacts for the experiment are stored.
     * If not provided, the remote server will select an appropriate default.
     * </pre>
     *
     * <code>optional string artifact_location = 2;</code>
     */
    com.google.protobuf.ByteString
        getArtifactLocationBytes();
  }
  /**
   * Protobuf type {@code mlflow.CreateExperiment}
   */
  public  static final class CreateExperiment extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:mlflow.CreateExperiment)
      CreateExperimentOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use CreateExperiment.newBuilder() to construct.
    private CreateExperiment(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private CreateExperiment() {
      name_ = "";
      artifactLocation_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private CreateExperiment(
        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;
              artifactLocation_ = 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_CreateExperiment_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.mlflow.api.proto.Service.internal_static_mlflow_CreateExperiment_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.mlflow.api.proto.Service.CreateExperiment.class, org.mlflow.api.proto.Service.CreateExperiment.Builder.class);
    }

    public interface ResponseOrBuilder extends
        // @@protoc_insertion_point(interface_extends:mlflow.CreateExperiment.Response)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <pre>
       * Unique identifier for the experiment.
       * </pre>
       *
       * <code>optional int64 experiment_id = 1;</code>
       */
      boolean hasExperimentId();
      /**
       * <pre>
       * Unique identifier for the experiment.
       * </pre>
       *
       * <code>optional int64 experiment_id = 1;</code>
       */
      long getExperimentId();
    }
    /**
     * Protobuf type {@code mlflow.CreateExperiment.Response}
     */
    public  static final class Response extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:mlflow.CreateExperiment.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() {
        experimentId_ = 0L;
      }

      @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 8: {
                bitField0_ |= 0x00000001;
                experimentId_ = input.readInt64();
                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_CreateExperiment_Response_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_CreateExperiment_Response_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.CreateExperiment.Response.class, org.mlflow.api.proto.Service.CreateExperiment.Response.Builder.class);
      }

      private int bitField0_;
      public static final int EXPERIMENT_ID_FIELD_NUMBER = 1;
      private long experimentId_;
      /**
       * <pre>
       * Unique identifier for the experiment.
       * </pre>
       *
       * <code>optional int64 experiment_id = 1;</code>
       */
      public boolean hasExperimentId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * Unique identifier for the experiment.
       * </pre>
       *
       * <code>optional int64 experiment_id = 1;</code>
       */
      public long getExperimentId() {
        return experimentId_;
      }

      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) == 0x00000001)) {
          output.writeInt64(1, experimentId_);
        }
        unknownFields.writeTo(output);
      }

      @java.lang.Override
      public int getSerializedSize() {
        int size = memoizedSize;
        if (size != -1) return size;

        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeInt64Size(1, experimentId_);
        }
        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.CreateExperiment.Response)) {
          return super.equals(obj);
        }
        org.mlflow.api.proto.Service.CreateExperiment.Response other = (org.mlflow.api.proto.Service.CreateExperiment.Response) obj;

        boolean result = true;
        result = result && (hasExperimentId() == other.hasExperimentId());
        if (hasExperimentId()) {
          result = result && (getExperimentId()
              == other.getExperimentId());
        }
        result = result && unknownFields.equals(other.unknownFields);
        return result;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        if (hasExperimentId()) {
          hash = (37 * hash) + EXPERIMENT_ID_FIELD_NUMBER;
          hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
              getExperimentId());
        }
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static org.mlflow.api.proto.Service.CreateExperiment.Response parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.CreateExperiment.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.CreateExperiment.Response parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.CreateExperiment.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.CreateExperiment.Response parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.CreateExperiment.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.CreateExperiment.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.CreateExperiment.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.CreateExperiment.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.CreateExperiment.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.CreateExperiment.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.CreateExperiment.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.CreateExperiment.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.CreateExperiment.Response}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:mlflow.CreateExperiment.Response)
          org.mlflow.api.proto.Service.CreateExperiment.ResponseOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_CreateExperiment_Response_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_CreateExperiment_Response_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  org.mlflow.api.proto.Service.CreateExperiment.Response.class, org.mlflow.api.proto.Service.CreateExperiment.Response.Builder.class);
        }

        // Construct using org.mlflow.api.proto.Service.CreateExperiment.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();
          experimentId_ = 0L;
          bitField0_ = (bitField0_ & ~0x00000001);
          return this;
        }

        @java.lang.Override
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_CreateExperiment_Response_descriptor;
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.CreateExperiment.Response getDefaultInstanceForType() {
          return org.mlflow.api.proto.Service.CreateExperiment.Response.getDefaultInstance();
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.CreateExperiment.Response build() {
          org.mlflow.api.proto.Service.CreateExperiment.Response result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.CreateExperiment.Response buildPartial() {
          org.mlflow.api.proto.Service.CreateExperiment.Response result = new org.mlflow.api.proto.Service.CreateExperiment.Response(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.experimentId_ = experimentId_;
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        @java.lang.Override
        public Builder clone() {
          return (Builder) super.clone();
        }
        @java.lang.Override
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.setField(field, value);
        }
        @java.lang.Override
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }
        @java.lang.Override
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }
        @java.lang.Override
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }
        @java.lang.Override
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }
        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof org.mlflow.api.proto.Service.CreateExperiment.Response) {
            return mergeFrom((org.mlflow.api.proto.Service.CreateExperiment.Response)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(org.mlflow.api.proto.Service.CreateExperiment.Response other) {
          if (other == org.mlflow.api.proto.Service.CreateExperiment.Response.getDefaultInstance()) return this;
          if (other.hasExperimentId()) {
            setExperimentId(other.getExperimentId());
          }
          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.CreateExperiment.Response parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (org.mlflow.api.proto.Service.CreateExperiment.Response) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        private long experimentId_ ;
        /**
         * <pre>
         * Unique identifier for the experiment.
         * </pre>
         *
         * <code>optional int64 experiment_id = 1;</code>
         */
        public boolean hasExperimentId() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <pre>
         * Unique identifier for the experiment.
         * </pre>
         *
         * <code>optional int64 experiment_id = 1;</code>
         */
        public long getExperimentId() {
          return experimentId_;
        }
        /**
         * <pre>
         * Unique identifier for the experiment.
         * </pre>
         *
         * <code>optional int64 experiment_id = 1;</code>
         */
        public Builder setExperimentId(long value) {
          bitField0_ |= 0x00000001;
          experimentId_ = value;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Unique identifier for the experiment.
         * </pre>
         *
         * <code>optional int64 experiment_id = 1;</code>
         */
        public Builder clearExperimentId() {
          bitField0_ = (bitField0_ & ~0x00000001);
          experimentId_ = 0L;
          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.CreateExperiment.Response)
      }

      // @@protoc_insertion_point(class_scope:mlflow.CreateExperiment.Response)
      private static final org.mlflow.api.proto.Service.CreateExperiment.Response DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.CreateExperiment.Response();
      }

      public static org.mlflow.api.proto.Service.CreateExperiment.Response getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      @java.lang.Deprecated public static final com.google.protobuf.Parser<Response>
          PARSER = new com.google.protobuf.AbstractParser<Response>() {
        @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<Response> parser() {
        return PARSER;
      }

      @java.lang.Override
      public com.google.protobuf.Parser<Response> getParserForType() {
        return PARSER;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.CreateExperiment.Response getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    private int bitField0_;
    public static final int NAME_FIELD_NUMBER = 1;
    private volatile java.lang.Object name_;
    /**
     * <pre>
     * Experiment name.
     * </pre>
     *
     * <code>optional string name = 1 [(.validate_required) = true];</code>
     */
    public boolean hasName() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * Experiment name.
     * </pre>
     *
     * <code>optional string name = 1 [(.validate_required) = true];</code>
     */
    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;
      }
    }
    /**
     * <pre>
     * Experiment name.
     * </pre>
     *
     * <code>optional string name = 1 [(.validate_required) = true];</code>
     */
    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 ARTIFACT_LOCATION_FIELD_NUMBER = 2;
    private volatile java.lang.Object artifactLocation_;
    /**
     * <pre>
     * Location where all artifacts for the experiment are stored.
     * If not provided, the remote server will select an appropriate default.
     * </pre>
     *
     * <code>optional string artifact_location = 2;</code>
     */
    public boolean hasArtifactLocation() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     * Location where all artifacts for the experiment are stored.
     * If not provided, the remote server will select an appropriate default.
     * </pre>
     *
     * <code>optional string artifact_location = 2;</code>
     */
    public java.lang.String getArtifactLocation() {
      java.lang.Object ref = artifactLocation_;
      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()) {
          artifactLocation_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Location where all artifacts for the experiment are stored.
     * If not provided, the remote server will select an appropriate default.
     * </pre>
     *
     * <code>optional string artifact_location = 2;</code>
     */
    public com.google.protobuf.ByteString
        getArtifactLocationBytes() {
      java.lang.Object ref = artifactLocation_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        artifactLocation_ = 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) == 0x00000001)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, artifactLocation_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, artifactLocation_);
      }
      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.CreateExperiment)) {
        return super.equals(obj);
      }
      org.mlflow.api.proto.Service.CreateExperiment other = (org.mlflow.api.proto.Service.CreateExperiment) obj;

      boolean result = true;
      result = result && (hasName() == other.hasName());
      if (hasName()) {
        result = result && getName()
            .equals(other.getName());
      }
      result = result && (hasArtifactLocation() == other.hasArtifactLocation());
      if (hasArtifactLocation()) {
        result = result && getArtifactLocation()
            .equals(other.getArtifactLocation());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @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 (hasArtifactLocation()) {
        hash = (37 * hash) + ARTIFACT_LOCATION_FIELD_NUMBER;
        hash = (53 * hash) + getArtifactLocation().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.mlflow.api.proto.Service.CreateExperiment parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.CreateExperiment 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.CreateExperiment parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.CreateExperiment 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.CreateExperiment parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.CreateExperiment 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.CreateExperiment parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.CreateExperiment 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.CreateExperiment parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.CreateExperiment 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.CreateExperiment 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.CreateExperiment 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.CreateExperiment 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.CreateExperiment}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:mlflow.CreateExperiment)
        org.mlflow.api.proto.Service.CreateExperimentOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_CreateExperiment_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_CreateExperiment_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.CreateExperiment.class, org.mlflow.api.proto.Service.CreateExperiment.Builder.class);
      }

      // Construct using org.mlflow.api.proto.Service.CreateExperiment.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);
        artifactLocation_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_CreateExperiment_descriptor;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.CreateExperiment getDefaultInstanceForType() {
        return org.mlflow.api.proto.Service.CreateExperiment.getDefaultInstance();
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.CreateExperiment build() {
        org.mlflow.api.proto.Service.CreateExperiment result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.CreateExperiment buildPartial() {
        org.mlflow.api.proto.Service.CreateExperiment result = new org.mlflow.api.proto.Service.CreateExperiment(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.name_ = name_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.artifactLocation_ = artifactLocation_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.mlflow.api.proto.Service.CreateExperiment) {
          return mergeFrom((org.mlflow.api.proto.Service.CreateExperiment)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.mlflow.api.proto.Service.CreateExperiment other) {
        if (other == org.mlflow.api.proto.Service.CreateExperiment.getDefaultInstance()) return this;
        if (other.hasName()) {
          bitField0_ |= 0x00000001;
          name_ = other.name_;
          onChanged();
        }
        if (other.hasArtifactLocation()) {
          bitField0_ |= 0x00000002;
          artifactLocation_ = other.artifactLocation_;
          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.CreateExperiment parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.mlflow.api.proto.Service.CreateExperiment) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object name_ = "";
      /**
       * <pre>
       * Experiment name.
       * </pre>
       *
       * <code>optional string name = 1 [(.validate_required) = true];</code>
       */
      public boolean hasName() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * Experiment name.
       * </pre>
       *
       * <code>optional string name = 1 [(.validate_required) = true];</code>
       */
      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;
        }
      }
      /**
       * <pre>
       * Experiment name.
       * </pre>
       *
       * <code>optional string name = 1 [(.validate_required) = true];</code>
       */
      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;
        }
      }
      /**
       * <pre>
       * Experiment name.
       * </pre>
       *
       * <code>optional string name = 1 [(.validate_required) = true];</code>
       */
      public Builder setName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        name_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Experiment name.
       * </pre>
       *
       * <code>optional string name = 1 [(.validate_required) = true];</code>
       */
      public Builder clearName() {
        bitField0_ = (bitField0_ & ~0x00000001);
        name_ = getDefaultInstance().getName();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Experiment name.
       * </pre>
       *
       * <code>optional string name = 1 [(.validate_required) = true];</code>
       */
      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 artifactLocation_ = "";
      /**
       * <pre>
       * Location where all artifacts for the experiment are stored.
       * If not provided, the remote server will select an appropriate default.
       * </pre>
       *
       * <code>optional string artifact_location = 2;</code>
       */
      public boolean hasArtifactLocation() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * Location where all artifacts for the experiment are stored.
       * If not provided, the remote server will select an appropriate default.
       * </pre>
       *
       * <code>optional string artifact_location = 2;</code>
       */
      public java.lang.String getArtifactLocation() {
        java.lang.Object ref = artifactLocation_;
        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()) {
            artifactLocation_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Location where all artifacts for the experiment are stored.
       * If not provided, the remote server will select an appropriate default.
       * </pre>
       *
       * <code>optional string artifact_location = 2;</code>
       */
      public com.google.protobuf.ByteString
          getArtifactLocationBytes() {
        java.lang.Object ref = artifactLocation_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          artifactLocation_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Location where all artifacts for the experiment are stored.
       * If not provided, the remote server will select an appropriate default.
       * </pre>
       *
       * <code>optional string artifact_location = 2;</code>
       */
      public Builder setArtifactLocation(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        artifactLocation_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Location where all artifacts for the experiment are stored.
       * If not provided, the remote server will select an appropriate default.
       * </pre>
       *
       * <code>optional string artifact_location = 2;</code>
       */
      public Builder clearArtifactLocation() {
        bitField0_ = (bitField0_ & ~0x00000002);
        artifactLocation_ = getDefaultInstance().getArtifactLocation();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Location where all artifacts for the experiment are stored.
       * If not provided, the remote server will select an appropriate default.
       * </pre>
       *
       * <code>optional string artifact_location = 2;</code>
       */
      public Builder setArtifactLocationBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        artifactLocation_ = 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.CreateExperiment)
    }

    // @@protoc_insertion_point(class_scope:mlflow.CreateExperiment)
    private static final org.mlflow.api.proto.Service.CreateExperiment DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.CreateExperiment();
    }

    public static org.mlflow.api.proto.Service.CreateExperiment getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<CreateExperiment>
        PARSER = new com.google.protobuf.AbstractParser<CreateExperiment>() {
      @java.lang.Override
      public CreateExperiment parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new CreateExperiment(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<CreateExperiment> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<CreateExperiment> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public org.mlflow.api.proto.Service.CreateExperiment getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ListExperimentsOrBuilder extends
      // @@protoc_insertion_point(interface_extends:mlflow.ListExperiments)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Qualifier for type of experiments to be returned.
     * If unspecified, return only active experiments.
     * </pre>
     *
     * <code>optional .mlflow.ViewType view_type = 1;</code>
     */
    boolean hasViewType();
    /**
     * <pre>
     * Qualifier for type of experiments to be returned.
     * If unspecified, return only active experiments.
     * </pre>
     *
     * <code>optional .mlflow.ViewType view_type = 1;</code>
     */
    org.mlflow.api.proto.Service.ViewType getViewType();
  }
  /**
   * Protobuf type {@code mlflow.ListExperiments}
   */
  public  static final class ListExperiments extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:mlflow.ListExperiments)
      ListExperimentsOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ListExperiments.newBuilder() to construct.
    private ListExperiments(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ListExperiments() {
      viewType_ = 1;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private ListExperiments(
        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 8: {
              int rawValue = input.readEnum();
                @SuppressWarnings("deprecation")
              org.mlflow.api.proto.Service.ViewType value = org.mlflow.api.proto.Service.ViewType.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(1, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                viewType_ = rawValue;
              }
              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_ListExperiments_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.mlflow.api.proto.Service.internal_static_mlflow_ListExperiments_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.mlflow.api.proto.Service.ListExperiments.class, org.mlflow.api.proto.Service.ListExperiments.Builder.class);
    }

    public interface ResponseOrBuilder extends
        // @@protoc_insertion_point(interface_extends:mlflow.ListExperiments.Response)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <pre>
       * All experiments
       * </pre>
       *
       * <code>repeated .mlflow.Experiment experiments = 1;</code>
       */
      java.util.List<org.mlflow.api.proto.Service.Experiment> 
          getExperimentsList();
      /**
       * <pre>
       * All experiments
       * </pre>
       *
       * <code>repeated .mlflow.Experiment experiments = 1;</code>
       */
      org.mlflow.api.proto.Service.Experiment getExperiments(int index);
      /**
       * <pre>
       * All experiments
       * </pre>
       *
       * <code>repeated .mlflow.Experiment experiments = 1;</code>
       */
      int getExperimentsCount();
      /**
       * <pre>
       * All experiments
       * </pre>
       *
       * <code>repeated .mlflow.Experiment experiments = 1;</code>
       */
      java.util.List<? extends org.mlflow.api.proto.Service.ExperimentOrBuilder> 
          getExperimentsOrBuilderList();
      /**
       * <pre>
       * All experiments
       * </pre>
       *
       * <code>repeated .mlflow.Experiment experiments = 1;</code>
       */
      org.mlflow.api.proto.Service.ExperimentOrBuilder getExperimentsOrBuilder(
          int index);
    }
    /**
     * Protobuf type {@code mlflow.ListExperiments.Response}
     */
    public  static final class Response extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:mlflow.ListExperiments.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() {
        experiments_ = java.util.Collections.emptyList();
      }

      @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) == 0x00000001)) {
                  experiments_ = new java.util.ArrayList<org.mlflow.api.proto.Service.Experiment>();
                  mutable_bitField0_ |= 0x00000001;
                }
                experiments_.add(
                    input.readMessage(org.mlflow.api.proto.Service.Experiment.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) == 0x00000001)) {
            experiments_ = java.util.Collections.unmodifiableList(experiments_);
          }
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_ListExperiments_Response_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_ListExperiments_Response_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.ListExperiments.Response.class, org.mlflow.api.proto.Service.ListExperiments.Response.Builder.class);
      }

      public static final int EXPERIMENTS_FIELD_NUMBER = 1;
      private java.util.List<org.mlflow.api.proto.Service.Experiment> experiments_;
      /**
       * <pre>
       * All experiments
       * </pre>
       *
       * <code>repeated .mlflow.Experiment experiments = 1;</code>
       */
      public java.util.List<org.mlflow.api.proto.Service.Experiment> getExperimentsList() {
        return experiments_;
      }
      /**
       * <pre>
       * All experiments
       * </pre>
       *
       * <code>repeated .mlflow.Experiment experiments = 1;</code>
       */
      public java.util.List<? extends org.mlflow.api.proto.Service.ExperimentOrBuilder> 
          getExperimentsOrBuilderList() {
        return experiments_;
      }
      /**
       * <pre>
       * All experiments
       * </pre>
       *
       * <code>repeated .mlflow.Experiment experiments = 1;</code>
       */
      public int getExperimentsCount() {
        return experiments_.size();
      }
      /**
       * <pre>
       * All experiments
       * </pre>
       *
       * <code>repeated .mlflow.Experiment experiments = 1;</code>
       */
      public org.mlflow.api.proto.Service.Experiment getExperiments(int index) {
        return experiments_.get(index);
      }
      /**
       * <pre>
       * All experiments
       * </pre>
       *
       * <code>repeated .mlflow.Experiment experiments = 1;</code>
       */
      public org.mlflow.api.proto.Service.ExperimentOrBuilder getExperimentsOrBuilder(
          int index) {
        return experiments_.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 < experiments_.size(); i++) {
          output.writeMessage(1, experiments_.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 < experiments_.size(); i++) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(1, experiments_.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.ListExperiments.Response)) {
          return super.equals(obj);
        }
        org.mlflow.api.proto.Service.ListExperiments.Response other = (org.mlflow.api.proto.Service.ListExperiments.Response) obj;

        boolean result = true;
        result = result && getExperimentsList()
            .equals(other.getExperimentsList());
        result = result && unknownFields.equals(other.unknownFields);
        return result;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        if (getExperimentsCount() > 0) {
          hash = (37 * hash) + EXPERIMENTS_FIELD_NUMBER;
          hash = (53 * hash) + getExperimentsList().hashCode();
        }
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static org.mlflow.api.proto.Service.ListExperiments.Response parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.ListExperiments.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.ListExperiments.Response parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.ListExperiments.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.ListExperiments.Response parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.ListExperiments.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.ListExperiments.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.ListExperiments.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.ListExperiments.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.ListExperiments.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.ListExperiments.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.ListExperiments.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.ListExperiments.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.ListExperiments.Response}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:mlflow.ListExperiments.Response)
          org.mlflow.api.proto.Service.ListExperiments.ResponseOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_ListExperiments_Response_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_ListExperiments_Response_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  org.mlflow.api.proto.Service.ListExperiments.Response.class, org.mlflow.api.proto.Service.ListExperiments.Response.Builder.class);
        }

        // Construct using org.mlflow.api.proto.Service.ListExperiments.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) {
            getExperimentsFieldBuilder();
          }
        }
        @java.lang.Override
        public Builder clear() {
          super.clear();
          if (experimentsBuilder_ == null) {
            experiments_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            experimentsBuilder_.clear();
          }
          return this;
        }

        @java.lang.Override
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_ListExperiments_Response_descriptor;
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.ListExperiments.Response getDefaultInstanceForType() {
          return org.mlflow.api.proto.Service.ListExperiments.Response.getDefaultInstance();
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.ListExperiments.Response build() {
          org.mlflow.api.proto.Service.ListExperiments.Response result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.ListExperiments.Response buildPartial() {
          org.mlflow.api.proto.Service.ListExperiments.Response result = new org.mlflow.api.proto.Service.ListExperiments.Response(this);
          int from_bitField0_ = bitField0_;
          if (experimentsBuilder_ == null) {
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
              experiments_ = java.util.Collections.unmodifiableList(experiments_);
              bitField0_ = (bitField0_ & ~0x00000001);
            }
            result.experiments_ = experiments_;
          } else {
            result.experiments_ = experimentsBuilder_.build();
          }
          onBuilt();
          return result;
        }

        @java.lang.Override
        public Builder clone() {
          return (Builder) super.clone();
        }
        @java.lang.Override
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.setField(field, value);
        }
        @java.lang.Override
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }
        @java.lang.Override
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }
        @java.lang.Override
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }
        @java.lang.Override
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }
        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof org.mlflow.api.proto.Service.ListExperiments.Response) {
            return mergeFrom((org.mlflow.api.proto.Service.ListExperiments.Response)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(org.mlflow.api.proto.Service.ListExperiments.Response other) {
          if (other == org.mlflow.api.proto.Service.ListExperiments.Response.getDefaultInstance()) return this;
          if (experimentsBuilder_ == null) {
            if (!other.experiments_.isEmpty()) {
              if (experiments_.isEmpty()) {
                experiments_ = other.experiments_;
                bitField0_ = (bitField0_ & ~0x00000001);
              } else {
                ensureExperimentsIsMutable();
                experiments_.addAll(other.experiments_);
              }
              onChanged();
            }
          } else {
            if (!other.experiments_.isEmpty()) {
              if (experimentsBuilder_.isEmpty()) {
                experimentsBuilder_.dispose();
                experimentsBuilder_ = null;
                experiments_ = other.experiments_;
                bitField0_ = (bitField0_ & ~0x00000001);
                experimentsBuilder_ = 
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                     getExperimentsFieldBuilder() : null;
              } else {
                experimentsBuilder_.addAllMessages(other.experiments_);
              }
            }
          }
          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.ListExperiments.Response parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (org.mlflow.api.proto.Service.ListExperiments.Response) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        private java.util.List<org.mlflow.api.proto.Service.Experiment> experiments_ =
          java.util.Collections.emptyList();
        private void ensureExperimentsIsMutable() {
          if (!((bitField0_ & 0x00000001) == 0x00000001)) {
            experiments_ = new java.util.ArrayList<org.mlflow.api.proto.Service.Experiment>(experiments_);
            bitField0_ |= 0x00000001;
           }
        }

        private com.google.protobuf.RepeatedFieldBuilderV3<
            org.mlflow.api.proto.Service.Experiment, org.mlflow.api.proto.Service.Experiment.Builder, org.mlflow.api.proto.Service.ExperimentOrBuilder> experimentsBuilder_;

        /**
         * <pre>
         * All experiments
         * </pre>
         *
         * <code>repeated .mlflow.Experiment experiments = 1;</code>
         */
        public java.util.List<org.mlflow.api.proto.Service.Experiment> getExperimentsList() {
          if (experimentsBuilder_ == null) {
            return java.util.Collections.unmodifiableList(experiments_);
          } else {
            return experimentsBuilder_.getMessageList();
          }
        }
        /**
         * <pre>
         * All experiments
         * </pre>
         *
         * <code>repeated .mlflow.Experiment experiments = 1;</code>
         */
        public int getExperimentsCount() {
          if (experimentsBuilder_ == null) {
            return experiments_.size();
          } else {
            return experimentsBuilder_.getCount();
          }
        }
        /**
         * <pre>
         * All experiments
         * </pre>
         *
         * <code>repeated .mlflow.Experiment experiments = 1;</code>
         */
        public org.mlflow.api.proto.Service.Experiment getExperiments(int index) {
          if (experimentsBuilder_ == null) {
            return experiments_.get(index);
          } else {
            return experimentsBuilder_.getMessage(index);
          }
        }
        /**
         * <pre>
         * All experiments
         * </pre>
         *
         * <code>repeated .mlflow.Experiment experiments = 1;</code>
         */
        public Builder setExperiments(
            int index, org.mlflow.api.proto.Service.Experiment value) {
          if (experimentsBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureExperimentsIsMutable();
            experiments_.set(index, value);
            onChanged();
          } else {
            experimentsBuilder_.setMessage(index, value);
          }
          return this;
        }
        /**
         * <pre>
         * All experiments
         * </pre>
         *
         * <code>repeated .mlflow.Experiment experiments = 1;</code>
         */
        public Builder setExperiments(
            int index, org.mlflow.api.proto.Service.Experiment.Builder builderForValue) {
          if (experimentsBuilder_ == null) {
            ensureExperimentsIsMutable();
            experiments_.set(index, builderForValue.build());
            onChanged();
          } else {
            experimentsBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * All experiments
         * </pre>
         *
         * <code>repeated .mlflow.Experiment experiments = 1;</code>
         */
        public Builder addExperiments(org.mlflow.api.proto.Service.Experiment value) {
          if (experimentsBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureExperimentsIsMutable();
            experiments_.add(value);
            onChanged();
          } else {
            experimentsBuilder_.addMessage(value);
          }
          return this;
        }
        /**
         * <pre>
         * All experiments
         * </pre>
         *
         * <code>repeated .mlflow.Experiment experiments = 1;</code>
         */
        public Builder addExperiments(
            int index, org.mlflow.api.proto.Service.Experiment value) {
          if (experimentsBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureExperimentsIsMutable();
            experiments_.add(index, value);
            onChanged();
          } else {
            experimentsBuilder_.addMessage(index, value);
          }
          return this;
        }
        /**
         * <pre>
         * All experiments
         * </pre>
         *
         * <code>repeated .mlflow.Experiment experiments = 1;</code>
         */
        public Builder addExperiments(
            org.mlflow.api.proto.Service.Experiment.Builder builderForValue) {
          if (experimentsBuilder_ == null) {
            ensureExperimentsIsMutable();
            experiments_.add(builderForValue.build());
            onChanged();
          } else {
            experimentsBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * All experiments
         * </pre>
         *
         * <code>repeated .mlflow.Experiment experiments = 1;</code>
         */
        public Builder addExperiments(
            int index, org.mlflow.api.proto.Service.Experiment.Builder builderForValue) {
          if (experimentsBuilder_ == null) {
            ensureExperimentsIsMutable();
            experiments_.add(index, builderForValue.build());
            onChanged();
          } else {
            experimentsBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * All experiments
         * </pre>
         *
         * <code>repeated .mlflow.Experiment experiments = 1;</code>
         */
        public Builder addAllExperiments(
            java.lang.Iterable<? extends org.mlflow.api.proto.Service.Experiment> values) {
          if (experimentsBuilder_ == null) {
            ensureExperimentsIsMutable();
            com.google.protobuf.AbstractMessageLite.Builder.addAll(
                values, experiments_);
            onChanged();
          } else {
            experimentsBuilder_.addAllMessages(values);
          }
          return this;
        }
        /**
         * <pre>
         * All experiments
         * </pre>
         *
         * <code>repeated .mlflow.Experiment experiments = 1;</code>
         */
        public Builder clearExperiments() {
          if (experimentsBuilder_ == null) {
            experiments_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000001);
            onChanged();
          } else {
            experimentsBuilder_.clear();
          }
          return this;
        }
        /**
         * <pre>
         * All experiments
         * </pre>
         *
         * <code>repeated .mlflow.Experiment experiments = 1;</code>
         */
        public Builder removeExperiments(int index) {
          if (experimentsBuilder_ == null) {
            ensureExperimentsIsMutable();
            experiments_.remove(index);
            onChanged();
          } else {
            experimentsBuilder_.remove(index);
          }
          return this;
        }
        /**
         * <pre>
         * All experiments
         * </pre>
         *
         * <code>repeated .mlflow.Experiment experiments = 1;</code>
         */
        public org.mlflow.api.proto.Service.Experiment.Builder getExperimentsBuilder(
            int index) {
          return getExperimentsFieldBuilder().getBuilder(index);
        }
        /**
         * <pre>
         * All experiments
         * </pre>
         *
         * <code>repeated .mlflow.Experiment experiments = 1;</code>
         */
        public org.mlflow.api.proto.Service.ExperimentOrBuilder getExperimentsOrBuilder(
            int index) {
          if (experimentsBuilder_ == null) {
            return experiments_.get(index);  } else {
            return experimentsBuilder_.getMessageOrBuilder(index);
          }
        }
        /**
         * <pre>
         * All experiments
         * </pre>
         *
         * <code>repeated .mlflow.Experiment experiments = 1;</code>
         */
        public java.util.List<? extends org.mlflow.api.proto.Service.ExperimentOrBuilder> 
             getExperimentsOrBuilderList() {
          if (experimentsBuilder_ != null) {
            return experimentsBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(experiments_);
          }
        }
        /**
         * <pre>
         * All experiments
         * </pre>
         *
         * <code>repeated .mlflow.Experiment experiments = 1;</code>
         */
        public org.mlflow.api.proto.Service.Experiment.Builder addExperimentsBuilder() {
          return getExperimentsFieldBuilder().addBuilder(
              org.mlflow.api.proto.Service.Experiment.getDefaultInstance());
        }
        /**
         * <pre>
         * All experiments
         * </pre>
         *
         * <code>repeated .mlflow.Experiment experiments = 1;</code>
         */
        public org.mlflow.api.proto.Service.Experiment.Builder addExperimentsBuilder(
            int index) {
          return getExperimentsFieldBuilder().addBuilder(
              index, org.mlflow.api.proto.Service.Experiment.getDefaultInstance());
        }
        /**
         * <pre>
         * All experiments
         * </pre>
         *
         * <code>repeated .mlflow.Experiment experiments = 1;</code>
         */
        public java.util.List<org.mlflow.api.proto.Service.Experiment.Builder> 
             getExperimentsBuilderList() {
          return getExperimentsFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilderV3<
            org.mlflow.api.proto.Service.Experiment, org.mlflow.api.proto.Service.Experiment.Builder, org.mlflow.api.proto.Service.ExperimentOrBuilder> 
            getExperimentsFieldBuilder() {
          if (experimentsBuilder_ == null) {
            experimentsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
                org.mlflow.api.proto.Service.Experiment, org.mlflow.api.proto.Service.Experiment.Builder, org.mlflow.api.proto.Service.ExperimentOrBuilder>(
                    experiments_,
                    ((bitField0_ & 0x00000001) == 0x00000001),
                    getParentForChildren(),
                    isClean());
            experiments_ = null;
          }
          return experimentsBuilder_;
        }
        @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.ListExperiments.Response)
      }

      // @@protoc_insertion_point(class_scope:mlflow.ListExperiments.Response)
      private static final org.mlflow.api.proto.Service.ListExperiments.Response DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.ListExperiments.Response();
      }

      public static org.mlflow.api.proto.Service.ListExperiments.Response getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      @java.lang.Deprecated public static final com.google.protobuf.Parser<Response>
          PARSER = new com.google.protobuf.AbstractParser<Response>() {
        @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<Response> parser() {
        return PARSER;
      }

      @java.lang.Override
      public com.google.protobuf.Parser<Response> getParserForType() {
        return PARSER;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.ListExperiments.Response getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    private int bitField0_;
    public static final int VIEW_TYPE_FIELD_NUMBER = 1;
    private int viewType_;
    /**
     * <pre>
     * Qualifier for type of experiments to be returned.
     * If unspecified, return only active experiments.
     * </pre>
     *
     * <code>optional .mlflow.ViewType view_type = 1;</code>
     */
    public boolean hasViewType() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * Qualifier for type of experiments to be returned.
     * If unspecified, return only active experiments.
     * </pre>
     *
     * <code>optional .mlflow.ViewType view_type = 1;</code>
     */
    public org.mlflow.api.proto.Service.ViewType getViewType() {
      @SuppressWarnings("deprecation")
      org.mlflow.api.proto.Service.ViewType result = org.mlflow.api.proto.Service.ViewType.valueOf(viewType_);
      return result == null ? org.mlflow.api.proto.Service.ViewType.ACTIVE_ONLY : result;
    }

    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) == 0x00000001)) {
        output.writeEnum(1, viewType_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(1, viewType_);
      }
      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.ListExperiments)) {
        return super.equals(obj);
      }
      org.mlflow.api.proto.Service.ListExperiments other = (org.mlflow.api.proto.Service.ListExperiments) obj;

      boolean result = true;
      result = result && (hasViewType() == other.hasViewType());
      if (hasViewType()) {
        result = result && viewType_ == other.viewType_;
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasViewType()) {
        hash = (37 * hash) + VIEW_TYPE_FIELD_NUMBER;
        hash = (53 * hash) + viewType_;
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.mlflow.api.proto.Service.ListExperiments parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.ListExperiments 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.ListExperiments parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.ListExperiments 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.ListExperiments parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.ListExperiments 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.ListExperiments parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.ListExperiments 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.ListExperiments parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.ListExperiments 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.ListExperiments 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.ListExperiments 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.ListExperiments 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.ListExperiments}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:mlflow.ListExperiments)
        org.mlflow.api.proto.Service.ListExperimentsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_ListExperiments_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_ListExperiments_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.ListExperiments.class, org.mlflow.api.proto.Service.ListExperiments.Builder.class);
      }

      // Construct using org.mlflow.api.proto.Service.ListExperiments.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();
        viewType_ = 1;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_ListExperiments_descriptor;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.ListExperiments getDefaultInstanceForType() {
        return org.mlflow.api.proto.Service.ListExperiments.getDefaultInstance();
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.ListExperiments build() {
        org.mlflow.api.proto.Service.ListExperiments result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.ListExperiments buildPartial() {
        org.mlflow.api.proto.Service.ListExperiments result = new org.mlflow.api.proto.Service.ListExperiments(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.viewType_ = viewType_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.mlflow.api.proto.Service.ListExperiments) {
          return mergeFrom((org.mlflow.api.proto.Service.ListExperiments)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.mlflow.api.proto.Service.ListExperiments other) {
        if (other == org.mlflow.api.proto.Service.ListExperiments.getDefaultInstance()) return this;
        if (other.hasViewType()) {
          setViewType(other.getViewType());
        }
        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.ListExperiments parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.mlflow.api.proto.Service.ListExperiments) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private int viewType_ = 1;
      /**
       * <pre>
       * Qualifier for type of experiments to be returned.
       * If unspecified, return only active experiments.
       * </pre>
       *
       * <code>optional .mlflow.ViewType view_type = 1;</code>
       */
      public boolean hasViewType() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * Qualifier for type of experiments to be returned.
       * If unspecified, return only active experiments.
       * </pre>
       *
       * <code>optional .mlflow.ViewType view_type = 1;</code>
       */
      public org.mlflow.api.proto.Service.ViewType getViewType() {
        @SuppressWarnings("deprecation")
        org.mlflow.api.proto.Service.ViewType result = org.mlflow.api.proto.Service.ViewType.valueOf(viewType_);
        return result == null ? org.mlflow.api.proto.Service.ViewType.ACTIVE_ONLY : result;
      }
      /**
       * <pre>
       * Qualifier for type of experiments to be returned.
       * If unspecified, return only active experiments.
       * </pre>
       *
       * <code>optional .mlflow.ViewType view_type = 1;</code>
       */
      public Builder setViewType(org.mlflow.api.proto.Service.ViewType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000001;
        viewType_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Qualifier for type of experiments to be returned.
       * If unspecified, return only active experiments.
       * </pre>
       *
       * <code>optional .mlflow.ViewType view_type = 1;</code>
       */
      public Builder clearViewType() {
        bitField0_ = (bitField0_ & ~0x00000001);
        viewType_ = 1;
        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.ListExperiments)
    }

    // @@protoc_insertion_point(class_scope:mlflow.ListExperiments)
    private static final org.mlflow.api.proto.Service.ListExperiments DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.ListExperiments();
    }

    public static org.mlflow.api.proto.Service.ListExperiments getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<ListExperiments>
        PARSER = new com.google.protobuf.AbstractParser<ListExperiments>() {
      @java.lang.Override
      public ListExperiments parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new ListExperiments(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<ListExperiments> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<ListExperiments> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public org.mlflow.api.proto.Service.ListExperiments getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface GetExperimentOrBuilder extends
      // @@protoc_insertion_point(interface_extends:mlflow.GetExperiment)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * ID of the associated experiment.
     * </pre>
     *
     * <code>optional int64 experiment_id = 1 [(.validate_required) = true];</code>
     */
    boolean hasExperimentId();
    /**
     * <pre>
     * ID of the associated experiment.
     * </pre>
     *
     * <code>optional int64 experiment_id = 1 [(.validate_required) = true];</code>
     */
    long getExperimentId();
  }
  /**
   * Protobuf type {@code mlflow.GetExperiment}
   */
  public  static final class GetExperiment extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:mlflow.GetExperiment)
      GetExperimentOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use GetExperiment.newBuilder() to construct.
    private GetExperiment(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private GetExperiment() {
      experimentId_ = 0L;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private GetExperiment(
        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 8: {
              bitField0_ |= 0x00000001;
              experimentId_ = input.readInt64();
              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_GetExperiment_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.mlflow.api.proto.Service.internal_static_mlflow_GetExperiment_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.mlflow.api.proto.Service.GetExperiment.class, org.mlflow.api.proto.Service.GetExperiment.Builder.class);
    }

    public interface ResponseOrBuilder extends
        // @@protoc_insertion_point(interface_extends:mlflow.GetExperiment.Response)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <pre>
       * Returns experiment details.
       * </pre>
       *
       * <code>optional .mlflow.Experiment experiment = 1;</code>
       */
      boolean hasExperiment();
      /**
       * <pre>
       * Returns experiment details.
       * </pre>
       *
       * <code>optional .mlflow.Experiment experiment = 1;</code>
       */
      org.mlflow.api.proto.Service.Experiment getExperiment();
      /**
       * <pre>
       * Returns experiment details.
       * </pre>
       *
       * <code>optional .mlflow.Experiment experiment = 1;</code>
       */
      org.mlflow.api.proto.Service.ExperimentOrBuilder getExperimentOrBuilder();

      /**
       * <pre>
       * All (max limit to be imposed) active runs associated with this experiment.
       * </pre>
       *
       * <code>repeated .mlflow.RunInfo runs = 2;</code>
       */
      java.util.List<org.mlflow.api.proto.Service.RunInfo> 
          getRunsList();
      /**
       * <pre>
       * All (max limit to be imposed) active runs associated with this experiment.
       * </pre>
       *
       * <code>repeated .mlflow.RunInfo runs = 2;</code>
       */
      org.mlflow.api.proto.Service.RunInfo getRuns(int index);
      /**
       * <pre>
       * All (max limit to be imposed) active runs associated with this experiment.
       * </pre>
       *
       * <code>repeated .mlflow.RunInfo runs = 2;</code>
       */
      int getRunsCount();
      /**
       * <pre>
       * All (max limit to be imposed) active runs associated with this experiment.
       * </pre>
       *
       * <code>repeated .mlflow.RunInfo runs = 2;</code>
       */
      java.util.List<? extends org.mlflow.api.proto.Service.RunInfoOrBuilder> 
          getRunsOrBuilderList();
      /**
       * <pre>
       * All (max limit to be imposed) active runs associated with this experiment.
       * </pre>
       *
       * <code>repeated .mlflow.RunInfo runs = 2;</code>
       */
      org.mlflow.api.proto.Service.RunInfoOrBuilder getRunsOrBuilder(
          int index);
    }
    /**
     * Protobuf type {@code mlflow.GetExperiment.Response}
     */
    public  static final class Response extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:mlflow.GetExperiment.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() {
        runs_ = java.util.Collections.emptyList();
      }

      @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.Experiment.Builder subBuilder = null;
                if (((bitField0_ & 0x00000001) == 0x00000001)) {
                  subBuilder = experiment_.toBuilder();
                }
                experiment_ = input.readMessage(org.mlflow.api.proto.Service.Experiment.PARSER, extensionRegistry);
                if (subBuilder != null) {
                  subBuilder.mergeFrom(experiment_);
                  experiment_ = subBuilder.buildPartial();
                }
                bitField0_ |= 0x00000001;
                break;
              }
              case 18: {
                if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                  runs_ = new java.util.ArrayList<org.mlflow.api.proto.Service.RunInfo>();
                  mutable_bitField0_ |= 0x00000002;
                }
                runs_.add(
                    input.readMessage(org.mlflow.api.proto.Service.RunInfo.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_ & 0x00000002) == 0x00000002)) {
            runs_ = java.util.Collections.unmodifiableList(runs_);
          }
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_GetExperiment_Response_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_GetExperiment_Response_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.GetExperiment.Response.class, org.mlflow.api.proto.Service.GetExperiment.Response.Builder.class);
      }

      private int bitField0_;
      public static final int EXPERIMENT_FIELD_NUMBER = 1;
      private org.mlflow.api.proto.Service.Experiment experiment_;
      /**
       * <pre>
       * Returns experiment details.
       * </pre>
       *
       * <code>optional .mlflow.Experiment experiment = 1;</code>
       */
      public boolean hasExperiment() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * Returns experiment details.
       * </pre>
       *
       * <code>optional .mlflow.Experiment experiment = 1;</code>
       */
      public org.mlflow.api.proto.Service.Experiment getExperiment() {
        return experiment_ == null ? org.mlflow.api.proto.Service.Experiment.getDefaultInstance() : experiment_;
      }
      /**
       * <pre>
       * Returns experiment details.
       * </pre>
       *
       * <code>optional .mlflow.Experiment experiment = 1;</code>
       */
      public org.mlflow.api.proto.Service.ExperimentOrBuilder getExperimentOrBuilder() {
        return experiment_ == null ? org.mlflow.api.proto.Service.Experiment.getDefaultInstance() : experiment_;
      }

      public static final int RUNS_FIELD_NUMBER = 2;
      private java.util.List<org.mlflow.api.proto.Service.RunInfo> runs_;
      /**
       * <pre>
       * All (max limit to be imposed) active runs associated with this experiment.
       * </pre>
       *
       * <code>repeated .mlflow.RunInfo runs = 2;</code>
       */
      public java.util.List<org.mlflow.api.proto.Service.RunInfo> getRunsList() {
        return runs_;
      }
      /**
       * <pre>
       * All (max limit to be imposed) active runs associated with this experiment.
       * </pre>
       *
       * <code>repeated .mlflow.RunInfo runs = 2;</code>
       */
      public java.util.List<? extends org.mlflow.api.proto.Service.RunInfoOrBuilder> 
          getRunsOrBuilderList() {
        return runs_;
      }
      /**
       * <pre>
       * All (max limit to be imposed) active runs associated with this experiment.
       * </pre>
       *
       * <code>repeated .mlflow.RunInfo runs = 2;</code>
       */
      public int getRunsCount() {
        return runs_.size();
      }
      /**
       * <pre>
       * All (max limit to be imposed) active runs associated with this experiment.
       * </pre>
       *
       * <code>repeated .mlflow.RunInfo runs = 2;</code>
       */
      public org.mlflow.api.proto.Service.RunInfo getRuns(int index) {
        return runs_.get(index);
      }
      /**
       * <pre>
       * All (max limit to be imposed) active runs associated with this experiment.
       * </pre>
       *
       * <code>repeated .mlflow.RunInfo runs = 2;</code>
       */
      public org.mlflow.api.proto.Service.RunInfoOrBuilder getRunsOrBuilder(
          int index) {
        return runs_.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 {
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          output.writeMessage(1, getExperiment());
        }
        for (int i = 0; i < runs_.size(); i++) {
          output.writeMessage(2, runs_.get(i));
        }
        unknownFields.writeTo(output);
      }

      @java.lang.Override
      public int getSerializedSize() {
        int size = memoizedSize;
        if (size != -1) return size;

        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(1, getExperiment());
        }
        for (int i = 0; i < runs_.size(); i++) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(2, runs_.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.GetExperiment.Response)) {
          return super.equals(obj);
        }
        org.mlflow.api.proto.Service.GetExperiment.Response other = (org.mlflow.api.proto.Service.GetExperiment.Response) obj;

        boolean result = true;
        result = result && (hasExperiment() == other.hasExperiment());
        if (hasExperiment()) {
          result = result && getExperiment()
              .equals(other.getExperiment());
        }
        result = result && getRunsList()
            .equals(other.getRunsList());
        result = result && unknownFields.equals(other.unknownFields);
        return result;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        if (hasExperiment()) {
          hash = (37 * hash) + EXPERIMENT_FIELD_NUMBER;
          hash = (53 * hash) + getExperiment().hashCode();
        }
        if (getRunsCount() > 0) {
          hash = (37 * hash) + RUNS_FIELD_NUMBER;
          hash = (53 * hash) + getRunsList().hashCode();
        }
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static org.mlflow.api.proto.Service.GetExperiment.Response parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.GetExperiment.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.GetExperiment.Response parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.GetExperiment.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.GetExperiment.Response parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.GetExperiment.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.GetExperiment.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.GetExperiment.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.GetExperiment.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.GetExperiment.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.GetExperiment.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.GetExperiment.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.GetExperiment.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.GetExperiment.Response}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:mlflow.GetExperiment.Response)
          org.mlflow.api.proto.Service.GetExperiment.ResponseOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_GetExperiment_Response_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_GetExperiment_Response_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  org.mlflow.api.proto.Service.GetExperiment.Response.class, org.mlflow.api.proto.Service.GetExperiment.Response.Builder.class);
        }

        // Construct using org.mlflow.api.proto.Service.GetExperiment.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) {
            getExperimentFieldBuilder();
            getRunsFieldBuilder();
          }
        }
        @java.lang.Override
        public Builder clear() {
          super.clear();
          if (experimentBuilder_ == null) {
            experiment_ = null;
          } else {
            experimentBuilder_.clear();
          }
          bitField0_ = (bitField0_ & ~0x00000001);
          if (runsBuilder_ == null) {
            runs_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            runsBuilder_.clear();
          }
          return this;
        }

        @java.lang.Override
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_GetExperiment_Response_descriptor;
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.GetExperiment.Response getDefaultInstanceForType() {
          return org.mlflow.api.proto.Service.GetExperiment.Response.getDefaultInstance();
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.GetExperiment.Response build() {
          org.mlflow.api.proto.Service.GetExperiment.Response result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.GetExperiment.Response buildPartial() {
          org.mlflow.api.proto.Service.GetExperiment.Response result = new org.mlflow.api.proto.Service.GetExperiment.Response(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          if (experimentBuilder_ == null) {
            result.experiment_ = experiment_;
          } else {
            result.experiment_ = experimentBuilder_.build();
          }
          if (runsBuilder_ == null) {
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
              runs_ = java.util.Collections.unmodifiableList(runs_);
              bitField0_ = (bitField0_ & ~0x00000002);
            }
            result.runs_ = runs_;
          } else {
            result.runs_ = runsBuilder_.build();
          }
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        @java.lang.Override
        public Builder clone() {
          return (Builder) super.clone();
        }
        @java.lang.Override
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.setField(field, value);
        }
        @java.lang.Override
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }
        @java.lang.Override
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }
        @java.lang.Override
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }
        @java.lang.Override
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }
        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof org.mlflow.api.proto.Service.GetExperiment.Response) {
            return mergeFrom((org.mlflow.api.proto.Service.GetExperiment.Response)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(org.mlflow.api.proto.Service.GetExperiment.Response other) {
          if (other == org.mlflow.api.proto.Service.GetExperiment.Response.getDefaultInstance()) return this;
          if (other.hasExperiment()) {
            mergeExperiment(other.getExperiment());
          }
          if (runsBuilder_ == null) {
            if (!other.runs_.isEmpty()) {
              if (runs_.isEmpty()) {
                runs_ = other.runs_;
                bitField0_ = (bitField0_ & ~0x00000002);
              } else {
                ensureRunsIsMutable();
                runs_.addAll(other.runs_);
              }
              onChanged();
            }
          } else {
            if (!other.runs_.isEmpty()) {
              if (runsBuilder_.isEmpty()) {
                runsBuilder_.dispose();
                runsBuilder_ = null;
                runs_ = other.runs_;
                bitField0_ = (bitField0_ & ~0x00000002);
                runsBuilder_ = 
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                     getRunsFieldBuilder() : null;
              } else {
                runsBuilder_.addAllMessages(other.runs_);
              }
            }
          }
          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.GetExperiment.Response parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (org.mlflow.api.proto.Service.GetExperiment.Response) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        private org.mlflow.api.proto.Service.Experiment experiment_ = null;
        private com.google.protobuf.SingleFieldBuilderV3<
            org.mlflow.api.proto.Service.Experiment, org.mlflow.api.proto.Service.Experiment.Builder, org.mlflow.api.proto.Service.ExperimentOrBuilder> experimentBuilder_;
        /**
         * <pre>
         * Returns experiment details.
         * </pre>
         *
         * <code>optional .mlflow.Experiment experiment = 1;</code>
         */
        public boolean hasExperiment() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <pre>
         * Returns experiment details.
         * </pre>
         *
         * <code>optional .mlflow.Experiment experiment = 1;</code>
         */
        public org.mlflow.api.proto.Service.Experiment getExperiment() {
          if (experimentBuilder_ == null) {
            return experiment_ == null ? org.mlflow.api.proto.Service.Experiment.getDefaultInstance() : experiment_;
          } else {
            return experimentBuilder_.getMessage();
          }
        }
        /**
         * <pre>
         * Returns experiment details.
         * </pre>
         *
         * <code>optional .mlflow.Experiment experiment = 1;</code>
         */
        public Builder setExperiment(org.mlflow.api.proto.Service.Experiment value) {
          if (experimentBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            experiment_ = value;
            onChanged();
          } else {
            experimentBuilder_.setMessage(value);
          }
          bitField0_ |= 0x00000001;
          return this;
        }
        /**
         * <pre>
         * Returns experiment details.
         * </pre>
         *
         * <code>optional .mlflow.Experiment experiment = 1;</code>
         */
        public Builder setExperiment(
            org.mlflow.api.proto.Service.Experiment.Builder builderForValue) {
          if (experimentBuilder_ == null) {
            experiment_ = builderForValue.build();
            onChanged();
          } else {
            experimentBuilder_.setMessage(builderForValue.build());
          }
          bitField0_ |= 0x00000001;
          return this;
        }
        /**
         * <pre>
         * Returns experiment details.
         * </pre>
         *
         * <code>optional .mlflow.Experiment experiment = 1;</code>
         */
        public Builder mergeExperiment(org.mlflow.api.proto.Service.Experiment value) {
          if (experimentBuilder_ == null) {
            if (((bitField0_ & 0x00000001) == 0x00000001) &&
                experiment_ != null &&
                experiment_ != org.mlflow.api.proto.Service.Experiment.getDefaultInstance()) {
              experiment_ =
                org.mlflow.api.proto.Service.Experiment.newBuilder(experiment_).mergeFrom(value).buildPartial();
            } else {
              experiment_ = value;
            }
            onChanged();
          } else {
            experimentBuilder_.mergeFrom(value);
          }
          bitField0_ |= 0x00000001;
          return this;
        }
        /**
         * <pre>
         * Returns experiment details.
         * </pre>
         *
         * <code>optional .mlflow.Experiment experiment = 1;</code>
         */
        public Builder clearExperiment() {
          if (experimentBuilder_ == null) {
            experiment_ = null;
            onChanged();
          } else {
            experimentBuilder_.clear();
          }
          bitField0_ = (bitField0_ & ~0x00000001);
          return this;
        }
        /**
         * <pre>
         * Returns experiment details.
         * </pre>
         *
         * <code>optional .mlflow.Experiment experiment = 1;</code>
         */
        public org.mlflow.api.proto.Service.Experiment.Builder getExperimentBuilder() {
          bitField0_ |= 0x00000001;
          onChanged();
          return getExperimentFieldBuilder().getBuilder();
        }
        /**
         * <pre>
         * Returns experiment details.
         * </pre>
         *
         * <code>optional .mlflow.Experiment experiment = 1;</code>
         */
        public org.mlflow.api.proto.Service.ExperimentOrBuilder getExperimentOrBuilder() {
          if (experimentBuilder_ != null) {
            return experimentBuilder_.getMessageOrBuilder();
          } else {
            return experiment_ == null ?
                org.mlflow.api.proto.Service.Experiment.getDefaultInstance() : experiment_;
          }
        }
        /**
         * <pre>
         * Returns experiment details.
         * </pre>
         *
         * <code>optional .mlflow.Experiment experiment = 1;</code>
         */
        private com.google.protobuf.SingleFieldBuilderV3<
            org.mlflow.api.proto.Service.Experiment, org.mlflow.api.proto.Service.Experiment.Builder, org.mlflow.api.proto.Service.ExperimentOrBuilder> 
            getExperimentFieldBuilder() {
          if (experimentBuilder_ == null) {
            experimentBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
                org.mlflow.api.proto.Service.Experiment, org.mlflow.api.proto.Service.Experiment.Builder, org.mlflow.api.proto.Service.ExperimentOrBuilder>(
                    getExperiment(),
                    getParentForChildren(),
                    isClean());
            experiment_ = null;
          }
          return experimentBuilder_;
        }

        private java.util.List<org.mlflow.api.proto.Service.RunInfo> runs_ =
          java.util.Collections.emptyList();
        private void ensureRunsIsMutable() {
          if (!((bitField0_ & 0x00000002) == 0x00000002)) {
            runs_ = new java.util.ArrayList<org.mlflow.api.proto.Service.RunInfo>(runs_);
            bitField0_ |= 0x00000002;
           }
        }

        private com.google.protobuf.RepeatedFieldBuilderV3<
            org.mlflow.api.proto.Service.RunInfo, org.mlflow.api.proto.Service.RunInfo.Builder, org.mlflow.api.proto.Service.RunInfoOrBuilder> runsBuilder_;

        /**
         * <pre>
         * All (max limit to be imposed) active runs associated with this experiment.
         * </pre>
         *
         * <code>repeated .mlflow.RunInfo runs = 2;</code>
         */
        public java.util.List<org.mlflow.api.proto.Service.RunInfo> getRunsList() {
          if (runsBuilder_ == null) {
            return java.util.Collections.unmodifiableList(runs_);
          } else {
            return runsBuilder_.getMessageList();
          }
        }
        /**
         * <pre>
         * All (max limit to be imposed) active runs associated with this experiment.
         * </pre>
         *
         * <code>repeated .mlflow.RunInfo runs = 2;</code>
         */
        public int getRunsCount() {
          if (runsBuilder_ == null) {
            return runs_.size();
          } else {
            return runsBuilder_.getCount();
          }
        }
        /**
         * <pre>
         * All (max limit to be imposed) active runs associated with this experiment.
         * </pre>
         *
         * <code>repeated .mlflow.RunInfo runs = 2;</code>
         */
        public org.mlflow.api.proto.Service.RunInfo getRuns(int index) {
          if (runsBuilder_ == null) {
            return runs_.get(index);
          } else {
            return runsBuilder_.getMessage(index);
          }
        }
        /**
         * <pre>
         * All (max limit to be imposed) active runs associated with this experiment.
         * </pre>
         *
         * <code>repeated .mlflow.RunInfo runs = 2;</code>
         */
        public Builder setRuns(
            int index, org.mlflow.api.proto.Service.RunInfo value) {
          if (runsBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureRunsIsMutable();
            runs_.set(index, value);
            onChanged();
          } else {
            runsBuilder_.setMessage(index, value);
          }
          return this;
        }
        /**
         * <pre>
         * All (max limit to be imposed) active runs associated with this experiment.
         * </pre>
         *
         * <code>repeated .mlflow.RunInfo runs = 2;</code>
         */
        public Builder setRuns(
            int index, org.mlflow.api.proto.Service.RunInfo.Builder builderForValue) {
          if (runsBuilder_ == null) {
            ensureRunsIsMutable();
            runs_.set(index, builderForValue.build());
            onChanged();
          } else {
            runsBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * All (max limit to be imposed) active runs associated with this experiment.
         * </pre>
         *
         * <code>repeated .mlflow.RunInfo runs = 2;</code>
         */
        public Builder addRuns(org.mlflow.api.proto.Service.RunInfo value) {
          if (runsBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureRunsIsMutable();
            runs_.add(value);
            onChanged();
          } else {
            runsBuilder_.addMessage(value);
          }
          return this;
        }
        /**
         * <pre>
         * All (max limit to be imposed) active runs associated with this experiment.
         * </pre>
         *
         * <code>repeated .mlflow.RunInfo runs = 2;</code>
         */
        public Builder addRuns(
            int index, org.mlflow.api.proto.Service.RunInfo value) {
          if (runsBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureRunsIsMutable();
            runs_.add(index, value);
            onChanged();
          } else {
            runsBuilder_.addMessage(index, value);
          }
          return this;
        }
        /**
         * <pre>
         * All (max limit to be imposed) active runs associated with this experiment.
         * </pre>
         *
         * <code>repeated .mlflow.RunInfo runs = 2;</code>
         */
        public Builder addRuns(
            org.mlflow.api.proto.Service.RunInfo.Builder builderForValue) {
          if (runsBuilder_ == null) {
            ensureRunsIsMutable();
            runs_.add(builderForValue.build());
            onChanged();
          } else {
            runsBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * All (max limit to be imposed) active runs associated with this experiment.
         * </pre>
         *
         * <code>repeated .mlflow.RunInfo runs = 2;</code>
         */
        public Builder addRuns(
            int index, org.mlflow.api.proto.Service.RunInfo.Builder builderForValue) {
          if (runsBuilder_ == null) {
            ensureRunsIsMutable();
            runs_.add(index, builderForValue.build());
            onChanged();
          } else {
            runsBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * All (max limit to be imposed) active runs associated with this experiment.
         * </pre>
         *
         * <code>repeated .mlflow.RunInfo runs = 2;</code>
         */
        public Builder addAllRuns(
            java.lang.Iterable<? extends org.mlflow.api.proto.Service.RunInfo> values) {
          if (runsBuilder_ == null) {
            ensureRunsIsMutable();
            com.google.protobuf.AbstractMessageLite.Builder.addAll(
                values, runs_);
            onChanged();
          } else {
            runsBuilder_.addAllMessages(values);
          }
          return this;
        }
        /**
         * <pre>
         * All (max limit to be imposed) active runs associated with this experiment.
         * </pre>
         *
         * <code>repeated .mlflow.RunInfo runs = 2;</code>
         */
        public Builder clearRuns() {
          if (runsBuilder_ == null) {
            runs_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000002);
            onChanged();
          } else {
            runsBuilder_.clear();
          }
          return this;
        }
        /**
         * <pre>
         * All (max limit to be imposed) active runs associated with this experiment.
         * </pre>
         *
         * <code>repeated .mlflow.RunInfo runs = 2;</code>
         */
        public Builder removeRuns(int index) {
          if (runsBuilder_ == null) {
            ensureRunsIsMutable();
            runs_.remove(index);
            onChanged();
          } else {
            runsBuilder_.remove(index);
          }
          return this;
        }
        /**
         * <pre>
         * All (max limit to be imposed) active runs associated with this experiment.
         * </pre>
         *
         * <code>repeated .mlflow.RunInfo runs = 2;</code>
         */
        public org.mlflow.api.proto.Service.RunInfo.Builder getRunsBuilder(
            int index) {
          return getRunsFieldBuilder().getBuilder(index);
        }
        /**
         * <pre>
         * All (max limit to be imposed) active runs associated with this experiment.
         * </pre>
         *
         * <code>repeated .mlflow.RunInfo runs = 2;</code>
         */
        public org.mlflow.api.proto.Service.RunInfoOrBuilder getRunsOrBuilder(
            int index) {
          if (runsBuilder_ == null) {
            return runs_.get(index);  } else {
            return runsBuilder_.getMessageOrBuilder(index);
          }
        }
        /**
         * <pre>
         * All (max limit to be imposed) active runs associated with this experiment.
         * </pre>
         *
         * <code>repeated .mlflow.RunInfo runs = 2;</code>
         */
        public java.util.List<? extends org.mlflow.api.proto.Service.RunInfoOrBuilder> 
             getRunsOrBuilderList() {
          if (runsBuilder_ != null) {
            return runsBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(runs_);
          }
        }
        /**
         * <pre>
         * All (max limit to be imposed) active runs associated with this experiment.
         * </pre>
         *
         * <code>repeated .mlflow.RunInfo runs = 2;</code>
         */
        public org.mlflow.api.proto.Service.RunInfo.Builder addRunsBuilder() {
          return getRunsFieldBuilder().addBuilder(
              org.mlflow.api.proto.Service.RunInfo.getDefaultInstance());
        }
        /**
         * <pre>
         * All (max limit to be imposed) active runs associated with this experiment.
         * </pre>
         *
         * <code>repeated .mlflow.RunInfo runs = 2;</code>
         */
        public org.mlflow.api.proto.Service.RunInfo.Builder addRunsBuilder(
            int index) {
          return getRunsFieldBuilder().addBuilder(
              index, org.mlflow.api.proto.Service.RunInfo.getDefaultInstance());
        }
        /**
         * <pre>
         * All (max limit to be imposed) active runs associated with this experiment.
         * </pre>
         *
         * <code>repeated .mlflow.RunInfo runs = 2;</code>
         */
        public java.util.List<org.mlflow.api.proto.Service.RunInfo.Builder> 
             getRunsBuilderList() {
          return getRunsFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilderV3<
            org.mlflow.api.proto.Service.RunInfo, org.mlflow.api.proto.Service.RunInfo.Builder, org.mlflow.api.proto.Service.RunInfoOrBuilder> 
            getRunsFieldBuilder() {
          if (runsBuilder_ == null) {
            runsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
                org.mlflow.api.proto.Service.RunInfo, org.mlflow.api.proto.Service.RunInfo.Builder, org.mlflow.api.proto.Service.RunInfoOrBuilder>(
                    runs_,
                    ((bitField0_ & 0x00000002) == 0x00000002),
                    getParentForChildren(),
                    isClean());
            runs_ = null;
          }
          return runsBuilder_;
        }
        @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.GetExperiment.Response)
      }

      // @@protoc_insertion_point(class_scope:mlflow.GetExperiment.Response)
      private static final org.mlflow.api.proto.Service.GetExperiment.Response DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.GetExperiment.Response();
      }

      public static org.mlflow.api.proto.Service.GetExperiment.Response getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      @java.lang.Deprecated public static final com.google.protobuf.Parser<Response>
          PARSER = new com.google.protobuf.AbstractParser<Response>() {
        @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<Response> parser() {
        return PARSER;
      }

      @java.lang.Override
      public com.google.protobuf.Parser<Response> getParserForType() {
        return PARSER;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.GetExperiment.Response getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    private int bitField0_;
    public static final int EXPERIMENT_ID_FIELD_NUMBER = 1;
    private long experimentId_;
    /**
     * <pre>
     * ID of the associated experiment.
     * </pre>
     *
     * <code>optional int64 experiment_id = 1 [(.validate_required) = true];</code>
     */
    public boolean hasExperimentId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * ID of the associated experiment.
     * </pre>
     *
     * <code>optional int64 experiment_id = 1 [(.validate_required) = true];</code>
     */
    public long getExperimentId() {
      return experimentId_;
    }

    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) == 0x00000001)) {
        output.writeInt64(1, experimentId_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, experimentId_);
      }
      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.GetExperiment)) {
        return super.equals(obj);
      }
      org.mlflow.api.proto.Service.GetExperiment other = (org.mlflow.api.proto.Service.GetExperiment) obj;

      boolean result = true;
      result = result && (hasExperimentId() == other.hasExperimentId());
      if (hasExperimentId()) {
        result = result && (getExperimentId()
            == other.getExperimentId());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasExperimentId()) {
        hash = (37 * hash) + EXPERIMENT_ID_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            getExperimentId());
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.mlflow.api.proto.Service.GetExperiment parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.GetExperiment 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.GetExperiment parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.GetExperiment 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.GetExperiment parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.GetExperiment 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.GetExperiment parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.GetExperiment 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.GetExperiment parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.GetExperiment 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.GetExperiment 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.GetExperiment 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.GetExperiment 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.GetExperiment}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:mlflow.GetExperiment)
        org.mlflow.api.proto.Service.GetExperimentOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_GetExperiment_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_GetExperiment_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.GetExperiment.class, org.mlflow.api.proto.Service.GetExperiment.Builder.class);
      }

      // Construct using org.mlflow.api.proto.Service.GetExperiment.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();
        experimentId_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_GetExperiment_descriptor;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.GetExperiment getDefaultInstanceForType() {
        return org.mlflow.api.proto.Service.GetExperiment.getDefaultInstance();
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.GetExperiment build() {
        org.mlflow.api.proto.Service.GetExperiment result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.GetExperiment buildPartial() {
        org.mlflow.api.proto.Service.GetExperiment result = new org.mlflow.api.proto.Service.GetExperiment(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.experimentId_ = experimentId_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.mlflow.api.proto.Service.GetExperiment) {
          return mergeFrom((org.mlflow.api.proto.Service.GetExperiment)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.mlflow.api.proto.Service.GetExperiment other) {
        if (other == org.mlflow.api.proto.Service.GetExperiment.getDefaultInstance()) return this;
        if (other.hasExperimentId()) {
          setExperimentId(other.getExperimentId());
        }
        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.GetExperiment parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.mlflow.api.proto.Service.GetExperiment) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private long experimentId_ ;
      /**
       * <pre>
       * ID of the associated experiment.
       * </pre>
       *
       * <code>optional int64 experiment_id = 1 [(.validate_required) = true];</code>
       */
      public boolean hasExperimentId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * ID of the associated experiment.
       * </pre>
       *
       * <code>optional int64 experiment_id = 1 [(.validate_required) = true];</code>
       */
      public long getExperimentId() {
        return experimentId_;
      }
      /**
       * <pre>
       * ID of the associated experiment.
       * </pre>
       *
       * <code>optional int64 experiment_id = 1 [(.validate_required) = true];</code>
       */
      public Builder setExperimentId(long value) {
        bitField0_ |= 0x00000001;
        experimentId_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * ID of the associated experiment.
       * </pre>
       *
       * <code>optional int64 experiment_id = 1 [(.validate_required) = true];</code>
       */
      public Builder clearExperimentId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        experimentId_ = 0L;
        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.GetExperiment)
    }

    // @@protoc_insertion_point(class_scope:mlflow.GetExperiment)
    private static final org.mlflow.api.proto.Service.GetExperiment DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.GetExperiment();
    }

    public static org.mlflow.api.proto.Service.GetExperiment getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<GetExperiment>
        PARSER = new com.google.protobuf.AbstractParser<GetExperiment>() {
      @java.lang.Override
      public GetExperiment parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GetExperiment(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<GetExperiment> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<GetExperiment> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public org.mlflow.api.proto.Service.GetExperiment getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface DeleteExperimentOrBuilder extends
      // @@protoc_insertion_point(interface_extends:mlflow.DeleteExperiment)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * ID of the associated experiment.
     * </pre>
     *
     * <code>optional int64 experiment_id = 1 [(.validate_required) = true];</code>
     */
    boolean hasExperimentId();
    /**
     * <pre>
     * ID of the associated experiment.
     * </pre>
     *
     * <code>optional int64 experiment_id = 1 [(.validate_required) = true];</code>
     */
    long getExperimentId();
  }
  /**
   * Protobuf type {@code mlflow.DeleteExperiment}
   */
  public  static final class DeleteExperiment extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:mlflow.DeleteExperiment)
      DeleteExperimentOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use DeleteExperiment.newBuilder() to construct.
    private DeleteExperiment(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private DeleteExperiment() {
      experimentId_ = 0L;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private DeleteExperiment(
        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 8: {
              bitField0_ |= 0x00000001;
              experimentId_ = input.readInt64();
              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_DeleteExperiment_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.mlflow.api.proto.Service.internal_static_mlflow_DeleteExperiment_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.mlflow.api.proto.Service.DeleteExperiment.class, org.mlflow.api.proto.Service.DeleteExperiment.Builder.class);
    }

    public interface ResponseOrBuilder extends
        // @@protoc_insertion_point(interface_extends:mlflow.DeleteExperiment.Response)
        com.google.protobuf.MessageOrBuilder {
    }
    /**
     * Protobuf type {@code mlflow.DeleteExperiment.Response}
     */
    public  static final class Response extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:mlflow.DeleteExperiment.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
      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_DeleteExperiment_Response_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_DeleteExperiment_Response_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.DeleteExperiment.Response.class, org.mlflow.api.proto.Service.DeleteExperiment.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.DeleteExperiment.Response)) {
          return super.equals(obj);
        }
        org.mlflow.api.proto.Service.DeleteExperiment.Response other = (org.mlflow.api.proto.Service.DeleteExperiment.Response) obj;

        boolean result = true;
        result = result && unknownFields.equals(other.unknownFields);
        return result;
      }

      @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.DeleteExperiment.Response parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.DeleteExperiment.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.DeleteExperiment.Response parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.DeleteExperiment.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.DeleteExperiment.Response parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.DeleteExperiment.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.DeleteExperiment.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.DeleteExperiment.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.DeleteExperiment.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.DeleteExperiment.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.DeleteExperiment.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.DeleteExperiment.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.DeleteExperiment.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.DeleteExperiment.Response}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:mlflow.DeleteExperiment.Response)
          org.mlflow.api.proto.Service.DeleteExperiment.ResponseOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_DeleteExperiment_Response_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_DeleteExperiment_Response_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  org.mlflow.api.proto.Service.DeleteExperiment.Response.class, org.mlflow.api.proto.Service.DeleteExperiment.Response.Builder.class);
        }

        // Construct using org.mlflow.api.proto.Service.DeleteExperiment.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_DeleteExperiment_Response_descriptor;
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.DeleteExperiment.Response getDefaultInstanceForType() {
          return org.mlflow.api.proto.Service.DeleteExperiment.Response.getDefaultInstance();
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.DeleteExperiment.Response build() {
          org.mlflow.api.proto.Service.DeleteExperiment.Response result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.DeleteExperiment.Response buildPartial() {
          org.mlflow.api.proto.Service.DeleteExperiment.Response result = new org.mlflow.api.proto.Service.DeleteExperiment.Response(this);
          onBuilt();
          return result;
        }

        @java.lang.Override
        public Builder clone() {
          return (Builder) super.clone();
        }
        @java.lang.Override
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.setField(field, value);
        }
        @java.lang.Override
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }
        @java.lang.Override
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }
        @java.lang.Override
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }
        @java.lang.Override
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }
        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof org.mlflow.api.proto.Service.DeleteExperiment.Response) {
            return mergeFrom((org.mlflow.api.proto.Service.DeleteExperiment.Response)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(org.mlflow.api.proto.Service.DeleteExperiment.Response other) {
          if (other == org.mlflow.api.proto.Service.DeleteExperiment.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.DeleteExperiment.Response parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (org.mlflow.api.proto.Service.DeleteExperiment.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.DeleteExperiment.Response)
      }

      // @@protoc_insertion_point(class_scope:mlflow.DeleteExperiment.Response)
      private static final org.mlflow.api.proto.Service.DeleteExperiment.Response DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.DeleteExperiment.Response();
      }

      public static org.mlflow.api.proto.Service.DeleteExperiment.Response getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      @java.lang.Deprecated public static final com.google.protobuf.Parser<Response>
          PARSER = new com.google.protobuf.AbstractParser<Response>() {
        @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<Response> parser() {
        return PARSER;
      }

      @java.lang.Override
      public com.google.protobuf.Parser<Response> getParserForType() {
        return PARSER;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.DeleteExperiment.Response getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    private int bitField0_;
    public static final int EXPERIMENT_ID_FIELD_NUMBER = 1;
    private long experimentId_;
    /**
     * <pre>
     * ID of the associated experiment.
     * </pre>
     *
     * <code>optional int64 experiment_id = 1 [(.validate_required) = true];</code>
     */
    public boolean hasExperimentId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * ID of the associated experiment.
     * </pre>
     *
     * <code>optional int64 experiment_id = 1 [(.validate_required) = true];</code>
     */
    public long getExperimentId() {
      return experimentId_;
    }

    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) == 0x00000001)) {
        output.writeInt64(1, experimentId_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, experimentId_);
      }
      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.DeleteExperiment)) {
        return super.equals(obj);
      }
      org.mlflow.api.proto.Service.DeleteExperiment other = (org.mlflow.api.proto.Service.DeleteExperiment) obj;

      boolean result = true;
      result = result && (hasExperimentId() == other.hasExperimentId());
      if (hasExperimentId()) {
        result = result && (getExperimentId()
            == other.getExperimentId());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasExperimentId()) {
        hash = (37 * hash) + EXPERIMENT_ID_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            getExperimentId());
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.mlflow.api.proto.Service.DeleteExperiment parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.DeleteExperiment 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.DeleteExperiment parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.DeleteExperiment 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.DeleteExperiment parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.DeleteExperiment 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.DeleteExperiment parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.DeleteExperiment 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.DeleteExperiment parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.DeleteExperiment 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.DeleteExperiment 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.DeleteExperiment 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.DeleteExperiment 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.DeleteExperiment}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:mlflow.DeleteExperiment)
        org.mlflow.api.proto.Service.DeleteExperimentOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_DeleteExperiment_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_DeleteExperiment_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.DeleteExperiment.class, org.mlflow.api.proto.Service.DeleteExperiment.Builder.class);
      }

      // Construct using org.mlflow.api.proto.Service.DeleteExperiment.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();
        experimentId_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_DeleteExperiment_descriptor;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.DeleteExperiment getDefaultInstanceForType() {
        return org.mlflow.api.proto.Service.DeleteExperiment.getDefaultInstance();
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.DeleteExperiment build() {
        org.mlflow.api.proto.Service.DeleteExperiment result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.DeleteExperiment buildPartial() {
        org.mlflow.api.proto.Service.DeleteExperiment result = new org.mlflow.api.proto.Service.DeleteExperiment(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.experimentId_ = experimentId_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.mlflow.api.proto.Service.DeleteExperiment) {
          return mergeFrom((org.mlflow.api.proto.Service.DeleteExperiment)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.mlflow.api.proto.Service.DeleteExperiment other) {
        if (other == org.mlflow.api.proto.Service.DeleteExperiment.getDefaultInstance()) return this;
        if (other.hasExperimentId()) {
          setExperimentId(other.getExperimentId());
        }
        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.DeleteExperiment parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.mlflow.api.proto.Service.DeleteExperiment) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private long experimentId_ ;
      /**
       * <pre>
       * ID of the associated experiment.
       * </pre>
       *
       * <code>optional int64 experiment_id = 1 [(.validate_required) = true];</code>
       */
      public boolean hasExperimentId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * ID of the associated experiment.
       * </pre>
       *
       * <code>optional int64 experiment_id = 1 [(.validate_required) = true];</code>
       */
      public long getExperimentId() {
        return experimentId_;
      }
      /**
       * <pre>
       * ID of the associated experiment.
       * </pre>
       *
       * <code>optional int64 experiment_id = 1 [(.validate_required) = true];</code>
       */
      public Builder setExperimentId(long value) {
        bitField0_ |= 0x00000001;
        experimentId_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * ID of the associated experiment.
       * </pre>
       *
       * <code>optional int64 experiment_id = 1 [(.validate_required) = true];</code>
       */
      public Builder clearExperimentId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        experimentId_ = 0L;
        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.DeleteExperiment)
    }

    // @@protoc_insertion_point(class_scope:mlflow.DeleteExperiment)
    private static final org.mlflow.api.proto.Service.DeleteExperiment DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.DeleteExperiment();
    }

    public static org.mlflow.api.proto.Service.DeleteExperiment getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<DeleteExperiment>
        PARSER = new com.google.protobuf.AbstractParser<DeleteExperiment>() {
      @java.lang.Override
      public DeleteExperiment parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new DeleteExperiment(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<DeleteExperiment> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<DeleteExperiment> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public org.mlflow.api.proto.Service.DeleteExperiment getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface RestoreExperimentOrBuilder extends
      // @@protoc_insertion_point(interface_extends:mlflow.RestoreExperiment)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * ID of the associated experiment.
     * </pre>
     *
     * <code>optional int64 experiment_id = 1 [(.validate_required) = true];</code>
     */
    boolean hasExperimentId();
    /**
     * <pre>
     * ID of the associated experiment.
     * </pre>
     *
     * <code>optional int64 experiment_id = 1 [(.validate_required) = true];</code>
     */
    long getExperimentId();
  }
  /**
   * Protobuf type {@code mlflow.RestoreExperiment}
   */
  public  static final class RestoreExperiment extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:mlflow.RestoreExperiment)
      RestoreExperimentOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use RestoreExperiment.newBuilder() to construct.
    private RestoreExperiment(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private RestoreExperiment() {
      experimentId_ = 0L;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private RestoreExperiment(
        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 8: {
              bitField0_ |= 0x00000001;
              experimentId_ = input.readInt64();
              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_RestoreExperiment_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.mlflow.api.proto.Service.internal_static_mlflow_RestoreExperiment_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.mlflow.api.proto.Service.RestoreExperiment.class, org.mlflow.api.proto.Service.RestoreExperiment.Builder.class);
    }

    public interface ResponseOrBuilder extends
        // @@protoc_insertion_point(interface_extends:mlflow.RestoreExperiment.Response)
        com.google.protobuf.MessageOrBuilder {
    }
    /**
     * Protobuf type {@code mlflow.RestoreExperiment.Response}
     */
    public  static final class Response extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:mlflow.RestoreExperiment.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
      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_RestoreExperiment_Response_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_RestoreExperiment_Response_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.RestoreExperiment.Response.class, org.mlflow.api.proto.Service.RestoreExperiment.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.RestoreExperiment.Response)) {
          return super.equals(obj);
        }
        org.mlflow.api.proto.Service.RestoreExperiment.Response other = (org.mlflow.api.proto.Service.RestoreExperiment.Response) obj;

        boolean result = true;
        result = result && unknownFields.equals(other.unknownFields);
        return result;
      }

      @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.RestoreExperiment.Response parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.RestoreExperiment.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.RestoreExperiment.Response parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.RestoreExperiment.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.RestoreExperiment.Response parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.RestoreExperiment.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.RestoreExperiment.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.RestoreExperiment.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.RestoreExperiment.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.RestoreExperiment.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.RestoreExperiment.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.RestoreExperiment.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.RestoreExperiment.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.RestoreExperiment.Response}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:mlflow.RestoreExperiment.Response)
          org.mlflow.api.proto.Service.RestoreExperiment.ResponseOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_RestoreExperiment_Response_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_RestoreExperiment_Response_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  org.mlflow.api.proto.Service.RestoreExperiment.Response.class, org.mlflow.api.proto.Service.RestoreExperiment.Response.Builder.class);
        }

        // Construct using org.mlflow.api.proto.Service.RestoreExperiment.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_RestoreExperiment_Response_descriptor;
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.RestoreExperiment.Response getDefaultInstanceForType() {
          return org.mlflow.api.proto.Service.RestoreExperiment.Response.getDefaultInstance();
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.RestoreExperiment.Response build() {
          org.mlflow.api.proto.Service.RestoreExperiment.Response result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.RestoreExperiment.Response buildPartial() {
          org.mlflow.api.proto.Service.RestoreExperiment.Response result = new org.mlflow.api.proto.Service.RestoreExperiment.Response(this);
          onBuilt();
          return result;
        }

        @java.lang.Override
        public Builder clone() {
          return (Builder) super.clone();
        }
        @java.lang.Override
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.setField(field, value);
        }
        @java.lang.Override
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }
        @java.lang.Override
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }
        @java.lang.Override
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }
        @java.lang.Override
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }
        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof org.mlflow.api.proto.Service.RestoreExperiment.Response) {
            return mergeFrom((org.mlflow.api.proto.Service.RestoreExperiment.Response)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(org.mlflow.api.proto.Service.RestoreExperiment.Response other) {
          if (other == org.mlflow.api.proto.Service.RestoreExperiment.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.RestoreExperiment.Response parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (org.mlflow.api.proto.Service.RestoreExperiment.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.RestoreExperiment.Response)
      }

      // @@protoc_insertion_point(class_scope:mlflow.RestoreExperiment.Response)
      private static final org.mlflow.api.proto.Service.RestoreExperiment.Response DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.RestoreExperiment.Response();
      }

      public static org.mlflow.api.proto.Service.RestoreExperiment.Response getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      @java.lang.Deprecated public static final com.google.protobuf.Parser<Response>
          PARSER = new com.google.protobuf.AbstractParser<Response>() {
        @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<Response> parser() {
        return PARSER;
      }

      @java.lang.Override
      public com.google.protobuf.Parser<Response> getParserForType() {
        return PARSER;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.RestoreExperiment.Response getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    private int bitField0_;
    public static final int EXPERIMENT_ID_FIELD_NUMBER = 1;
    private long experimentId_;
    /**
     * <pre>
     * ID of the associated experiment.
     * </pre>
     *
     * <code>optional int64 experiment_id = 1 [(.validate_required) = true];</code>
     */
    public boolean hasExperimentId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * ID of the associated experiment.
     * </pre>
     *
     * <code>optional int64 experiment_id = 1 [(.validate_required) = true];</code>
     */
    public long getExperimentId() {
      return experimentId_;
    }

    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) == 0x00000001)) {
        output.writeInt64(1, experimentId_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, experimentId_);
      }
      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.RestoreExperiment)) {
        return super.equals(obj);
      }
      org.mlflow.api.proto.Service.RestoreExperiment other = (org.mlflow.api.proto.Service.RestoreExperiment) obj;

      boolean result = true;
      result = result && (hasExperimentId() == other.hasExperimentId());
      if (hasExperimentId()) {
        result = result && (getExperimentId()
            == other.getExperimentId());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasExperimentId()) {
        hash = (37 * hash) + EXPERIMENT_ID_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            getExperimentId());
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.mlflow.api.proto.Service.RestoreExperiment parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.RestoreExperiment 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.RestoreExperiment parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.RestoreExperiment 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.RestoreExperiment parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.RestoreExperiment 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.RestoreExperiment parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.RestoreExperiment 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.RestoreExperiment parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.RestoreExperiment 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.RestoreExperiment 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.RestoreExperiment 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.RestoreExperiment 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.RestoreExperiment}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:mlflow.RestoreExperiment)
        org.mlflow.api.proto.Service.RestoreExperimentOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_RestoreExperiment_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_RestoreExperiment_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.RestoreExperiment.class, org.mlflow.api.proto.Service.RestoreExperiment.Builder.class);
      }

      // Construct using org.mlflow.api.proto.Service.RestoreExperiment.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();
        experimentId_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_RestoreExperiment_descriptor;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.RestoreExperiment getDefaultInstanceForType() {
        return org.mlflow.api.proto.Service.RestoreExperiment.getDefaultInstance();
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.RestoreExperiment build() {
        org.mlflow.api.proto.Service.RestoreExperiment result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.RestoreExperiment buildPartial() {
        org.mlflow.api.proto.Service.RestoreExperiment result = new org.mlflow.api.proto.Service.RestoreExperiment(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.experimentId_ = experimentId_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.mlflow.api.proto.Service.RestoreExperiment) {
          return mergeFrom((org.mlflow.api.proto.Service.RestoreExperiment)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.mlflow.api.proto.Service.RestoreExperiment other) {
        if (other == org.mlflow.api.proto.Service.RestoreExperiment.getDefaultInstance()) return this;
        if (other.hasExperimentId()) {
          setExperimentId(other.getExperimentId());
        }
        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.RestoreExperiment parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.mlflow.api.proto.Service.RestoreExperiment) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private long experimentId_ ;
      /**
       * <pre>
       * ID of the associated experiment.
       * </pre>
       *
       * <code>optional int64 experiment_id = 1 [(.validate_required) = true];</code>
       */
      public boolean hasExperimentId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * ID of the associated experiment.
       * </pre>
       *
       * <code>optional int64 experiment_id = 1 [(.validate_required) = true];</code>
       */
      public long getExperimentId() {
        return experimentId_;
      }
      /**
       * <pre>
       * ID of the associated experiment.
       * </pre>
       *
       * <code>optional int64 experiment_id = 1 [(.validate_required) = true];</code>
       */
      public Builder setExperimentId(long value) {
        bitField0_ |= 0x00000001;
        experimentId_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * ID of the associated experiment.
       * </pre>
       *
       * <code>optional int64 experiment_id = 1 [(.validate_required) = true];</code>
       */
      public Builder clearExperimentId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        experimentId_ = 0L;
        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.RestoreExperiment)
    }

    // @@protoc_insertion_point(class_scope:mlflow.RestoreExperiment)
    private static final org.mlflow.api.proto.Service.RestoreExperiment DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.RestoreExperiment();
    }

    public static org.mlflow.api.proto.Service.RestoreExperiment getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<RestoreExperiment>
        PARSER = new com.google.protobuf.AbstractParser<RestoreExperiment>() {
      @java.lang.Override
      public RestoreExperiment parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new RestoreExperiment(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<RestoreExperiment> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<RestoreExperiment> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public org.mlflow.api.proto.Service.RestoreExperiment getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface CreateRunOrBuilder extends
      // @@protoc_insertion_point(interface_extends:mlflow.CreateRun)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * ID of the associated experiment.
     * </pre>
     *
     * <code>optional int64 experiment_id = 1;</code>
     */
    boolean hasExperimentId();
    /**
     * <pre>
     * ID of the associated experiment.
     * </pre>
     *
     * <code>optional int64 experiment_id = 1;</code>
     */
    long getExperimentId();

    /**
     * <pre>
     * ID of the user executing the run.
     * </pre>
     *
     * <code>optional string user_id = 2;</code>
     */
    boolean hasUserId();
    /**
     * <pre>
     * ID of the user executing the run.
     * </pre>
     *
     * <code>optional string user_id = 2;</code>
     */
    java.lang.String getUserId();
    /**
     * <pre>
     * ID of the user executing the run.
     * </pre>
     *
     * <code>optional string user_id = 2;</code>
     */
    com.google.protobuf.ByteString
        getUserIdBytes();

    /**
     * <pre>
     * Human readable name for the run.
     * </pre>
     *
     * <code>optional string run_name = 3;</code>
     */
    boolean hasRunName();
    /**
     * <pre>
     * Human readable name for the run.
     * </pre>
     *
     * <code>optional string run_name = 3;</code>
     */
    java.lang.String getRunName();
    /**
     * <pre>
     * Human readable name for the run.
     * </pre>
     *
     * <code>optional string run_name = 3;</code>
     */
    com.google.protobuf.ByteString
        getRunNameBytes();

    /**
     * <pre>
     * Originating source for the run.
     * </pre>
     *
     * <code>optional .mlflow.SourceType source_type = 4;</code>
     */
    boolean hasSourceType();
    /**
     * <pre>
     * Originating source for the run.
     * </pre>
     *
     * <code>optional .mlflow.SourceType source_type = 4;</code>
     */
    org.mlflow.api.proto.Service.SourceType getSourceType();

    /**
     * <pre>
     * String descriptor for the run's source. For example, name or description of a notebook, or the
     * URL or path to a project.
     * </pre>
     *
     * <code>optional string source_name = 5;</code>
     */
    boolean hasSourceName();
    /**
     * <pre>
     * String descriptor for the run's source. For example, name or description of a notebook, or the
     * URL or path to a project.
     * </pre>
     *
     * <code>optional string source_name = 5;</code>
     */
    java.lang.String getSourceName();
    /**
     * <pre>
     * String descriptor for the run's source. For example, name or description of a notebook, or the
     * URL or path to a project.
     * </pre>
     *
     * <code>optional string source_name = 5;</code>
     */
    com.google.protobuf.ByteString
        getSourceNameBytes();

    /**
     * <pre>
     * Name of the project entry point associated with the current run, if any.
     * </pre>
     *
     * <code>optional string entry_point_name = 6;</code>
     */
    boolean hasEntryPointName();
    /**
     * <pre>
     * Name of the project entry point associated with the current run, if any.
     * </pre>
     *
     * <code>optional string entry_point_name = 6;</code>
     */
    java.lang.String getEntryPointName();
    /**
     * <pre>
     * Name of the project entry point associated with the current run, if any.
     * </pre>
     *
     * <code>optional string entry_point_name = 6;</code>
     */
    com.google.protobuf.ByteString
        getEntryPointNameBytes();

    /**
     * <pre>
     * Unix timestamp of when the run started in milliseconds.
     * </pre>
     *
     * <code>optional int64 start_time = 7;</code>
     */
    boolean hasStartTime();
    /**
     * <pre>
     * Unix timestamp of when the run started in milliseconds.
     * </pre>
     *
     * <code>optional int64 start_time = 7;</code>
     */
    long getStartTime();

    /**
     * <pre>
     * Git commit hash of the source code used to create run.
     * </pre>
     *
     * <code>optional string source_version = 8;</code>
     */
    boolean hasSourceVersion();
    /**
     * <pre>
     * Git commit hash of the source code used to create run.
     * </pre>
     *
     * <code>optional string source_version = 8;</code>
     */
    java.lang.String getSourceVersion();
    /**
     * <pre>
     * Git commit hash of the source code used to create run.
     * </pre>
     *
     * <code>optional string source_version = 8;</code>
     */
    com.google.protobuf.ByteString
        getSourceVersionBytes();

    /**
     * <pre>
     * Additional metadata for run.
     * </pre>
     *
     * <code>repeated .mlflow.RunTag tags = 9;</code>
     */
    java.util.List<org.mlflow.api.proto.Service.RunTag> 
        getTagsList();
    /**
     * <pre>
     * Additional metadata for run.
     * </pre>
     *
     * <code>repeated .mlflow.RunTag tags = 9;</code>
     */
    org.mlflow.api.proto.Service.RunTag getTags(int index);
    /**
     * <pre>
     * Additional metadata for run.
     * </pre>
     *
     * <code>repeated .mlflow.RunTag tags = 9;</code>
     */
    int getTagsCount();
    /**
     * <pre>
     * Additional metadata for run.
     * </pre>
     *
     * <code>repeated .mlflow.RunTag tags = 9;</code>
     */
    java.util.List<? extends org.mlflow.api.proto.Service.RunTagOrBuilder> 
        getTagsOrBuilderList();
    /**
     * <pre>
     * Additional metadata for run.
     * </pre>
     *
     * <code>repeated .mlflow.RunTag tags = 9;</code>
     */
    org.mlflow.api.proto.Service.RunTagOrBuilder getTagsOrBuilder(
        int index);

    /**
     * <pre>
     * ID of the parent run which started this run.
     * </pre>
     *
     * <code>optional string parent_run_id = 10;</code>
     */
    boolean hasParentRunId();
    /**
     * <pre>
     * ID of the parent run which started this run.
     * </pre>
     *
     * <code>optional string parent_run_id = 10;</code>
     */
    java.lang.String getParentRunId();
    /**
     * <pre>
     * ID of the parent run which started this run.
     * </pre>
     *
     * <code>optional string parent_run_id = 10;</code>
     */
    com.google.protobuf.ByteString
        getParentRunIdBytes();
  }
  /**
   * Protobuf type {@code mlflow.CreateRun}
   */
  public  static final class CreateRun extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:mlflow.CreateRun)
      CreateRunOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use CreateRun.newBuilder() to construct.
    private CreateRun(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private CreateRun() {
      experimentId_ = 0L;
      userId_ = "";
      runName_ = "";
      sourceType_ = 1;
      sourceName_ = "";
      entryPointName_ = "";
      startTime_ = 0L;
      sourceVersion_ = "";
      tags_ = java.util.Collections.emptyList();
      parentRunId_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private CreateRun(
        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 8: {
              bitField0_ |= 0x00000001;
              experimentId_ = input.readInt64();
              break;
            }
            case 18: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000002;
              userId_ = bs;
              break;
            }
            case 26: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000004;
              runName_ = bs;
              break;
            }
            case 32: {
              int rawValue = input.readEnum();
                @SuppressWarnings("deprecation")
              org.mlflow.api.proto.Service.SourceType value = org.mlflow.api.proto.Service.SourceType.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(4, rawValue);
              } else {
                bitField0_ |= 0x00000008;
                sourceType_ = rawValue;
              }
              break;
            }
            case 42: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000010;
              sourceName_ = bs;
              break;
            }
            case 50: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000020;
              entryPointName_ = bs;
              break;
            }
            case 56: {
              bitField0_ |= 0x00000040;
              startTime_ = input.readInt64();
              break;
            }
            case 66: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000080;
              sourceVersion_ = bs;
              break;
            }
            case 74: {
              if (!((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
                tags_ = new java.util.ArrayList<org.mlflow.api.proto.Service.RunTag>();
                mutable_bitField0_ |= 0x00000100;
              }
              tags_.add(
                  input.readMessage(org.mlflow.api.proto.Service.RunTag.PARSER, extensionRegistry));
              break;
            }
            case 82: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000100;
              parentRunId_ = 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 {
        if (((mutable_bitField0_ & 0x00000100) == 0x00000100)) {
          tags_ = java.util.Collections.unmodifiableList(tags_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.mlflow.api.proto.Service.internal_static_mlflow_CreateRun_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.mlflow.api.proto.Service.internal_static_mlflow_CreateRun_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.mlflow.api.proto.Service.CreateRun.class, org.mlflow.api.proto.Service.CreateRun.Builder.class);
    }

    public interface ResponseOrBuilder extends
        // @@protoc_insertion_point(interface_extends:mlflow.CreateRun.Response)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <pre>
       * The newly created run.
       * </pre>
       *
       * <code>optional .mlflow.Run run = 1;</code>
       */
      boolean hasRun();
      /**
       * <pre>
       * The newly created run.
       * </pre>
       *
       * <code>optional .mlflow.Run run = 1;</code>
       */
      org.mlflow.api.proto.Service.Run getRun();
      /**
       * <pre>
       * The newly created run.
       * </pre>
       *
       * <code>optional .mlflow.Run run = 1;</code>
       */
      org.mlflow.api.proto.Service.RunOrBuilder getRunOrBuilder();
    }
    /**
     * Protobuf type {@code mlflow.CreateRun.Response}
     */
    public  static final class Response extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:mlflow.CreateRun.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
      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.Run.Builder subBuilder = null;
                if (((bitField0_ & 0x00000001) == 0x00000001)) {
                  subBuilder = run_.toBuilder();
                }
                run_ = input.readMessage(org.mlflow.api.proto.Service.Run.PARSER, extensionRegistry);
                if (subBuilder != null) {
                  subBuilder.mergeFrom(run_);
                  run_ = 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_CreateRun_Response_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_CreateRun_Response_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.CreateRun.Response.class, org.mlflow.api.proto.Service.CreateRun.Response.Builder.class);
      }

      private int bitField0_;
      public static final int RUN_FIELD_NUMBER = 1;
      private org.mlflow.api.proto.Service.Run run_;
      /**
       * <pre>
       * The newly created run.
       * </pre>
       *
       * <code>optional .mlflow.Run run = 1;</code>
       */
      public boolean hasRun() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * The newly created run.
       * </pre>
       *
       * <code>optional .mlflow.Run run = 1;</code>
       */
      public org.mlflow.api.proto.Service.Run getRun() {
        return run_ == null ? org.mlflow.api.proto.Service.Run.getDefaultInstance() : run_;
      }
      /**
       * <pre>
       * The newly created run.
       * </pre>
       *
       * <code>optional .mlflow.Run run = 1;</code>
       */
      public org.mlflow.api.proto.Service.RunOrBuilder getRunOrBuilder() {
        return run_ == null ? org.mlflow.api.proto.Service.Run.getDefaultInstance() : run_;
      }

      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) == 0x00000001)) {
          output.writeMessage(1, getRun());
        }
        unknownFields.writeTo(output);
      }

      @java.lang.Override
      public int getSerializedSize() {
        int size = memoizedSize;
        if (size != -1) return size;

        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(1, getRun());
        }
        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.CreateRun.Response)) {
          return super.equals(obj);
        }
        org.mlflow.api.proto.Service.CreateRun.Response other = (org.mlflow.api.proto.Service.CreateRun.Response) obj;

        boolean result = true;
        result = result && (hasRun() == other.hasRun());
        if (hasRun()) {
          result = result && getRun()
              .equals(other.getRun());
        }
        result = result && unknownFields.equals(other.unknownFields);
        return result;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        if (hasRun()) {
          hash = (37 * hash) + RUN_FIELD_NUMBER;
          hash = (53 * hash) + getRun().hashCode();
        }
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static org.mlflow.api.proto.Service.CreateRun.Response parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.CreateRun.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.CreateRun.Response parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.CreateRun.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.CreateRun.Response parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.CreateRun.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.CreateRun.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.CreateRun.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.CreateRun.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.CreateRun.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.CreateRun.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.CreateRun.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.CreateRun.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.CreateRun.Response}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:mlflow.CreateRun.Response)
          org.mlflow.api.proto.Service.CreateRun.ResponseOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_CreateRun_Response_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_CreateRun_Response_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  org.mlflow.api.proto.Service.CreateRun.Response.class, org.mlflow.api.proto.Service.CreateRun.Response.Builder.class);
        }

        // Construct using org.mlflow.api.proto.Service.CreateRun.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) {
            getRunFieldBuilder();
          }
        }
        @java.lang.Override
        public Builder clear() {
          super.clear();
          if (runBuilder_ == null) {
            run_ = null;
          } else {
            runBuilder_.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_CreateRun_Response_descriptor;
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.CreateRun.Response getDefaultInstanceForType() {
          return org.mlflow.api.proto.Service.CreateRun.Response.getDefaultInstance();
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.CreateRun.Response build() {
          org.mlflow.api.proto.Service.CreateRun.Response result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.CreateRun.Response buildPartial() {
          org.mlflow.api.proto.Service.CreateRun.Response result = new org.mlflow.api.proto.Service.CreateRun.Response(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          if (runBuilder_ == null) {
            result.run_ = run_;
          } else {
            result.run_ = runBuilder_.build();
          }
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        @java.lang.Override
        public Builder clone() {
          return (Builder) super.clone();
        }
        @java.lang.Override
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.setField(field, value);
        }
        @java.lang.Override
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }
        @java.lang.Override
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }
        @java.lang.Override
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }
        @java.lang.Override
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }
        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof org.mlflow.api.proto.Service.CreateRun.Response) {
            return mergeFrom((org.mlflow.api.proto.Service.CreateRun.Response)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(org.mlflow.api.proto.Service.CreateRun.Response other) {
          if (other == org.mlflow.api.proto.Service.CreateRun.Response.getDefaultInstance()) return this;
          if (other.hasRun()) {
            mergeRun(other.getRun());
          }
          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.CreateRun.Response parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (org.mlflow.api.proto.Service.CreateRun.Response) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        private org.mlflow.api.proto.Service.Run run_ = null;
        private com.google.protobuf.SingleFieldBuilderV3<
            org.mlflow.api.proto.Service.Run, org.mlflow.api.proto.Service.Run.Builder, org.mlflow.api.proto.Service.RunOrBuilder> runBuilder_;
        /**
         * <pre>
         * The newly created run.
         * </pre>
         *
         * <code>optional .mlflow.Run run = 1;</code>
         */
        public boolean hasRun() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <pre>
         * The newly created run.
         * </pre>
         *
         * <code>optional .mlflow.Run run = 1;</code>
         */
        public org.mlflow.api.proto.Service.Run getRun() {
          if (runBuilder_ == null) {
            return run_ == null ? org.mlflow.api.proto.Service.Run.getDefaultInstance() : run_;
          } else {
            return runBuilder_.getMessage();
          }
        }
        /**
         * <pre>
         * The newly created run.
         * </pre>
         *
         * <code>optional .mlflow.Run run = 1;</code>
         */
        public Builder setRun(org.mlflow.api.proto.Service.Run value) {
          if (runBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            run_ = value;
            onChanged();
          } else {
            runBuilder_.setMessage(value);
          }
          bitField0_ |= 0x00000001;
          return this;
        }
        /**
         * <pre>
         * The newly created run.
         * </pre>
         *
         * <code>optional .mlflow.Run run = 1;</code>
         */
        public Builder setRun(
            org.mlflow.api.proto.Service.Run.Builder builderForValue) {
          if (runBuilder_ == null) {
            run_ = builderForValue.build();
            onChanged();
          } else {
            runBuilder_.setMessage(builderForValue.build());
          }
          bitField0_ |= 0x00000001;
          return this;
        }
        /**
         * <pre>
         * The newly created run.
         * </pre>
         *
         * <code>optional .mlflow.Run run = 1;</code>
         */
        public Builder mergeRun(org.mlflow.api.proto.Service.Run value) {
          if (runBuilder_ == null) {
            if (((bitField0_ & 0x00000001) == 0x00000001) &&
                run_ != null &&
                run_ != org.mlflow.api.proto.Service.Run.getDefaultInstance()) {
              run_ =
                org.mlflow.api.proto.Service.Run.newBuilder(run_).mergeFrom(value).buildPartial();
            } else {
              run_ = value;
            }
            onChanged();
          } else {
            runBuilder_.mergeFrom(value);
          }
          bitField0_ |= 0x00000001;
          return this;
        }
        /**
         * <pre>
         * The newly created run.
         * </pre>
         *
         * <code>optional .mlflow.Run run = 1;</code>
         */
        public Builder clearRun() {
          if (runBuilder_ == null) {
            run_ = null;
            onChanged();
          } else {
            runBuilder_.clear();
          }
          bitField0_ = (bitField0_ & ~0x00000001);
          return this;
        }
        /**
         * <pre>
         * The newly created run.
         * </pre>
         *
         * <code>optional .mlflow.Run run = 1;</code>
         */
        public org.mlflow.api.proto.Service.Run.Builder getRunBuilder() {
          bitField0_ |= 0x00000001;
          onChanged();
          return getRunFieldBuilder().getBuilder();
        }
        /**
         * <pre>
         * The newly created run.
         * </pre>
         *
         * <code>optional .mlflow.Run run = 1;</code>
         */
        public org.mlflow.api.proto.Service.RunOrBuilder getRunOrBuilder() {
          if (runBuilder_ != null) {
            return runBuilder_.getMessageOrBuilder();
          } else {
            return run_ == null ?
                org.mlflow.api.proto.Service.Run.getDefaultInstance() : run_;
          }
        }
        /**
         * <pre>
         * The newly created run.
         * </pre>
         *
         * <code>optional .mlflow.Run run = 1;</code>
         */
        private com.google.protobuf.SingleFieldBuilderV3<
            org.mlflow.api.proto.Service.Run, org.mlflow.api.proto.Service.Run.Builder, org.mlflow.api.proto.Service.RunOrBuilder> 
            getRunFieldBuilder() {
          if (runBuilder_ == null) {
            runBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
                org.mlflow.api.proto.Service.Run, org.mlflow.api.proto.Service.Run.Builder, org.mlflow.api.proto.Service.RunOrBuilder>(
                    getRun(),
                    getParentForChildren(),
                    isClean());
            run_ = null;
          }
          return runBuilder_;
        }
        @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.CreateRun.Response)
      }

      // @@protoc_insertion_point(class_scope:mlflow.CreateRun.Response)
      private static final org.mlflow.api.proto.Service.CreateRun.Response DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.CreateRun.Response();
      }

      public static org.mlflow.api.proto.Service.CreateRun.Response getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      @java.lang.Deprecated public static final com.google.protobuf.Parser<Response>
          PARSER = new com.google.protobuf.AbstractParser<Response>() {
        @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<Response> parser() {
        return PARSER;
      }

      @java.lang.Override
      public com.google.protobuf.Parser<Response> getParserForType() {
        return PARSER;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.CreateRun.Response getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    private int bitField0_;
    public static final int EXPERIMENT_ID_FIELD_NUMBER = 1;
    private long experimentId_;
    /**
     * <pre>
     * ID of the associated experiment.
     * </pre>
     *
     * <code>optional int64 experiment_id = 1;</code>
     */
    public boolean hasExperimentId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * ID of the associated experiment.
     * </pre>
     *
     * <code>optional int64 experiment_id = 1;</code>
     */
    public long getExperimentId() {
      return experimentId_;
    }

    public static final int USER_ID_FIELD_NUMBER = 2;
    private volatile java.lang.Object userId_;
    /**
     * <pre>
     * ID of the user executing the run.
     * </pre>
     *
     * <code>optional string user_id = 2;</code>
     */
    public boolean hasUserId() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     * ID of the user executing the run.
     * </pre>
     *
     * <code>optional string user_id = 2;</code>
     */
    public java.lang.String getUserId() {
      java.lang.Object ref = userId_;
      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()) {
          userId_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * ID of the user executing the run.
     * </pre>
     *
     * <code>optional string user_id = 2;</code>
     */
    public com.google.protobuf.ByteString
        getUserIdBytes() {
      java.lang.Object ref = userId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        userId_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int RUN_NAME_FIELD_NUMBER = 3;
    private volatile java.lang.Object runName_;
    /**
     * <pre>
     * Human readable name for the run.
     * </pre>
     *
     * <code>optional string run_name = 3;</code>
     */
    public boolean hasRunName() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <pre>
     * Human readable name for the run.
     * </pre>
     *
     * <code>optional string run_name = 3;</code>
     */
    public java.lang.String getRunName() {
      java.lang.Object ref = runName_;
      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()) {
          runName_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Human readable name for the run.
     * </pre>
     *
     * <code>optional string run_name = 3;</code>
     */
    public com.google.protobuf.ByteString
        getRunNameBytes() {
      java.lang.Object ref = runName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        runName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int SOURCE_TYPE_FIELD_NUMBER = 4;
    private int sourceType_;
    /**
     * <pre>
     * Originating source for the run.
     * </pre>
     *
     * <code>optional .mlflow.SourceType source_type = 4;</code>
     */
    public boolean hasSourceType() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <pre>
     * Originating source for the run.
     * </pre>
     *
     * <code>optional .mlflow.SourceType source_type = 4;</code>
     */
    public org.mlflow.api.proto.Service.SourceType getSourceType() {
      @SuppressWarnings("deprecation")
      org.mlflow.api.proto.Service.SourceType result = org.mlflow.api.proto.Service.SourceType.valueOf(sourceType_);
      return result == null ? org.mlflow.api.proto.Service.SourceType.NOTEBOOK : result;
    }

    public static final int SOURCE_NAME_FIELD_NUMBER = 5;
    private volatile java.lang.Object sourceName_;
    /**
     * <pre>
     * String descriptor for the run's source. For example, name or description of a notebook, or the
     * URL or path to a project.
     * </pre>
     *
     * <code>optional string source_name = 5;</code>
     */
    public boolean hasSourceName() {
      return ((bitField0_ & 0x00000010) == 0x00000010);
    }
    /**
     * <pre>
     * String descriptor for the run's source. For example, name or description of a notebook, or the
     * URL or path to a project.
     * </pre>
     *
     * <code>optional string source_name = 5;</code>
     */
    public java.lang.String getSourceName() {
      java.lang.Object ref = sourceName_;
      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()) {
          sourceName_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * String descriptor for the run's source. For example, name or description of a notebook, or the
     * URL or path to a project.
     * </pre>
     *
     * <code>optional string source_name = 5;</code>
     */
    public com.google.protobuf.ByteString
        getSourceNameBytes() {
      java.lang.Object ref = sourceName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        sourceName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int ENTRY_POINT_NAME_FIELD_NUMBER = 6;
    private volatile java.lang.Object entryPointName_;
    /**
     * <pre>
     * Name of the project entry point associated with the current run, if any.
     * </pre>
     *
     * <code>optional string entry_point_name = 6;</code>
     */
    public boolean hasEntryPointName() {
      return ((bitField0_ & 0x00000020) == 0x00000020);
    }
    /**
     * <pre>
     * Name of the project entry point associated with the current run, if any.
     * </pre>
     *
     * <code>optional string entry_point_name = 6;</code>
     */
    public java.lang.String getEntryPointName() {
      java.lang.Object ref = entryPointName_;
      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()) {
          entryPointName_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Name of the project entry point associated with the current run, if any.
     * </pre>
     *
     * <code>optional string entry_point_name = 6;</code>
     */
    public com.google.protobuf.ByteString
        getEntryPointNameBytes() {
      java.lang.Object ref = entryPointName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        entryPointName_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int START_TIME_FIELD_NUMBER = 7;
    private long startTime_;
    /**
     * <pre>
     * Unix timestamp of when the run started in milliseconds.
     * </pre>
     *
     * <code>optional int64 start_time = 7;</code>
     */
    public boolean hasStartTime() {
      return ((bitField0_ & 0x00000040) == 0x00000040);
    }
    /**
     * <pre>
     * Unix timestamp of when the run started in milliseconds.
     * </pre>
     *
     * <code>optional int64 start_time = 7;</code>
     */
    public long getStartTime() {
      return startTime_;
    }

    public static final int SOURCE_VERSION_FIELD_NUMBER = 8;
    private volatile java.lang.Object sourceVersion_;
    /**
     * <pre>
     * Git commit hash of the source code used to create run.
     * </pre>
     *
     * <code>optional string source_version = 8;</code>
     */
    public boolean hasSourceVersion() {
      return ((bitField0_ & 0x00000080) == 0x00000080);
    }
    /**
     * <pre>
     * Git commit hash of the source code used to create run.
     * </pre>
     *
     * <code>optional string source_version = 8;</code>
     */
    public java.lang.String getSourceVersion() {
      java.lang.Object ref = sourceVersion_;
      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()) {
          sourceVersion_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Git commit hash of the source code used to create run.
     * </pre>
     *
     * <code>optional string source_version = 8;</code>
     */
    public com.google.protobuf.ByteString
        getSourceVersionBytes() {
      java.lang.Object ref = sourceVersion_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        sourceVersion_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int TAGS_FIELD_NUMBER = 9;
    private java.util.List<org.mlflow.api.proto.Service.RunTag> tags_;
    /**
     * <pre>
     * Additional metadata for run.
     * </pre>
     *
     * <code>repeated .mlflow.RunTag tags = 9;</code>
     */
    public java.util.List<org.mlflow.api.proto.Service.RunTag> getTagsList() {
      return tags_;
    }
    /**
     * <pre>
     * Additional metadata for run.
     * </pre>
     *
     * <code>repeated .mlflow.RunTag tags = 9;</code>
     */
    public java.util.List<? extends org.mlflow.api.proto.Service.RunTagOrBuilder> 
        getTagsOrBuilderList() {
      return tags_;
    }
    /**
     * <pre>
     * Additional metadata for run.
     * </pre>
     *
     * <code>repeated .mlflow.RunTag tags = 9;</code>
     */
    public int getTagsCount() {
      return tags_.size();
    }
    /**
     * <pre>
     * Additional metadata for run.
     * </pre>
     *
     * <code>repeated .mlflow.RunTag tags = 9;</code>
     */
    public org.mlflow.api.proto.Service.RunTag getTags(int index) {
      return tags_.get(index);
    }
    /**
     * <pre>
     * Additional metadata for run.
     * </pre>
     *
     * <code>repeated .mlflow.RunTag tags = 9;</code>
     */
    public org.mlflow.api.proto.Service.RunTagOrBuilder getTagsOrBuilder(
        int index) {
      return tags_.get(index);
    }

    public static final int PARENT_RUN_ID_FIELD_NUMBER = 10;
    private volatile java.lang.Object parentRunId_;
    /**
     * <pre>
     * ID of the parent run which started this run.
     * </pre>
     *
     * <code>optional string parent_run_id = 10;</code>
     */
    public boolean hasParentRunId() {
      return ((bitField0_ & 0x00000100) == 0x00000100);
    }
    /**
     * <pre>
     * ID of the parent run which started this run.
     * </pre>
     *
     * <code>optional string parent_run_id = 10;</code>
     */
    public java.lang.String getParentRunId() {
      java.lang.Object ref = parentRunId_;
      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()) {
          parentRunId_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * ID of the parent run which started this run.
     * </pre>
     *
     * <code>optional string parent_run_id = 10;</code>
     */
    public com.google.protobuf.ByteString
        getParentRunIdBytes() {
      java.lang.Object ref = parentRunId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        parentRunId_ = 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) == 0x00000001)) {
        output.writeInt64(1, experimentId_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, userId_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, runName_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeEnum(4, sourceType_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 5, sourceName_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 6, entryPointName_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        output.writeInt64(7, startTime_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 8, sourceVersion_);
      }
      for (int i = 0; i < tags_.size(); i++) {
        output.writeMessage(9, tags_.get(i));
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 10, parentRunId_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(1, experimentId_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, userId_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, runName_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(4, sourceType_);
      }
      if (((bitField0_ & 0x00000010) == 0x00000010)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, sourceName_);
      }
      if (((bitField0_ & 0x00000020) == 0x00000020)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, entryPointName_);
      }
      if (((bitField0_ & 0x00000040) == 0x00000040)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(7, startTime_);
      }
      if (((bitField0_ & 0x00000080) == 0x00000080)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(8, sourceVersion_);
      }
      for (int i = 0; i < tags_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(9, tags_.get(i));
      }
      if (((bitField0_ & 0x00000100) == 0x00000100)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(10, parentRunId_);
      }
      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.CreateRun)) {
        return super.equals(obj);
      }
      org.mlflow.api.proto.Service.CreateRun other = (org.mlflow.api.proto.Service.CreateRun) obj;

      boolean result = true;
      result = result && (hasExperimentId() == other.hasExperimentId());
      if (hasExperimentId()) {
        result = result && (getExperimentId()
            == other.getExperimentId());
      }
      result = result && (hasUserId() == other.hasUserId());
      if (hasUserId()) {
        result = result && getUserId()
            .equals(other.getUserId());
      }
      result = result && (hasRunName() == other.hasRunName());
      if (hasRunName()) {
        result = result && getRunName()
            .equals(other.getRunName());
      }
      result = result && (hasSourceType() == other.hasSourceType());
      if (hasSourceType()) {
        result = result && sourceType_ == other.sourceType_;
      }
      result = result && (hasSourceName() == other.hasSourceName());
      if (hasSourceName()) {
        result = result && getSourceName()
            .equals(other.getSourceName());
      }
      result = result && (hasEntryPointName() == other.hasEntryPointName());
      if (hasEntryPointName()) {
        result = result && getEntryPointName()
            .equals(other.getEntryPointName());
      }
      result = result && (hasStartTime() == other.hasStartTime());
      if (hasStartTime()) {
        result = result && (getStartTime()
            == other.getStartTime());
      }
      result = result && (hasSourceVersion() == other.hasSourceVersion());
      if (hasSourceVersion()) {
        result = result && getSourceVersion()
            .equals(other.getSourceVersion());
      }
      result = result && getTagsList()
          .equals(other.getTagsList());
      result = result && (hasParentRunId() == other.hasParentRunId());
      if (hasParentRunId()) {
        result = result && getParentRunId()
            .equals(other.getParentRunId());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasExperimentId()) {
        hash = (37 * hash) + EXPERIMENT_ID_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            getExperimentId());
      }
      if (hasUserId()) {
        hash = (37 * hash) + USER_ID_FIELD_NUMBER;
        hash = (53 * hash) + getUserId().hashCode();
      }
      if (hasRunName()) {
        hash = (37 * hash) + RUN_NAME_FIELD_NUMBER;
        hash = (53 * hash) + getRunName().hashCode();
      }
      if (hasSourceType()) {
        hash = (37 * hash) + SOURCE_TYPE_FIELD_NUMBER;
        hash = (53 * hash) + sourceType_;
      }
      if (hasSourceName()) {
        hash = (37 * hash) + SOURCE_NAME_FIELD_NUMBER;
        hash = (53 * hash) + getSourceName().hashCode();
      }
      if (hasEntryPointName()) {
        hash = (37 * hash) + ENTRY_POINT_NAME_FIELD_NUMBER;
        hash = (53 * hash) + getEntryPointName().hashCode();
      }
      if (hasStartTime()) {
        hash = (37 * hash) + START_TIME_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            getStartTime());
      }
      if (hasSourceVersion()) {
        hash = (37 * hash) + SOURCE_VERSION_FIELD_NUMBER;
        hash = (53 * hash) + getSourceVersion().hashCode();
      }
      if (getTagsCount() > 0) {
        hash = (37 * hash) + TAGS_FIELD_NUMBER;
        hash = (53 * hash) + getTagsList().hashCode();
      }
      if (hasParentRunId()) {
        hash = (37 * hash) + PARENT_RUN_ID_FIELD_NUMBER;
        hash = (53 * hash) + getParentRunId().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.mlflow.api.proto.Service.CreateRun parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.CreateRun 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.CreateRun parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.CreateRun 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.CreateRun parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.CreateRun 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.CreateRun parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.CreateRun 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.CreateRun parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.CreateRun 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.CreateRun 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.CreateRun 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.CreateRun 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.CreateRun}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:mlflow.CreateRun)
        org.mlflow.api.proto.Service.CreateRunOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_CreateRun_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_CreateRun_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.CreateRun.class, org.mlflow.api.proto.Service.CreateRun.Builder.class);
      }

      // Construct using org.mlflow.api.proto.Service.CreateRun.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getTagsFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        experimentId_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000001);
        userId_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        runName_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        sourceType_ = 1;
        bitField0_ = (bitField0_ & ~0x00000008);
        sourceName_ = "";
        bitField0_ = (bitField0_ & ~0x00000010);
        entryPointName_ = "";
        bitField0_ = (bitField0_ & ~0x00000020);
        startTime_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000040);
        sourceVersion_ = "";
        bitField0_ = (bitField0_ & ~0x00000080);
        if (tagsBuilder_ == null) {
          tags_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000100);
        } else {
          tagsBuilder_.clear();
        }
        parentRunId_ = "";
        bitField0_ = (bitField0_ & ~0x00000200);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_CreateRun_descriptor;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.CreateRun getDefaultInstanceForType() {
        return org.mlflow.api.proto.Service.CreateRun.getDefaultInstance();
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.CreateRun build() {
        org.mlflow.api.proto.Service.CreateRun result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.CreateRun buildPartial() {
        org.mlflow.api.proto.Service.CreateRun result = new org.mlflow.api.proto.Service.CreateRun(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.experimentId_ = experimentId_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.userId_ = userId_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.runName_ = runName_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.sourceType_ = sourceType_;
        if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
          to_bitField0_ |= 0x00000010;
        }
        result.sourceName_ = sourceName_;
        if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
          to_bitField0_ |= 0x00000020;
        }
        result.entryPointName_ = entryPointName_;
        if (((from_bitField0_ & 0x00000040) == 0x00000040)) {
          to_bitField0_ |= 0x00000040;
        }
        result.startTime_ = startTime_;
        if (((from_bitField0_ & 0x00000080) == 0x00000080)) {
          to_bitField0_ |= 0x00000080;
        }
        result.sourceVersion_ = sourceVersion_;
        if (tagsBuilder_ == null) {
          if (((bitField0_ & 0x00000100) == 0x00000100)) {
            tags_ = java.util.Collections.unmodifiableList(tags_);
            bitField0_ = (bitField0_ & ~0x00000100);
          }
          result.tags_ = tags_;
        } else {
          result.tags_ = tagsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000200) == 0x00000200)) {
          to_bitField0_ |= 0x00000100;
        }
        result.parentRunId_ = parentRunId_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.mlflow.api.proto.Service.CreateRun) {
          return mergeFrom((org.mlflow.api.proto.Service.CreateRun)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.mlflow.api.proto.Service.CreateRun other) {
        if (other == org.mlflow.api.proto.Service.CreateRun.getDefaultInstance()) return this;
        if (other.hasExperimentId()) {
          setExperimentId(other.getExperimentId());
        }
        if (other.hasUserId()) {
          bitField0_ |= 0x00000002;
          userId_ = other.userId_;
          onChanged();
        }
        if (other.hasRunName()) {
          bitField0_ |= 0x00000004;
          runName_ = other.runName_;
          onChanged();
        }
        if (other.hasSourceType()) {
          setSourceType(other.getSourceType());
        }
        if (other.hasSourceName()) {
          bitField0_ |= 0x00000010;
          sourceName_ = other.sourceName_;
          onChanged();
        }
        if (other.hasEntryPointName()) {
          bitField0_ |= 0x00000020;
          entryPointName_ = other.entryPointName_;
          onChanged();
        }
        if (other.hasStartTime()) {
          setStartTime(other.getStartTime());
        }
        if (other.hasSourceVersion()) {
          bitField0_ |= 0x00000080;
          sourceVersion_ = other.sourceVersion_;
          onChanged();
        }
        if (tagsBuilder_ == null) {
          if (!other.tags_.isEmpty()) {
            if (tags_.isEmpty()) {
              tags_ = other.tags_;
              bitField0_ = (bitField0_ & ~0x00000100);
            } else {
              ensureTagsIsMutable();
              tags_.addAll(other.tags_);
            }
            onChanged();
          }
        } else {
          if (!other.tags_.isEmpty()) {
            if (tagsBuilder_.isEmpty()) {
              tagsBuilder_.dispose();
              tagsBuilder_ = null;
              tags_ = other.tags_;
              bitField0_ = (bitField0_ & ~0x00000100);
              tagsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getTagsFieldBuilder() : null;
            } else {
              tagsBuilder_.addAllMessages(other.tags_);
            }
          }
        }
        if (other.hasParentRunId()) {
          bitField0_ |= 0x00000200;
          parentRunId_ = other.parentRunId_;
          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.CreateRun parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.mlflow.api.proto.Service.CreateRun) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private long experimentId_ ;
      /**
       * <pre>
       * ID of the associated experiment.
       * </pre>
       *
       * <code>optional int64 experiment_id = 1;</code>
       */
      public boolean hasExperimentId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * ID of the associated experiment.
       * </pre>
       *
       * <code>optional int64 experiment_id = 1;</code>
       */
      public long getExperimentId() {
        return experimentId_;
      }
      /**
       * <pre>
       * ID of the associated experiment.
       * </pre>
       *
       * <code>optional int64 experiment_id = 1;</code>
       */
      public Builder setExperimentId(long value) {
        bitField0_ |= 0x00000001;
        experimentId_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * ID of the associated experiment.
       * </pre>
       *
       * <code>optional int64 experiment_id = 1;</code>
       */
      public Builder clearExperimentId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        experimentId_ = 0L;
        onChanged();
        return this;
      }

      private java.lang.Object userId_ = "";
      /**
       * <pre>
       * ID of the user executing the run.
       * </pre>
       *
       * <code>optional string user_id = 2;</code>
       */
      public boolean hasUserId() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * ID of the user executing the run.
       * </pre>
       *
       * <code>optional string user_id = 2;</code>
       */
      public java.lang.String getUserId() {
        java.lang.Object ref = userId_;
        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()) {
            userId_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * ID of the user executing the run.
       * </pre>
       *
       * <code>optional string user_id = 2;</code>
       */
      public com.google.protobuf.ByteString
          getUserIdBytes() {
        java.lang.Object ref = userId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          userId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * ID of the user executing the run.
       * </pre>
       *
       * <code>optional string user_id = 2;</code>
       */
      public Builder setUserId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        userId_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * ID of the user executing the run.
       * </pre>
       *
       * <code>optional string user_id = 2;</code>
       */
      public Builder clearUserId() {
        bitField0_ = (bitField0_ & ~0x00000002);
        userId_ = getDefaultInstance().getUserId();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * ID of the user executing the run.
       * </pre>
       *
       * <code>optional string user_id = 2;</code>
       */
      public Builder setUserIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        userId_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object runName_ = "";
      /**
       * <pre>
       * Human readable name for the run.
       * </pre>
       *
       * <code>optional string run_name = 3;</code>
       */
      public boolean hasRunName() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <pre>
       * Human readable name for the run.
       * </pre>
       *
       * <code>optional string run_name = 3;</code>
       */
      public java.lang.String getRunName() {
        java.lang.Object ref = runName_;
        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()) {
            runName_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Human readable name for the run.
       * </pre>
       *
       * <code>optional string run_name = 3;</code>
       */
      public com.google.protobuf.ByteString
          getRunNameBytes() {
        java.lang.Object ref = runName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          runName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Human readable name for the run.
       * </pre>
       *
       * <code>optional string run_name = 3;</code>
       */
      public Builder setRunName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        runName_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Human readable name for the run.
       * </pre>
       *
       * <code>optional string run_name = 3;</code>
       */
      public Builder clearRunName() {
        bitField0_ = (bitField0_ & ~0x00000004);
        runName_ = getDefaultInstance().getRunName();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Human readable name for the run.
       * </pre>
       *
       * <code>optional string run_name = 3;</code>
       */
      public Builder setRunNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        runName_ = value;
        onChanged();
        return this;
      }

      private int sourceType_ = 1;
      /**
       * <pre>
       * Originating source for the run.
       * </pre>
       *
       * <code>optional .mlflow.SourceType source_type = 4;</code>
       */
      public boolean hasSourceType() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <pre>
       * Originating source for the run.
       * </pre>
       *
       * <code>optional .mlflow.SourceType source_type = 4;</code>
       */
      public org.mlflow.api.proto.Service.SourceType getSourceType() {
        @SuppressWarnings("deprecation")
        org.mlflow.api.proto.Service.SourceType result = org.mlflow.api.proto.Service.SourceType.valueOf(sourceType_);
        return result == null ? org.mlflow.api.proto.Service.SourceType.NOTEBOOK : result;
      }
      /**
       * <pre>
       * Originating source for the run.
       * </pre>
       *
       * <code>optional .mlflow.SourceType source_type = 4;</code>
       */
      public Builder setSourceType(org.mlflow.api.proto.Service.SourceType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000008;
        sourceType_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Originating source for the run.
       * </pre>
       *
       * <code>optional .mlflow.SourceType source_type = 4;</code>
       */
      public Builder clearSourceType() {
        bitField0_ = (bitField0_ & ~0x00000008);
        sourceType_ = 1;
        onChanged();
        return this;
      }

      private java.lang.Object sourceName_ = "";
      /**
       * <pre>
       * String descriptor for the run's source. For example, name or description of a notebook, or the
       * URL or path to a project.
       * </pre>
       *
       * <code>optional string source_name = 5;</code>
       */
      public boolean hasSourceName() {
        return ((bitField0_ & 0x00000010) == 0x00000010);
      }
      /**
       * <pre>
       * String descriptor for the run's source. For example, name or description of a notebook, or the
       * URL or path to a project.
       * </pre>
       *
       * <code>optional string source_name = 5;</code>
       */
      public java.lang.String getSourceName() {
        java.lang.Object ref = sourceName_;
        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()) {
            sourceName_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * String descriptor for the run's source. For example, name or description of a notebook, or the
       * URL or path to a project.
       * </pre>
       *
       * <code>optional string source_name = 5;</code>
       */
      public com.google.protobuf.ByteString
          getSourceNameBytes() {
        java.lang.Object ref = sourceName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          sourceName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * String descriptor for the run's source. For example, name or description of a notebook, or the
       * URL or path to a project.
       * </pre>
       *
       * <code>optional string source_name = 5;</code>
       */
      public Builder setSourceName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        sourceName_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * String descriptor for the run's source. For example, name or description of a notebook, or the
       * URL or path to a project.
       * </pre>
       *
       * <code>optional string source_name = 5;</code>
       */
      public Builder clearSourceName() {
        bitField0_ = (bitField0_ & ~0x00000010);
        sourceName_ = getDefaultInstance().getSourceName();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * String descriptor for the run's source. For example, name or description of a notebook, or the
       * URL or path to a project.
       * </pre>
       *
       * <code>optional string source_name = 5;</code>
       */
      public Builder setSourceNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000010;
        sourceName_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object entryPointName_ = "";
      /**
       * <pre>
       * Name of the project entry point associated with the current run, if any.
       * </pre>
       *
       * <code>optional string entry_point_name = 6;</code>
       */
      public boolean hasEntryPointName() {
        return ((bitField0_ & 0x00000020) == 0x00000020);
      }
      /**
       * <pre>
       * Name of the project entry point associated with the current run, if any.
       * </pre>
       *
       * <code>optional string entry_point_name = 6;</code>
       */
      public java.lang.String getEntryPointName() {
        java.lang.Object ref = entryPointName_;
        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()) {
            entryPointName_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Name of the project entry point associated with the current run, if any.
       * </pre>
       *
       * <code>optional string entry_point_name = 6;</code>
       */
      public com.google.protobuf.ByteString
          getEntryPointNameBytes() {
        java.lang.Object ref = entryPointName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          entryPointName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Name of the project entry point associated with the current run, if any.
       * </pre>
       *
       * <code>optional string entry_point_name = 6;</code>
       */
      public Builder setEntryPointName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        entryPointName_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Name of the project entry point associated with the current run, if any.
       * </pre>
       *
       * <code>optional string entry_point_name = 6;</code>
       */
      public Builder clearEntryPointName() {
        bitField0_ = (bitField0_ & ~0x00000020);
        entryPointName_ = getDefaultInstance().getEntryPointName();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Name of the project entry point associated with the current run, if any.
       * </pre>
       *
       * <code>optional string entry_point_name = 6;</code>
       */
      public Builder setEntryPointNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000020;
        entryPointName_ = value;
        onChanged();
        return this;
      }

      private long startTime_ ;
      /**
       * <pre>
       * Unix timestamp of when the run started in milliseconds.
       * </pre>
       *
       * <code>optional int64 start_time = 7;</code>
       */
      public boolean hasStartTime() {
        return ((bitField0_ & 0x00000040) == 0x00000040);
      }
      /**
       * <pre>
       * Unix timestamp of when the run started in milliseconds.
       * </pre>
       *
       * <code>optional int64 start_time = 7;</code>
       */
      public long getStartTime() {
        return startTime_;
      }
      /**
       * <pre>
       * Unix timestamp of when the run started in milliseconds.
       * </pre>
       *
       * <code>optional int64 start_time = 7;</code>
       */
      public Builder setStartTime(long value) {
        bitField0_ |= 0x00000040;
        startTime_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Unix timestamp of when the run started in milliseconds.
       * </pre>
       *
       * <code>optional int64 start_time = 7;</code>
       */
      public Builder clearStartTime() {
        bitField0_ = (bitField0_ & ~0x00000040);
        startTime_ = 0L;
        onChanged();
        return this;
      }

      private java.lang.Object sourceVersion_ = "";
      /**
       * <pre>
       * Git commit hash of the source code used to create run.
       * </pre>
       *
       * <code>optional string source_version = 8;</code>
       */
      public boolean hasSourceVersion() {
        return ((bitField0_ & 0x00000080) == 0x00000080);
      }
      /**
       * <pre>
       * Git commit hash of the source code used to create run.
       * </pre>
       *
       * <code>optional string source_version = 8;</code>
       */
      public java.lang.String getSourceVersion() {
        java.lang.Object ref = sourceVersion_;
        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()) {
            sourceVersion_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Git commit hash of the source code used to create run.
       * </pre>
       *
       * <code>optional string source_version = 8;</code>
       */
      public com.google.protobuf.ByteString
          getSourceVersionBytes() {
        java.lang.Object ref = sourceVersion_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          sourceVersion_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Git commit hash of the source code used to create run.
       * </pre>
       *
       * <code>optional string source_version = 8;</code>
       */
      public Builder setSourceVersion(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        sourceVersion_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Git commit hash of the source code used to create run.
       * </pre>
       *
       * <code>optional string source_version = 8;</code>
       */
      public Builder clearSourceVersion() {
        bitField0_ = (bitField0_ & ~0x00000080);
        sourceVersion_ = getDefaultInstance().getSourceVersion();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Git commit hash of the source code used to create run.
       * </pre>
       *
       * <code>optional string source_version = 8;</code>
       */
      public Builder setSourceVersionBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000080;
        sourceVersion_ = value;
        onChanged();
        return this;
      }

      private java.util.List<org.mlflow.api.proto.Service.RunTag> tags_ =
        java.util.Collections.emptyList();
      private void ensureTagsIsMutable() {
        if (!((bitField0_ & 0x00000100) == 0x00000100)) {
          tags_ = new java.util.ArrayList<org.mlflow.api.proto.Service.RunTag>(tags_);
          bitField0_ |= 0x00000100;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.mlflow.api.proto.Service.RunTag, org.mlflow.api.proto.Service.RunTag.Builder, org.mlflow.api.proto.Service.RunTagOrBuilder> tagsBuilder_;

      /**
       * <pre>
       * Additional metadata for run.
       * </pre>
       *
       * <code>repeated .mlflow.RunTag tags = 9;</code>
       */
      public java.util.List<org.mlflow.api.proto.Service.RunTag> getTagsList() {
        if (tagsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(tags_);
        } else {
          return tagsBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * Additional metadata for run.
       * </pre>
       *
       * <code>repeated .mlflow.RunTag tags = 9;</code>
       */
      public int getTagsCount() {
        if (tagsBuilder_ == null) {
          return tags_.size();
        } else {
          return tagsBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * Additional metadata for run.
       * </pre>
       *
       * <code>repeated .mlflow.RunTag tags = 9;</code>
       */
      public org.mlflow.api.proto.Service.RunTag getTags(int index) {
        if (tagsBuilder_ == null) {
          return tags_.get(index);
        } else {
          return tagsBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * Additional metadata for run.
       * </pre>
       *
       * <code>repeated .mlflow.RunTag tags = 9;</code>
       */
      public Builder setTags(
          int index, org.mlflow.api.proto.Service.RunTag value) {
        if (tagsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTagsIsMutable();
          tags_.set(index, value);
          onChanged();
        } else {
          tagsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Additional metadata for run.
       * </pre>
       *
       * <code>repeated .mlflow.RunTag tags = 9;</code>
       */
      public Builder setTags(
          int index, org.mlflow.api.proto.Service.RunTag.Builder builderForValue) {
        if (tagsBuilder_ == null) {
          ensureTagsIsMutable();
          tags_.set(index, builderForValue.build());
          onChanged();
        } else {
          tagsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Additional metadata for run.
       * </pre>
       *
       * <code>repeated .mlflow.RunTag tags = 9;</code>
       */
      public Builder addTags(org.mlflow.api.proto.Service.RunTag value) {
        if (tagsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTagsIsMutable();
          tags_.add(value);
          onChanged();
        } else {
          tagsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * Additional metadata for run.
       * </pre>
       *
       * <code>repeated .mlflow.RunTag tags = 9;</code>
       */
      public Builder addTags(
          int index, org.mlflow.api.proto.Service.RunTag value) {
        if (tagsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureTagsIsMutable();
          tags_.add(index, value);
          onChanged();
        } else {
          tagsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Additional metadata for run.
       * </pre>
       *
       * <code>repeated .mlflow.RunTag tags = 9;</code>
       */
      public Builder addTags(
          org.mlflow.api.proto.Service.RunTag.Builder builderForValue) {
        if (tagsBuilder_ == null) {
          ensureTagsIsMutable();
          tags_.add(builderForValue.build());
          onChanged();
        } else {
          tagsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Additional metadata for run.
       * </pre>
       *
       * <code>repeated .mlflow.RunTag tags = 9;</code>
       */
      public Builder addTags(
          int index, org.mlflow.api.proto.Service.RunTag.Builder builderForValue) {
        if (tagsBuilder_ == null) {
          ensureTagsIsMutable();
          tags_.add(index, builderForValue.build());
          onChanged();
        } else {
          tagsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Additional metadata for run.
       * </pre>
       *
       * <code>repeated .mlflow.RunTag tags = 9;</code>
       */
      public Builder addAllTags(
          java.lang.Iterable<? extends org.mlflow.api.proto.Service.RunTag> values) {
        if (tagsBuilder_ == null) {
          ensureTagsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, tags_);
          onChanged();
        } else {
          tagsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * Additional metadata for run.
       * </pre>
       *
       * <code>repeated .mlflow.RunTag tags = 9;</code>
       */
      public Builder clearTags() {
        if (tagsBuilder_ == null) {
          tags_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000100);
          onChanged();
        } else {
          tagsBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * Additional metadata for run.
       * </pre>
       *
       * <code>repeated .mlflow.RunTag tags = 9;</code>
       */
      public Builder removeTags(int index) {
        if (tagsBuilder_ == null) {
          ensureTagsIsMutable();
          tags_.remove(index);
          onChanged();
        } else {
          tagsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * Additional metadata for run.
       * </pre>
       *
       * <code>repeated .mlflow.RunTag tags = 9;</code>
       */
      public org.mlflow.api.proto.Service.RunTag.Builder getTagsBuilder(
          int index) {
        return getTagsFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * Additional metadata for run.
       * </pre>
       *
       * <code>repeated .mlflow.RunTag tags = 9;</code>
       */
      public org.mlflow.api.proto.Service.RunTagOrBuilder getTagsOrBuilder(
          int index) {
        if (tagsBuilder_ == null) {
          return tags_.get(index);  } else {
          return tagsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * Additional metadata for run.
       * </pre>
       *
       * <code>repeated .mlflow.RunTag tags = 9;</code>
       */
      public java.util.List<? extends org.mlflow.api.proto.Service.RunTagOrBuilder> 
           getTagsOrBuilderList() {
        if (tagsBuilder_ != null) {
          return tagsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(tags_);
        }
      }
      /**
       * <pre>
       * Additional metadata for run.
       * </pre>
       *
       * <code>repeated .mlflow.RunTag tags = 9;</code>
       */
      public org.mlflow.api.proto.Service.RunTag.Builder addTagsBuilder() {
        return getTagsFieldBuilder().addBuilder(
            org.mlflow.api.proto.Service.RunTag.getDefaultInstance());
      }
      /**
       * <pre>
       * Additional metadata for run.
       * </pre>
       *
       * <code>repeated .mlflow.RunTag tags = 9;</code>
       */
      public org.mlflow.api.proto.Service.RunTag.Builder addTagsBuilder(
          int index) {
        return getTagsFieldBuilder().addBuilder(
            index, org.mlflow.api.proto.Service.RunTag.getDefaultInstance());
      }
      /**
       * <pre>
       * Additional metadata for run.
       * </pre>
       *
       * <code>repeated .mlflow.RunTag tags = 9;</code>
       */
      public java.util.List<org.mlflow.api.proto.Service.RunTag.Builder> 
           getTagsBuilderList() {
        return getTagsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.mlflow.api.proto.Service.RunTag, org.mlflow.api.proto.Service.RunTag.Builder, org.mlflow.api.proto.Service.RunTagOrBuilder> 
          getTagsFieldBuilder() {
        if (tagsBuilder_ == null) {
          tagsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              org.mlflow.api.proto.Service.RunTag, org.mlflow.api.proto.Service.RunTag.Builder, org.mlflow.api.proto.Service.RunTagOrBuilder>(
                  tags_,
                  ((bitField0_ & 0x00000100) == 0x00000100),
                  getParentForChildren(),
                  isClean());
          tags_ = null;
        }
        return tagsBuilder_;
      }

      private java.lang.Object parentRunId_ = "";
      /**
       * <pre>
       * ID of the parent run which started this run.
       * </pre>
       *
       * <code>optional string parent_run_id = 10;</code>
       */
      public boolean hasParentRunId() {
        return ((bitField0_ & 0x00000200) == 0x00000200);
      }
      /**
       * <pre>
       * ID of the parent run which started this run.
       * </pre>
       *
       * <code>optional string parent_run_id = 10;</code>
       */
      public java.lang.String getParentRunId() {
        java.lang.Object ref = parentRunId_;
        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()) {
            parentRunId_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * ID of the parent run which started this run.
       * </pre>
       *
       * <code>optional string parent_run_id = 10;</code>
       */
      public com.google.protobuf.ByteString
          getParentRunIdBytes() {
        java.lang.Object ref = parentRunId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          parentRunId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * ID of the parent run which started this run.
       * </pre>
       *
       * <code>optional string parent_run_id = 10;</code>
       */
      public Builder setParentRunId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000200;
        parentRunId_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * ID of the parent run which started this run.
       * </pre>
       *
       * <code>optional string parent_run_id = 10;</code>
       */
      public Builder clearParentRunId() {
        bitField0_ = (bitField0_ & ~0x00000200);
        parentRunId_ = getDefaultInstance().getParentRunId();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * ID of the parent run which started this run.
       * </pre>
       *
       * <code>optional string parent_run_id = 10;</code>
       */
      public Builder setParentRunIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000200;
        parentRunId_ = 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.CreateRun)
    }

    // @@protoc_insertion_point(class_scope:mlflow.CreateRun)
    private static final org.mlflow.api.proto.Service.CreateRun DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.CreateRun();
    }

    public static org.mlflow.api.proto.Service.CreateRun getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<CreateRun>
        PARSER = new com.google.protobuf.AbstractParser<CreateRun>() {
      @java.lang.Override
      public CreateRun parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new CreateRun(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<CreateRun> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<CreateRun> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public org.mlflow.api.proto.Service.CreateRun getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface UpdateRunOrBuilder extends
      // @@protoc_insertion_point(interface_extends:mlflow.UpdateRun)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * ID of the run to update.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    boolean hasRunUuid();
    /**
     * <pre>
     * ID of the run to update.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    java.lang.String getRunUuid();
    /**
     * <pre>
     * ID of the run to update.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    com.google.protobuf.ByteString
        getRunUuidBytes();

    /**
     * <pre>
     * Updated status of the run.
     * </pre>
     *
     * <code>optional .mlflow.RunStatus status = 2;</code>
     */
    boolean hasStatus();
    /**
     * <pre>
     * Updated status of the run.
     * </pre>
     *
     * <code>optional .mlflow.RunStatus status = 2;</code>
     */
    org.mlflow.api.proto.Service.RunStatus getStatus();

    /**
     * <pre>
     *Unix timestamp of when the run ended in milliseconds.
     * </pre>
     *
     * <code>optional int64 end_time = 3;</code>
     */
    boolean hasEndTime();
    /**
     * <pre>
     *Unix timestamp of when the run ended in milliseconds.
     * </pre>
     *
     * <code>optional int64 end_time = 3;</code>
     */
    long getEndTime();
  }
  /**
   * Protobuf type {@code mlflow.UpdateRun}
   */
  public  static final class UpdateRun extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:mlflow.UpdateRun)
      UpdateRunOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use UpdateRun.newBuilder() to construct.
    private UpdateRun(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private UpdateRun() {
      runUuid_ = "";
      status_ = 1;
      endTime_ = 0L;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private UpdateRun(
        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;
              runUuid_ = bs;
              break;
            }
            case 16: {
              int rawValue = input.readEnum();
                @SuppressWarnings("deprecation")
              org.mlflow.api.proto.Service.RunStatus value = org.mlflow.api.proto.Service.RunStatus.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(2, rawValue);
              } else {
                bitField0_ |= 0x00000002;
                status_ = rawValue;
              }
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              endTime_ = input.readInt64();
              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_UpdateRun_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.mlflow.api.proto.Service.internal_static_mlflow_UpdateRun_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.mlflow.api.proto.Service.UpdateRun.class, org.mlflow.api.proto.Service.UpdateRun.Builder.class);
    }

    public interface ResponseOrBuilder extends
        // @@protoc_insertion_point(interface_extends:mlflow.UpdateRun.Response)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <pre>
       * Updated metadata of the run.
       * </pre>
       *
       * <code>optional .mlflow.RunInfo run_info = 1;</code>
       */
      boolean hasRunInfo();
      /**
       * <pre>
       * Updated metadata of the run.
       * </pre>
       *
       * <code>optional .mlflow.RunInfo run_info = 1;</code>
       */
      org.mlflow.api.proto.Service.RunInfo getRunInfo();
      /**
       * <pre>
       * Updated metadata of the run.
       * </pre>
       *
       * <code>optional .mlflow.RunInfo run_info = 1;</code>
       */
      org.mlflow.api.proto.Service.RunInfoOrBuilder getRunInfoOrBuilder();
    }
    /**
     * Protobuf type {@code mlflow.UpdateRun.Response}
     */
    public  static final class Response extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:mlflow.UpdateRun.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
      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.RunInfo.Builder subBuilder = null;
                if (((bitField0_ & 0x00000001) == 0x00000001)) {
                  subBuilder = runInfo_.toBuilder();
                }
                runInfo_ = input.readMessage(org.mlflow.api.proto.Service.RunInfo.PARSER, extensionRegistry);
                if (subBuilder != null) {
                  subBuilder.mergeFrom(runInfo_);
                  runInfo_ = 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_UpdateRun_Response_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_UpdateRun_Response_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.UpdateRun.Response.class, org.mlflow.api.proto.Service.UpdateRun.Response.Builder.class);
      }

      private int bitField0_;
      public static final int RUN_INFO_FIELD_NUMBER = 1;
      private org.mlflow.api.proto.Service.RunInfo runInfo_;
      /**
       * <pre>
       * Updated metadata of the run.
       * </pre>
       *
       * <code>optional .mlflow.RunInfo run_info = 1;</code>
       */
      public boolean hasRunInfo() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * Updated metadata of the run.
       * </pre>
       *
       * <code>optional .mlflow.RunInfo run_info = 1;</code>
       */
      public org.mlflow.api.proto.Service.RunInfo getRunInfo() {
        return runInfo_ == null ? org.mlflow.api.proto.Service.RunInfo.getDefaultInstance() : runInfo_;
      }
      /**
       * <pre>
       * Updated metadata of the run.
       * </pre>
       *
       * <code>optional .mlflow.RunInfo run_info = 1;</code>
       */
      public org.mlflow.api.proto.Service.RunInfoOrBuilder getRunInfoOrBuilder() {
        return runInfo_ == null ? org.mlflow.api.proto.Service.RunInfo.getDefaultInstance() : runInfo_;
      }

      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) == 0x00000001)) {
          output.writeMessage(1, getRunInfo());
        }
        unknownFields.writeTo(output);
      }

      @java.lang.Override
      public int getSerializedSize() {
        int size = memoizedSize;
        if (size != -1) return size;

        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(1, getRunInfo());
        }
        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.UpdateRun.Response)) {
          return super.equals(obj);
        }
        org.mlflow.api.proto.Service.UpdateRun.Response other = (org.mlflow.api.proto.Service.UpdateRun.Response) obj;

        boolean result = true;
        result = result && (hasRunInfo() == other.hasRunInfo());
        if (hasRunInfo()) {
          result = result && getRunInfo()
              .equals(other.getRunInfo());
        }
        result = result && unknownFields.equals(other.unknownFields);
        return result;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        if (hasRunInfo()) {
          hash = (37 * hash) + RUN_INFO_FIELD_NUMBER;
          hash = (53 * hash) + getRunInfo().hashCode();
        }
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static org.mlflow.api.proto.Service.UpdateRun.Response parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.UpdateRun.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.UpdateRun.Response parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.UpdateRun.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.UpdateRun.Response parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.UpdateRun.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.UpdateRun.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.UpdateRun.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.UpdateRun.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.UpdateRun.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.UpdateRun.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.UpdateRun.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.UpdateRun.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.UpdateRun.Response}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:mlflow.UpdateRun.Response)
          org.mlflow.api.proto.Service.UpdateRun.ResponseOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_UpdateRun_Response_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_UpdateRun_Response_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  org.mlflow.api.proto.Service.UpdateRun.Response.class, org.mlflow.api.proto.Service.UpdateRun.Response.Builder.class);
        }

        // Construct using org.mlflow.api.proto.Service.UpdateRun.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) {
            getRunInfoFieldBuilder();
          }
        }
        @java.lang.Override
        public Builder clear() {
          super.clear();
          if (runInfoBuilder_ == null) {
            runInfo_ = null;
          } else {
            runInfoBuilder_.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_UpdateRun_Response_descriptor;
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.UpdateRun.Response getDefaultInstanceForType() {
          return org.mlflow.api.proto.Service.UpdateRun.Response.getDefaultInstance();
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.UpdateRun.Response build() {
          org.mlflow.api.proto.Service.UpdateRun.Response result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.UpdateRun.Response buildPartial() {
          org.mlflow.api.proto.Service.UpdateRun.Response result = new org.mlflow.api.proto.Service.UpdateRun.Response(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          if (runInfoBuilder_ == null) {
            result.runInfo_ = runInfo_;
          } else {
            result.runInfo_ = runInfoBuilder_.build();
          }
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        @java.lang.Override
        public Builder clone() {
          return (Builder) super.clone();
        }
        @java.lang.Override
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.setField(field, value);
        }
        @java.lang.Override
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }
        @java.lang.Override
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }
        @java.lang.Override
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }
        @java.lang.Override
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }
        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof org.mlflow.api.proto.Service.UpdateRun.Response) {
            return mergeFrom((org.mlflow.api.proto.Service.UpdateRun.Response)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(org.mlflow.api.proto.Service.UpdateRun.Response other) {
          if (other == org.mlflow.api.proto.Service.UpdateRun.Response.getDefaultInstance()) return this;
          if (other.hasRunInfo()) {
            mergeRunInfo(other.getRunInfo());
          }
          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.UpdateRun.Response parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (org.mlflow.api.proto.Service.UpdateRun.Response) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        private org.mlflow.api.proto.Service.RunInfo runInfo_ = null;
        private com.google.protobuf.SingleFieldBuilderV3<
            org.mlflow.api.proto.Service.RunInfo, org.mlflow.api.proto.Service.RunInfo.Builder, org.mlflow.api.proto.Service.RunInfoOrBuilder> runInfoBuilder_;
        /**
         * <pre>
         * Updated metadata of the run.
         * </pre>
         *
         * <code>optional .mlflow.RunInfo run_info = 1;</code>
         */
        public boolean hasRunInfo() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <pre>
         * Updated metadata of the run.
         * </pre>
         *
         * <code>optional .mlflow.RunInfo run_info = 1;</code>
         */
        public org.mlflow.api.proto.Service.RunInfo getRunInfo() {
          if (runInfoBuilder_ == null) {
            return runInfo_ == null ? org.mlflow.api.proto.Service.RunInfo.getDefaultInstance() : runInfo_;
          } else {
            return runInfoBuilder_.getMessage();
          }
        }
        /**
         * <pre>
         * Updated metadata of the run.
         * </pre>
         *
         * <code>optional .mlflow.RunInfo run_info = 1;</code>
         */
        public Builder setRunInfo(org.mlflow.api.proto.Service.RunInfo value) {
          if (runInfoBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            runInfo_ = value;
            onChanged();
          } else {
            runInfoBuilder_.setMessage(value);
          }
          bitField0_ |= 0x00000001;
          return this;
        }
        /**
         * <pre>
         * Updated metadata of the run.
         * </pre>
         *
         * <code>optional .mlflow.RunInfo run_info = 1;</code>
         */
        public Builder setRunInfo(
            org.mlflow.api.proto.Service.RunInfo.Builder builderForValue) {
          if (runInfoBuilder_ == null) {
            runInfo_ = builderForValue.build();
            onChanged();
          } else {
            runInfoBuilder_.setMessage(builderForValue.build());
          }
          bitField0_ |= 0x00000001;
          return this;
        }
        /**
         * <pre>
         * Updated metadata of the run.
         * </pre>
         *
         * <code>optional .mlflow.RunInfo run_info = 1;</code>
         */
        public Builder mergeRunInfo(org.mlflow.api.proto.Service.RunInfo value) {
          if (runInfoBuilder_ == null) {
            if (((bitField0_ & 0x00000001) == 0x00000001) &&
                runInfo_ != null &&
                runInfo_ != org.mlflow.api.proto.Service.RunInfo.getDefaultInstance()) {
              runInfo_ =
                org.mlflow.api.proto.Service.RunInfo.newBuilder(runInfo_).mergeFrom(value).buildPartial();
            } else {
              runInfo_ = value;
            }
            onChanged();
          } else {
            runInfoBuilder_.mergeFrom(value);
          }
          bitField0_ |= 0x00000001;
          return this;
        }
        /**
         * <pre>
         * Updated metadata of the run.
         * </pre>
         *
         * <code>optional .mlflow.RunInfo run_info = 1;</code>
         */
        public Builder clearRunInfo() {
          if (runInfoBuilder_ == null) {
            runInfo_ = null;
            onChanged();
          } else {
            runInfoBuilder_.clear();
          }
          bitField0_ = (bitField0_ & ~0x00000001);
          return this;
        }
        /**
         * <pre>
         * Updated metadata of the run.
         * </pre>
         *
         * <code>optional .mlflow.RunInfo run_info = 1;</code>
         */
        public org.mlflow.api.proto.Service.RunInfo.Builder getRunInfoBuilder() {
          bitField0_ |= 0x00000001;
          onChanged();
          return getRunInfoFieldBuilder().getBuilder();
        }
        /**
         * <pre>
         * Updated metadata of the run.
         * </pre>
         *
         * <code>optional .mlflow.RunInfo run_info = 1;</code>
         */
        public org.mlflow.api.proto.Service.RunInfoOrBuilder getRunInfoOrBuilder() {
          if (runInfoBuilder_ != null) {
            return runInfoBuilder_.getMessageOrBuilder();
          } else {
            return runInfo_ == null ?
                org.mlflow.api.proto.Service.RunInfo.getDefaultInstance() : runInfo_;
          }
        }
        /**
         * <pre>
         * Updated metadata of the run.
         * </pre>
         *
         * <code>optional .mlflow.RunInfo run_info = 1;</code>
         */
        private com.google.protobuf.SingleFieldBuilderV3<
            org.mlflow.api.proto.Service.RunInfo, org.mlflow.api.proto.Service.RunInfo.Builder, org.mlflow.api.proto.Service.RunInfoOrBuilder> 
            getRunInfoFieldBuilder() {
          if (runInfoBuilder_ == null) {
            runInfoBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
                org.mlflow.api.proto.Service.RunInfo, org.mlflow.api.proto.Service.RunInfo.Builder, org.mlflow.api.proto.Service.RunInfoOrBuilder>(
                    getRunInfo(),
                    getParentForChildren(),
                    isClean());
            runInfo_ = null;
          }
          return runInfoBuilder_;
        }
        @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.UpdateRun.Response)
      }

      // @@protoc_insertion_point(class_scope:mlflow.UpdateRun.Response)
      private static final org.mlflow.api.proto.Service.UpdateRun.Response DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.UpdateRun.Response();
      }

      public static org.mlflow.api.proto.Service.UpdateRun.Response getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      @java.lang.Deprecated public static final com.google.protobuf.Parser<Response>
          PARSER = new com.google.protobuf.AbstractParser<Response>() {
        @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<Response> parser() {
        return PARSER;
      }

      @java.lang.Override
      public com.google.protobuf.Parser<Response> getParserForType() {
        return PARSER;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.UpdateRun.Response getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    private int bitField0_;
    public static final int RUN_UUID_FIELD_NUMBER = 1;
    private volatile java.lang.Object runUuid_;
    /**
     * <pre>
     * ID of the run to update.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    public boolean hasRunUuid() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * ID of the run to update.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    public java.lang.String getRunUuid() {
      java.lang.Object ref = runUuid_;
      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()) {
          runUuid_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * ID of the run to update.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    public com.google.protobuf.ByteString
        getRunUuidBytes() {
      java.lang.Object ref = runUuid_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        runUuid_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int STATUS_FIELD_NUMBER = 2;
    private int status_;
    /**
     * <pre>
     * Updated status of the run.
     * </pre>
     *
     * <code>optional .mlflow.RunStatus status = 2;</code>
     */
    public boolean hasStatus() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     * Updated status of the run.
     * </pre>
     *
     * <code>optional .mlflow.RunStatus status = 2;</code>
     */
    public org.mlflow.api.proto.Service.RunStatus getStatus() {
      @SuppressWarnings("deprecation")
      org.mlflow.api.proto.Service.RunStatus result = org.mlflow.api.proto.Service.RunStatus.valueOf(status_);
      return result == null ? org.mlflow.api.proto.Service.RunStatus.RUNNING : result;
    }

    public static final int END_TIME_FIELD_NUMBER = 3;
    private long endTime_;
    /**
     * <pre>
     *Unix timestamp of when the run ended in milliseconds.
     * </pre>
     *
     * <code>optional int64 end_time = 3;</code>
     */
    public boolean hasEndTime() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <pre>
     *Unix timestamp of when the run ended in milliseconds.
     * </pre>
     *
     * <code>optional int64 end_time = 3;</code>
     */
    public long getEndTime() {
      return endTime_;
    }

    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) == 0x00000001)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, runUuid_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeEnum(2, status_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt64(3, endTime_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, runUuid_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(2, status_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(3, endTime_);
      }
      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.UpdateRun)) {
        return super.equals(obj);
      }
      org.mlflow.api.proto.Service.UpdateRun other = (org.mlflow.api.proto.Service.UpdateRun) obj;

      boolean result = true;
      result = result && (hasRunUuid() == other.hasRunUuid());
      if (hasRunUuid()) {
        result = result && getRunUuid()
            .equals(other.getRunUuid());
      }
      result = result && (hasStatus() == other.hasStatus());
      if (hasStatus()) {
        result = result && status_ == other.status_;
      }
      result = result && (hasEndTime() == other.hasEndTime());
      if (hasEndTime()) {
        result = result && (getEndTime()
            == other.getEndTime());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasRunUuid()) {
        hash = (37 * hash) + RUN_UUID_FIELD_NUMBER;
        hash = (53 * hash) + getRunUuid().hashCode();
      }
      if (hasStatus()) {
        hash = (37 * hash) + STATUS_FIELD_NUMBER;
        hash = (53 * hash) + status_;
      }
      if (hasEndTime()) {
        hash = (37 * hash) + END_TIME_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            getEndTime());
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.mlflow.api.proto.Service.UpdateRun parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.UpdateRun 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.UpdateRun parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.UpdateRun 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.UpdateRun parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.UpdateRun 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.UpdateRun parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.UpdateRun 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.UpdateRun parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.UpdateRun 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.UpdateRun 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.UpdateRun 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.UpdateRun 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.UpdateRun}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:mlflow.UpdateRun)
        org.mlflow.api.proto.Service.UpdateRunOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_UpdateRun_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_UpdateRun_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.UpdateRun.class, org.mlflow.api.proto.Service.UpdateRun.Builder.class);
      }

      // Construct using org.mlflow.api.proto.Service.UpdateRun.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();
        runUuid_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        status_ = 1;
        bitField0_ = (bitField0_ & ~0x00000002);
        endTime_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_UpdateRun_descriptor;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.UpdateRun getDefaultInstanceForType() {
        return org.mlflow.api.proto.Service.UpdateRun.getDefaultInstance();
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.UpdateRun build() {
        org.mlflow.api.proto.Service.UpdateRun result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.UpdateRun buildPartial() {
        org.mlflow.api.proto.Service.UpdateRun result = new org.mlflow.api.proto.Service.UpdateRun(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.runUuid_ = runUuid_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.status_ = status_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.endTime_ = endTime_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.mlflow.api.proto.Service.UpdateRun) {
          return mergeFrom((org.mlflow.api.proto.Service.UpdateRun)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.mlflow.api.proto.Service.UpdateRun other) {
        if (other == org.mlflow.api.proto.Service.UpdateRun.getDefaultInstance()) return this;
        if (other.hasRunUuid()) {
          bitField0_ |= 0x00000001;
          runUuid_ = other.runUuid_;
          onChanged();
        }
        if (other.hasStatus()) {
          setStatus(other.getStatus());
        }
        if (other.hasEndTime()) {
          setEndTime(other.getEndTime());
        }
        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.UpdateRun parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.mlflow.api.proto.Service.UpdateRun) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object runUuid_ = "";
      /**
       * <pre>
       * ID of the run to update.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public boolean hasRunUuid() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * ID of the run to update.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public java.lang.String getRunUuid() {
        java.lang.Object ref = runUuid_;
        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()) {
            runUuid_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * ID of the run to update.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public com.google.protobuf.ByteString
          getRunUuidBytes() {
        java.lang.Object ref = runUuid_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          runUuid_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * ID of the run to update.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public Builder setRunUuid(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        runUuid_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * ID of the run to update.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public Builder clearRunUuid() {
        bitField0_ = (bitField0_ & ~0x00000001);
        runUuid_ = getDefaultInstance().getRunUuid();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * ID of the run to update.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public Builder setRunUuidBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        runUuid_ = value;
        onChanged();
        return this;
      }

      private int status_ = 1;
      /**
       * <pre>
       * Updated status of the run.
       * </pre>
       *
       * <code>optional .mlflow.RunStatus status = 2;</code>
       */
      public boolean hasStatus() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * Updated status of the run.
       * </pre>
       *
       * <code>optional .mlflow.RunStatus status = 2;</code>
       */
      public org.mlflow.api.proto.Service.RunStatus getStatus() {
        @SuppressWarnings("deprecation")
        org.mlflow.api.proto.Service.RunStatus result = org.mlflow.api.proto.Service.RunStatus.valueOf(status_);
        return result == null ? org.mlflow.api.proto.Service.RunStatus.RUNNING : result;
      }
      /**
       * <pre>
       * Updated status of the run.
       * </pre>
       *
       * <code>optional .mlflow.RunStatus status = 2;</code>
       */
      public Builder setStatus(org.mlflow.api.proto.Service.RunStatus value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000002;
        status_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Updated status of the run.
       * </pre>
       *
       * <code>optional .mlflow.RunStatus status = 2;</code>
       */
      public Builder clearStatus() {
        bitField0_ = (bitField0_ & ~0x00000002);
        status_ = 1;
        onChanged();
        return this;
      }

      private long endTime_ ;
      /**
       * <pre>
       *Unix timestamp of when the run ended in milliseconds.
       * </pre>
       *
       * <code>optional int64 end_time = 3;</code>
       */
      public boolean hasEndTime() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <pre>
       *Unix timestamp of when the run ended in milliseconds.
       * </pre>
       *
       * <code>optional int64 end_time = 3;</code>
       */
      public long getEndTime() {
        return endTime_;
      }
      /**
       * <pre>
       *Unix timestamp of when the run ended in milliseconds.
       * </pre>
       *
       * <code>optional int64 end_time = 3;</code>
       */
      public Builder setEndTime(long value) {
        bitField0_ |= 0x00000004;
        endTime_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       *Unix timestamp of when the run ended in milliseconds.
       * </pre>
       *
       * <code>optional int64 end_time = 3;</code>
       */
      public Builder clearEndTime() {
        bitField0_ = (bitField0_ & ~0x00000004);
        endTime_ = 0L;
        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.UpdateRun)
    }

    // @@protoc_insertion_point(class_scope:mlflow.UpdateRun)
    private static final org.mlflow.api.proto.Service.UpdateRun DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.UpdateRun();
    }

    public static org.mlflow.api.proto.Service.UpdateRun getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<UpdateRun>
        PARSER = new com.google.protobuf.AbstractParser<UpdateRun>() {
      @java.lang.Override
      public UpdateRun parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new UpdateRun(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<UpdateRun> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<UpdateRun> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public org.mlflow.api.proto.Service.UpdateRun getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface DeleteRunOrBuilder extends
      // @@protoc_insertion_point(interface_extends:mlflow.DeleteRun)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional string run_id = 1 [(.validate_required) = true];</code>
     */
    boolean hasRunId();
    /**
     * <code>optional string run_id = 1 [(.validate_required) = true];</code>
     */
    java.lang.String getRunId();
    /**
     * <code>optional string run_id = 1 [(.validate_required) = true];</code>
     */
    com.google.protobuf.ByteString
        getRunIdBytes();
  }
  /**
   * Protobuf type {@code mlflow.DeleteRun}
   */
  public  static final class DeleteRun extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:mlflow.DeleteRun)
      DeleteRunOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use DeleteRun.newBuilder() to construct.
    private DeleteRun(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private DeleteRun() {
      runId_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private DeleteRun(
        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;
              runId_ = 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_DeleteRun_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.mlflow.api.proto.Service.internal_static_mlflow_DeleteRun_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.mlflow.api.proto.Service.DeleteRun.class, org.mlflow.api.proto.Service.DeleteRun.Builder.class);
    }

    public interface ResponseOrBuilder extends
        // @@protoc_insertion_point(interface_extends:mlflow.DeleteRun.Response)
        com.google.protobuf.MessageOrBuilder {
    }
    /**
     * Protobuf type {@code mlflow.DeleteRun.Response}
     */
    public  static final class Response extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:mlflow.DeleteRun.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
      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_DeleteRun_Response_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_DeleteRun_Response_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.DeleteRun.Response.class, org.mlflow.api.proto.Service.DeleteRun.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.DeleteRun.Response)) {
          return super.equals(obj);
        }
        org.mlflow.api.proto.Service.DeleteRun.Response other = (org.mlflow.api.proto.Service.DeleteRun.Response) obj;

        boolean result = true;
        result = result && unknownFields.equals(other.unknownFields);
        return result;
      }

      @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.DeleteRun.Response parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.DeleteRun.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.DeleteRun.Response parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.DeleteRun.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.DeleteRun.Response parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.DeleteRun.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.DeleteRun.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.DeleteRun.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.DeleteRun.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.DeleteRun.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.DeleteRun.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.DeleteRun.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.DeleteRun.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.DeleteRun.Response}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:mlflow.DeleteRun.Response)
          org.mlflow.api.proto.Service.DeleteRun.ResponseOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_DeleteRun_Response_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_DeleteRun_Response_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  org.mlflow.api.proto.Service.DeleteRun.Response.class, org.mlflow.api.proto.Service.DeleteRun.Response.Builder.class);
        }

        // Construct using org.mlflow.api.proto.Service.DeleteRun.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_DeleteRun_Response_descriptor;
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.DeleteRun.Response getDefaultInstanceForType() {
          return org.mlflow.api.proto.Service.DeleteRun.Response.getDefaultInstance();
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.DeleteRun.Response build() {
          org.mlflow.api.proto.Service.DeleteRun.Response result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.DeleteRun.Response buildPartial() {
          org.mlflow.api.proto.Service.DeleteRun.Response result = new org.mlflow.api.proto.Service.DeleteRun.Response(this);
          onBuilt();
          return result;
        }

        @java.lang.Override
        public Builder clone() {
          return (Builder) super.clone();
        }
        @java.lang.Override
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.setField(field, value);
        }
        @java.lang.Override
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }
        @java.lang.Override
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }
        @java.lang.Override
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }
        @java.lang.Override
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }
        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof org.mlflow.api.proto.Service.DeleteRun.Response) {
            return mergeFrom((org.mlflow.api.proto.Service.DeleteRun.Response)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(org.mlflow.api.proto.Service.DeleteRun.Response other) {
          if (other == org.mlflow.api.proto.Service.DeleteRun.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.DeleteRun.Response parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (org.mlflow.api.proto.Service.DeleteRun.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.DeleteRun.Response)
      }

      // @@protoc_insertion_point(class_scope:mlflow.DeleteRun.Response)
      private static final org.mlflow.api.proto.Service.DeleteRun.Response DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.DeleteRun.Response();
      }

      public static org.mlflow.api.proto.Service.DeleteRun.Response getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      @java.lang.Deprecated public static final com.google.protobuf.Parser<Response>
          PARSER = new com.google.protobuf.AbstractParser<Response>() {
        @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<Response> parser() {
        return PARSER;
      }

      @java.lang.Override
      public com.google.protobuf.Parser<Response> getParserForType() {
        return PARSER;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.DeleteRun.Response getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    private int bitField0_;
    public static final int RUN_ID_FIELD_NUMBER = 1;
    private volatile java.lang.Object runId_;
    /**
     * <code>optional string run_id = 1 [(.validate_required) = true];</code>
     */
    public boolean hasRunId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string run_id = 1 [(.validate_required) = true];</code>
     */
    public java.lang.String getRunId() {
      java.lang.Object ref = runId_;
      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()) {
          runId_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string run_id = 1 [(.validate_required) = true];</code>
     */
    public com.google.protobuf.ByteString
        getRunIdBytes() {
      java.lang.Object ref = runId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        runId_ = 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) == 0x00000001)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, runId_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, runId_);
      }
      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.DeleteRun)) {
        return super.equals(obj);
      }
      org.mlflow.api.proto.Service.DeleteRun other = (org.mlflow.api.proto.Service.DeleteRun) obj;

      boolean result = true;
      result = result && (hasRunId() == other.hasRunId());
      if (hasRunId()) {
        result = result && getRunId()
            .equals(other.getRunId());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasRunId()) {
        hash = (37 * hash) + RUN_ID_FIELD_NUMBER;
        hash = (53 * hash) + getRunId().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.mlflow.api.proto.Service.DeleteRun parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.DeleteRun 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.DeleteRun parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.DeleteRun 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.DeleteRun parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.DeleteRun 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.DeleteRun parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.DeleteRun 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.DeleteRun parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.DeleteRun 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.DeleteRun 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.DeleteRun 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.DeleteRun 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.DeleteRun}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:mlflow.DeleteRun)
        org.mlflow.api.proto.Service.DeleteRunOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_DeleteRun_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_DeleteRun_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.DeleteRun.class, org.mlflow.api.proto.Service.DeleteRun.Builder.class);
      }

      // Construct using org.mlflow.api.proto.Service.DeleteRun.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();
        runId_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_DeleteRun_descriptor;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.DeleteRun getDefaultInstanceForType() {
        return org.mlflow.api.proto.Service.DeleteRun.getDefaultInstance();
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.DeleteRun build() {
        org.mlflow.api.proto.Service.DeleteRun result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.DeleteRun buildPartial() {
        org.mlflow.api.proto.Service.DeleteRun result = new org.mlflow.api.proto.Service.DeleteRun(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.runId_ = runId_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.mlflow.api.proto.Service.DeleteRun) {
          return mergeFrom((org.mlflow.api.proto.Service.DeleteRun)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.mlflow.api.proto.Service.DeleteRun other) {
        if (other == org.mlflow.api.proto.Service.DeleteRun.getDefaultInstance()) return this;
        if (other.hasRunId()) {
          bitField0_ |= 0x00000001;
          runId_ = other.runId_;
          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.DeleteRun parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.mlflow.api.proto.Service.DeleteRun) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object runId_ = "";
      /**
       * <code>optional string run_id = 1 [(.validate_required) = true];</code>
       */
      public boolean hasRunId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string run_id = 1 [(.validate_required) = true];</code>
       */
      public java.lang.String getRunId() {
        java.lang.Object ref = runId_;
        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()) {
            runId_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string run_id = 1 [(.validate_required) = true];</code>
       */
      public com.google.protobuf.ByteString
          getRunIdBytes() {
        java.lang.Object ref = runId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          runId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string run_id = 1 [(.validate_required) = true];</code>
       */
      public Builder setRunId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        runId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string run_id = 1 [(.validate_required) = true];</code>
       */
      public Builder clearRunId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        runId_ = getDefaultInstance().getRunId();
        onChanged();
        return this;
      }
      /**
       * <code>optional string run_id = 1 [(.validate_required) = true];</code>
       */
      public Builder setRunIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        runId_ = 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.DeleteRun)
    }

    // @@protoc_insertion_point(class_scope:mlflow.DeleteRun)
    private static final org.mlflow.api.proto.Service.DeleteRun DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.DeleteRun();
    }

    public static org.mlflow.api.proto.Service.DeleteRun getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<DeleteRun>
        PARSER = new com.google.protobuf.AbstractParser<DeleteRun>() {
      @java.lang.Override
      public DeleteRun parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new DeleteRun(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<DeleteRun> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<DeleteRun> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public org.mlflow.api.proto.Service.DeleteRun getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface RestoreRunOrBuilder extends
      // @@protoc_insertion_point(interface_extends:mlflow.RestoreRun)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <code>optional string run_id = 1 [(.validate_required) = true];</code>
     */
    boolean hasRunId();
    /**
     * <code>optional string run_id = 1 [(.validate_required) = true];</code>
     */
    java.lang.String getRunId();
    /**
     * <code>optional string run_id = 1 [(.validate_required) = true];</code>
     */
    com.google.protobuf.ByteString
        getRunIdBytes();
  }
  /**
   * Protobuf type {@code mlflow.RestoreRun}
   */
  public  static final class RestoreRun extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:mlflow.RestoreRun)
      RestoreRunOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use RestoreRun.newBuilder() to construct.
    private RestoreRun(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private RestoreRun() {
      runId_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private RestoreRun(
        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;
              runId_ = 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_RestoreRun_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.mlflow.api.proto.Service.internal_static_mlflow_RestoreRun_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.mlflow.api.proto.Service.RestoreRun.class, org.mlflow.api.proto.Service.RestoreRun.Builder.class);
    }

    public interface ResponseOrBuilder extends
        // @@protoc_insertion_point(interface_extends:mlflow.RestoreRun.Response)
        com.google.protobuf.MessageOrBuilder {
    }
    /**
     * Protobuf type {@code mlflow.RestoreRun.Response}
     */
    public  static final class Response extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:mlflow.RestoreRun.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
      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_RestoreRun_Response_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_RestoreRun_Response_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.RestoreRun.Response.class, org.mlflow.api.proto.Service.RestoreRun.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.RestoreRun.Response)) {
          return super.equals(obj);
        }
        org.mlflow.api.proto.Service.RestoreRun.Response other = (org.mlflow.api.proto.Service.RestoreRun.Response) obj;

        boolean result = true;
        result = result && unknownFields.equals(other.unknownFields);
        return result;
      }

      @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.RestoreRun.Response parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.RestoreRun.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.RestoreRun.Response parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.RestoreRun.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.RestoreRun.Response parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.RestoreRun.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.RestoreRun.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.RestoreRun.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.RestoreRun.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.RestoreRun.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.RestoreRun.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.RestoreRun.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.RestoreRun.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.RestoreRun.Response}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:mlflow.RestoreRun.Response)
          org.mlflow.api.proto.Service.RestoreRun.ResponseOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_RestoreRun_Response_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_RestoreRun_Response_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  org.mlflow.api.proto.Service.RestoreRun.Response.class, org.mlflow.api.proto.Service.RestoreRun.Response.Builder.class);
        }

        // Construct using org.mlflow.api.proto.Service.RestoreRun.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_RestoreRun_Response_descriptor;
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.RestoreRun.Response getDefaultInstanceForType() {
          return org.mlflow.api.proto.Service.RestoreRun.Response.getDefaultInstance();
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.RestoreRun.Response build() {
          org.mlflow.api.proto.Service.RestoreRun.Response result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.RestoreRun.Response buildPartial() {
          org.mlflow.api.proto.Service.RestoreRun.Response result = new org.mlflow.api.proto.Service.RestoreRun.Response(this);
          onBuilt();
          return result;
        }

        @java.lang.Override
        public Builder clone() {
          return (Builder) super.clone();
        }
        @java.lang.Override
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.setField(field, value);
        }
        @java.lang.Override
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }
        @java.lang.Override
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }
        @java.lang.Override
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }
        @java.lang.Override
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }
        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof org.mlflow.api.proto.Service.RestoreRun.Response) {
            return mergeFrom((org.mlflow.api.proto.Service.RestoreRun.Response)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(org.mlflow.api.proto.Service.RestoreRun.Response other) {
          if (other == org.mlflow.api.proto.Service.RestoreRun.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.RestoreRun.Response parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (org.mlflow.api.proto.Service.RestoreRun.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.RestoreRun.Response)
      }

      // @@protoc_insertion_point(class_scope:mlflow.RestoreRun.Response)
      private static final org.mlflow.api.proto.Service.RestoreRun.Response DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.RestoreRun.Response();
      }

      public static org.mlflow.api.proto.Service.RestoreRun.Response getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      @java.lang.Deprecated public static final com.google.protobuf.Parser<Response>
          PARSER = new com.google.protobuf.AbstractParser<Response>() {
        @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<Response> parser() {
        return PARSER;
      }

      @java.lang.Override
      public com.google.protobuf.Parser<Response> getParserForType() {
        return PARSER;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.RestoreRun.Response getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    private int bitField0_;
    public static final int RUN_ID_FIELD_NUMBER = 1;
    private volatile java.lang.Object runId_;
    /**
     * <code>optional string run_id = 1 [(.validate_required) = true];</code>
     */
    public boolean hasRunId() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional string run_id = 1 [(.validate_required) = true];</code>
     */
    public java.lang.String getRunId() {
      java.lang.Object ref = runId_;
      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()) {
          runId_ = s;
        }
        return s;
      }
    }
    /**
     * <code>optional string run_id = 1 [(.validate_required) = true];</code>
     */
    public com.google.protobuf.ByteString
        getRunIdBytes() {
      java.lang.Object ref = runId_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        runId_ = 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) == 0x00000001)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, runId_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, runId_);
      }
      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.RestoreRun)) {
        return super.equals(obj);
      }
      org.mlflow.api.proto.Service.RestoreRun other = (org.mlflow.api.proto.Service.RestoreRun) obj;

      boolean result = true;
      result = result && (hasRunId() == other.hasRunId());
      if (hasRunId()) {
        result = result && getRunId()
            .equals(other.getRunId());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasRunId()) {
        hash = (37 * hash) + RUN_ID_FIELD_NUMBER;
        hash = (53 * hash) + getRunId().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.mlflow.api.proto.Service.RestoreRun parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.RestoreRun 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.RestoreRun parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.RestoreRun 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.RestoreRun parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.RestoreRun 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.RestoreRun parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.RestoreRun 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.RestoreRun parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.RestoreRun 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.RestoreRun 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.RestoreRun 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.RestoreRun 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.RestoreRun}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:mlflow.RestoreRun)
        org.mlflow.api.proto.Service.RestoreRunOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_RestoreRun_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_RestoreRun_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.RestoreRun.class, org.mlflow.api.proto.Service.RestoreRun.Builder.class);
      }

      // Construct using org.mlflow.api.proto.Service.RestoreRun.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();
        runId_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_RestoreRun_descriptor;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.RestoreRun getDefaultInstanceForType() {
        return org.mlflow.api.proto.Service.RestoreRun.getDefaultInstance();
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.RestoreRun build() {
        org.mlflow.api.proto.Service.RestoreRun result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.RestoreRun buildPartial() {
        org.mlflow.api.proto.Service.RestoreRun result = new org.mlflow.api.proto.Service.RestoreRun(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.runId_ = runId_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.mlflow.api.proto.Service.RestoreRun) {
          return mergeFrom((org.mlflow.api.proto.Service.RestoreRun)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.mlflow.api.proto.Service.RestoreRun other) {
        if (other == org.mlflow.api.proto.Service.RestoreRun.getDefaultInstance()) return this;
        if (other.hasRunId()) {
          bitField0_ |= 0x00000001;
          runId_ = other.runId_;
          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.RestoreRun parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.mlflow.api.proto.Service.RestoreRun) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object runId_ = "";
      /**
       * <code>optional string run_id = 1 [(.validate_required) = true];</code>
       */
      public boolean hasRunId() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <code>optional string run_id = 1 [(.validate_required) = true];</code>
       */
      public java.lang.String getRunId() {
        java.lang.Object ref = runId_;
        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()) {
            runId_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <code>optional string run_id = 1 [(.validate_required) = true];</code>
       */
      public com.google.protobuf.ByteString
          getRunIdBytes() {
        java.lang.Object ref = runId_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          runId_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <code>optional string run_id = 1 [(.validate_required) = true];</code>
       */
      public Builder setRunId(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        runId_ = value;
        onChanged();
        return this;
      }
      /**
       * <code>optional string run_id = 1 [(.validate_required) = true];</code>
       */
      public Builder clearRunId() {
        bitField0_ = (bitField0_ & ~0x00000001);
        runId_ = getDefaultInstance().getRunId();
        onChanged();
        return this;
      }
      /**
       * <code>optional string run_id = 1 [(.validate_required) = true];</code>
       */
      public Builder setRunIdBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        runId_ = 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.RestoreRun)
    }

    // @@protoc_insertion_point(class_scope:mlflow.RestoreRun)
    private static final org.mlflow.api.proto.Service.RestoreRun DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.RestoreRun();
    }

    public static org.mlflow.api.proto.Service.RestoreRun getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<RestoreRun>
        PARSER = new com.google.protobuf.AbstractParser<RestoreRun>() {
      @java.lang.Override
      public RestoreRun parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new RestoreRun(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<RestoreRun> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<RestoreRun> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public org.mlflow.api.proto.Service.RestoreRun getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface LogMetricOrBuilder extends
      // @@protoc_insertion_point(interface_extends:mlflow.LogMetric)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * ID of the run under which to log the metric.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    boolean hasRunUuid();
    /**
     * <pre>
     * ID of the run under which to log the metric.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    java.lang.String getRunUuid();
    /**
     * <pre>
     * ID of the run under which to log the metric.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    com.google.protobuf.ByteString
        getRunUuidBytes();

    /**
     * <pre>
     * Name of the metric.
     * </pre>
     *
     * <code>optional string key = 2 [(.validate_required) = true];</code>
     */
    boolean hasKey();
    /**
     * <pre>
     * Name of the metric.
     * </pre>
     *
     * <code>optional string key = 2 [(.validate_required) = true];</code>
     */
    java.lang.String getKey();
    /**
     * <pre>
     * Name of the metric.
     * </pre>
     *
     * <code>optional string key = 2 [(.validate_required) = true];</code>
     */
    com.google.protobuf.ByteString
        getKeyBytes();

    /**
     * <pre>
     * Double value of the metric being logged.
     * </pre>
     *
     * <code>optional double value = 3 [(.validate_required) = true];</code>
     */
    boolean hasValue();
    /**
     * <pre>
     * Double value of the metric being logged.
     * </pre>
     *
     * <code>optional double value = 3 [(.validate_required) = true];</code>
     */
    double getValue();

    /**
     * <pre>
     * Unix timestamp in milliseconds at the time metric was logged.
     * </pre>
     *
     * <code>optional int64 timestamp = 4 [(.validate_required) = true];</code>
     */
    boolean hasTimestamp();
    /**
     * <pre>
     * Unix timestamp in milliseconds at the time metric was logged.
     * </pre>
     *
     * <code>optional int64 timestamp = 4 [(.validate_required) = true];</code>
     */
    long getTimestamp();
  }
  /**
   * Protobuf type {@code mlflow.LogMetric}
   */
  public  static final class LogMetric extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:mlflow.LogMetric)
      LogMetricOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use LogMetric.newBuilder() to construct.
    private LogMetric(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private LogMetric() {
      runUuid_ = "";
      key_ = "";
      value_ = 0D;
      timestamp_ = 0L;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private LogMetric(
        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;
              runUuid_ = bs;
              break;
            }
            case 18: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000002;
              key_ = bs;
              break;
            }
            case 25: {
              bitField0_ |= 0x00000004;
              value_ = input.readDouble();
              break;
            }
            case 32: {
              bitField0_ |= 0x00000008;
              timestamp_ = input.readInt64();
              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_LogMetric_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.mlflow.api.proto.Service.internal_static_mlflow_LogMetric_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.mlflow.api.proto.Service.LogMetric.class, org.mlflow.api.proto.Service.LogMetric.Builder.class);
    }

    public interface ResponseOrBuilder extends
        // @@protoc_insertion_point(interface_extends:mlflow.LogMetric.Response)
        com.google.protobuf.MessageOrBuilder {
    }
    /**
     * Protobuf type {@code mlflow.LogMetric.Response}
     */
    public  static final class Response extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:mlflow.LogMetric.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
      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_LogMetric_Response_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_LogMetric_Response_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.LogMetric.Response.class, org.mlflow.api.proto.Service.LogMetric.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.LogMetric.Response)) {
          return super.equals(obj);
        }
        org.mlflow.api.proto.Service.LogMetric.Response other = (org.mlflow.api.proto.Service.LogMetric.Response) obj;

        boolean result = true;
        result = result && unknownFields.equals(other.unknownFields);
        return result;
      }

      @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.LogMetric.Response parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.LogMetric.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.LogMetric.Response parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.LogMetric.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.LogMetric.Response parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.LogMetric.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.LogMetric.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.LogMetric.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.LogMetric.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.LogMetric.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.LogMetric.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.LogMetric.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.LogMetric.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.LogMetric.Response}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:mlflow.LogMetric.Response)
          org.mlflow.api.proto.Service.LogMetric.ResponseOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_LogMetric_Response_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_LogMetric_Response_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  org.mlflow.api.proto.Service.LogMetric.Response.class, org.mlflow.api.proto.Service.LogMetric.Response.Builder.class);
        }

        // Construct using org.mlflow.api.proto.Service.LogMetric.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_LogMetric_Response_descriptor;
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.LogMetric.Response getDefaultInstanceForType() {
          return org.mlflow.api.proto.Service.LogMetric.Response.getDefaultInstance();
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.LogMetric.Response build() {
          org.mlflow.api.proto.Service.LogMetric.Response result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.LogMetric.Response buildPartial() {
          org.mlflow.api.proto.Service.LogMetric.Response result = new org.mlflow.api.proto.Service.LogMetric.Response(this);
          onBuilt();
          return result;
        }

        @java.lang.Override
        public Builder clone() {
          return (Builder) super.clone();
        }
        @java.lang.Override
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.setField(field, value);
        }
        @java.lang.Override
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }
        @java.lang.Override
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }
        @java.lang.Override
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }
        @java.lang.Override
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }
        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof org.mlflow.api.proto.Service.LogMetric.Response) {
            return mergeFrom((org.mlflow.api.proto.Service.LogMetric.Response)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(org.mlflow.api.proto.Service.LogMetric.Response other) {
          if (other == org.mlflow.api.proto.Service.LogMetric.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.LogMetric.Response parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (org.mlflow.api.proto.Service.LogMetric.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.LogMetric.Response)
      }

      // @@protoc_insertion_point(class_scope:mlflow.LogMetric.Response)
      private static final org.mlflow.api.proto.Service.LogMetric.Response DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.LogMetric.Response();
      }

      public static org.mlflow.api.proto.Service.LogMetric.Response getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      @java.lang.Deprecated public static final com.google.protobuf.Parser<Response>
          PARSER = new com.google.protobuf.AbstractParser<Response>() {
        @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<Response> parser() {
        return PARSER;
      }

      @java.lang.Override
      public com.google.protobuf.Parser<Response> getParserForType() {
        return PARSER;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.LogMetric.Response getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    private int bitField0_;
    public static final int RUN_UUID_FIELD_NUMBER = 1;
    private volatile java.lang.Object runUuid_;
    /**
     * <pre>
     * ID of the run under which to log the metric.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    public boolean hasRunUuid() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * ID of the run under which to log the metric.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    public java.lang.String getRunUuid() {
      java.lang.Object ref = runUuid_;
      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()) {
          runUuid_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * ID of the run under which to log the metric.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    public com.google.protobuf.ByteString
        getRunUuidBytes() {
      java.lang.Object ref = runUuid_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        runUuid_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int KEY_FIELD_NUMBER = 2;
    private volatile java.lang.Object key_;
    /**
     * <pre>
     * Name of the metric.
     * </pre>
     *
     * <code>optional string key = 2 [(.validate_required) = true];</code>
     */
    public boolean hasKey() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     * Name of the metric.
     * </pre>
     *
     * <code>optional string key = 2 [(.validate_required) = true];</code>
     */
    public java.lang.String getKey() {
      java.lang.Object ref = key_;
      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()) {
          key_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Name of the metric.
     * </pre>
     *
     * <code>optional string key = 2 [(.validate_required) = true];</code>
     */
    public com.google.protobuf.ByteString
        getKeyBytes() {
      java.lang.Object ref = key_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        key_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int VALUE_FIELD_NUMBER = 3;
    private double value_;
    /**
     * <pre>
     * Double value of the metric being logged.
     * </pre>
     *
     * <code>optional double value = 3 [(.validate_required) = true];</code>
     */
    public boolean hasValue() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <pre>
     * Double value of the metric being logged.
     * </pre>
     *
     * <code>optional double value = 3 [(.validate_required) = true];</code>
     */
    public double getValue() {
      return value_;
    }

    public static final int TIMESTAMP_FIELD_NUMBER = 4;
    private long timestamp_;
    /**
     * <pre>
     * Unix timestamp in milliseconds at the time metric was logged.
     * </pre>
     *
     * <code>optional int64 timestamp = 4 [(.validate_required) = true];</code>
     */
    public boolean hasTimestamp() {
      return ((bitField0_ & 0x00000008) == 0x00000008);
    }
    /**
     * <pre>
     * Unix timestamp in milliseconds at the time metric was logged.
     * </pre>
     *
     * <code>optional int64 timestamp = 4 [(.validate_required) = true];</code>
     */
    public long getTimestamp() {
      return timestamp_;
    }

    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) == 0x00000001)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, runUuid_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, key_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeDouble(3, value_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        output.writeInt64(4, timestamp_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, runUuid_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, key_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(3, value_);
      }
      if (((bitField0_ & 0x00000008) == 0x00000008)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(4, timestamp_);
      }
      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.LogMetric)) {
        return super.equals(obj);
      }
      org.mlflow.api.proto.Service.LogMetric other = (org.mlflow.api.proto.Service.LogMetric) obj;

      boolean result = true;
      result = result && (hasRunUuid() == other.hasRunUuid());
      if (hasRunUuid()) {
        result = result && getRunUuid()
            .equals(other.getRunUuid());
      }
      result = result && (hasKey() == other.hasKey());
      if (hasKey()) {
        result = result && getKey()
            .equals(other.getKey());
      }
      result = result && (hasValue() == other.hasValue());
      if (hasValue()) {
        result = result && (
            java.lang.Double.doubleToLongBits(getValue())
            == java.lang.Double.doubleToLongBits(
                other.getValue()));
      }
      result = result && (hasTimestamp() == other.hasTimestamp());
      if (hasTimestamp()) {
        result = result && (getTimestamp()
            == other.getTimestamp());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasRunUuid()) {
        hash = (37 * hash) + RUN_UUID_FIELD_NUMBER;
        hash = (53 * hash) + getRunUuid().hashCode();
      }
      if (hasKey()) {
        hash = (37 * hash) + KEY_FIELD_NUMBER;
        hash = (53 * hash) + getKey().hashCode();
      }
      if (hasValue()) {
        hash = (37 * hash) + VALUE_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            java.lang.Double.doubleToLongBits(getValue()));
      }
      if (hasTimestamp()) {
        hash = (37 * hash) + TIMESTAMP_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            getTimestamp());
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.mlflow.api.proto.Service.LogMetric parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.LogMetric 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.LogMetric parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.LogMetric 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.LogMetric parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.LogMetric 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.LogMetric parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.LogMetric 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.LogMetric parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.LogMetric 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.LogMetric 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.LogMetric 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.LogMetric 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.LogMetric}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:mlflow.LogMetric)
        org.mlflow.api.proto.Service.LogMetricOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_LogMetric_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_LogMetric_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.LogMetric.class, org.mlflow.api.proto.Service.LogMetric.Builder.class);
      }

      // Construct using org.mlflow.api.proto.Service.LogMetric.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();
        runUuid_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        key_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        value_ = 0D;
        bitField0_ = (bitField0_ & ~0x00000004);
        timestamp_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000008);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_LogMetric_descriptor;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.LogMetric getDefaultInstanceForType() {
        return org.mlflow.api.proto.Service.LogMetric.getDefaultInstance();
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.LogMetric build() {
        org.mlflow.api.proto.Service.LogMetric result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.LogMetric buildPartial() {
        org.mlflow.api.proto.Service.LogMetric result = new org.mlflow.api.proto.Service.LogMetric(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.runUuid_ = runUuid_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.key_ = key_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.value_ = value_;
        if (((from_bitField0_ & 0x00000008) == 0x00000008)) {
          to_bitField0_ |= 0x00000008;
        }
        result.timestamp_ = timestamp_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.mlflow.api.proto.Service.LogMetric) {
          return mergeFrom((org.mlflow.api.proto.Service.LogMetric)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.mlflow.api.proto.Service.LogMetric other) {
        if (other == org.mlflow.api.proto.Service.LogMetric.getDefaultInstance()) return this;
        if (other.hasRunUuid()) {
          bitField0_ |= 0x00000001;
          runUuid_ = other.runUuid_;
          onChanged();
        }
        if (other.hasKey()) {
          bitField0_ |= 0x00000002;
          key_ = other.key_;
          onChanged();
        }
        if (other.hasValue()) {
          setValue(other.getValue());
        }
        if (other.hasTimestamp()) {
          setTimestamp(other.getTimestamp());
        }
        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.LogMetric parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.mlflow.api.proto.Service.LogMetric) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object runUuid_ = "";
      /**
       * <pre>
       * ID of the run under which to log the metric.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public boolean hasRunUuid() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * ID of the run under which to log the metric.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public java.lang.String getRunUuid() {
        java.lang.Object ref = runUuid_;
        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()) {
            runUuid_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * ID of the run under which to log the metric.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public com.google.protobuf.ByteString
          getRunUuidBytes() {
        java.lang.Object ref = runUuid_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          runUuid_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * ID of the run under which to log the metric.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public Builder setRunUuid(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        runUuid_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * ID of the run under which to log the metric.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public Builder clearRunUuid() {
        bitField0_ = (bitField0_ & ~0x00000001);
        runUuid_ = getDefaultInstance().getRunUuid();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * ID of the run under which to log the metric.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public Builder setRunUuidBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        runUuid_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object key_ = "";
      /**
       * <pre>
       * Name of the metric.
       * </pre>
       *
       * <code>optional string key = 2 [(.validate_required) = true];</code>
       */
      public boolean hasKey() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * Name of the metric.
       * </pre>
       *
       * <code>optional string key = 2 [(.validate_required) = true];</code>
       */
      public java.lang.String getKey() {
        java.lang.Object ref = key_;
        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()) {
            key_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Name of the metric.
       * </pre>
       *
       * <code>optional string key = 2 [(.validate_required) = true];</code>
       */
      public com.google.protobuf.ByteString
          getKeyBytes() {
        java.lang.Object ref = key_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          key_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Name of the metric.
       * </pre>
       *
       * <code>optional string key = 2 [(.validate_required) = true];</code>
       */
      public Builder setKey(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        key_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Name of the metric.
       * </pre>
       *
       * <code>optional string key = 2 [(.validate_required) = true];</code>
       */
      public Builder clearKey() {
        bitField0_ = (bitField0_ & ~0x00000002);
        key_ = getDefaultInstance().getKey();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Name of the metric.
       * </pre>
       *
       * <code>optional string key = 2 [(.validate_required) = true];</code>
       */
      public Builder setKeyBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        key_ = value;
        onChanged();
        return this;
      }

      private double value_ ;
      /**
       * <pre>
       * Double value of the metric being logged.
       * </pre>
       *
       * <code>optional double value = 3 [(.validate_required) = true];</code>
       */
      public boolean hasValue() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <pre>
       * Double value of the metric being logged.
       * </pre>
       *
       * <code>optional double value = 3 [(.validate_required) = true];</code>
       */
      public double getValue() {
        return value_;
      }
      /**
       * <pre>
       * Double value of the metric being logged.
       * </pre>
       *
       * <code>optional double value = 3 [(.validate_required) = true];</code>
       */
      public Builder setValue(double value) {
        bitField0_ |= 0x00000004;
        value_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Double value of the metric being logged.
       * </pre>
       *
       * <code>optional double value = 3 [(.validate_required) = true];</code>
       */
      public Builder clearValue() {
        bitField0_ = (bitField0_ & ~0x00000004);
        value_ = 0D;
        onChanged();
        return this;
      }

      private long timestamp_ ;
      /**
       * <pre>
       * Unix timestamp in milliseconds at the time metric was logged.
       * </pre>
       *
       * <code>optional int64 timestamp = 4 [(.validate_required) = true];</code>
       */
      public boolean hasTimestamp() {
        return ((bitField0_ & 0x00000008) == 0x00000008);
      }
      /**
       * <pre>
       * Unix timestamp in milliseconds at the time metric was logged.
       * </pre>
       *
       * <code>optional int64 timestamp = 4 [(.validate_required) = true];</code>
       */
      public long getTimestamp() {
        return timestamp_;
      }
      /**
       * <pre>
       * Unix timestamp in milliseconds at the time metric was logged.
       * </pre>
       *
       * <code>optional int64 timestamp = 4 [(.validate_required) = true];</code>
       */
      public Builder setTimestamp(long value) {
        bitField0_ |= 0x00000008;
        timestamp_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Unix timestamp in milliseconds at the time metric was logged.
       * </pre>
       *
       * <code>optional int64 timestamp = 4 [(.validate_required) = true];</code>
       */
      public Builder clearTimestamp() {
        bitField0_ = (bitField0_ & ~0x00000008);
        timestamp_ = 0L;
        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.LogMetric)
    }

    // @@protoc_insertion_point(class_scope:mlflow.LogMetric)
    private static final org.mlflow.api.proto.Service.LogMetric DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.LogMetric();
    }

    public static org.mlflow.api.proto.Service.LogMetric getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<LogMetric>
        PARSER = new com.google.protobuf.AbstractParser<LogMetric>() {
      @java.lang.Override
      public LogMetric parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new LogMetric(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<LogMetric> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<LogMetric> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public org.mlflow.api.proto.Service.LogMetric getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface LogParamOrBuilder extends
      // @@protoc_insertion_point(interface_extends:mlflow.LogParam)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * ID of the run under which to log the param.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    boolean hasRunUuid();
    /**
     * <pre>
     * ID of the run under which to log the param.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    java.lang.String getRunUuid();
    /**
     * <pre>
     * ID of the run under which to log the param.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    com.google.protobuf.ByteString
        getRunUuidBytes();

    /**
     * <pre>
     * Name of the param. Maximum size is 255 bytes.
     * </pre>
     *
     * <code>optional string key = 2 [(.validate_required) = true];</code>
     */
    boolean hasKey();
    /**
     * <pre>
     * Name of the param. Maximum size is 255 bytes.
     * </pre>
     *
     * <code>optional string key = 2 [(.validate_required) = true];</code>
     */
    java.lang.String getKey();
    /**
     * <pre>
     * Name of the param. Maximum size is 255 bytes.
     * </pre>
     *
     * <code>optional string key = 2 [(.validate_required) = true];</code>
     */
    com.google.protobuf.ByteString
        getKeyBytes();

    /**
     * <pre>
     * String value of the param being logged. Maximum size is 500 bytes.
     * </pre>
     *
     * <code>optional string value = 3 [(.validate_required) = true];</code>
     */
    boolean hasValue();
    /**
     * <pre>
     * String value of the param being logged. Maximum size is 500 bytes.
     * </pre>
     *
     * <code>optional string value = 3 [(.validate_required) = true];</code>
     */
    java.lang.String getValue();
    /**
     * <pre>
     * String value of the param being logged. Maximum size is 500 bytes.
     * </pre>
     *
     * <code>optional string value = 3 [(.validate_required) = true];</code>
     */
    com.google.protobuf.ByteString
        getValueBytes();
  }
  /**
   * Protobuf type {@code mlflow.LogParam}
   */
  public  static final class LogParam extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:mlflow.LogParam)
      LogParamOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use LogParam.newBuilder() to construct.
    private LogParam(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private LogParam() {
      runUuid_ = "";
      key_ = "";
      value_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private LogParam(
        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;
              runUuid_ = bs;
              break;
            }
            case 18: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000002;
              key_ = bs;
              break;
            }
            case 26: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000004;
              value_ = 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_LogParam_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.mlflow.api.proto.Service.internal_static_mlflow_LogParam_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.mlflow.api.proto.Service.LogParam.class, org.mlflow.api.proto.Service.LogParam.Builder.class);
    }

    public interface ResponseOrBuilder extends
        // @@protoc_insertion_point(interface_extends:mlflow.LogParam.Response)
        com.google.protobuf.MessageOrBuilder {
    }
    /**
     * Protobuf type {@code mlflow.LogParam.Response}
     */
    public  static final class Response extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:mlflow.LogParam.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
      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_LogParam_Response_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_LogParam_Response_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.LogParam.Response.class, org.mlflow.api.proto.Service.LogParam.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.LogParam.Response)) {
          return super.equals(obj);
        }
        org.mlflow.api.proto.Service.LogParam.Response other = (org.mlflow.api.proto.Service.LogParam.Response) obj;

        boolean result = true;
        result = result && unknownFields.equals(other.unknownFields);
        return result;
      }

      @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.LogParam.Response parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.LogParam.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.LogParam.Response parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.LogParam.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.LogParam.Response parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.LogParam.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.LogParam.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.LogParam.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.LogParam.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.LogParam.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.LogParam.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.LogParam.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.LogParam.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.LogParam.Response}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:mlflow.LogParam.Response)
          org.mlflow.api.proto.Service.LogParam.ResponseOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_LogParam_Response_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_LogParam_Response_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  org.mlflow.api.proto.Service.LogParam.Response.class, org.mlflow.api.proto.Service.LogParam.Response.Builder.class);
        }

        // Construct using org.mlflow.api.proto.Service.LogParam.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_LogParam_Response_descriptor;
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.LogParam.Response getDefaultInstanceForType() {
          return org.mlflow.api.proto.Service.LogParam.Response.getDefaultInstance();
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.LogParam.Response build() {
          org.mlflow.api.proto.Service.LogParam.Response result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.LogParam.Response buildPartial() {
          org.mlflow.api.proto.Service.LogParam.Response result = new org.mlflow.api.proto.Service.LogParam.Response(this);
          onBuilt();
          return result;
        }

        @java.lang.Override
        public Builder clone() {
          return (Builder) super.clone();
        }
        @java.lang.Override
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.setField(field, value);
        }
        @java.lang.Override
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }
        @java.lang.Override
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }
        @java.lang.Override
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }
        @java.lang.Override
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }
        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof org.mlflow.api.proto.Service.LogParam.Response) {
            return mergeFrom((org.mlflow.api.proto.Service.LogParam.Response)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(org.mlflow.api.proto.Service.LogParam.Response other) {
          if (other == org.mlflow.api.proto.Service.LogParam.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.LogParam.Response parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (org.mlflow.api.proto.Service.LogParam.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.LogParam.Response)
      }

      // @@protoc_insertion_point(class_scope:mlflow.LogParam.Response)
      private static final org.mlflow.api.proto.Service.LogParam.Response DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.LogParam.Response();
      }

      public static org.mlflow.api.proto.Service.LogParam.Response getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      @java.lang.Deprecated public static final com.google.protobuf.Parser<Response>
          PARSER = new com.google.protobuf.AbstractParser<Response>() {
        @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<Response> parser() {
        return PARSER;
      }

      @java.lang.Override
      public com.google.protobuf.Parser<Response> getParserForType() {
        return PARSER;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.LogParam.Response getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    private int bitField0_;
    public static final int RUN_UUID_FIELD_NUMBER = 1;
    private volatile java.lang.Object runUuid_;
    /**
     * <pre>
     * ID of the run under which to log the param.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    public boolean hasRunUuid() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * ID of the run under which to log the param.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    public java.lang.String getRunUuid() {
      java.lang.Object ref = runUuid_;
      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()) {
          runUuid_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * ID of the run under which to log the param.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    public com.google.protobuf.ByteString
        getRunUuidBytes() {
      java.lang.Object ref = runUuid_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        runUuid_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int KEY_FIELD_NUMBER = 2;
    private volatile java.lang.Object key_;
    /**
     * <pre>
     * Name of the param. Maximum size is 255 bytes.
     * </pre>
     *
     * <code>optional string key = 2 [(.validate_required) = true];</code>
     */
    public boolean hasKey() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     * Name of the param. Maximum size is 255 bytes.
     * </pre>
     *
     * <code>optional string key = 2 [(.validate_required) = true];</code>
     */
    public java.lang.String getKey() {
      java.lang.Object ref = key_;
      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()) {
          key_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Name of the param. Maximum size is 255 bytes.
     * </pre>
     *
     * <code>optional string key = 2 [(.validate_required) = true];</code>
     */
    public com.google.protobuf.ByteString
        getKeyBytes() {
      java.lang.Object ref = key_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        key_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int VALUE_FIELD_NUMBER = 3;
    private volatile java.lang.Object value_;
    /**
     * <pre>
     * String value of the param being logged. Maximum size is 500 bytes.
     * </pre>
     *
     * <code>optional string value = 3 [(.validate_required) = true];</code>
     */
    public boolean hasValue() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <pre>
     * String value of the param being logged. Maximum size is 500 bytes.
     * </pre>
     *
     * <code>optional string value = 3 [(.validate_required) = true];</code>
     */
    public java.lang.String getValue() {
      java.lang.Object ref = value_;
      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()) {
          value_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * String value of the param being logged. Maximum size is 500 bytes.
     * </pre>
     *
     * <code>optional string value = 3 [(.validate_required) = true];</code>
     */
    public com.google.protobuf.ByteString
        getValueBytes() {
      java.lang.Object ref = value_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        value_ = 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) == 0x00000001)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, runUuid_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, key_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, value_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, runUuid_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, key_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, value_);
      }
      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.LogParam)) {
        return super.equals(obj);
      }
      org.mlflow.api.proto.Service.LogParam other = (org.mlflow.api.proto.Service.LogParam) obj;

      boolean result = true;
      result = result && (hasRunUuid() == other.hasRunUuid());
      if (hasRunUuid()) {
        result = result && getRunUuid()
            .equals(other.getRunUuid());
      }
      result = result && (hasKey() == other.hasKey());
      if (hasKey()) {
        result = result && getKey()
            .equals(other.getKey());
      }
      result = result && (hasValue() == other.hasValue());
      if (hasValue()) {
        result = result && getValue()
            .equals(other.getValue());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasRunUuid()) {
        hash = (37 * hash) + RUN_UUID_FIELD_NUMBER;
        hash = (53 * hash) + getRunUuid().hashCode();
      }
      if (hasKey()) {
        hash = (37 * hash) + KEY_FIELD_NUMBER;
        hash = (53 * hash) + getKey().hashCode();
      }
      if (hasValue()) {
        hash = (37 * hash) + VALUE_FIELD_NUMBER;
        hash = (53 * hash) + getValue().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.mlflow.api.proto.Service.LogParam parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.LogParam 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.LogParam parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.LogParam 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.LogParam parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.LogParam 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.LogParam parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.LogParam 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.LogParam parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.LogParam 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.LogParam 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.LogParam 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.LogParam 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.LogParam}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:mlflow.LogParam)
        org.mlflow.api.proto.Service.LogParamOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_LogParam_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_LogParam_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.LogParam.class, org.mlflow.api.proto.Service.LogParam.Builder.class);
      }

      // Construct using org.mlflow.api.proto.Service.LogParam.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();
        runUuid_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        key_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        value_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_LogParam_descriptor;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.LogParam getDefaultInstanceForType() {
        return org.mlflow.api.proto.Service.LogParam.getDefaultInstance();
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.LogParam build() {
        org.mlflow.api.proto.Service.LogParam result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.LogParam buildPartial() {
        org.mlflow.api.proto.Service.LogParam result = new org.mlflow.api.proto.Service.LogParam(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.runUuid_ = runUuid_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.key_ = key_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.value_ = value_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.mlflow.api.proto.Service.LogParam) {
          return mergeFrom((org.mlflow.api.proto.Service.LogParam)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.mlflow.api.proto.Service.LogParam other) {
        if (other == org.mlflow.api.proto.Service.LogParam.getDefaultInstance()) return this;
        if (other.hasRunUuid()) {
          bitField0_ |= 0x00000001;
          runUuid_ = other.runUuid_;
          onChanged();
        }
        if (other.hasKey()) {
          bitField0_ |= 0x00000002;
          key_ = other.key_;
          onChanged();
        }
        if (other.hasValue()) {
          bitField0_ |= 0x00000004;
          value_ = other.value_;
          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.LogParam parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.mlflow.api.proto.Service.LogParam) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object runUuid_ = "";
      /**
       * <pre>
       * ID of the run under which to log the param.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public boolean hasRunUuid() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * ID of the run under which to log the param.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public java.lang.String getRunUuid() {
        java.lang.Object ref = runUuid_;
        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()) {
            runUuid_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * ID of the run under which to log the param.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public com.google.protobuf.ByteString
          getRunUuidBytes() {
        java.lang.Object ref = runUuid_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          runUuid_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * ID of the run under which to log the param.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public Builder setRunUuid(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        runUuid_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * ID of the run under which to log the param.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public Builder clearRunUuid() {
        bitField0_ = (bitField0_ & ~0x00000001);
        runUuid_ = getDefaultInstance().getRunUuid();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * ID of the run under which to log the param.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public Builder setRunUuidBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        runUuid_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object key_ = "";
      /**
       * <pre>
       * Name of the param. Maximum size is 255 bytes.
       * </pre>
       *
       * <code>optional string key = 2 [(.validate_required) = true];</code>
       */
      public boolean hasKey() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * Name of the param. Maximum size is 255 bytes.
       * </pre>
       *
       * <code>optional string key = 2 [(.validate_required) = true];</code>
       */
      public java.lang.String getKey() {
        java.lang.Object ref = key_;
        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()) {
            key_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Name of the param. Maximum size is 255 bytes.
       * </pre>
       *
       * <code>optional string key = 2 [(.validate_required) = true];</code>
       */
      public com.google.protobuf.ByteString
          getKeyBytes() {
        java.lang.Object ref = key_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          key_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Name of the param. Maximum size is 255 bytes.
       * </pre>
       *
       * <code>optional string key = 2 [(.validate_required) = true];</code>
       */
      public Builder setKey(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        key_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Name of the param. Maximum size is 255 bytes.
       * </pre>
       *
       * <code>optional string key = 2 [(.validate_required) = true];</code>
       */
      public Builder clearKey() {
        bitField0_ = (bitField0_ & ~0x00000002);
        key_ = getDefaultInstance().getKey();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Name of the param. Maximum size is 255 bytes.
       * </pre>
       *
       * <code>optional string key = 2 [(.validate_required) = true];</code>
       */
      public Builder setKeyBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        key_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object value_ = "";
      /**
       * <pre>
       * String value of the param being logged. Maximum size is 500 bytes.
       * </pre>
       *
       * <code>optional string value = 3 [(.validate_required) = true];</code>
       */
      public boolean hasValue() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <pre>
       * String value of the param being logged. Maximum size is 500 bytes.
       * </pre>
       *
       * <code>optional string value = 3 [(.validate_required) = true];</code>
       */
      public java.lang.String getValue() {
        java.lang.Object ref = value_;
        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()) {
            value_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * String value of the param being logged. Maximum size is 500 bytes.
       * </pre>
       *
       * <code>optional string value = 3 [(.validate_required) = true];</code>
       */
      public com.google.protobuf.ByteString
          getValueBytes() {
        java.lang.Object ref = value_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          value_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * String value of the param being logged. Maximum size is 500 bytes.
       * </pre>
       *
       * <code>optional string value = 3 [(.validate_required) = true];</code>
       */
      public Builder setValue(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        value_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * String value of the param being logged. Maximum size is 500 bytes.
       * </pre>
       *
       * <code>optional string value = 3 [(.validate_required) = true];</code>
       */
      public Builder clearValue() {
        bitField0_ = (bitField0_ & ~0x00000004);
        value_ = getDefaultInstance().getValue();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * String value of the param being logged. Maximum size is 500 bytes.
       * </pre>
       *
       * <code>optional string value = 3 [(.validate_required) = true];</code>
       */
      public Builder setValueBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        value_ = 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.LogParam)
    }

    // @@protoc_insertion_point(class_scope:mlflow.LogParam)
    private static final org.mlflow.api.proto.Service.LogParam DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.LogParam();
    }

    public static org.mlflow.api.proto.Service.LogParam getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<LogParam>
        PARSER = new com.google.protobuf.AbstractParser<LogParam>() {
      @java.lang.Override
      public LogParam parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new LogParam(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<LogParam> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<LogParam> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public org.mlflow.api.proto.Service.LogParam getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface SetTagOrBuilder extends
      // @@protoc_insertion_point(interface_extends:mlflow.SetTag)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * ID of the run under which to log the param.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    boolean hasRunUuid();
    /**
     * <pre>
     * ID of the run under which to log the param.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    java.lang.String getRunUuid();
    /**
     * <pre>
     * ID of the run under which to log the param.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    com.google.protobuf.ByteString
        getRunUuidBytes();

    /**
     * <pre>
     * Name of the tag. Maximum size is 255 bytes.
     * </pre>
     *
     * <code>optional string key = 2 [(.validate_required) = true];</code>
     */
    boolean hasKey();
    /**
     * <pre>
     * Name of the tag. Maximum size is 255 bytes.
     * </pre>
     *
     * <code>optional string key = 2 [(.validate_required) = true];</code>
     */
    java.lang.String getKey();
    /**
     * <pre>
     * Name of the tag. Maximum size is 255 bytes.
     * </pre>
     *
     * <code>optional string key = 2 [(.validate_required) = true];</code>
     */
    com.google.protobuf.ByteString
        getKeyBytes();

    /**
     * <pre>
     * String value of the tag being logged. Maximum size is 5000 bytes.
     * </pre>
     *
     * <code>optional string value = 3 [(.validate_required) = true];</code>
     */
    boolean hasValue();
    /**
     * <pre>
     * String value of the tag being logged. Maximum size is 5000 bytes.
     * </pre>
     *
     * <code>optional string value = 3 [(.validate_required) = true];</code>
     */
    java.lang.String getValue();
    /**
     * <pre>
     * String value of the tag being logged. Maximum size is 5000 bytes.
     * </pre>
     *
     * <code>optional string value = 3 [(.validate_required) = true];</code>
     */
    com.google.protobuf.ByteString
        getValueBytes();
  }
  /**
   * Protobuf type {@code mlflow.SetTag}
   */
  public  static final class SetTag extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:mlflow.SetTag)
      SetTagOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use SetTag.newBuilder() to construct.
    private SetTag(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private SetTag() {
      runUuid_ = "";
      key_ = "";
      value_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private SetTag(
        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;
              runUuid_ = bs;
              break;
            }
            case 18: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000002;
              key_ = bs;
              break;
            }
            case 26: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000004;
              value_ = 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_SetTag_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.mlflow.api.proto.Service.internal_static_mlflow_SetTag_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.mlflow.api.proto.Service.SetTag.class, org.mlflow.api.proto.Service.SetTag.Builder.class);
    }

    public interface ResponseOrBuilder extends
        // @@protoc_insertion_point(interface_extends:mlflow.SetTag.Response)
        com.google.protobuf.MessageOrBuilder {
    }
    /**
     * Protobuf type {@code mlflow.SetTag.Response}
     */
    public  static final class Response extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:mlflow.SetTag.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
      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_SetTag_Response_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_SetTag_Response_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.SetTag.Response.class, org.mlflow.api.proto.Service.SetTag.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.SetTag.Response)) {
          return super.equals(obj);
        }
        org.mlflow.api.proto.Service.SetTag.Response other = (org.mlflow.api.proto.Service.SetTag.Response) obj;

        boolean result = true;
        result = result && unknownFields.equals(other.unknownFields);
        return result;
      }

      @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.SetTag.Response parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.SetTag.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.SetTag.Response parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.SetTag.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.SetTag.Response parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.SetTag.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.SetTag.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.SetTag.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.SetTag.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.SetTag.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.SetTag.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.SetTag.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.SetTag.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.SetTag.Response}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:mlflow.SetTag.Response)
          org.mlflow.api.proto.Service.SetTag.ResponseOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_SetTag_Response_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_SetTag_Response_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  org.mlflow.api.proto.Service.SetTag.Response.class, org.mlflow.api.proto.Service.SetTag.Response.Builder.class);
        }

        // Construct using org.mlflow.api.proto.Service.SetTag.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_SetTag_Response_descriptor;
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.SetTag.Response getDefaultInstanceForType() {
          return org.mlflow.api.proto.Service.SetTag.Response.getDefaultInstance();
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.SetTag.Response build() {
          org.mlflow.api.proto.Service.SetTag.Response result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.SetTag.Response buildPartial() {
          org.mlflow.api.proto.Service.SetTag.Response result = new org.mlflow.api.proto.Service.SetTag.Response(this);
          onBuilt();
          return result;
        }

        @java.lang.Override
        public Builder clone() {
          return (Builder) super.clone();
        }
        @java.lang.Override
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.setField(field, value);
        }
        @java.lang.Override
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }
        @java.lang.Override
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }
        @java.lang.Override
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }
        @java.lang.Override
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }
        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof org.mlflow.api.proto.Service.SetTag.Response) {
            return mergeFrom((org.mlflow.api.proto.Service.SetTag.Response)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(org.mlflow.api.proto.Service.SetTag.Response other) {
          if (other == org.mlflow.api.proto.Service.SetTag.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.SetTag.Response parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (org.mlflow.api.proto.Service.SetTag.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.SetTag.Response)
      }

      // @@protoc_insertion_point(class_scope:mlflow.SetTag.Response)
      private static final org.mlflow.api.proto.Service.SetTag.Response DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.SetTag.Response();
      }

      public static org.mlflow.api.proto.Service.SetTag.Response getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      @java.lang.Deprecated public static final com.google.protobuf.Parser<Response>
          PARSER = new com.google.protobuf.AbstractParser<Response>() {
        @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<Response> parser() {
        return PARSER;
      }

      @java.lang.Override
      public com.google.protobuf.Parser<Response> getParserForType() {
        return PARSER;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.SetTag.Response getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    private int bitField0_;
    public static final int RUN_UUID_FIELD_NUMBER = 1;
    private volatile java.lang.Object runUuid_;
    /**
     * <pre>
     * ID of the run under which to log the param.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    public boolean hasRunUuid() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * ID of the run under which to log the param.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    public java.lang.String getRunUuid() {
      java.lang.Object ref = runUuid_;
      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()) {
          runUuid_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * ID of the run under which to log the param.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    public com.google.protobuf.ByteString
        getRunUuidBytes() {
      java.lang.Object ref = runUuid_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        runUuid_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int KEY_FIELD_NUMBER = 2;
    private volatile java.lang.Object key_;
    /**
     * <pre>
     * Name of the tag. Maximum size is 255 bytes.
     * </pre>
     *
     * <code>optional string key = 2 [(.validate_required) = true];</code>
     */
    public boolean hasKey() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     * Name of the tag. Maximum size is 255 bytes.
     * </pre>
     *
     * <code>optional string key = 2 [(.validate_required) = true];</code>
     */
    public java.lang.String getKey() {
      java.lang.Object ref = key_;
      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()) {
          key_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Name of the tag. Maximum size is 255 bytes.
     * </pre>
     *
     * <code>optional string key = 2 [(.validate_required) = true];</code>
     */
    public com.google.protobuf.ByteString
        getKeyBytes() {
      java.lang.Object ref = key_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        key_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int VALUE_FIELD_NUMBER = 3;
    private volatile java.lang.Object value_;
    /**
     * <pre>
     * String value of the tag being logged. Maximum size is 5000 bytes.
     * </pre>
     *
     * <code>optional string value = 3 [(.validate_required) = true];</code>
     */
    public boolean hasValue() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <pre>
     * String value of the tag being logged. Maximum size is 5000 bytes.
     * </pre>
     *
     * <code>optional string value = 3 [(.validate_required) = true];</code>
     */
    public java.lang.String getValue() {
      java.lang.Object ref = value_;
      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()) {
          value_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * String value of the tag being logged. Maximum size is 5000 bytes.
     * </pre>
     *
     * <code>optional string value = 3 [(.validate_required) = true];</code>
     */
    public com.google.protobuf.ByteString
        getValueBytes() {
      java.lang.Object ref = value_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        value_ = 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) == 0x00000001)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, runUuid_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, key_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 3, value_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, runUuid_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, key_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, value_);
      }
      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.SetTag)) {
        return super.equals(obj);
      }
      org.mlflow.api.proto.Service.SetTag other = (org.mlflow.api.proto.Service.SetTag) obj;

      boolean result = true;
      result = result && (hasRunUuid() == other.hasRunUuid());
      if (hasRunUuid()) {
        result = result && getRunUuid()
            .equals(other.getRunUuid());
      }
      result = result && (hasKey() == other.hasKey());
      if (hasKey()) {
        result = result && getKey()
            .equals(other.getKey());
      }
      result = result && (hasValue() == other.hasValue());
      if (hasValue()) {
        result = result && getValue()
            .equals(other.getValue());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasRunUuid()) {
        hash = (37 * hash) + RUN_UUID_FIELD_NUMBER;
        hash = (53 * hash) + getRunUuid().hashCode();
      }
      if (hasKey()) {
        hash = (37 * hash) + KEY_FIELD_NUMBER;
        hash = (53 * hash) + getKey().hashCode();
      }
      if (hasValue()) {
        hash = (37 * hash) + VALUE_FIELD_NUMBER;
        hash = (53 * hash) + getValue().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.mlflow.api.proto.Service.SetTag parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.SetTag 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.SetTag parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.SetTag 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.SetTag parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.SetTag 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.SetTag parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.SetTag 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.SetTag parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.SetTag 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.SetTag 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.SetTag 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.SetTag 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.SetTag}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:mlflow.SetTag)
        org.mlflow.api.proto.Service.SetTagOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_SetTag_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_SetTag_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.SetTag.class, org.mlflow.api.proto.Service.SetTag.Builder.class);
      }

      // Construct using org.mlflow.api.proto.Service.SetTag.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();
        runUuid_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        key_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        value_ = "";
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_SetTag_descriptor;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.SetTag getDefaultInstanceForType() {
        return org.mlflow.api.proto.Service.SetTag.getDefaultInstance();
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.SetTag build() {
        org.mlflow.api.proto.Service.SetTag result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.SetTag buildPartial() {
        org.mlflow.api.proto.Service.SetTag result = new org.mlflow.api.proto.Service.SetTag(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.runUuid_ = runUuid_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.key_ = key_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.value_ = value_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.mlflow.api.proto.Service.SetTag) {
          return mergeFrom((org.mlflow.api.proto.Service.SetTag)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.mlflow.api.proto.Service.SetTag other) {
        if (other == org.mlflow.api.proto.Service.SetTag.getDefaultInstance()) return this;
        if (other.hasRunUuid()) {
          bitField0_ |= 0x00000001;
          runUuid_ = other.runUuid_;
          onChanged();
        }
        if (other.hasKey()) {
          bitField0_ |= 0x00000002;
          key_ = other.key_;
          onChanged();
        }
        if (other.hasValue()) {
          bitField0_ |= 0x00000004;
          value_ = other.value_;
          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.SetTag parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.mlflow.api.proto.Service.SetTag) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object runUuid_ = "";
      /**
       * <pre>
       * ID of the run under which to log the param.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public boolean hasRunUuid() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * ID of the run under which to log the param.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public java.lang.String getRunUuid() {
        java.lang.Object ref = runUuid_;
        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()) {
            runUuid_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * ID of the run under which to log the param.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public com.google.protobuf.ByteString
          getRunUuidBytes() {
        java.lang.Object ref = runUuid_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          runUuid_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * ID of the run under which to log the param.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public Builder setRunUuid(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        runUuid_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * ID of the run under which to log the param.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public Builder clearRunUuid() {
        bitField0_ = (bitField0_ & ~0x00000001);
        runUuid_ = getDefaultInstance().getRunUuid();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * ID of the run under which to log the param.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public Builder setRunUuidBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        runUuid_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object key_ = "";
      /**
       * <pre>
       * Name of the tag. Maximum size is 255 bytes.
       * </pre>
       *
       * <code>optional string key = 2 [(.validate_required) = true];</code>
       */
      public boolean hasKey() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * Name of the tag. Maximum size is 255 bytes.
       * </pre>
       *
       * <code>optional string key = 2 [(.validate_required) = true];</code>
       */
      public java.lang.String getKey() {
        java.lang.Object ref = key_;
        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()) {
            key_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Name of the tag. Maximum size is 255 bytes.
       * </pre>
       *
       * <code>optional string key = 2 [(.validate_required) = true];</code>
       */
      public com.google.protobuf.ByteString
          getKeyBytes() {
        java.lang.Object ref = key_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          key_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Name of the tag. Maximum size is 255 bytes.
       * </pre>
       *
       * <code>optional string key = 2 [(.validate_required) = true];</code>
       */
      public Builder setKey(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        key_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Name of the tag. Maximum size is 255 bytes.
       * </pre>
       *
       * <code>optional string key = 2 [(.validate_required) = true];</code>
       */
      public Builder clearKey() {
        bitField0_ = (bitField0_ & ~0x00000002);
        key_ = getDefaultInstance().getKey();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Name of the tag. Maximum size is 255 bytes.
       * </pre>
       *
       * <code>optional string key = 2 [(.validate_required) = true];</code>
       */
      public Builder setKeyBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        key_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object value_ = "";
      /**
       * <pre>
       * String value of the tag being logged. Maximum size is 5000 bytes.
       * </pre>
       *
       * <code>optional string value = 3 [(.validate_required) = true];</code>
       */
      public boolean hasValue() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <pre>
       * String value of the tag being logged. Maximum size is 5000 bytes.
       * </pre>
       *
       * <code>optional string value = 3 [(.validate_required) = true];</code>
       */
      public java.lang.String getValue() {
        java.lang.Object ref = value_;
        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()) {
            value_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * String value of the tag being logged. Maximum size is 5000 bytes.
       * </pre>
       *
       * <code>optional string value = 3 [(.validate_required) = true];</code>
       */
      public com.google.protobuf.ByteString
          getValueBytes() {
        java.lang.Object ref = value_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          value_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * String value of the tag being logged. Maximum size is 5000 bytes.
       * </pre>
       *
       * <code>optional string value = 3 [(.validate_required) = true];</code>
       */
      public Builder setValue(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        value_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * String value of the tag being logged. Maximum size is 5000 bytes.
       * </pre>
       *
       * <code>optional string value = 3 [(.validate_required) = true];</code>
       */
      public Builder clearValue() {
        bitField0_ = (bitField0_ & ~0x00000004);
        value_ = getDefaultInstance().getValue();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * String value of the tag being logged. Maximum size is 5000 bytes.
       * </pre>
       *
       * <code>optional string value = 3 [(.validate_required) = true];</code>
       */
      public Builder setValueBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000004;
        value_ = 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.SetTag)
    }

    // @@protoc_insertion_point(class_scope:mlflow.SetTag)
    private static final org.mlflow.api.proto.Service.SetTag DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.SetTag();
    }

    public static org.mlflow.api.proto.Service.SetTag getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<SetTag>
        PARSER = new com.google.protobuf.AbstractParser<SetTag>() {
      @java.lang.Override
      public SetTag parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new SetTag(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<SetTag> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<SetTag> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public org.mlflow.api.proto.Service.SetTag getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface GetRunOrBuilder extends
      // @@protoc_insertion_point(interface_extends:mlflow.GetRun)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * ID of the run to fetch.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    boolean hasRunUuid();
    /**
     * <pre>
     * ID of the run to fetch.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    java.lang.String getRunUuid();
    /**
     * <pre>
     * ID of the run to fetch.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    com.google.protobuf.ByteString
        getRunUuidBytes();
  }
  /**
   * Protobuf type {@code mlflow.GetRun}
   */
  public  static final class GetRun extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:mlflow.GetRun)
      GetRunOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use GetRun.newBuilder() to construct.
    private GetRun(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private GetRun() {
      runUuid_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private GetRun(
        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;
              runUuid_ = 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_GetRun_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.mlflow.api.proto.Service.internal_static_mlflow_GetRun_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.mlflow.api.proto.Service.GetRun.class, org.mlflow.api.proto.Service.GetRun.Builder.class);
    }

    public interface ResponseOrBuilder extends
        // @@protoc_insertion_point(interface_extends:mlflow.GetRun.Response)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <pre>
       * Run metadata (name, start time, etc) and data (metrics, params, etc).
       * </pre>
       *
       * <code>optional .mlflow.Run run = 1;</code>
       */
      boolean hasRun();
      /**
       * <pre>
       * Run metadata (name, start time, etc) and data (metrics, params, etc).
       * </pre>
       *
       * <code>optional .mlflow.Run run = 1;</code>
       */
      org.mlflow.api.proto.Service.Run getRun();
      /**
       * <pre>
       * Run metadata (name, start time, etc) and data (metrics, params, etc).
       * </pre>
       *
       * <code>optional .mlflow.Run run = 1;</code>
       */
      org.mlflow.api.proto.Service.RunOrBuilder getRunOrBuilder();
    }
    /**
     * Protobuf type {@code mlflow.GetRun.Response}
     */
    public  static final class Response extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:mlflow.GetRun.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
      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.Run.Builder subBuilder = null;
                if (((bitField0_ & 0x00000001) == 0x00000001)) {
                  subBuilder = run_.toBuilder();
                }
                run_ = input.readMessage(org.mlflow.api.proto.Service.Run.PARSER, extensionRegistry);
                if (subBuilder != null) {
                  subBuilder.mergeFrom(run_);
                  run_ = 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_GetRun_Response_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_GetRun_Response_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.GetRun.Response.class, org.mlflow.api.proto.Service.GetRun.Response.Builder.class);
      }

      private int bitField0_;
      public static final int RUN_FIELD_NUMBER = 1;
      private org.mlflow.api.proto.Service.Run run_;
      /**
       * <pre>
       * Run metadata (name, start time, etc) and data (metrics, params, etc).
       * </pre>
       *
       * <code>optional .mlflow.Run run = 1;</code>
       */
      public boolean hasRun() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * Run metadata (name, start time, etc) and data (metrics, params, etc).
       * </pre>
       *
       * <code>optional .mlflow.Run run = 1;</code>
       */
      public org.mlflow.api.proto.Service.Run getRun() {
        return run_ == null ? org.mlflow.api.proto.Service.Run.getDefaultInstance() : run_;
      }
      /**
       * <pre>
       * Run metadata (name, start time, etc) and data (metrics, params, etc).
       * </pre>
       *
       * <code>optional .mlflow.Run run = 1;</code>
       */
      public org.mlflow.api.proto.Service.RunOrBuilder getRunOrBuilder() {
        return run_ == null ? org.mlflow.api.proto.Service.Run.getDefaultInstance() : run_;
      }

      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) == 0x00000001)) {
          output.writeMessage(1, getRun());
        }
        unknownFields.writeTo(output);
      }

      @java.lang.Override
      public int getSerializedSize() {
        int size = memoizedSize;
        if (size != -1) return size;

        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(1, getRun());
        }
        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.GetRun.Response)) {
          return super.equals(obj);
        }
        org.mlflow.api.proto.Service.GetRun.Response other = (org.mlflow.api.proto.Service.GetRun.Response) obj;

        boolean result = true;
        result = result && (hasRun() == other.hasRun());
        if (hasRun()) {
          result = result && getRun()
              .equals(other.getRun());
        }
        result = result && unknownFields.equals(other.unknownFields);
        return result;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        if (hasRun()) {
          hash = (37 * hash) + RUN_FIELD_NUMBER;
          hash = (53 * hash) + getRun().hashCode();
        }
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static org.mlflow.api.proto.Service.GetRun.Response parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.GetRun.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.GetRun.Response parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.GetRun.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.GetRun.Response parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.GetRun.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.GetRun.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.GetRun.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.GetRun.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.GetRun.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.GetRun.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.GetRun.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.GetRun.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.GetRun.Response}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:mlflow.GetRun.Response)
          org.mlflow.api.proto.Service.GetRun.ResponseOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_GetRun_Response_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_GetRun_Response_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  org.mlflow.api.proto.Service.GetRun.Response.class, org.mlflow.api.proto.Service.GetRun.Response.Builder.class);
        }

        // Construct using org.mlflow.api.proto.Service.GetRun.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) {
            getRunFieldBuilder();
          }
        }
        @java.lang.Override
        public Builder clear() {
          super.clear();
          if (runBuilder_ == null) {
            run_ = null;
          } else {
            runBuilder_.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_GetRun_Response_descriptor;
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.GetRun.Response getDefaultInstanceForType() {
          return org.mlflow.api.proto.Service.GetRun.Response.getDefaultInstance();
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.GetRun.Response build() {
          org.mlflow.api.proto.Service.GetRun.Response result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.GetRun.Response buildPartial() {
          org.mlflow.api.proto.Service.GetRun.Response result = new org.mlflow.api.proto.Service.GetRun.Response(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          if (runBuilder_ == null) {
            result.run_ = run_;
          } else {
            result.run_ = runBuilder_.build();
          }
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        @java.lang.Override
        public Builder clone() {
          return (Builder) super.clone();
        }
        @java.lang.Override
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.setField(field, value);
        }
        @java.lang.Override
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }
        @java.lang.Override
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }
        @java.lang.Override
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }
        @java.lang.Override
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }
        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof org.mlflow.api.proto.Service.GetRun.Response) {
            return mergeFrom((org.mlflow.api.proto.Service.GetRun.Response)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(org.mlflow.api.proto.Service.GetRun.Response other) {
          if (other == org.mlflow.api.proto.Service.GetRun.Response.getDefaultInstance()) return this;
          if (other.hasRun()) {
            mergeRun(other.getRun());
          }
          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.GetRun.Response parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (org.mlflow.api.proto.Service.GetRun.Response) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        private org.mlflow.api.proto.Service.Run run_ = null;
        private com.google.protobuf.SingleFieldBuilderV3<
            org.mlflow.api.proto.Service.Run, org.mlflow.api.proto.Service.Run.Builder, org.mlflow.api.proto.Service.RunOrBuilder> runBuilder_;
        /**
         * <pre>
         * Run metadata (name, start time, etc) and data (metrics, params, etc).
         * </pre>
         *
         * <code>optional .mlflow.Run run = 1;</code>
         */
        public boolean hasRun() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <pre>
         * Run metadata (name, start time, etc) and data (metrics, params, etc).
         * </pre>
         *
         * <code>optional .mlflow.Run run = 1;</code>
         */
        public org.mlflow.api.proto.Service.Run getRun() {
          if (runBuilder_ == null) {
            return run_ == null ? org.mlflow.api.proto.Service.Run.getDefaultInstance() : run_;
          } else {
            return runBuilder_.getMessage();
          }
        }
        /**
         * <pre>
         * Run metadata (name, start time, etc) and data (metrics, params, etc).
         * </pre>
         *
         * <code>optional .mlflow.Run run = 1;</code>
         */
        public Builder setRun(org.mlflow.api.proto.Service.Run value) {
          if (runBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            run_ = value;
            onChanged();
          } else {
            runBuilder_.setMessage(value);
          }
          bitField0_ |= 0x00000001;
          return this;
        }
        /**
         * <pre>
         * Run metadata (name, start time, etc) and data (metrics, params, etc).
         * </pre>
         *
         * <code>optional .mlflow.Run run = 1;</code>
         */
        public Builder setRun(
            org.mlflow.api.proto.Service.Run.Builder builderForValue) {
          if (runBuilder_ == null) {
            run_ = builderForValue.build();
            onChanged();
          } else {
            runBuilder_.setMessage(builderForValue.build());
          }
          bitField0_ |= 0x00000001;
          return this;
        }
        /**
         * <pre>
         * Run metadata (name, start time, etc) and data (metrics, params, etc).
         * </pre>
         *
         * <code>optional .mlflow.Run run = 1;</code>
         */
        public Builder mergeRun(org.mlflow.api.proto.Service.Run value) {
          if (runBuilder_ == null) {
            if (((bitField0_ & 0x00000001) == 0x00000001) &&
                run_ != null &&
                run_ != org.mlflow.api.proto.Service.Run.getDefaultInstance()) {
              run_ =
                org.mlflow.api.proto.Service.Run.newBuilder(run_).mergeFrom(value).buildPartial();
            } else {
              run_ = value;
            }
            onChanged();
          } else {
            runBuilder_.mergeFrom(value);
          }
          bitField0_ |= 0x00000001;
          return this;
        }
        /**
         * <pre>
         * Run metadata (name, start time, etc) and data (metrics, params, etc).
         * </pre>
         *
         * <code>optional .mlflow.Run run = 1;</code>
         */
        public Builder clearRun() {
          if (runBuilder_ == null) {
            run_ = null;
            onChanged();
          } else {
            runBuilder_.clear();
          }
          bitField0_ = (bitField0_ & ~0x00000001);
          return this;
        }
        /**
         * <pre>
         * Run metadata (name, start time, etc) and data (metrics, params, etc).
         * </pre>
         *
         * <code>optional .mlflow.Run run = 1;</code>
         */
        public org.mlflow.api.proto.Service.Run.Builder getRunBuilder() {
          bitField0_ |= 0x00000001;
          onChanged();
          return getRunFieldBuilder().getBuilder();
        }
        /**
         * <pre>
         * Run metadata (name, start time, etc) and data (metrics, params, etc).
         * </pre>
         *
         * <code>optional .mlflow.Run run = 1;</code>
         */
        public org.mlflow.api.proto.Service.RunOrBuilder getRunOrBuilder() {
          if (runBuilder_ != null) {
            return runBuilder_.getMessageOrBuilder();
          } else {
            return run_ == null ?
                org.mlflow.api.proto.Service.Run.getDefaultInstance() : run_;
          }
        }
        /**
         * <pre>
         * Run metadata (name, start time, etc) and data (metrics, params, etc).
         * </pre>
         *
         * <code>optional .mlflow.Run run = 1;</code>
         */
        private com.google.protobuf.SingleFieldBuilderV3<
            org.mlflow.api.proto.Service.Run, org.mlflow.api.proto.Service.Run.Builder, org.mlflow.api.proto.Service.RunOrBuilder> 
            getRunFieldBuilder() {
          if (runBuilder_ == null) {
            runBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
                org.mlflow.api.proto.Service.Run, org.mlflow.api.proto.Service.Run.Builder, org.mlflow.api.proto.Service.RunOrBuilder>(
                    getRun(),
                    getParentForChildren(),
                    isClean());
            run_ = null;
          }
          return runBuilder_;
        }
        @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.GetRun.Response)
      }

      // @@protoc_insertion_point(class_scope:mlflow.GetRun.Response)
      private static final org.mlflow.api.proto.Service.GetRun.Response DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.GetRun.Response();
      }

      public static org.mlflow.api.proto.Service.GetRun.Response getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      @java.lang.Deprecated public static final com.google.protobuf.Parser<Response>
          PARSER = new com.google.protobuf.AbstractParser<Response>() {
        @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<Response> parser() {
        return PARSER;
      }

      @java.lang.Override
      public com.google.protobuf.Parser<Response> getParserForType() {
        return PARSER;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.GetRun.Response getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    private int bitField0_;
    public static final int RUN_UUID_FIELD_NUMBER = 1;
    private volatile java.lang.Object runUuid_;
    /**
     * <pre>
     * ID of the run to fetch.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    public boolean hasRunUuid() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * ID of the run to fetch.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    public java.lang.String getRunUuid() {
      java.lang.Object ref = runUuid_;
      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()) {
          runUuid_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * ID of the run to fetch.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    public com.google.protobuf.ByteString
        getRunUuidBytes() {
      java.lang.Object ref = runUuid_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        runUuid_ = 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) == 0x00000001)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, runUuid_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, runUuid_);
      }
      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.GetRun)) {
        return super.equals(obj);
      }
      org.mlflow.api.proto.Service.GetRun other = (org.mlflow.api.proto.Service.GetRun) obj;

      boolean result = true;
      result = result && (hasRunUuid() == other.hasRunUuid());
      if (hasRunUuid()) {
        result = result && getRunUuid()
            .equals(other.getRunUuid());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasRunUuid()) {
        hash = (37 * hash) + RUN_UUID_FIELD_NUMBER;
        hash = (53 * hash) + getRunUuid().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.mlflow.api.proto.Service.GetRun parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.GetRun 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.GetRun parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.GetRun 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.GetRun parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.GetRun 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.GetRun parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.GetRun 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.GetRun parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.GetRun 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.GetRun 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.GetRun 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.GetRun 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.GetRun}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:mlflow.GetRun)
        org.mlflow.api.proto.Service.GetRunOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_GetRun_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_GetRun_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.GetRun.class, org.mlflow.api.proto.Service.GetRun.Builder.class);
      }

      // Construct using org.mlflow.api.proto.Service.GetRun.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();
        runUuid_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_GetRun_descriptor;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.GetRun getDefaultInstanceForType() {
        return org.mlflow.api.proto.Service.GetRun.getDefaultInstance();
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.GetRun build() {
        org.mlflow.api.proto.Service.GetRun result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.GetRun buildPartial() {
        org.mlflow.api.proto.Service.GetRun result = new org.mlflow.api.proto.Service.GetRun(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.runUuid_ = runUuid_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.mlflow.api.proto.Service.GetRun) {
          return mergeFrom((org.mlflow.api.proto.Service.GetRun)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.mlflow.api.proto.Service.GetRun other) {
        if (other == org.mlflow.api.proto.Service.GetRun.getDefaultInstance()) return this;
        if (other.hasRunUuid()) {
          bitField0_ |= 0x00000001;
          runUuid_ = other.runUuid_;
          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.GetRun parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.mlflow.api.proto.Service.GetRun) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object runUuid_ = "";
      /**
       * <pre>
       * ID of the run to fetch.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public boolean hasRunUuid() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * ID of the run to fetch.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public java.lang.String getRunUuid() {
        java.lang.Object ref = runUuid_;
        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()) {
            runUuid_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * ID of the run to fetch.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public com.google.protobuf.ByteString
          getRunUuidBytes() {
        java.lang.Object ref = runUuid_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          runUuid_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * ID of the run to fetch.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public Builder setRunUuid(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        runUuid_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * ID of the run to fetch.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public Builder clearRunUuid() {
        bitField0_ = (bitField0_ & ~0x00000001);
        runUuid_ = getDefaultInstance().getRunUuid();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * ID of the run to fetch.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public Builder setRunUuidBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        runUuid_ = 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.GetRun)
    }

    // @@protoc_insertion_point(class_scope:mlflow.GetRun)
    private static final org.mlflow.api.proto.Service.GetRun DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.GetRun();
    }

    public static org.mlflow.api.proto.Service.GetRun getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<GetRun>
        PARSER = new com.google.protobuf.AbstractParser<GetRun>() {
      @java.lang.Override
      public GetRun parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GetRun(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<GetRun> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<GetRun> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public org.mlflow.api.proto.Service.GetRun getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface GetMetricOrBuilder extends
      // @@protoc_insertion_point(interface_extends:mlflow.GetMetric)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * ID of the run from which to retrieve the metric value.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    boolean hasRunUuid();
    /**
     * <pre>
     * ID of the run from which to retrieve the metric value.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    java.lang.String getRunUuid();
    /**
     * <pre>
     * ID of the run from which to retrieve the metric value.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    com.google.protobuf.ByteString
        getRunUuidBytes();

    /**
     * <pre>
     * Name of the metric.
     * </pre>
     *
     * <code>optional string metric_key = 2 [(.validate_required) = true];</code>
     */
    boolean hasMetricKey();
    /**
     * <pre>
     * Name of the metric.
     * </pre>
     *
     * <code>optional string metric_key = 2 [(.validate_required) = true];</code>
     */
    java.lang.String getMetricKey();
    /**
     * <pre>
     * Name of the metric.
     * </pre>
     *
     * <code>optional string metric_key = 2 [(.validate_required) = true];</code>
     */
    com.google.protobuf.ByteString
        getMetricKeyBytes();
  }
  /**
   * Protobuf type {@code mlflow.GetMetric}
   */
  public  static final class GetMetric extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:mlflow.GetMetric)
      GetMetricOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use GetMetric.newBuilder() to construct.
    private GetMetric(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private GetMetric() {
      runUuid_ = "";
      metricKey_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private GetMetric(
        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;
              runUuid_ = bs;
              break;
            }
            case 18: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000002;
              metricKey_ = 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_GetMetric_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.mlflow.api.proto.Service.internal_static_mlflow_GetMetric_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.mlflow.api.proto.Service.GetMetric.class, org.mlflow.api.proto.Service.GetMetric.Builder.class);
    }

    public interface ResponseOrBuilder extends
        // @@protoc_insertion_point(interface_extends:mlflow.GetMetric.Response)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <pre>
       * Latest reported value of the specified metric.
       * </pre>
       *
       * <code>optional .mlflow.Metric metric = 1;</code>
       */
      boolean hasMetric();
      /**
       * <pre>
       * Latest reported value of the specified metric.
       * </pre>
       *
       * <code>optional .mlflow.Metric metric = 1;</code>
       */
      org.mlflow.api.proto.Service.Metric getMetric();
      /**
       * <pre>
       * Latest reported value of the specified metric.
       * </pre>
       *
       * <code>optional .mlflow.Metric metric = 1;</code>
       */
      org.mlflow.api.proto.Service.MetricOrBuilder getMetricOrBuilder();
    }
    /**
     * Protobuf type {@code mlflow.GetMetric.Response}
     */
    public  static final class Response extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:mlflow.GetMetric.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
      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.Metric.Builder subBuilder = null;
                if (((bitField0_ & 0x00000001) == 0x00000001)) {
                  subBuilder = metric_.toBuilder();
                }
                metric_ = input.readMessage(org.mlflow.api.proto.Service.Metric.PARSER, extensionRegistry);
                if (subBuilder != null) {
                  subBuilder.mergeFrom(metric_);
                  metric_ = 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_GetMetric_Response_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_GetMetric_Response_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.GetMetric.Response.class, org.mlflow.api.proto.Service.GetMetric.Response.Builder.class);
      }

      private int bitField0_;
      public static final int METRIC_FIELD_NUMBER = 1;
      private org.mlflow.api.proto.Service.Metric metric_;
      /**
       * <pre>
       * Latest reported value of the specified metric.
       * </pre>
       *
       * <code>optional .mlflow.Metric metric = 1;</code>
       */
      public boolean hasMetric() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * Latest reported value of the specified metric.
       * </pre>
       *
       * <code>optional .mlflow.Metric metric = 1;</code>
       */
      public org.mlflow.api.proto.Service.Metric getMetric() {
        return metric_ == null ? org.mlflow.api.proto.Service.Metric.getDefaultInstance() : metric_;
      }
      /**
       * <pre>
       * Latest reported value of the specified metric.
       * </pre>
       *
       * <code>optional .mlflow.Metric metric = 1;</code>
       */
      public org.mlflow.api.proto.Service.MetricOrBuilder getMetricOrBuilder() {
        return metric_ == null ? org.mlflow.api.proto.Service.Metric.getDefaultInstance() : metric_;
      }

      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) == 0x00000001)) {
          output.writeMessage(1, getMetric());
        }
        unknownFields.writeTo(output);
      }

      @java.lang.Override
      public int getSerializedSize() {
        int size = memoizedSize;
        if (size != -1) return size;

        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(1, getMetric());
        }
        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.GetMetric.Response)) {
          return super.equals(obj);
        }
        org.mlflow.api.proto.Service.GetMetric.Response other = (org.mlflow.api.proto.Service.GetMetric.Response) obj;

        boolean result = true;
        result = result && (hasMetric() == other.hasMetric());
        if (hasMetric()) {
          result = result && getMetric()
              .equals(other.getMetric());
        }
        result = result && unknownFields.equals(other.unknownFields);
        return result;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        if (hasMetric()) {
          hash = (37 * hash) + METRIC_FIELD_NUMBER;
          hash = (53 * hash) + getMetric().hashCode();
        }
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static org.mlflow.api.proto.Service.GetMetric.Response parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.GetMetric.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.GetMetric.Response parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.GetMetric.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.GetMetric.Response parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.GetMetric.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.GetMetric.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.GetMetric.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.GetMetric.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.GetMetric.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.GetMetric.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.GetMetric.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.GetMetric.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.GetMetric.Response}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:mlflow.GetMetric.Response)
          org.mlflow.api.proto.Service.GetMetric.ResponseOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_GetMetric_Response_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_GetMetric_Response_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  org.mlflow.api.proto.Service.GetMetric.Response.class, org.mlflow.api.proto.Service.GetMetric.Response.Builder.class);
        }

        // Construct using org.mlflow.api.proto.Service.GetMetric.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) {
            getMetricFieldBuilder();
          }
        }
        @java.lang.Override
        public Builder clear() {
          super.clear();
          if (metricBuilder_ == null) {
            metric_ = null;
          } else {
            metricBuilder_.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_GetMetric_Response_descriptor;
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.GetMetric.Response getDefaultInstanceForType() {
          return org.mlflow.api.proto.Service.GetMetric.Response.getDefaultInstance();
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.GetMetric.Response build() {
          org.mlflow.api.proto.Service.GetMetric.Response result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.GetMetric.Response buildPartial() {
          org.mlflow.api.proto.Service.GetMetric.Response result = new org.mlflow.api.proto.Service.GetMetric.Response(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          if (metricBuilder_ == null) {
            result.metric_ = metric_;
          } else {
            result.metric_ = metricBuilder_.build();
          }
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        @java.lang.Override
        public Builder clone() {
          return (Builder) super.clone();
        }
        @java.lang.Override
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.setField(field, value);
        }
        @java.lang.Override
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }
        @java.lang.Override
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }
        @java.lang.Override
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }
        @java.lang.Override
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }
        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof org.mlflow.api.proto.Service.GetMetric.Response) {
            return mergeFrom((org.mlflow.api.proto.Service.GetMetric.Response)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(org.mlflow.api.proto.Service.GetMetric.Response other) {
          if (other == org.mlflow.api.proto.Service.GetMetric.Response.getDefaultInstance()) return this;
          if (other.hasMetric()) {
            mergeMetric(other.getMetric());
          }
          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.GetMetric.Response parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (org.mlflow.api.proto.Service.GetMetric.Response) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        private org.mlflow.api.proto.Service.Metric metric_ = null;
        private com.google.protobuf.SingleFieldBuilderV3<
            org.mlflow.api.proto.Service.Metric, org.mlflow.api.proto.Service.Metric.Builder, org.mlflow.api.proto.Service.MetricOrBuilder> metricBuilder_;
        /**
         * <pre>
         * Latest reported value of the specified metric.
         * </pre>
         *
         * <code>optional .mlflow.Metric metric = 1;</code>
         */
        public boolean hasMetric() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <pre>
         * Latest reported value of the specified metric.
         * </pre>
         *
         * <code>optional .mlflow.Metric metric = 1;</code>
         */
        public org.mlflow.api.proto.Service.Metric getMetric() {
          if (metricBuilder_ == null) {
            return metric_ == null ? org.mlflow.api.proto.Service.Metric.getDefaultInstance() : metric_;
          } else {
            return metricBuilder_.getMessage();
          }
        }
        /**
         * <pre>
         * Latest reported value of the specified metric.
         * </pre>
         *
         * <code>optional .mlflow.Metric metric = 1;</code>
         */
        public Builder setMetric(org.mlflow.api.proto.Service.Metric value) {
          if (metricBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            metric_ = value;
            onChanged();
          } else {
            metricBuilder_.setMessage(value);
          }
          bitField0_ |= 0x00000001;
          return this;
        }
        /**
         * <pre>
         * Latest reported value of the specified metric.
         * </pre>
         *
         * <code>optional .mlflow.Metric metric = 1;</code>
         */
        public Builder setMetric(
            org.mlflow.api.proto.Service.Metric.Builder builderForValue) {
          if (metricBuilder_ == null) {
            metric_ = builderForValue.build();
            onChanged();
          } else {
            metricBuilder_.setMessage(builderForValue.build());
          }
          bitField0_ |= 0x00000001;
          return this;
        }
        /**
         * <pre>
         * Latest reported value of the specified metric.
         * </pre>
         *
         * <code>optional .mlflow.Metric metric = 1;</code>
         */
        public Builder mergeMetric(org.mlflow.api.proto.Service.Metric value) {
          if (metricBuilder_ == null) {
            if (((bitField0_ & 0x00000001) == 0x00000001) &&
                metric_ != null &&
                metric_ != org.mlflow.api.proto.Service.Metric.getDefaultInstance()) {
              metric_ =
                org.mlflow.api.proto.Service.Metric.newBuilder(metric_).mergeFrom(value).buildPartial();
            } else {
              metric_ = value;
            }
            onChanged();
          } else {
            metricBuilder_.mergeFrom(value);
          }
          bitField0_ |= 0x00000001;
          return this;
        }
        /**
         * <pre>
         * Latest reported value of the specified metric.
         * </pre>
         *
         * <code>optional .mlflow.Metric metric = 1;</code>
         */
        public Builder clearMetric() {
          if (metricBuilder_ == null) {
            metric_ = null;
            onChanged();
          } else {
            metricBuilder_.clear();
          }
          bitField0_ = (bitField0_ & ~0x00000001);
          return this;
        }
        /**
         * <pre>
         * Latest reported value of the specified metric.
         * </pre>
         *
         * <code>optional .mlflow.Metric metric = 1;</code>
         */
        public org.mlflow.api.proto.Service.Metric.Builder getMetricBuilder() {
          bitField0_ |= 0x00000001;
          onChanged();
          return getMetricFieldBuilder().getBuilder();
        }
        /**
         * <pre>
         * Latest reported value of the specified metric.
         * </pre>
         *
         * <code>optional .mlflow.Metric metric = 1;</code>
         */
        public org.mlflow.api.proto.Service.MetricOrBuilder getMetricOrBuilder() {
          if (metricBuilder_ != null) {
            return metricBuilder_.getMessageOrBuilder();
          } else {
            return metric_ == null ?
                org.mlflow.api.proto.Service.Metric.getDefaultInstance() : metric_;
          }
        }
        /**
         * <pre>
         * Latest reported value of the specified metric.
         * </pre>
         *
         * <code>optional .mlflow.Metric metric = 1;</code>
         */
        private com.google.protobuf.SingleFieldBuilderV3<
            org.mlflow.api.proto.Service.Metric, org.mlflow.api.proto.Service.Metric.Builder, org.mlflow.api.proto.Service.MetricOrBuilder> 
            getMetricFieldBuilder() {
          if (metricBuilder_ == null) {
            metricBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
                org.mlflow.api.proto.Service.Metric, org.mlflow.api.proto.Service.Metric.Builder, org.mlflow.api.proto.Service.MetricOrBuilder>(
                    getMetric(),
                    getParentForChildren(),
                    isClean());
            metric_ = null;
          }
          return metricBuilder_;
        }
        @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.GetMetric.Response)
      }

      // @@protoc_insertion_point(class_scope:mlflow.GetMetric.Response)
      private static final org.mlflow.api.proto.Service.GetMetric.Response DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.GetMetric.Response();
      }

      public static org.mlflow.api.proto.Service.GetMetric.Response getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      @java.lang.Deprecated public static final com.google.protobuf.Parser<Response>
          PARSER = new com.google.protobuf.AbstractParser<Response>() {
        @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<Response> parser() {
        return PARSER;
      }

      @java.lang.Override
      public com.google.protobuf.Parser<Response> getParserForType() {
        return PARSER;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.GetMetric.Response getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    private int bitField0_;
    public static final int RUN_UUID_FIELD_NUMBER = 1;
    private volatile java.lang.Object runUuid_;
    /**
     * <pre>
     * ID of the run from which to retrieve the metric value.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    public boolean hasRunUuid() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * ID of the run from which to retrieve the metric value.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    public java.lang.String getRunUuid() {
      java.lang.Object ref = runUuid_;
      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()) {
          runUuid_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * ID of the run from which to retrieve the metric value.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    public com.google.protobuf.ByteString
        getRunUuidBytes() {
      java.lang.Object ref = runUuid_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        runUuid_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int METRIC_KEY_FIELD_NUMBER = 2;
    private volatile java.lang.Object metricKey_;
    /**
     * <pre>
     * Name of the metric.
     * </pre>
     *
     * <code>optional string metric_key = 2 [(.validate_required) = true];</code>
     */
    public boolean hasMetricKey() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     * Name of the metric.
     * </pre>
     *
     * <code>optional string metric_key = 2 [(.validate_required) = true];</code>
     */
    public java.lang.String getMetricKey() {
      java.lang.Object ref = metricKey_;
      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()) {
          metricKey_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Name of the metric.
     * </pre>
     *
     * <code>optional string metric_key = 2 [(.validate_required) = true];</code>
     */
    public com.google.protobuf.ByteString
        getMetricKeyBytes() {
      java.lang.Object ref = metricKey_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        metricKey_ = 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) == 0x00000001)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, runUuid_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, metricKey_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, runUuid_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, metricKey_);
      }
      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.GetMetric)) {
        return super.equals(obj);
      }
      org.mlflow.api.proto.Service.GetMetric other = (org.mlflow.api.proto.Service.GetMetric) obj;

      boolean result = true;
      result = result && (hasRunUuid() == other.hasRunUuid());
      if (hasRunUuid()) {
        result = result && getRunUuid()
            .equals(other.getRunUuid());
      }
      result = result && (hasMetricKey() == other.hasMetricKey());
      if (hasMetricKey()) {
        result = result && getMetricKey()
            .equals(other.getMetricKey());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasRunUuid()) {
        hash = (37 * hash) + RUN_UUID_FIELD_NUMBER;
        hash = (53 * hash) + getRunUuid().hashCode();
      }
      if (hasMetricKey()) {
        hash = (37 * hash) + METRIC_KEY_FIELD_NUMBER;
        hash = (53 * hash) + getMetricKey().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.mlflow.api.proto.Service.GetMetric parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.GetMetric 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.GetMetric parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.GetMetric 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.GetMetric parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.GetMetric 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.GetMetric parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.GetMetric 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.GetMetric parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.GetMetric 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.GetMetric 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.GetMetric 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.GetMetric 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.GetMetric}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:mlflow.GetMetric)
        org.mlflow.api.proto.Service.GetMetricOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_GetMetric_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_GetMetric_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.GetMetric.class, org.mlflow.api.proto.Service.GetMetric.Builder.class);
      }

      // Construct using org.mlflow.api.proto.Service.GetMetric.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();
        runUuid_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        metricKey_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_GetMetric_descriptor;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.GetMetric getDefaultInstanceForType() {
        return org.mlflow.api.proto.Service.GetMetric.getDefaultInstance();
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.GetMetric build() {
        org.mlflow.api.proto.Service.GetMetric result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.GetMetric buildPartial() {
        org.mlflow.api.proto.Service.GetMetric result = new org.mlflow.api.proto.Service.GetMetric(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.runUuid_ = runUuid_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.metricKey_ = metricKey_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.mlflow.api.proto.Service.GetMetric) {
          return mergeFrom((org.mlflow.api.proto.Service.GetMetric)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.mlflow.api.proto.Service.GetMetric other) {
        if (other == org.mlflow.api.proto.Service.GetMetric.getDefaultInstance()) return this;
        if (other.hasRunUuid()) {
          bitField0_ |= 0x00000001;
          runUuid_ = other.runUuid_;
          onChanged();
        }
        if (other.hasMetricKey()) {
          bitField0_ |= 0x00000002;
          metricKey_ = other.metricKey_;
          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.GetMetric parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.mlflow.api.proto.Service.GetMetric) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object runUuid_ = "";
      /**
       * <pre>
       * ID of the run from which to retrieve the metric value.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public boolean hasRunUuid() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * ID of the run from which to retrieve the metric value.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public java.lang.String getRunUuid() {
        java.lang.Object ref = runUuid_;
        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()) {
            runUuid_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * ID of the run from which to retrieve the metric value.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public com.google.protobuf.ByteString
          getRunUuidBytes() {
        java.lang.Object ref = runUuid_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          runUuid_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * ID of the run from which to retrieve the metric value.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public Builder setRunUuid(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        runUuid_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * ID of the run from which to retrieve the metric value.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public Builder clearRunUuid() {
        bitField0_ = (bitField0_ & ~0x00000001);
        runUuid_ = getDefaultInstance().getRunUuid();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * ID of the run from which to retrieve the metric value.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public Builder setRunUuidBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        runUuid_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object metricKey_ = "";
      /**
       * <pre>
       * Name of the metric.
       * </pre>
       *
       * <code>optional string metric_key = 2 [(.validate_required) = true];</code>
       */
      public boolean hasMetricKey() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * Name of the metric.
       * </pre>
       *
       * <code>optional string metric_key = 2 [(.validate_required) = true];</code>
       */
      public java.lang.String getMetricKey() {
        java.lang.Object ref = metricKey_;
        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()) {
            metricKey_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Name of the metric.
       * </pre>
       *
       * <code>optional string metric_key = 2 [(.validate_required) = true];</code>
       */
      public com.google.protobuf.ByteString
          getMetricKeyBytes() {
        java.lang.Object ref = metricKey_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          metricKey_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Name of the metric.
       * </pre>
       *
       * <code>optional string metric_key = 2 [(.validate_required) = true];</code>
       */
      public Builder setMetricKey(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        metricKey_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Name of the metric.
       * </pre>
       *
       * <code>optional string metric_key = 2 [(.validate_required) = true];</code>
       */
      public Builder clearMetricKey() {
        bitField0_ = (bitField0_ & ~0x00000002);
        metricKey_ = getDefaultInstance().getMetricKey();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Name of the metric.
       * </pre>
       *
       * <code>optional string metric_key = 2 [(.validate_required) = true];</code>
       */
      public Builder setMetricKeyBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        metricKey_ = 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.GetMetric)
    }

    // @@protoc_insertion_point(class_scope:mlflow.GetMetric)
    private static final org.mlflow.api.proto.Service.GetMetric DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.GetMetric();
    }

    public static org.mlflow.api.proto.Service.GetMetric getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<GetMetric>
        PARSER = new com.google.protobuf.AbstractParser<GetMetric>() {
      @java.lang.Override
      public GetMetric parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GetMetric(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<GetMetric> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<GetMetric> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public org.mlflow.api.proto.Service.GetMetric getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface GetParamOrBuilder extends
      // @@protoc_insertion_point(interface_extends:mlflow.GetParam)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * ID of the run from which to retrieve the param value.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    boolean hasRunUuid();
    /**
     * <pre>
     * ID of the run from which to retrieve the param value.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    java.lang.String getRunUuid();
    /**
     * <pre>
     * ID of the run from which to retrieve the param value.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    com.google.protobuf.ByteString
        getRunUuidBytes();

    /**
     * <pre>
     * Name of the param.
     * </pre>
     *
     * <code>optional string param_name = 2 [(.validate_required) = true];</code>
     */
    boolean hasParamName();
    /**
     * <pre>
     * Name of the param.
     * </pre>
     *
     * <code>optional string param_name = 2 [(.validate_required) = true];</code>
     */
    java.lang.String getParamName();
    /**
     * <pre>
     * Name of the param.
     * </pre>
     *
     * <code>optional string param_name = 2 [(.validate_required) = true];</code>
     */
    com.google.protobuf.ByteString
        getParamNameBytes();
  }
  /**
   * Protobuf type {@code mlflow.GetParam}
   */
  public  static final class GetParam extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:mlflow.GetParam)
      GetParamOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use GetParam.newBuilder() to construct.
    private GetParam(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private GetParam() {
      runUuid_ = "";
      paramName_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private GetParam(
        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;
              runUuid_ = bs;
              break;
            }
            case 18: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000002;
              paramName_ = 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_GetParam_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.mlflow.api.proto.Service.internal_static_mlflow_GetParam_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.mlflow.api.proto.Service.GetParam.class, org.mlflow.api.proto.Service.GetParam.Builder.class);
    }

    public interface ResponseOrBuilder extends
        // @@protoc_insertion_point(interface_extends:mlflow.GetParam.Response)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <pre>
       * Param key-value pair.
       * </pre>
       *
       * <code>optional .mlflow.Param parameter = 1;</code>
       */
      boolean hasParameter();
      /**
       * <pre>
       * Param key-value pair.
       * </pre>
       *
       * <code>optional .mlflow.Param parameter = 1;</code>
       */
      org.mlflow.api.proto.Service.Param getParameter();
      /**
       * <pre>
       * Param key-value pair.
       * </pre>
       *
       * <code>optional .mlflow.Param parameter = 1;</code>
       */
      org.mlflow.api.proto.Service.ParamOrBuilder getParameterOrBuilder();
    }
    /**
     * Protobuf type {@code mlflow.GetParam.Response}
     */
    public  static final class Response extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:mlflow.GetParam.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
      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.Param.Builder subBuilder = null;
                if (((bitField0_ & 0x00000001) == 0x00000001)) {
                  subBuilder = parameter_.toBuilder();
                }
                parameter_ = input.readMessage(org.mlflow.api.proto.Service.Param.PARSER, extensionRegistry);
                if (subBuilder != null) {
                  subBuilder.mergeFrom(parameter_);
                  parameter_ = 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_GetParam_Response_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_GetParam_Response_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.GetParam.Response.class, org.mlflow.api.proto.Service.GetParam.Response.Builder.class);
      }

      private int bitField0_;
      public static final int PARAMETER_FIELD_NUMBER = 1;
      private org.mlflow.api.proto.Service.Param parameter_;
      /**
       * <pre>
       * Param key-value pair.
       * </pre>
       *
       * <code>optional .mlflow.Param parameter = 1;</code>
       */
      public boolean hasParameter() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * Param key-value pair.
       * </pre>
       *
       * <code>optional .mlflow.Param parameter = 1;</code>
       */
      public org.mlflow.api.proto.Service.Param getParameter() {
        return parameter_ == null ? org.mlflow.api.proto.Service.Param.getDefaultInstance() : parameter_;
      }
      /**
       * <pre>
       * Param key-value pair.
       * </pre>
       *
       * <code>optional .mlflow.Param parameter = 1;</code>
       */
      public org.mlflow.api.proto.Service.ParamOrBuilder getParameterOrBuilder() {
        return parameter_ == null ? org.mlflow.api.proto.Service.Param.getDefaultInstance() : parameter_;
      }

      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) == 0x00000001)) {
          output.writeMessage(1, getParameter());
        }
        unknownFields.writeTo(output);
      }

      @java.lang.Override
      public int getSerializedSize() {
        int size = memoizedSize;
        if (size != -1) return size;

        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(1, getParameter());
        }
        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.GetParam.Response)) {
          return super.equals(obj);
        }
        org.mlflow.api.proto.Service.GetParam.Response other = (org.mlflow.api.proto.Service.GetParam.Response) obj;

        boolean result = true;
        result = result && (hasParameter() == other.hasParameter());
        if (hasParameter()) {
          result = result && getParameter()
              .equals(other.getParameter());
        }
        result = result && unknownFields.equals(other.unknownFields);
        return result;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        if (hasParameter()) {
          hash = (37 * hash) + PARAMETER_FIELD_NUMBER;
          hash = (53 * hash) + getParameter().hashCode();
        }
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static org.mlflow.api.proto.Service.GetParam.Response parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.GetParam.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.GetParam.Response parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.GetParam.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.GetParam.Response parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.GetParam.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.GetParam.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.GetParam.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.GetParam.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.GetParam.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.GetParam.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.GetParam.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.GetParam.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.GetParam.Response}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:mlflow.GetParam.Response)
          org.mlflow.api.proto.Service.GetParam.ResponseOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_GetParam_Response_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_GetParam_Response_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  org.mlflow.api.proto.Service.GetParam.Response.class, org.mlflow.api.proto.Service.GetParam.Response.Builder.class);
        }

        // Construct using org.mlflow.api.proto.Service.GetParam.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) {
            getParameterFieldBuilder();
          }
        }
        @java.lang.Override
        public Builder clear() {
          super.clear();
          if (parameterBuilder_ == null) {
            parameter_ = null;
          } else {
            parameterBuilder_.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_GetParam_Response_descriptor;
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.GetParam.Response getDefaultInstanceForType() {
          return org.mlflow.api.proto.Service.GetParam.Response.getDefaultInstance();
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.GetParam.Response build() {
          org.mlflow.api.proto.Service.GetParam.Response result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.GetParam.Response buildPartial() {
          org.mlflow.api.proto.Service.GetParam.Response result = new org.mlflow.api.proto.Service.GetParam.Response(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          if (parameterBuilder_ == null) {
            result.parameter_ = parameter_;
          } else {
            result.parameter_ = parameterBuilder_.build();
          }
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        @java.lang.Override
        public Builder clone() {
          return (Builder) super.clone();
        }
        @java.lang.Override
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.setField(field, value);
        }
        @java.lang.Override
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }
        @java.lang.Override
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }
        @java.lang.Override
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }
        @java.lang.Override
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }
        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof org.mlflow.api.proto.Service.GetParam.Response) {
            return mergeFrom((org.mlflow.api.proto.Service.GetParam.Response)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(org.mlflow.api.proto.Service.GetParam.Response other) {
          if (other == org.mlflow.api.proto.Service.GetParam.Response.getDefaultInstance()) return this;
          if (other.hasParameter()) {
            mergeParameter(other.getParameter());
          }
          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.GetParam.Response parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (org.mlflow.api.proto.Service.GetParam.Response) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        private org.mlflow.api.proto.Service.Param parameter_ = null;
        private com.google.protobuf.SingleFieldBuilderV3<
            org.mlflow.api.proto.Service.Param, org.mlflow.api.proto.Service.Param.Builder, org.mlflow.api.proto.Service.ParamOrBuilder> parameterBuilder_;
        /**
         * <pre>
         * Param key-value pair.
         * </pre>
         *
         * <code>optional .mlflow.Param parameter = 1;</code>
         */
        public boolean hasParameter() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <pre>
         * Param key-value pair.
         * </pre>
         *
         * <code>optional .mlflow.Param parameter = 1;</code>
         */
        public org.mlflow.api.proto.Service.Param getParameter() {
          if (parameterBuilder_ == null) {
            return parameter_ == null ? org.mlflow.api.proto.Service.Param.getDefaultInstance() : parameter_;
          } else {
            return parameterBuilder_.getMessage();
          }
        }
        /**
         * <pre>
         * Param key-value pair.
         * </pre>
         *
         * <code>optional .mlflow.Param parameter = 1;</code>
         */
        public Builder setParameter(org.mlflow.api.proto.Service.Param value) {
          if (parameterBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            parameter_ = value;
            onChanged();
          } else {
            parameterBuilder_.setMessage(value);
          }
          bitField0_ |= 0x00000001;
          return this;
        }
        /**
         * <pre>
         * Param key-value pair.
         * </pre>
         *
         * <code>optional .mlflow.Param parameter = 1;</code>
         */
        public Builder setParameter(
            org.mlflow.api.proto.Service.Param.Builder builderForValue) {
          if (parameterBuilder_ == null) {
            parameter_ = builderForValue.build();
            onChanged();
          } else {
            parameterBuilder_.setMessage(builderForValue.build());
          }
          bitField0_ |= 0x00000001;
          return this;
        }
        /**
         * <pre>
         * Param key-value pair.
         * </pre>
         *
         * <code>optional .mlflow.Param parameter = 1;</code>
         */
        public Builder mergeParameter(org.mlflow.api.proto.Service.Param value) {
          if (parameterBuilder_ == null) {
            if (((bitField0_ & 0x00000001) == 0x00000001) &&
                parameter_ != null &&
                parameter_ != org.mlflow.api.proto.Service.Param.getDefaultInstance()) {
              parameter_ =
                org.mlflow.api.proto.Service.Param.newBuilder(parameter_).mergeFrom(value).buildPartial();
            } else {
              parameter_ = value;
            }
            onChanged();
          } else {
            parameterBuilder_.mergeFrom(value);
          }
          bitField0_ |= 0x00000001;
          return this;
        }
        /**
         * <pre>
         * Param key-value pair.
         * </pre>
         *
         * <code>optional .mlflow.Param parameter = 1;</code>
         */
        public Builder clearParameter() {
          if (parameterBuilder_ == null) {
            parameter_ = null;
            onChanged();
          } else {
            parameterBuilder_.clear();
          }
          bitField0_ = (bitField0_ & ~0x00000001);
          return this;
        }
        /**
         * <pre>
         * Param key-value pair.
         * </pre>
         *
         * <code>optional .mlflow.Param parameter = 1;</code>
         */
        public org.mlflow.api.proto.Service.Param.Builder getParameterBuilder() {
          bitField0_ |= 0x00000001;
          onChanged();
          return getParameterFieldBuilder().getBuilder();
        }
        /**
         * <pre>
         * Param key-value pair.
         * </pre>
         *
         * <code>optional .mlflow.Param parameter = 1;</code>
         */
        public org.mlflow.api.proto.Service.ParamOrBuilder getParameterOrBuilder() {
          if (parameterBuilder_ != null) {
            return parameterBuilder_.getMessageOrBuilder();
          } else {
            return parameter_ == null ?
                org.mlflow.api.proto.Service.Param.getDefaultInstance() : parameter_;
          }
        }
        /**
         * <pre>
         * Param key-value pair.
         * </pre>
         *
         * <code>optional .mlflow.Param parameter = 1;</code>
         */
        private com.google.protobuf.SingleFieldBuilderV3<
            org.mlflow.api.proto.Service.Param, org.mlflow.api.proto.Service.Param.Builder, org.mlflow.api.proto.Service.ParamOrBuilder> 
            getParameterFieldBuilder() {
          if (parameterBuilder_ == null) {
            parameterBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
                org.mlflow.api.proto.Service.Param, org.mlflow.api.proto.Service.Param.Builder, org.mlflow.api.proto.Service.ParamOrBuilder>(
                    getParameter(),
                    getParentForChildren(),
                    isClean());
            parameter_ = null;
          }
          return parameterBuilder_;
        }
        @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.GetParam.Response)
      }

      // @@protoc_insertion_point(class_scope:mlflow.GetParam.Response)
      private static final org.mlflow.api.proto.Service.GetParam.Response DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.GetParam.Response();
      }

      public static org.mlflow.api.proto.Service.GetParam.Response getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      @java.lang.Deprecated public static final com.google.protobuf.Parser<Response>
          PARSER = new com.google.protobuf.AbstractParser<Response>() {
        @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<Response> parser() {
        return PARSER;
      }

      @java.lang.Override
      public com.google.protobuf.Parser<Response> getParserForType() {
        return PARSER;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.GetParam.Response getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    private int bitField0_;
    public static final int RUN_UUID_FIELD_NUMBER = 1;
    private volatile java.lang.Object runUuid_;
    /**
     * <pre>
     * ID of the run from which to retrieve the param value.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    public boolean hasRunUuid() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * ID of the run from which to retrieve the param value.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    public java.lang.String getRunUuid() {
      java.lang.Object ref = runUuid_;
      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()) {
          runUuid_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * ID of the run from which to retrieve the param value.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    public com.google.protobuf.ByteString
        getRunUuidBytes() {
      java.lang.Object ref = runUuid_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        runUuid_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int PARAM_NAME_FIELD_NUMBER = 2;
    private volatile java.lang.Object paramName_;
    /**
     * <pre>
     * Name of the param.
     * </pre>
     *
     * <code>optional string param_name = 2 [(.validate_required) = true];</code>
     */
    public boolean hasParamName() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     * Name of the param.
     * </pre>
     *
     * <code>optional string param_name = 2 [(.validate_required) = true];</code>
     */
    public java.lang.String getParamName() {
      java.lang.Object ref = paramName_;
      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()) {
          paramName_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Name of the param.
     * </pre>
     *
     * <code>optional string param_name = 2 [(.validate_required) = true];</code>
     */
    public com.google.protobuf.ByteString
        getParamNameBytes() {
      java.lang.Object ref = paramName_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        paramName_ = 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) == 0x00000001)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, runUuid_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, paramName_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, runUuid_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, paramName_);
      }
      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.GetParam)) {
        return super.equals(obj);
      }
      org.mlflow.api.proto.Service.GetParam other = (org.mlflow.api.proto.Service.GetParam) obj;

      boolean result = true;
      result = result && (hasRunUuid() == other.hasRunUuid());
      if (hasRunUuid()) {
        result = result && getRunUuid()
            .equals(other.getRunUuid());
      }
      result = result && (hasParamName() == other.hasParamName());
      if (hasParamName()) {
        result = result && getParamName()
            .equals(other.getParamName());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasRunUuid()) {
        hash = (37 * hash) + RUN_UUID_FIELD_NUMBER;
        hash = (53 * hash) + getRunUuid().hashCode();
      }
      if (hasParamName()) {
        hash = (37 * hash) + PARAM_NAME_FIELD_NUMBER;
        hash = (53 * hash) + getParamName().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.mlflow.api.proto.Service.GetParam parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.GetParam 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.GetParam parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.GetParam 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.GetParam parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.GetParam 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.GetParam parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.GetParam 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.GetParam parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.GetParam 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.GetParam 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.GetParam 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.GetParam 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.GetParam}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:mlflow.GetParam)
        org.mlflow.api.proto.Service.GetParamOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_GetParam_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_GetParam_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.GetParam.class, org.mlflow.api.proto.Service.GetParam.Builder.class);
      }

      // Construct using org.mlflow.api.proto.Service.GetParam.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();
        runUuid_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        paramName_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_GetParam_descriptor;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.GetParam getDefaultInstanceForType() {
        return org.mlflow.api.proto.Service.GetParam.getDefaultInstance();
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.GetParam build() {
        org.mlflow.api.proto.Service.GetParam result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.GetParam buildPartial() {
        org.mlflow.api.proto.Service.GetParam result = new org.mlflow.api.proto.Service.GetParam(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.runUuid_ = runUuid_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.paramName_ = paramName_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.mlflow.api.proto.Service.GetParam) {
          return mergeFrom((org.mlflow.api.proto.Service.GetParam)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.mlflow.api.proto.Service.GetParam other) {
        if (other == org.mlflow.api.proto.Service.GetParam.getDefaultInstance()) return this;
        if (other.hasRunUuid()) {
          bitField0_ |= 0x00000001;
          runUuid_ = other.runUuid_;
          onChanged();
        }
        if (other.hasParamName()) {
          bitField0_ |= 0x00000002;
          paramName_ = other.paramName_;
          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.GetParam parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.mlflow.api.proto.Service.GetParam) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object runUuid_ = "";
      /**
       * <pre>
       * ID of the run from which to retrieve the param value.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public boolean hasRunUuid() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * ID of the run from which to retrieve the param value.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public java.lang.String getRunUuid() {
        java.lang.Object ref = runUuid_;
        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()) {
            runUuid_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * ID of the run from which to retrieve the param value.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public com.google.protobuf.ByteString
          getRunUuidBytes() {
        java.lang.Object ref = runUuid_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          runUuid_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * ID of the run from which to retrieve the param value.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public Builder setRunUuid(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        runUuid_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * ID of the run from which to retrieve the param value.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public Builder clearRunUuid() {
        bitField0_ = (bitField0_ & ~0x00000001);
        runUuid_ = getDefaultInstance().getRunUuid();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * ID of the run from which to retrieve the param value.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public Builder setRunUuidBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        runUuid_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object paramName_ = "";
      /**
       * <pre>
       * Name of the param.
       * </pre>
       *
       * <code>optional string param_name = 2 [(.validate_required) = true];</code>
       */
      public boolean hasParamName() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * Name of the param.
       * </pre>
       *
       * <code>optional string param_name = 2 [(.validate_required) = true];</code>
       */
      public java.lang.String getParamName() {
        java.lang.Object ref = paramName_;
        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()) {
            paramName_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Name of the param.
       * </pre>
       *
       * <code>optional string param_name = 2 [(.validate_required) = true];</code>
       */
      public com.google.protobuf.ByteString
          getParamNameBytes() {
        java.lang.Object ref = paramName_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          paramName_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Name of the param.
       * </pre>
       *
       * <code>optional string param_name = 2 [(.validate_required) = true];</code>
       */
      public Builder setParamName(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        paramName_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Name of the param.
       * </pre>
       *
       * <code>optional string param_name = 2 [(.validate_required) = true];</code>
       */
      public Builder clearParamName() {
        bitField0_ = (bitField0_ & ~0x00000002);
        paramName_ = getDefaultInstance().getParamName();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Name of the param.
       * </pre>
       *
       * <code>optional string param_name = 2 [(.validate_required) = true];</code>
       */
      public Builder setParamNameBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        paramName_ = 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.GetParam)
    }

    // @@protoc_insertion_point(class_scope:mlflow.GetParam)
    private static final org.mlflow.api.proto.Service.GetParam DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.GetParam();
    }

    public static org.mlflow.api.proto.Service.GetParam getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<GetParam>
        PARSER = new com.google.protobuf.AbstractParser<GetParam>() {
      @java.lang.Override
      public GetParam parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GetParam(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<GetParam> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<GetParam> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public org.mlflow.api.proto.Service.GetParam getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface SearchExpressionOrBuilder extends
      // @@protoc_insertion_point(interface_extends:mlflow.SearchExpression)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * A metric search expression.
     * </pre>
     *
     * <code>optional .mlflow.MetricSearchExpression metric = 1;</code>
     */
    boolean hasMetric();
    /**
     * <pre>
     * A metric search expression.
     * </pre>
     *
     * <code>optional .mlflow.MetricSearchExpression metric = 1;</code>
     */
    org.mlflow.api.proto.Service.MetricSearchExpression getMetric();
    /**
     * <pre>
     * A metric search expression.
     * </pre>
     *
     * <code>optional .mlflow.MetricSearchExpression metric = 1;</code>
     */
    org.mlflow.api.proto.Service.MetricSearchExpressionOrBuilder getMetricOrBuilder();

    /**
     * <pre>
     * A parameter search expression.
     * </pre>
     *
     * <code>optional .mlflow.ParameterSearchExpression parameter = 2;</code>
     */
    boolean hasParameter();
    /**
     * <pre>
     * A parameter search expression.
     * </pre>
     *
     * <code>optional .mlflow.ParameterSearchExpression parameter = 2;</code>
     */
    org.mlflow.api.proto.Service.ParameterSearchExpression getParameter();
    /**
     * <pre>
     * A parameter search expression.
     * </pre>
     *
     * <code>optional .mlflow.ParameterSearchExpression parameter = 2;</code>
     */
    org.mlflow.api.proto.Service.ParameterSearchExpressionOrBuilder getParameterOrBuilder();

    public org.mlflow.api.proto.Service.SearchExpression.ExpressionCase getExpressionCase();
  }
  /**
   * Protobuf type {@code mlflow.SearchExpression}
   */
  public  static final class SearchExpression extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:mlflow.SearchExpression)
      SearchExpressionOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use SearchExpression.newBuilder() to construct.
    private SearchExpression(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private SearchExpression() {
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private SearchExpression(
        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.MetricSearchExpression.Builder subBuilder = null;
              if (expressionCase_ == 1) {
                subBuilder = ((org.mlflow.api.proto.Service.MetricSearchExpression) expression_).toBuilder();
              }
              expression_ =
                  input.readMessage(org.mlflow.api.proto.Service.MetricSearchExpression.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom((org.mlflow.api.proto.Service.MetricSearchExpression) expression_);
                expression_ = subBuilder.buildPartial();
              }
              expressionCase_ = 1;
              break;
            }
            case 18: {
              org.mlflow.api.proto.Service.ParameterSearchExpression.Builder subBuilder = null;
              if (expressionCase_ == 2) {
                subBuilder = ((org.mlflow.api.proto.Service.ParameterSearchExpression) expression_).toBuilder();
              }
              expression_ =
                  input.readMessage(org.mlflow.api.proto.Service.ParameterSearchExpression.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom((org.mlflow.api.proto.Service.ParameterSearchExpression) expression_);
                expression_ = subBuilder.buildPartial();
              }
              expressionCase_ = 2;
              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_SearchExpression_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.mlflow.api.proto.Service.internal_static_mlflow_SearchExpression_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.mlflow.api.proto.Service.SearchExpression.class, org.mlflow.api.proto.Service.SearchExpression.Builder.class);
    }

    private int bitField0_;
    private int expressionCase_ = 0;
    private java.lang.Object expression_;
    public enum ExpressionCase
        implements com.google.protobuf.Internal.EnumLite {
      METRIC(1),
      PARAMETER(2),
      EXPRESSION_NOT_SET(0);
      private final int value;
      private ExpressionCase(int value) {
        this.value = value;
      }
      /**
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static ExpressionCase valueOf(int value) {
        return forNumber(value);
      }

      public static ExpressionCase forNumber(int value) {
        switch (value) {
          case 1: return METRIC;
          case 2: return PARAMETER;
          case 0: return EXPRESSION_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };

    public ExpressionCase
    getExpressionCase() {
      return ExpressionCase.forNumber(
          expressionCase_);
    }

    public static final int METRIC_FIELD_NUMBER = 1;
    /**
     * <pre>
     * A metric search expression.
     * </pre>
     *
     * <code>optional .mlflow.MetricSearchExpression metric = 1;</code>
     */
    public boolean hasMetric() {
      return expressionCase_ == 1;
    }
    /**
     * <pre>
     * A metric search expression.
     * </pre>
     *
     * <code>optional .mlflow.MetricSearchExpression metric = 1;</code>
     */
    public org.mlflow.api.proto.Service.MetricSearchExpression getMetric() {
      if (expressionCase_ == 1) {
         return (org.mlflow.api.proto.Service.MetricSearchExpression) expression_;
      }
      return org.mlflow.api.proto.Service.MetricSearchExpression.getDefaultInstance();
    }
    /**
     * <pre>
     * A metric search expression.
     * </pre>
     *
     * <code>optional .mlflow.MetricSearchExpression metric = 1;</code>
     */
    public org.mlflow.api.proto.Service.MetricSearchExpressionOrBuilder getMetricOrBuilder() {
      if (expressionCase_ == 1) {
         return (org.mlflow.api.proto.Service.MetricSearchExpression) expression_;
      }
      return org.mlflow.api.proto.Service.MetricSearchExpression.getDefaultInstance();
    }

    public static final int PARAMETER_FIELD_NUMBER = 2;
    /**
     * <pre>
     * A parameter search expression.
     * </pre>
     *
     * <code>optional .mlflow.ParameterSearchExpression parameter = 2;</code>
     */
    public boolean hasParameter() {
      return expressionCase_ == 2;
    }
    /**
     * <pre>
     * A parameter search expression.
     * </pre>
     *
     * <code>optional .mlflow.ParameterSearchExpression parameter = 2;</code>
     */
    public org.mlflow.api.proto.Service.ParameterSearchExpression getParameter() {
      if (expressionCase_ == 2) {
         return (org.mlflow.api.proto.Service.ParameterSearchExpression) expression_;
      }
      return org.mlflow.api.proto.Service.ParameterSearchExpression.getDefaultInstance();
    }
    /**
     * <pre>
     * A parameter search expression.
     * </pre>
     *
     * <code>optional .mlflow.ParameterSearchExpression parameter = 2;</code>
     */
    public org.mlflow.api.proto.Service.ParameterSearchExpressionOrBuilder getParameterOrBuilder() {
      if (expressionCase_ == 2) {
         return (org.mlflow.api.proto.Service.ParameterSearchExpression) expression_;
      }
      return org.mlflow.api.proto.Service.ParameterSearchExpression.getDefaultInstance();
    }

    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 (expressionCase_ == 1) {
        output.writeMessage(1, (org.mlflow.api.proto.Service.MetricSearchExpression) expression_);
      }
      if (expressionCase_ == 2) {
        output.writeMessage(2, (org.mlflow.api.proto.Service.ParameterSearchExpression) expression_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (expressionCase_ == 1) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(1, (org.mlflow.api.proto.Service.MetricSearchExpression) expression_);
      }
      if (expressionCase_ == 2) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, (org.mlflow.api.proto.Service.ParameterSearchExpression) expression_);
      }
      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.SearchExpression)) {
        return super.equals(obj);
      }
      org.mlflow.api.proto.Service.SearchExpression other = (org.mlflow.api.proto.Service.SearchExpression) obj;

      boolean result = true;
      result = result && getExpressionCase().equals(
          other.getExpressionCase());
      if (!result) return false;
      switch (expressionCase_) {
        case 1:
          result = result && getMetric()
              .equals(other.getMetric());
          break;
        case 2:
          result = result && getParameter()
              .equals(other.getParameter());
          break;
        case 0:
        default:
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      switch (expressionCase_) {
        case 1:
          hash = (37 * hash) + METRIC_FIELD_NUMBER;
          hash = (53 * hash) + getMetric().hashCode();
          break;
        case 2:
          hash = (37 * hash) + PARAMETER_FIELD_NUMBER;
          hash = (53 * hash) + getParameter().hashCode();
          break;
        case 0:
        default:
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.mlflow.api.proto.Service.SearchExpression parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.SearchExpression 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.SearchExpression parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.SearchExpression 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.SearchExpression parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.SearchExpression 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.SearchExpression parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.SearchExpression 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.SearchExpression parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.SearchExpression 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.SearchExpression 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.SearchExpression 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.SearchExpression 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.SearchExpression}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:mlflow.SearchExpression)
        org.mlflow.api.proto.Service.SearchExpressionOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_SearchExpression_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_SearchExpression_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.SearchExpression.class, org.mlflow.api.proto.Service.SearchExpression.Builder.class);
      }

      // Construct using org.mlflow.api.proto.Service.SearchExpression.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();
        expressionCase_ = 0;
        expression_ = null;
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_SearchExpression_descriptor;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.SearchExpression getDefaultInstanceForType() {
        return org.mlflow.api.proto.Service.SearchExpression.getDefaultInstance();
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.SearchExpression build() {
        org.mlflow.api.proto.Service.SearchExpression result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.SearchExpression buildPartial() {
        org.mlflow.api.proto.Service.SearchExpression result = new org.mlflow.api.proto.Service.SearchExpression(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (expressionCase_ == 1) {
          if (metricBuilder_ == null) {
            result.expression_ = expression_;
          } else {
            result.expression_ = metricBuilder_.build();
          }
        }
        if (expressionCase_ == 2) {
          if (parameterBuilder_ == null) {
            result.expression_ = expression_;
          } else {
            result.expression_ = parameterBuilder_.build();
          }
        }
        result.bitField0_ = to_bitField0_;
        result.expressionCase_ = expressionCase_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.mlflow.api.proto.Service.SearchExpression) {
          return mergeFrom((org.mlflow.api.proto.Service.SearchExpression)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.mlflow.api.proto.Service.SearchExpression other) {
        if (other == org.mlflow.api.proto.Service.SearchExpression.getDefaultInstance()) return this;
        switch (other.getExpressionCase()) {
          case METRIC: {
            mergeMetric(other.getMetric());
            break;
          }
          case PARAMETER: {
            mergeParameter(other.getParameter());
            break;
          }
          case EXPRESSION_NOT_SET: {
            break;
          }
        }
        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.SearchExpression parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.mlflow.api.proto.Service.SearchExpression) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int expressionCase_ = 0;
      private java.lang.Object expression_;
      public ExpressionCase
          getExpressionCase() {
        return ExpressionCase.forNumber(
            expressionCase_);
      }

      public Builder clearExpression() {
        expressionCase_ = 0;
        expression_ = null;
        onChanged();
        return this;
      }

      private int bitField0_;

      private com.google.protobuf.SingleFieldBuilderV3<
          org.mlflow.api.proto.Service.MetricSearchExpression, org.mlflow.api.proto.Service.MetricSearchExpression.Builder, org.mlflow.api.proto.Service.MetricSearchExpressionOrBuilder> metricBuilder_;
      /**
       * <pre>
       * A metric search expression.
       * </pre>
       *
       * <code>optional .mlflow.MetricSearchExpression metric = 1;</code>
       */
      public boolean hasMetric() {
        return expressionCase_ == 1;
      }
      /**
       * <pre>
       * A metric search expression.
       * </pre>
       *
       * <code>optional .mlflow.MetricSearchExpression metric = 1;</code>
       */
      public org.mlflow.api.proto.Service.MetricSearchExpression getMetric() {
        if (metricBuilder_ == null) {
          if (expressionCase_ == 1) {
            return (org.mlflow.api.proto.Service.MetricSearchExpression) expression_;
          }
          return org.mlflow.api.proto.Service.MetricSearchExpression.getDefaultInstance();
        } else {
          if (expressionCase_ == 1) {
            return metricBuilder_.getMessage();
          }
          return org.mlflow.api.proto.Service.MetricSearchExpression.getDefaultInstance();
        }
      }
      /**
       * <pre>
       * A metric search expression.
       * </pre>
       *
       * <code>optional .mlflow.MetricSearchExpression metric = 1;</code>
       */
      public Builder setMetric(org.mlflow.api.proto.Service.MetricSearchExpression value) {
        if (metricBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          expression_ = value;
          onChanged();
        } else {
          metricBuilder_.setMessage(value);
        }
        expressionCase_ = 1;
        return this;
      }
      /**
       * <pre>
       * A metric search expression.
       * </pre>
       *
       * <code>optional .mlflow.MetricSearchExpression metric = 1;</code>
       */
      public Builder setMetric(
          org.mlflow.api.proto.Service.MetricSearchExpression.Builder builderForValue) {
        if (metricBuilder_ == null) {
          expression_ = builderForValue.build();
          onChanged();
        } else {
          metricBuilder_.setMessage(builderForValue.build());
        }
        expressionCase_ = 1;
        return this;
      }
      /**
       * <pre>
       * A metric search expression.
       * </pre>
       *
       * <code>optional .mlflow.MetricSearchExpression metric = 1;</code>
       */
      public Builder mergeMetric(org.mlflow.api.proto.Service.MetricSearchExpression value) {
        if (metricBuilder_ == null) {
          if (expressionCase_ == 1 &&
              expression_ != org.mlflow.api.proto.Service.MetricSearchExpression.getDefaultInstance()) {
            expression_ = org.mlflow.api.proto.Service.MetricSearchExpression.newBuilder((org.mlflow.api.proto.Service.MetricSearchExpression) expression_)
                .mergeFrom(value).buildPartial();
          } else {
            expression_ = value;
          }
          onChanged();
        } else {
          if (expressionCase_ == 1) {
            metricBuilder_.mergeFrom(value);
          }
          metricBuilder_.setMessage(value);
        }
        expressionCase_ = 1;
        return this;
      }
      /**
       * <pre>
       * A metric search expression.
       * </pre>
       *
       * <code>optional .mlflow.MetricSearchExpression metric = 1;</code>
       */
      public Builder clearMetric() {
        if (metricBuilder_ == null) {
          if (expressionCase_ == 1) {
            expressionCase_ = 0;
            expression_ = null;
            onChanged();
          }
        } else {
          if (expressionCase_ == 1) {
            expressionCase_ = 0;
            expression_ = null;
          }
          metricBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * A metric search expression.
       * </pre>
       *
       * <code>optional .mlflow.MetricSearchExpression metric = 1;</code>
       */
      public org.mlflow.api.proto.Service.MetricSearchExpression.Builder getMetricBuilder() {
        return getMetricFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * A metric search expression.
       * </pre>
       *
       * <code>optional .mlflow.MetricSearchExpression metric = 1;</code>
       */
      public org.mlflow.api.proto.Service.MetricSearchExpressionOrBuilder getMetricOrBuilder() {
        if ((expressionCase_ == 1) && (metricBuilder_ != null)) {
          return metricBuilder_.getMessageOrBuilder();
        } else {
          if (expressionCase_ == 1) {
            return (org.mlflow.api.proto.Service.MetricSearchExpression) expression_;
          }
          return org.mlflow.api.proto.Service.MetricSearchExpression.getDefaultInstance();
        }
      }
      /**
       * <pre>
       * A metric search expression.
       * </pre>
       *
       * <code>optional .mlflow.MetricSearchExpression metric = 1;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          org.mlflow.api.proto.Service.MetricSearchExpression, org.mlflow.api.proto.Service.MetricSearchExpression.Builder, org.mlflow.api.proto.Service.MetricSearchExpressionOrBuilder> 
          getMetricFieldBuilder() {
        if (metricBuilder_ == null) {
          if (!(expressionCase_ == 1)) {
            expression_ = org.mlflow.api.proto.Service.MetricSearchExpression.getDefaultInstance();
          }
          metricBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              org.mlflow.api.proto.Service.MetricSearchExpression, org.mlflow.api.proto.Service.MetricSearchExpression.Builder, org.mlflow.api.proto.Service.MetricSearchExpressionOrBuilder>(
                  (org.mlflow.api.proto.Service.MetricSearchExpression) expression_,
                  getParentForChildren(),
                  isClean());
          expression_ = null;
        }
        expressionCase_ = 1;
        onChanged();;
        return metricBuilder_;
      }

      private com.google.protobuf.SingleFieldBuilderV3<
          org.mlflow.api.proto.Service.ParameterSearchExpression, org.mlflow.api.proto.Service.ParameterSearchExpression.Builder, org.mlflow.api.proto.Service.ParameterSearchExpressionOrBuilder> parameterBuilder_;
      /**
       * <pre>
       * A parameter search expression.
       * </pre>
       *
       * <code>optional .mlflow.ParameterSearchExpression parameter = 2;</code>
       */
      public boolean hasParameter() {
        return expressionCase_ == 2;
      }
      /**
       * <pre>
       * A parameter search expression.
       * </pre>
       *
       * <code>optional .mlflow.ParameterSearchExpression parameter = 2;</code>
       */
      public org.mlflow.api.proto.Service.ParameterSearchExpression getParameter() {
        if (parameterBuilder_ == null) {
          if (expressionCase_ == 2) {
            return (org.mlflow.api.proto.Service.ParameterSearchExpression) expression_;
          }
          return org.mlflow.api.proto.Service.ParameterSearchExpression.getDefaultInstance();
        } else {
          if (expressionCase_ == 2) {
            return parameterBuilder_.getMessage();
          }
          return org.mlflow.api.proto.Service.ParameterSearchExpression.getDefaultInstance();
        }
      }
      /**
       * <pre>
       * A parameter search expression.
       * </pre>
       *
       * <code>optional .mlflow.ParameterSearchExpression parameter = 2;</code>
       */
      public Builder setParameter(org.mlflow.api.proto.Service.ParameterSearchExpression value) {
        if (parameterBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          expression_ = value;
          onChanged();
        } else {
          parameterBuilder_.setMessage(value);
        }
        expressionCase_ = 2;
        return this;
      }
      /**
       * <pre>
       * A parameter search expression.
       * </pre>
       *
       * <code>optional .mlflow.ParameterSearchExpression parameter = 2;</code>
       */
      public Builder setParameter(
          org.mlflow.api.proto.Service.ParameterSearchExpression.Builder builderForValue) {
        if (parameterBuilder_ == null) {
          expression_ = builderForValue.build();
          onChanged();
        } else {
          parameterBuilder_.setMessage(builderForValue.build());
        }
        expressionCase_ = 2;
        return this;
      }
      /**
       * <pre>
       * A parameter search expression.
       * </pre>
       *
       * <code>optional .mlflow.ParameterSearchExpression parameter = 2;</code>
       */
      public Builder mergeParameter(org.mlflow.api.proto.Service.ParameterSearchExpression value) {
        if (parameterBuilder_ == null) {
          if (expressionCase_ == 2 &&
              expression_ != org.mlflow.api.proto.Service.ParameterSearchExpression.getDefaultInstance()) {
            expression_ = org.mlflow.api.proto.Service.ParameterSearchExpression.newBuilder((org.mlflow.api.proto.Service.ParameterSearchExpression) expression_)
                .mergeFrom(value).buildPartial();
          } else {
            expression_ = value;
          }
          onChanged();
        } else {
          if (expressionCase_ == 2) {
            parameterBuilder_.mergeFrom(value);
          }
          parameterBuilder_.setMessage(value);
        }
        expressionCase_ = 2;
        return this;
      }
      /**
       * <pre>
       * A parameter search expression.
       * </pre>
       *
       * <code>optional .mlflow.ParameterSearchExpression parameter = 2;</code>
       */
      public Builder clearParameter() {
        if (parameterBuilder_ == null) {
          if (expressionCase_ == 2) {
            expressionCase_ = 0;
            expression_ = null;
            onChanged();
          }
        } else {
          if (expressionCase_ == 2) {
            expressionCase_ = 0;
            expression_ = null;
          }
          parameterBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * A parameter search expression.
       * </pre>
       *
       * <code>optional .mlflow.ParameterSearchExpression parameter = 2;</code>
       */
      public org.mlflow.api.proto.Service.ParameterSearchExpression.Builder getParameterBuilder() {
        return getParameterFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * A parameter search expression.
       * </pre>
       *
       * <code>optional .mlflow.ParameterSearchExpression parameter = 2;</code>
       */
      public org.mlflow.api.proto.Service.ParameterSearchExpressionOrBuilder getParameterOrBuilder() {
        if ((expressionCase_ == 2) && (parameterBuilder_ != null)) {
          return parameterBuilder_.getMessageOrBuilder();
        } else {
          if (expressionCase_ == 2) {
            return (org.mlflow.api.proto.Service.ParameterSearchExpression) expression_;
          }
          return org.mlflow.api.proto.Service.ParameterSearchExpression.getDefaultInstance();
        }
      }
      /**
       * <pre>
       * A parameter search expression.
       * </pre>
       *
       * <code>optional .mlflow.ParameterSearchExpression parameter = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          org.mlflow.api.proto.Service.ParameterSearchExpression, org.mlflow.api.proto.Service.ParameterSearchExpression.Builder, org.mlflow.api.proto.Service.ParameterSearchExpressionOrBuilder> 
          getParameterFieldBuilder() {
        if (parameterBuilder_ == null) {
          if (!(expressionCase_ == 2)) {
            expression_ = org.mlflow.api.proto.Service.ParameterSearchExpression.getDefaultInstance();
          }
          parameterBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              org.mlflow.api.proto.Service.ParameterSearchExpression, org.mlflow.api.proto.Service.ParameterSearchExpression.Builder, org.mlflow.api.proto.Service.ParameterSearchExpressionOrBuilder>(
                  (org.mlflow.api.proto.Service.ParameterSearchExpression) expression_,
                  getParentForChildren(),
                  isClean());
          expression_ = null;
        }
        expressionCase_ = 2;
        onChanged();;
        return parameterBuilder_;
      }
      @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.SearchExpression)
    }

    // @@protoc_insertion_point(class_scope:mlflow.SearchExpression)
    private static final org.mlflow.api.proto.Service.SearchExpression DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.SearchExpression();
    }

    public static org.mlflow.api.proto.Service.SearchExpression getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<SearchExpression>
        PARSER = new com.google.protobuf.AbstractParser<SearchExpression>() {
      @java.lang.Override
      public SearchExpression parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new SearchExpression(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<SearchExpression> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<SearchExpression> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public org.mlflow.api.proto.Service.SearchExpression getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface MetricSearchExpressionOrBuilder extends
      // @@protoc_insertion_point(interface_extends:mlflow.MetricSearchExpression)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * :ref:`mlflowMetric` key for search.
     * </pre>
     *
     * <code>optional string key = 1;</code>
     */
    boolean hasKey();
    /**
     * <pre>
     * :ref:`mlflowMetric` key for search.
     * </pre>
     *
     * <code>optional string key = 1;</code>
     */
    java.lang.String getKey();
    /**
     * <pre>
     * :ref:`mlflowMetric` key for search.
     * </pre>
     *
     * <code>optional string key = 1;</code>
     */
    com.google.protobuf.ByteString
        getKeyBytes();

    /**
     * <pre>
     * [Deprecated in 0.7.0, to be removed in future version] 
     * Float clause for comparison. Use 'double' instead.
     * </pre>
     *
     * <code>optional .mlflow.FloatClause float = 2;</code>
     */
    boolean hasFloat();
    /**
     * <pre>
     * [Deprecated in 0.7.0, to be removed in future version] 
     * Float clause for comparison. Use 'double' instead.
     * </pre>
     *
     * <code>optional .mlflow.FloatClause float = 2;</code>
     */
    org.mlflow.api.proto.Service.FloatClause getFloat();
    /**
     * <pre>
     * [Deprecated in 0.7.0, to be removed in future version] 
     * Float clause for comparison. Use 'double' instead.
     * </pre>
     *
     * <code>optional .mlflow.FloatClause float = 2;</code>
     */
    org.mlflow.api.proto.Service.FloatClauseOrBuilder getFloatOrBuilder();

    /**
     * <pre>
     * Double clause of comparison
     * </pre>
     *
     * <code>optional .mlflow.DoubleClause double = 3;</code>
     */
    boolean hasDouble();
    /**
     * <pre>
     * Double clause of comparison
     * </pre>
     *
     * <code>optional .mlflow.DoubleClause double = 3;</code>
     */
    org.mlflow.api.proto.Service.DoubleClause getDouble();
    /**
     * <pre>
     * Double clause of comparison
     * </pre>
     *
     * <code>optional .mlflow.DoubleClause double = 3;</code>
     */
    org.mlflow.api.proto.Service.DoubleClauseOrBuilder getDoubleOrBuilder();

    public org.mlflow.api.proto.Service.MetricSearchExpression.ClauseCase getClauseCase();
  }
  /**
   * Protobuf type {@code mlflow.MetricSearchExpression}
   */
  public  static final class MetricSearchExpression extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:mlflow.MetricSearchExpression)
      MetricSearchExpressionOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use MetricSearchExpression.newBuilder() to construct.
    private MetricSearchExpression(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private MetricSearchExpression() {
      key_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private MetricSearchExpression(
        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;
              key_ = bs;
              break;
            }
            case 18: {
              org.mlflow.api.proto.Service.FloatClause.Builder subBuilder = null;
              if (clauseCase_ == 2) {
                subBuilder = ((org.mlflow.api.proto.Service.FloatClause) clause_).toBuilder();
              }
              clause_ =
                  input.readMessage(org.mlflow.api.proto.Service.FloatClause.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom((org.mlflow.api.proto.Service.FloatClause) clause_);
                clause_ = subBuilder.buildPartial();
              }
              clauseCase_ = 2;
              break;
            }
            case 26: {
              org.mlflow.api.proto.Service.DoubleClause.Builder subBuilder = null;
              if (clauseCase_ == 3) {
                subBuilder = ((org.mlflow.api.proto.Service.DoubleClause) clause_).toBuilder();
              }
              clause_ =
                  input.readMessage(org.mlflow.api.proto.Service.DoubleClause.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom((org.mlflow.api.proto.Service.DoubleClause) clause_);
                clause_ = subBuilder.buildPartial();
              }
              clauseCase_ = 3;
              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_MetricSearchExpression_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.mlflow.api.proto.Service.internal_static_mlflow_MetricSearchExpression_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.mlflow.api.proto.Service.MetricSearchExpression.class, org.mlflow.api.proto.Service.MetricSearchExpression.Builder.class);
    }

    private int bitField0_;
    private int clauseCase_ = 0;
    private java.lang.Object clause_;
    public enum ClauseCase
        implements com.google.protobuf.Internal.EnumLite {
      FLOAT(2),
      DOUBLE(3),
      CLAUSE_NOT_SET(0);
      private final int value;
      private ClauseCase(int value) {
        this.value = value;
      }
      /**
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static ClauseCase valueOf(int value) {
        return forNumber(value);
      }

      public static ClauseCase forNumber(int value) {
        switch (value) {
          case 2: return FLOAT;
          case 3: return DOUBLE;
          case 0: return CLAUSE_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };

    public ClauseCase
    getClauseCase() {
      return ClauseCase.forNumber(
          clauseCase_);
    }

    public static final int KEY_FIELD_NUMBER = 1;
    private volatile java.lang.Object key_;
    /**
     * <pre>
     * :ref:`mlflowMetric` key for search.
     * </pre>
     *
     * <code>optional string key = 1;</code>
     */
    public boolean hasKey() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * :ref:`mlflowMetric` key for search.
     * </pre>
     *
     * <code>optional string key = 1;</code>
     */
    public java.lang.String getKey() {
      java.lang.Object ref = key_;
      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()) {
          key_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * :ref:`mlflowMetric` key for search.
     * </pre>
     *
     * <code>optional string key = 1;</code>
     */
    public com.google.protobuf.ByteString
        getKeyBytes() {
      java.lang.Object ref = key_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        key_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int FLOAT_FIELD_NUMBER = 2;
    /**
     * <pre>
     * [Deprecated in 0.7.0, to be removed in future version] 
     * Float clause for comparison. Use 'double' instead.
     * </pre>
     *
     * <code>optional .mlflow.FloatClause float = 2;</code>
     */
    public boolean hasFloat() {
      return clauseCase_ == 2;
    }
    /**
     * <pre>
     * [Deprecated in 0.7.0, to be removed in future version] 
     * Float clause for comparison. Use 'double' instead.
     * </pre>
     *
     * <code>optional .mlflow.FloatClause float = 2;</code>
     */
    public org.mlflow.api.proto.Service.FloatClause getFloat() {
      if (clauseCase_ == 2) {
         return (org.mlflow.api.proto.Service.FloatClause) clause_;
      }
      return org.mlflow.api.proto.Service.FloatClause.getDefaultInstance();
    }
    /**
     * <pre>
     * [Deprecated in 0.7.0, to be removed in future version] 
     * Float clause for comparison. Use 'double' instead.
     * </pre>
     *
     * <code>optional .mlflow.FloatClause float = 2;</code>
     */
    public org.mlflow.api.proto.Service.FloatClauseOrBuilder getFloatOrBuilder() {
      if (clauseCase_ == 2) {
         return (org.mlflow.api.proto.Service.FloatClause) clause_;
      }
      return org.mlflow.api.proto.Service.FloatClause.getDefaultInstance();
    }

    public static final int DOUBLE_FIELD_NUMBER = 3;
    /**
     * <pre>
     * Double clause of comparison
     * </pre>
     *
     * <code>optional .mlflow.DoubleClause double = 3;</code>
     */
    public boolean hasDouble() {
      return clauseCase_ == 3;
    }
    /**
     * <pre>
     * Double clause of comparison
     * </pre>
     *
     * <code>optional .mlflow.DoubleClause double = 3;</code>
     */
    public org.mlflow.api.proto.Service.DoubleClause getDouble() {
      if (clauseCase_ == 3) {
         return (org.mlflow.api.proto.Service.DoubleClause) clause_;
      }
      return org.mlflow.api.proto.Service.DoubleClause.getDefaultInstance();
    }
    /**
     * <pre>
     * Double clause of comparison
     * </pre>
     *
     * <code>optional .mlflow.DoubleClause double = 3;</code>
     */
    public org.mlflow.api.proto.Service.DoubleClauseOrBuilder getDoubleOrBuilder() {
      if (clauseCase_ == 3) {
         return (org.mlflow.api.proto.Service.DoubleClause) clause_;
      }
      return org.mlflow.api.proto.Service.DoubleClause.getDefaultInstance();
    }

    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) == 0x00000001)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, key_);
      }
      if (clauseCase_ == 2) {
        output.writeMessage(2, (org.mlflow.api.proto.Service.FloatClause) clause_);
      }
      if (clauseCase_ == 3) {
        output.writeMessage(3, (org.mlflow.api.proto.Service.DoubleClause) clause_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, key_);
      }
      if (clauseCase_ == 2) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, (org.mlflow.api.proto.Service.FloatClause) clause_);
      }
      if (clauseCase_ == 3) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(3, (org.mlflow.api.proto.Service.DoubleClause) clause_);
      }
      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.MetricSearchExpression)) {
        return super.equals(obj);
      }
      org.mlflow.api.proto.Service.MetricSearchExpression other = (org.mlflow.api.proto.Service.MetricSearchExpression) obj;

      boolean result = true;
      result = result && (hasKey() == other.hasKey());
      if (hasKey()) {
        result = result && getKey()
            .equals(other.getKey());
      }
      result = result && getClauseCase().equals(
          other.getClauseCase());
      if (!result) return false;
      switch (clauseCase_) {
        case 2:
          result = result && getFloat()
              .equals(other.getFloat());
          break;
        case 3:
          result = result && getDouble()
              .equals(other.getDouble());
          break;
        case 0:
        default:
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasKey()) {
        hash = (37 * hash) + KEY_FIELD_NUMBER;
        hash = (53 * hash) + getKey().hashCode();
      }
      switch (clauseCase_) {
        case 2:
          hash = (37 * hash) + FLOAT_FIELD_NUMBER;
          hash = (53 * hash) + getFloat().hashCode();
          break;
        case 3:
          hash = (37 * hash) + DOUBLE_FIELD_NUMBER;
          hash = (53 * hash) + getDouble().hashCode();
          break;
        case 0:
        default:
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.mlflow.api.proto.Service.MetricSearchExpression parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.MetricSearchExpression 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.MetricSearchExpression parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.MetricSearchExpression 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.MetricSearchExpression parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.MetricSearchExpression 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.MetricSearchExpression parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.MetricSearchExpression 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.MetricSearchExpression parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.MetricSearchExpression 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.MetricSearchExpression 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.MetricSearchExpression 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.MetricSearchExpression 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.MetricSearchExpression}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:mlflow.MetricSearchExpression)
        org.mlflow.api.proto.Service.MetricSearchExpressionOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_MetricSearchExpression_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_MetricSearchExpression_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.MetricSearchExpression.class, org.mlflow.api.proto.Service.MetricSearchExpression.Builder.class);
      }

      // Construct using org.mlflow.api.proto.Service.MetricSearchExpression.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();
        key_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        clauseCase_ = 0;
        clause_ = null;
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_MetricSearchExpression_descriptor;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.MetricSearchExpression getDefaultInstanceForType() {
        return org.mlflow.api.proto.Service.MetricSearchExpression.getDefaultInstance();
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.MetricSearchExpression build() {
        org.mlflow.api.proto.Service.MetricSearchExpression result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.MetricSearchExpression buildPartial() {
        org.mlflow.api.proto.Service.MetricSearchExpression result = new org.mlflow.api.proto.Service.MetricSearchExpression(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.key_ = key_;
        if (clauseCase_ == 2) {
          if (floatBuilder_ == null) {
            result.clause_ = clause_;
          } else {
            result.clause_ = floatBuilder_.build();
          }
        }
        if (clauseCase_ == 3) {
          if (doubleBuilder_ == null) {
            result.clause_ = clause_;
          } else {
            result.clause_ = doubleBuilder_.build();
          }
        }
        result.bitField0_ = to_bitField0_;
        result.clauseCase_ = clauseCase_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.mlflow.api.proto.Service.MetricSearchExpression) {
          return mergeFrom((org.mlflow.api.proto.Service.MetricSearchExpression)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.mlflow.api.proto.Service.MetricSearchExpression other) {
        if (other == org.mlflow.api.proto.Service.MetricSearchExpression.getDefaultInstance()) return this;
        if (other.hasKey()) {
          bitField0_ |= 0x00000001;
          key_ = other.key_;
          onChanged();
        }
        switch (other.getClauseCase()) {
          case FLOAT: {
            mergeFloat(other.getFloat());
            break;
          }
          case DOUBLE: {
            mergeDouble(other.getDouble());
            break;
          }
          case CLAUSE_NOT_SET: {
            break;
          }
        }
        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.MetricSearchExpression parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.mlflow.api.proto.Service.MetricSearchExpression) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int clauseCase_ = 0;
      private java.lang.Object clause_;
      public ClauseCase
          getClauseCase() {
        return ClauseCase.forNumber(
            clauseCase_);
      }

      public Builder clearClause() {
        clauseCase_ = 0;
        clause_ = null;
        onChanged();
        return this;
      }

      private int bitField0_;

      private java.lang.Object key_ = "";
      /**
       * <pre>
       * :ref:`mlflowMetric` key for search.
       * </pre>
       *
       * <code>optional string key = 1;</code>
       */
      public boolean hasKey() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * :ref:`mlflowMetric` key for search.
       * </pre>
       *
       * <code>optional string key = 1;</code>
       */
      public java.lang.String getKey() {
        java.lang.Object ref = key_;
        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()) {
            key_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * :ref:`mlflowMetric` key for search.
       * </pre>
       *
       * <code>optional string key = 1;</code>
       */
      public com.google.protobuf.ByteString
          getKeyBytes() {
        java.lang.Object ref = key_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          key_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * :ref:`mlflowMetric` key for search.
       * </pre>
       *
       * <code>optional string key = 1;</code>
       */
      public Builder setKey(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        key_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * :ref:`mlflowMetric` key for search.
       * </pre>
       *
       * <code>optional string key = 1;</code>
       */
      public Builder clearKey() {
        bitField0_ = (bitField0_ & ~0x00000001);
        key_ = getDefaultInstance().getKey();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * :ref:`mlflowMetric` key for search.
       * </pre>
       *
       * <code>optional string key = 1;</code>
       */
      public Builder setKeyBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        key_ = value;
        onChanged();
        return this;
      }

      private com.google.protobuf.SingleFieldBuilderV3<
          org.mlflow.api.proto.Service.FloatClause, org.mlflow.api.proto.Service.FloatClause.Builder, org.mlflow.api.proto.Service.FloatClauseOrBuilder> floatBuilder_;
      /**
       * <pre>
       * [Deprecated in 0.7.0, to be removed in future version] 
       * Float clause for comparison. Use 'double' instead.
       * </pre>
       *
       * <code>optional .mlflow.FloatClause float = 2;</code>
       */
      public boolean hasFloat() {
        return clauseCase_ == 2;
      }
      /**
       * <pre>
       * [Deprecated in 0.7.0, to be removed in future version] 
       * Float clause for comparison. Use 'double' instead.
       * </pre>
       *
       * <code>optional .mlflow.FloatClause float = 2;</code>
       */
      public org.mlflow.api.proto.Service.FloatClause getFloat() {
        if (floatBuilder_ == null) {
          if (clauseCase_ == 2) {
            return (org.mlflow.api.proto.Service.FloatClause) clause_;
          }
          return org.mlflow.api.proto.Service.FloatClause.getDefaultInstance();
        } else {
          if (clauseCase_ == 2) {
            return floatBuilder_.getMessage();
          }
          return org.mlflow.api.proto.Service.FloatClause.getDefaultInstance();
        }
      }
      /**
       * <pre>
       * [Deprecated in 0.7.0, to be removed in future version] 
       * Float clause for comparison. Use 'double' instead.
       * </pre>
       *
       * <code>optional .mlflow.FloatClause float = 2;</code>
       */
      public Builder setFloat(org.mlflow.api.proto.Service.FloatClause value) {
        if (floatBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          clause_ = value;
          onChanged();
        } else {
          floatBuilder_.setMessage(value);
        }
        clauseCase_ = 2;
        return this;
      }
      /**
       * <pre>
       * [Deprecated in 0.7.0, to be removed in future version] 
       * Float clause for comparison. Use 'double' instead.
       * </pre>
       *
       * <code>optional .mlflow.FloatClause float = 2;</code>
       */
      public Builder setFloat(
          org.mlflow.api.proto.Service.FloatClause.Builder builderForValue) {
        if (floatBuilder_ == null) {
          clause_ = builderForValue.build();
          onChanged();
        } else {
          floatBuilder_.setMessage(builderForValue.build());
        }
        clauseCase_ = 2;
        return this;
      }
      /**
       * <pre>
       * [Deprecated in 0.7.0, to be removed in future version] 
       * Float clause for comparison. Use 'double' instead.
       * </pre>
       *
       * <code>optional .mlflow.FloatClause float = 2;</code>
       */
      public Builder mergeFloat(org.mlflow.api.proto.Service.FloatClause value) {
        if (floatBuilder_ == null) {
          if (clauseCase_ == 2 &&
              clause_ != org.mlflow.api.proto.Service.FloatClause.getDefaultInstance()) {
            clause_ = org.mlflow.api.proto.Service.FloatClause.newBuilder((org.mlflow.api.proto.Service.FloatClause) clause_)
                .mergeFrom(value).buildPartial();
          } else {
            clause_ = value;
          }
          onChanged();
        } else {
          if (clauseCase_ == 2) {
            floatBuilder_.mergeFrom(value);
          }
          floatBuilder_.setMessage(value);
        }
        clauseCase_ = 2;
        return this;
      }
      /**
       * <pre>
       * [Deprecated in 0.7.0, to be removed in future version] 
       * Float clause for comparison. Use 'double' instead.
       * </pre>
       *
       * <code>optional .mlflow.FloatClause float = 2;</code>
       */
      public Builder clearFloat() {
        if (floatBuilder_ == null) {
          if (clauseCase_ == 2) {
            clauseCase_ = 0;
            clause_ = null;
            onChanged();
          }
        } else {
          if (clauseCase_ == 2) {
            clauseCase_ = 0;
            clause_ = null;
          }
          floatBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * [Deprecated in 0.7.0, to be removed in future version] 
       * Float clause for comparison. Use 'double' instead.
       * </pre>
       *
       * <code>optional .mlflow.FloatClause float = 2;</code>
       */
      public org.mlflow.api.proto.Service.FloatClause.Builder getFloatBuilder() {
        return getFloatFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * [Deprecated in 0.7.0, to be removed in future version] 
       * Float clause for comparison. Use 'double' instead.
       * </pre>
       *
       * <code>optional .mlflow.FloatClause float = 2;</code>
       */
      public org.mlflow.api.proto.Service.FloatClauseOrBuilder getFloatOrBuilder() {
        if ((clauseCase_ == 2) && (floatBuilder_ != null)) {
          return floatBuilder_.getMessageOrBuilder();
        } else {
          if (clauseCase_ == 2) {
            return (org.mlflow.api.proto.Service.FloatClause) clause_;
          }
          return org.mlflow.api.proto.Service.FloatClause.getDefaultInstance();
        }
      }
      /**
       * <pre>
       * [Deprecated in 0.7.0, to be removed in future version] 
       * Float clause for comparison. Use 'double' instead.
       * </pre>
       *
       * <code>optional .mlflow.FloatClause float = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          org.mlflow.api.proto.Service.FloatClause, org.mlflow.api.proto.Service.FloatClause.Builder, org.mlflow.api.proto.Service.FloatClauseOrBuilder> 
          getFloatFieldBuilder() {
        if (floatBuilder_ == null) {
          if (!(clauseCase_ == 2)) {
            clause_ = org.mlflow.api.proto.Service.FloatClause.getDefaultInstance();
          }
          floatBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              org.mlflow.api.proto.Service.FloatClause, org.mlflow.api.proto.Service.FloatClause.Builder, org.mlflow.api.proto.Service.FloatClauseOrBuilder>(
                  (org.mlflow.api.proto.Service.FloatClause) clause_,
                  getParentForChildren(),
                  isClean());
          clause_ = null;
        }
        clauseCase_ = 2;
        onChanged();;
        return floatBuilder_;
      }

      private com.google.protobuf.SingleFieldBuilderV3<
          org.mlflow.api.proto.Service.DoubleClause, org.mlflow.api.proto.Service.DoubleClause.Builder, org.mlflow.api.proto.Service.DoubleClauseOrBuilder> doubleBuilder_;
      /**
       * <pre>
       * Double clause of comparison
       * </pre>
       *
       * <code>optional .mlflow.DoubleClause double = 3;</code>
       */
      public boolean hasDouble() {
        return clauseCase_ == 3;
      }
      /**
       * <pre>
       * Double clause of comparison
       * </pre>
       *
       * <code>optional .mlflow.DoubleClause double = 3;</code>
       */
      public org.mlflow.api.proto.Service.DoubleClause getDouble() {
        if (doubleBuilder_ == null) {
          if (clauseCase_ == 3) {
            return (org.mlflow.api.proto.Service.DoubleClause) clause_;
          }
          return org.mlflow.api.proto.Service.DoubleClause.getDefaultInstance();
        } else {
          if (clauseCase_ == 3) {
            return doubleBuilder_.getMessage();
          }
          return org.mlflow.api.proto.Service.DoubleClause.getDefaultInstance();
        }
      }
      /**
       * <pre>
       * Double clause of comparison
       * </pre>
       *
       * <code>optional .mlflow.DoubleClause double = 3;</code>
       */
      public Builder setDouble(org.mlflow.api.proto.Service.DoubleClause value) {
        if (doubleBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          clause_ = value;
          onChanged();
        } else {
          doubleBuilder_.setMessage(value);
        }
        clauseCase_ = 3;
        return this;
      }
      /**
       * <pre>
       * Double clause of comparison
       * </pre>
       *
       * <code>optional .mlflow.DoubleClause double = 3;</code>
       */
      public Builder setDouble(
          org.mlflow.api.proto.Service.DoubleClause.Builder builderForValue) {
        if (doubleBuilder_ == null) {
          clause_ = builderForValue.build();
          onChanged();
        } else {
          doubleBuilder_.setMessage(builderForValue.build());
        }
        clauseCase_ = 3;
        return this;
      }
      /**
       * <pre>
       * Double clause of comparison
       * </pre>
       *
       * <code>optional .mlflow.DoubleClause double = 3;</code>
       */
      public Builder mergeDouble(org.mlflow.api.proto.Service.DoubleClause value) {
        if (doubleBuilder_ == null) {
          if (clauseCase_ == 3 &&
              clause_ != org.mlflow.api.proto.Service.DoubleClause.getDefaultInstance()) {
            clause_ = org.mlflow.api.proto.Service.DoubleClause.newBuilder((org.mlflow.api.proto.Service.DoubleClause) clause_)
                .mergeFrom(value).buildPartial();
          } else {
            clause_ = value;
          }
          onChanged();
        } else {
          if (clauseCase_ == 3) {
            doubleBuilder_.mergeFrom(value);
          }
          doubleBuilder_.setMessage(value);
        }
        clauseCase_ = 3;
        return this;
      }
      /**
       * <pre>
       * Double clause of comparison
       * </pre>
       *
       * <code>optional .mlflow.DoubleClause double = 3;</code>
       */
      public Builder clearDouble() {
        if (doubleBuilder_ == null) {
          if (clauseCase_ == 3) {
            clauseCase_ = 0;
            clause_ = null;
            onChanged();
          }
        } else {
          if (clauseCase_ == 3) {
            clauseCase_ = 0;
            clause_ = null;
          }
          doubleBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * Double clause of comparison
       * </pre>
       *
       * <code>optional .mlflow.DoubleClause double = 3;</code>
       */
      public org.mlflow.api.proto.Service.DoubleClause.Builder getDoubleBuilder() {
        return getDoubleFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * Double clause of comparison
       * </pre>
       *
       * <code>optional .mlflow.DoubleClause double = 3;</code>
       */
      public org.mlflow.api.proto.Service.DoubleClauseOrBuilder getDoubleOrBuilder() {
        if ((clauseCase_ == 3) && (doubleBuilder_ != null)) {
          return doubleBuilder_.getMessageOrBuilder();
        } else {
          if (clauseCase_ == 3) {
            return (org.mlflow.api.proto.Service.DoubleClause) clause_;
          }
          return org.mlflow.api.proto.Service.DoubleClause.getDefaultInstance();
        }
      }
      /**
       * <pre>
       * Double clause of comparison
       * </pre>
       *
       * <code>optional .mlflow.DoubleClause double = 3;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          org.mlflow.api.proto.Service.DoubleClause, org.mlflow.api.proto.Service.DoubleClause.Builder, org.mlflow.api.proto.Service.DoubleClauseOrBuilder> 
          getDoubleFieldBuilder() {
        if (doubleBuilder_ == null) {
          if (!(clauseCase_ == 3)) {
            clause_ = org.mlflow.api.proto.Service.DoubleClause.getDefaultInstance();
          }
          doubleBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              org.mlflow.api.proto.Service.DoubleClause, org.mlflow.api.proto.Service.DoubleClause.Builder, org.mlflow.api.proto.Service.DoubleClauseOrBuilder>(
                  (org.mlflow.api.proto.Service.DoubleClause) clause_,
                  getParentForChildren(),
                  isClean());
          clause_ = null;
        }
        clauseCase_ = 3;
        onChanged();;
        return doubleBuilder_;
      }
      @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.MetricSearchExpression)
    }

    // @@protoc_insertion_point(class_scope:mlflow.MetricSearchExpression)
    private static final org.mlflow.api.proto.Service.MetricSearchExpression DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.MetricSearchExpression();
    }

    public static org.mlflow.api.proto.Service.MetricSearchExpression getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<MetricSearchExpression>
        PARSER = new com.google.protobuf.AbstractParser<MetricSearchExpression>() {
      @java.lang.Override
      public MetricSearchExpression parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new MetricSearchExpression(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<MetricSearchExpression> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<MetricSearchExpression> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public org.mlflow.api.proto.Service.MetricSearchExpression getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ParameterSearchExpressionOrBuilder extends
      // @@protoc_insertion_point(interface_extends:mlflow.ParameterSearchExpression)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * :ref:`mlflowParam` key for search.
     * </pre>
     *
     * <code>optional string key = 1;</code>
     */
    boolean hasKey();
    /**
     * <pre>
     * :ref:`mlflowParam` key for search.
     * </pre>
     *
     * <code>optional string key = 1;</code>
     */
    java.lang.String getKey();
    /**
     * <pre>
     * :ref:`mlflowParam` key for search.
     * </pre>
     *
     * <code>optional string key = 1;</code>
     */
    com.google.protobuf.ByteString
        getKeyBytes();

    /**
     * <pre>
     * String clause for comparison.
     * </pre>
     *
     * <code>optional .mlflow.StringClause string = 2;</code>
     */
    boolean hasString();
    /**
     * <pre>
     * String clause for comparison.
     * </pre>
     *
     * <code>optional .mlflow.StringClause string = 2;</code>
     */
    org.mlflow.api.proto.Service.StringClause getString();
    /**
     * <pre>
     * String clause for comparison.
     * </pre>
     *
     * <code>optional .mlflow.StringClause string = 2;</code>
     */
    org.mlflow.api.proto.Service.StringClauseOrBuilder getStringOrBuilder();

    public org.mlflow.api.proto.Service.ParameterSearchExpression.ClauseCase getClauseCase();
  }
  /**
   * Protobuf type {@code mlflow.ParameterSearchExpression}
   */
  public  static final class ParameterSearchExpression extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:mlflow.ParameterSearchExpression)
      ParameterSearchExpressionOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ParameterSearchExpression.newBuilder() to construct.
    private ParameterSearchExpression(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ParameterSearchExpression() {
      key_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private ParameterSearchExpression(
        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;
              key_ = bs;
              break;
            }
            case 18: {
              org.mlflow.api.proto.Service.StringClause.Builder subBuilder = null;
              if (clauseCase_ == 2) {
                subBuilder = ((org.mlflow.api.proto.Service.StringClause) clause_).toBuilder();
              }
              clause_ =
                  input.readMessage(org.mlflow.api.proto.Service.StringClause.PARSER, extensionRegistry);
              if (subBuilder != null) {
                subBuilder.mergeFrom((org.mlflow.api.proto.Service.StringClause) clause_);
                clause_ = subBuilder.buildPartial();
              }
              clauseCase_ = 2;
              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_ParameterSearchExpression_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.mlflow.api.proto.Service.internal_static_mlflow_ParameterSearchExpression_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.mlflow.api.proto.Service.ParameterSearchExpression.class, org.mlflow.api.proto.Service.ParameterSearchExpression.Builder.class);
    }

    private int bitField0_;
    private int clauseCase_ = 0;
    private java.lang.Object clause_;
    public enum ClauseCase
        implements com.google.protobuf.Internal.EnumLite {
      STRING(2),
      CLAUSE_NOT_SET(0);
      private final int value;
      private ClauseCase(int value) {
        this.value = value;
      }
      /**
       * @deprecated Use {@link #forNumber(int)} instead.
       */
      @java.lang.Deprecated
      public static ClauseCase valueOf(int value) {
        return forNumber(value);
      }

      public static ClauseCase forNumber(int value) {
        switch (value) {
          case 2: return STRING;
          case 0: return CLAUSE_NOT_SET;
          default: return null;
        }
      }
      public int getNumber() {
        return this.value;
      }
    };

    public ClauseCase
    getClauseCase() {
      return ClauseCase.forNumber(
          clauseCase_);
    }

    public static final int KEY_FIELD_NUMBER = 1;
    private volatile java.lang.Object key_;
    /**
     * <pre>
     * :ref:`mlflowParam` key for search.
     * </pre>
     *
     * <code>optional string key = 1;</code>
     */
    public boolean hasKey() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * :ref:`mlflowParam` key for search.
     * </pre>
     *
     * <code>optional string key = 1;</code>
     */
    public java.lang.String getKey() {
      java.lang.Object ref = key_;
      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()) {
          key_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * :ref:`mlflowParam` key for search.
     * </pre>
     *
     * <code>optional string key = 1;</code>
     */
    public com.google.protobuf.ByteString
        getKeyBytes() {
      java.lang.Object ref = key_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        key_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int STRING_FIELD_NUMBER = 2;
    /**
     * <pre>
     * String clause for comparison.
     * </pre>
     *
     * <code>optional .mlflow.StringClause string = 2;</code>
     */
    public boolean hasString() {
      return clauseCase_ == 2;
    }
    /**
     * <pre>
     * String clause for comparison.
     * </pre>
     *
     * <code>optional .mlflow.StringClause string = 2;</code>
     */
    public org.mlflow.api.proto.Service.StringClause getString() {
      if (clauseCase_ == 2) {
         return (org.mlflow.api.proto.Service.StringClause) clause_;
      }
      return org.mlflow.api.proto.Service.StringClause.getDefaultInstance();
    }
    /**
     * <pre>
     * String clause for comparison.
     * </pre>
     *
     * <code>optional .mlflow.StringClause string = 2;</code>
     */
    public org.mlflow.api.proto.Service.StringClauseOrBuilder getStringOrBuilder() {
      if (clauseCase_ == 2) {
         return (org.mlflow.api.proto.Service.StringClause) clause_;
      }
      return org.mlflow.api.proto.Service.StringClause.getDefaultInstance();
    }

    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) == 0x00000001)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, key_);
      }
      if (clauseCase_ == 2) {
        output.writeMessage(2, (org.mlflow.api.proto.Service.StringClause) clause_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, key_);
      }
      if (clauseCase_ == 2) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, (org.mlflow.api.proto.Service.StringClause) clause_);
      }
      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.ParameterSearchExpression)) {
        return super.equals(obj);
      }
      org.mlflow.api.proto.Service.ParameterSearchExpression other = (org.mlflow.api.proto.Service.ParameterSearchExpression) obj;

      boolean result = true;
      result = result && (hasKey() == other.hasKey());
      if (hasKey()) {
        result = result && getKey()
            .equals(other.getKey());
      }
      result = result && getClauseCase().equals(
          other.getClauseCase());
      if (!result) return false;
      switch (clauseCase_) {
        case 2:
          result = result && getString()
              .equals(other.getString());
          break;
        case 0:
        default:
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasKey()) {
        hash = (37 * hash) + KEY_FIELD_NUMBER;
        hash = (53 * hash) + getKey().hashCode();
      }
      switch (clauseCase_) {
        case 2:
          hash = (37 * hash) + STRING_FIELD_NUMBER;
          hash = (53 * hash) + getString().hashCode();
          break;
        case 0:
        default:
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.mlflow.api.proto.Service.ParameterSearchExpression parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.ParameterSearchExpression 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.ParameterSearchExpression parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.ParameterSearchExpression 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.ParameterSearchExpression parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.ParameterSearchExpression 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.ParameterSearchExpression parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.ParameterSearchExpression 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.ParameterSearchExpression parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.ParameterSearchExpression 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.ParameterSearchExpression 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.ParameterSearchExpression 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.ParameterSearchExpression 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.ParameterSearchExpression}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:mlflow.ParameterSearchExpression)
        org.mlflow.api.proto.Service.ParameterSearchExpressionOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_ParameterSearchExpression_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_ParameterSearchExpression_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.ParameterSearchExpression.class, org.mlflow.api.proto.Service.ParameterSearchExpression.Builder.class);
      }

      // Construct using org.mlflow.api.proto.Service.ParameterSearchExpression.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();
        key_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        clauseCase_ = 0;
        clause_ = null;
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_ParameterSearchExpression_descriptor;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.ParameterSearchExpression getDefaultInstanceForType() {
        return org.mlflow.api.proto.Service.ParameterSearchExpression.getDefaultInstance();
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.ParameterSearchExpression build() {
        org.mlflow.api.proto.Service.ParameterSearchExpression result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.ParameterSearchExpression buildPartial() {
        org.mlflow.api.proto.Service.ParameterSearchExpression result = new org.mlflow.api.proto.Service.ParameterSearchExpression(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.key_ = key_;
        if (clauseCase_ == 2) {
          if (stringBuilder_ == null) {
            result.clause_ = clause_;
          } else {
            result.clause_ = stringBuilder_.build();
          }
        }
        result.bitField0_ = to_bitField0_;
        result.clauseCase_ = clauseCase_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.mlflow.api.proto.Service.ParameterSearchExpression) {
          return mergeFrom((org.mlflow.api.proto.Service.ParameterSearchExpression)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.mlflow.api.proto.Service.ParameterSearchExpression other) {
        if (other == org.mlflow.api.proto.Service.ParameterSearchExpression.getDefaultInstance()) return this;
        if (other.hasKey()) {
          bitField0_ |= 0x00000001;
          key_ = other.key_;
          onChanged();
        }
        switch (other.getClauseCase()) {
          case STRING: {
            mergeString(other.getString());
            break;
          }
          case CLAUSE_NOT_SET: {
            break;
          }
        }
        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.ParameterSearchExpression parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.mlflow.api.proto.Service.ParameterSearchExpression) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int clauseCase_ = 0;
      private java.lang.Object clause_;
      public ClauseCase
          getClauseCase() {
        return ClauseCase.forNumber(
            clauseCase_);
      }

      public Builder clearClause() {
        clauseCase_ = 0;
        clause_ = null;
        onChanged();
        return this;
      }

      private int bitField0_;

      private java.lang.Object key_ = "";
      /**
       * <pre>
       * :ref:`mlflowParam` key for search.
       * </pre>
       *
       * <code>optional string key = 1;</code>
       */
      public boolean hasKey() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * :ref:`mlflowParam` key for search.
       * </pre>
       *
       * <code>optional string key = 1;</code>
       */
      public java.lang.String getKey() {
        java.lang.Object ref = key_;
        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()) {
            key_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * :ref:`mlflowParam` key for search.
       * </pre>
       *
       * <code>optional string key = 1;</code>
       */
      public com.google.protobuf.ByteString
          getKeyBytes() {
        java.lang.Object ref = key_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          key_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * :ref:`mlflowParam` key for search.
       * </pre>
       *
       * <code>optional string key = 1;</code>
       */
      public Builder setKey(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        key_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * :ref:`mlflowParam` key for search.
       * </pre>
       *
       * <code>optional string key = 1;</code>
       */
      public Builder clearKey() {
        bitField0_ = (bitField0_ & ~0x00000001);
        key_ = getDefaultInstance().getKey();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * :ref:`mlflowParam` key for search.
       * </pre>
       *
       * <code>optional string key = 1;</code>
       */
      public Builder setKeyBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        key_ = value;
        onChanged();
        return this;
      }

      private com.google.protobuf.SingleFieldBuilderV3<
          org.mlflow.api.proto.Service.StringClause, org.mlflow.api.proto.Service.StringClause.Builder, org.mlflow.api.proto.Service.StringClauseOrBuilder> stringBuilder_;
      /**
       * <pre>
       * String clause for comparison.
       * </pre>
       *
       * <code>optional .mlflow.StringClause string = 2;</code>
       */
      public boolean hasString() {
        return clauseCase_ == 2;
      }
      /**
       * <pre>
       * String clause for comparison.
       * </pre>
       *
       * <code>optional .mlflow.StringClause string = 2;</code>
       */
      public org.mlflow.api.proto.Service.StringClause getString() {
        if (stringBuilder_ == null) {
          if (clauseCase_ == 2) {
            return (org.mlflow.api.proto.Service.StringClause) clause_;
          }
          return org.mlflow.api.proto.Service.StringClause.getDefaultInstance();
        } else {
          if (clauseCase_ == 2) {
            return stringBuilder_.getMessage();
          }
          return org.mlflow.api.proto.Service.StringClause.getDefaultInstance();
        }
      }
      /**
       * <pre>
       * String clause for comparison.
       * </pre>
       *
       * <code>optional .mlflow.StringClause string = 2;</code>
       */
      public Builder setString(org.mlflow.api.proto.Service.StringClause value) {
        if (stringBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          clause_ = value;
          onChanged();
        } else {
          stringBuilder_.setMessage(value);
        }
        clauseCase_ = 2;
        return this;
      }
      /**
       * <pre>
       * String clause for comparison.
       * </pre>
       *
       * <code>optional .mlflow.StringClause string = 2;</code>
       */
      public Builder setString(
          org.mlflow.api.proto.Service.StringClause.Builder builderForValue) {
        if (stringBuilder_ == null) {
          clause_ = builderForValue.build();
          onChanged();
        } else {
          stringBuilder_.setMessage(builderForValue.build());
        }
        clauseCase_ = 2;
        return this;
      }
      /**
       * <pre>
       * String clause for comparison.
       * </pre>
       *
       * <code>optional .mlflow.StringClause string = 2;</code>
       */
      public Builder mergeString(org.mlflow.api.proto.Service.StringClause value) {
        if (stringBuilder_ == null) {
          if (clauseCase_ == 2 &&
              clause_ != org.mlflow.api.proto.Service.StringClause.getDefaultInstance()) {
            clause_ = org.mlflow.api.proto.Service.StringClause.newBuilder((org.mlflow.api.proto.Service.StringClause) clause_)
                .mergeFrom(value).buildPartial();
          } else {
            clause_ = value;
          }
          onChanged();
        } else {
          if (clauseCase_ == 2) {
            stringBuilder_.mergeFrom(value);
          }
          stringBuilder_.setMessage(value);
        }
        clauseCase_ = 2;
        return this;
      }
      /**
       * <pre>
       * String clause for comparison.
       * </pre>
       *
       * <code>optional .mlflow.StringClause string = 2;</code>
       */
      public Builder clearString() {
        if (stringBuilder_ == null) {
          if (clauseCase_ == 2) {
            clauseCase_ = 0;
            clause_ = null;
            onChanged();
          }
        } else {
          if (clauseCase_ == 2) {
            clauseCase_ = 0;
            clause_ = null;
          }
          stringBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * String clause for comparison.
       * </pre>
       *
       * <code>optional .mlflow.StringClause string = 2;</code>
       */
      public org.mlflow.api.proto.Service.StringClause.Builder getStringBuilder() {
        return getStringFieldBuilder().getBuilder();
      }
      /**
       * <pre>
       * String clause for comparison.
       * </pre>
       *
       * <code>optional .mlflow.StringClause string = 2;</code>
       */
      public org.mlflow.api.proto.Service.StringClauseOrBuilder getStringOrBuilder() {
        if ((clauseCase_ == 2) && (stringBuilder_ != null)) {
          return stringBuilder_.getMessageOrBuilder();
        } else {
          if (clauseCase_ == 2) {
            return (org.mlflow.api.proto.Service.StringClause) clause_;
          }
          return org.mlflow.api.proto.Service.StringClause.getDefaultInstance();
        }
      }
      /**
       * <pre>
       * String clause for comparison.
       * </pre>
       *
       * <code>optional .mlflow.StringClause string = 2;</code>
       */
      private com.google.protobuf.SingleFieldBuilderV3<
          org.mlflow.api.proto.Service.StringClause, org.mlflow.api.proto.Service.StringClause.Builder, org.mlflow.api.proto.Service.StringClauseOrBuilder> 
          getStringFieldBuilder() {
        if (stringBuilder_ == null) {
          if (!(clauseCase_ == 2)) {
            clause_ = org.mlflow.api.proto.Service.StringClause.getDefaultInstance();
          }
          stringBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
              org.mlflow.api.proto.Service.StringClause, org.mlflow.api.proto.Service.StringClause.Builder, org.mlflow.api.proto.Service.StringClauseOrBuilder>(
                  (org.mlflow.api.proto.Service.StringClause) clause_,
                  getParentForChildren(),
                  isClean());
          clause_ = null;
        }
        clauseCase_ = 2;
        onChanged();;
        return stringBuilder_;
      }
      @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.ParameterSearchExpression)
    }

    // @@protoc_insertion_point(class_scope:mlflow.ParameterSearchExpression)
    private static final org.mlflow.api.proto.Service.ParameterSearchExpression DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.ParameterSearchExpression();
    }

    public static org.mlflow.api.proto.Service.ParameterSearchExpression getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<ParameterSearchExpression>
        PARSER = new com.google.protobuf.AbstractParser<ParameterSearchExpression>() {
      @java.lang.Override
      public ParameterSearchExpression parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new ParameterSearchExpression(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<ParameterSearchExpression> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<ParameterSearchExpression> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public org.mlflow.api.proto.Service.ParameterSearchExpression getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface StringClauseOrBuilder extends
      // @@protoc_insertion_point(interface_extends:mlflow.StringClause)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * OneOf ("==", "!=", "~")
     * </pre>
     *
     * <code>optional string comparator = 1;</code>
     */
    boolean hasComparator();
    /**
     * <pre>
     * OneOf ("==", "!=", "~")
     * </pre>
     *
     * <code>optional string comparator = 1;</code>
     */
    java.lang.String getComparator();
    /**
     * <pre>
     * OneOf ("==", "!=", "~")
     * </pre>
     *
     * <code>optional string comparator = 1;</code>
     */
    com.google.protobuf.ByteString
        getComparatorBytes();

    /**
     * <pre>
     * String value for comparison.
     * </pre>
     *
     * <code>optional string value = 2;</code>
     */
    boolean hasValue();
    /**
     * <pre>
     * String value for comparison.
     * </pre>
     *
     * <code>optional string value = 2;</code>
     */
    java.lang.String getValue();
    /**
     * <pre>
     * String value for comparison.
     * </pre>
     *
     * <code>optional string value = 2;</code>
     */
    com.google.protobuf.ByteString
        getValueBytes();
  }
  /**
   * Protobuf type {@code mlflow.StringClause}
   */
  public  static final class StringClause extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:mlflow.StringClause)
      StringClauseOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use StringClause.newBuilder() to construct.
    private StringClause(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private StringClause() {
      comparator_ = "";
      value_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private StringClause(
        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;
              comparator_ = bs;
              break;
            }
            case 18: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000002;
              value_ = 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_StringClause_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.mlflow.api.proto.Service.internal_static_mlflow_StringClause_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.mlflow.api.proto.Service.StringClause.class, org.mlflow.api.proto.Service.StringClause.Builder.class);
    }

    private int bitField0_;
    public static final int COMPARATOR_FIELD_NUMBER = 1;
    private volatile java.lang.Object comparator_;
    /**
     * <pre>
     * OneOf ("==", "!=", "~")
     * </pre>
     *
     * <code>optional string comparator = 1;</code>
     */
    public boolean hasComparator() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * OneOf ("==", "!=", "~")
     * </pre>
     *
     * <code>optional string comparator = 1;</code>
     */
    public java.lang.String getComparator() {
      java.lang.Object ref = comparator_;
      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()) {
          comparator_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * OneOf ("==", "!=", "~")
     * </pre>
     *
     * <code>optional string comparator = 1;</code>
     */
    public com.google.protobuf.ByteString
        getComparatorBytes() {
      java.lang.Object ref = comparator_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        comparator_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int VALUE_FIELD_NUMBER = 2;
    private volatile java.lang.Object value_;
    /**
     * <pre>
     * String value for comparison.
     * </pre>
     *
     * <code>optional string value = 2;</code>
     */
    public boolean hasValue() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     * String value for comparison.
     * </pre>
     *
     * <code>optional string value = 2;</code>
     */
    public java.lang.String getValue() {
      java.lang.Object ref = value_;
      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()) {
          value_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * String value for comparison.
     * </pre>
     *
     * <code>optional string value = 2;</code>
     */
    public com.google.protobuf.ByteString
        getValueBytes() {
      java.lang.Object ref = value_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        value_ = 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) == 0x00000001)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, comparator_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, value_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, comparator_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, value_);
      }
      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.StringClause)) {
        return super.equals(obj);
      }
      org.mlflow.api.proto.Service.StringClause other = (org.mlflow.api.proto.Service.StringClause) obj;

      boolean result = true;
      result = result && (hasComparator() == other.hasComparator());
      if (hasComparator()) {
        result = result && getComparator()
            .equals(other.getComparator());
      }
      result = result && (hasValue() == other.hasValue());
      if (hasValue()) {
        result = result && getValue()
            .equals(other.getValue());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasComparator()) {
        hash = (37 * hash) + COMPARATOR_FIELD_NUMBER;
        hash = (53 * hash) + getComparator().hashCode();
      }
      if (hasValue()) {
        hash = (37 * hash) + VALUE_FIELD_NUMBER;
        hash = (53 * hash) + getValue().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.mlflow.api.proto.Service.StringClause parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.StringClause 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.StringClause parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.StringClause 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.StringClause parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.StringClause 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.StringClause parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.StringClause 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.StringClause parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.StringClause 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.StringClause 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.StringClause 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.StringClause 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.StringClause}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:mlflow.StringClause)
        org.mlflow.api.proto.Service.StringClauseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_StringClause_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_StringClause_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.StringClause.class, org.mlflow.api.proto.Service.StringClause.Builder.class);
      }

      // Construct using org.mlflow.api.proto.Service.StringClause.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();
        comparator_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        value_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_StringClause_descriptor;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.StringClause getDefaultInstanceForType() {
        return org.mlflow.api.proto.Service.StringClause.getDefaultInstance();
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.StringClause build() {
        org.mlflow.api.proto.Service.StringClause result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.StringClause buildPartial() {
        org.mlflow.api.proto.Service.StringClause result = new org.mlflow.api.proto.Service.StringClause(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.comparator_ = comparator_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.value_ = value_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.mlflow.api.proto.Service.StringClause) {
          return mergeFrom((org.mlflow.api.proto.Service.StringClause)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.mlflow.api.proto.Service.StringClause other) {
        if (other == org.mlflow.api.proto.Service.StringClause.getDefaultInstance()) return this;
        if (other.hasComparator()) {
          bitField0_ |= 0x00000001;
          comparator_ = other.comparator_;
          onChanged();
        }
        if (other.hasValue()) {
          bitField0_ |= 0x00000002;
          value_ = other.value_;
          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.StringClause parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.mlflow.api.proto.Service.StringClause) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object comparator_ = "";
      /**
       * <pre>
       * OneOf ("==", "!=", "~")
       * </pre>
       *
       * <code>optional string comparator = 1;</code>
       */
      public boolean hasComparator() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * OneOf ("==", "!=", "~")
       * </pre>
       *
       * <code>optional string comparator = 1;</code>
       */
      public java.lang.String getComparator() {
        java.lang.Object ref = comparator_;
        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()) {
            comparator_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * OneOf ("==", "!=", "~")
       * </pre>
       *
       * <code>optional string comparator = 1;</code>
       */
      public com.google.protobuf.ByteString
          getComparatorBytes() {
        java.lang.Object ref = comparator_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          comparator_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * OneOf ("==", "!=", "~")
       * </pre>
       *
       * <code>optional string comparator = 1;</code>
       */
      public Builder setComparator(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        comparator_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * OneOf ("==", "!=", "~")
       * </pre>
       *
       * <code>optional string comparator = 1;</code>
       */
      public Builder clearComparator() {
        bitField0_ = (bitField0_ & ~0x00000001);
        comparator_ = getDefaultInstance().getComparator();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * OneOf ("==", "!=", "~")
       * </pre>
       *
       * <code>optional string comparator = 1;</code>
       */
      public Builder setComparatorBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        comparator_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object value_ = "";
      /**
       * <pre>
       * String value for comparison.
       * </pre>
       *
       * <code>optional string value = 2;</code>
       */
      public boolean hasValue() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * String value for comparison.
       * </pre>
       *
       * <code>optional string value = 2;</code>
       */
      public java.lang.String getValue() {
        java.lang.Object ref = value_;
        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()) {
            value_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * String value for comparison.
       * </pre>
       *
       * <code>optional string value = 2;</code>
       */
      public com.google.protobuf.ByteString
          getValueBytes() {
        java.lang.Object ref = value_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          value_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * String value for comparison.
       * </pre>
       *
       * <code>optional string value = 2;</code>
       */
      public Builder setValue(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        value_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * String value for comparison.
       * </pre>
       *
       * <code>optional string value = 2;</code>
       */
      public Builder clearValue() {
        bitField0_ = (bitField0_ & ~0x00000002);
        value_ = getDefaultInstance().getValue();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * String value for comparison.
       * </pre>
       *
       * <code>optional string value = 2;</code>
       */
      public Builder setValueBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        value_ = 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.StringClause)
    }

    // @@protoc_insertion_point(class_scope:mlflow.StringClause)
    private static final org.mlflow.api.proto.Service.StringClause DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.StringClause();
    }

    public static org.mlflow.api.proto.Service.StringClause getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<StringClause>
        PARSER = new com.google.protobuf.AbstractParser<StringClause>() {
      @java.lang.Override
      public StringClause parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new StringClause(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<StringClause> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<StringClause> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public org.mlflow.api.proto.Service.StringClause getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface FloatClauseOrBuilder extends
      // @@protoc_insertion_point(interface_extends:mlflow.FloatClause)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * OneOf ("&gt;", "&gt;=", "==", "!=", "&lt;=", "&lt;")
     * </pre>
     *
     * <code>optional string comparator = 1;</code>
     */
    boolean hasComparator();
    /**
     * <pre>
     * OneOf ("&gt;", "&gt;=", "==", "!=", "&lt;=", "&lt;")
     * </pre>
     *
     * <code>optional string comparator = 1;</code>
     */
    java.lang.String getComparator();
    /**
     * <pre>
     * OneOf ("&gt;", "&gt;=", "==", "!=", "&lt;=", "&lt;")
     * </pre>
     *
     * <code>optional string comparator = 1;</code>
     */
    com.google.protobuf.ByteString
        getComparatorBytes();

    /**
     * <pre>
     * Float value for comparison.
     * </pre>
     *
     * <code>optional float value = 2;</code>
     */
    boolean hasValue();
    /**
     * <pre>
     * Float value for comparison.
     * </pre>
     *
     * <code>optional float value = 2;</code>
     */
    float getValue();
  }
  /**
   * Protobuf type {@code mlflow.FloatClause}
   */
  public  static final class FloatClause extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:mlflow.FloatClause)
      FloatClauseOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use FloatClause.newBuilder() to construct.
    private FloatClause(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private FloatClause() {
      comparator_ = "";
      value_ = 0F;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private FloatClause(
        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;
              comparator_ = bs;
              break;
            }
            case 21: {
              bitField0_ |= 0x00000002;
              value_ = input.readFloat();
              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_FloatClause_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.mlflow.api.proto.Service.internal_static_mlflow_FloatClause_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.mlflow.api.proto.Service.FloatClause.class, org.mlflow.api.proto.Service.FloatClause.Builder.class);
    }

    private int bitField0_;
    public static final int COMPARATOR_FIELD_NUMBER = 1;
    private volatile java.lang.Object comparator_;
    /**
     * <pre>
     * OneOf ("&gt;", "&gt;=", "==", "!=", "&lt;=", "&lt;")
     * </pre>
     *
     * <code>optional string comparator = 1;</code>
     */
    public boolean hasComparator() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * OneOf ("&gt;", "&gt;=", "==", "!=", "&lt;=", "&lt;")
     * </pre>
     *
     * <code>optional string comparator = 1;</code>
     */
    public java.lang.String getComparator() {
      java.lang.Object ref = comparator_;
      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()) {
          comparator_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * OneOf ("&gt;", "&gt;=", "==", "!=", "&lt;=", "&lt;")
     * </pre>
     *
     * <code>optional string comparator = 1;</code>
     */
    public com.google.protobuf.ByteString
        getComparatorBytes() {
      java.lang.Object ref = comparator_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        comparator_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int VALUE_FIELD_NUMBER = 2;
    private float value_;
    /**
     * <pre>
     * Float value for comparison.
     * </pre>
     *
     * <code>optional float value = 2;</code>
     */
    public boolean hasValue() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     * Float value for comparison.
     * </pre>
     *
     * <code>optional float value = 2;</code>
     */
    public float getValue() {
      return value_;
    }

    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) == 0x00000001)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, comparator_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeFloat(2, value_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, comparator_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeFloatSize(2, value_);
      }
      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.FloatClause)) {
        return super.equals(obj);
      }
      org.mlflow.api.proto.Service.FloatClause other = (org.mlflow.api.proto.Service.FloatClause) obj;

      boolean result = true;
      result = result && (hasComparator() == other.hasComparator());
      if (hasComparator()) {
        result = result && getComparator()
            .equals(other.getComparator());
      }
      result = result && (hasValue() == other.hasValue());
      if (hasValue()) {
        result = result && (
            java.lang.Float.floatToIntBits(getValue())
            == java.lang.Float.floatToIntBits(
                other.getValue()));
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasComparator()) {
        hash = (37 * hash) + COMPARATOR_FIELD_NUMBER;
        hash = (53 * hash) + getComparator().hashCode();
      }
      if (hasValue()) {
        hash = (37 * hash) + VALUE_FIELD_NUMBER;
        hash = (53 * hash) + java.lang.Float.floatToIntBits(
            getValue());
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.mlflow.api.proto.Service.FloatClause parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.FloatClause 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.FloatClause parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.FloatClause 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.FloatClause parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.FloatClause 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.FloatClause parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.FloatClause 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.FloatClause parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.FloatClause 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.FloatClause 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.FloatClause 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.FloatClause 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.FloatClause}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:mlflow.FloatClause)
        org.mlflow.api.proto.Service.FloatClauseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_FloatClause_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_FloatClause_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.FloatClause.class, org.mlflow.api.proto.Service.FloatClause.Builder.class);
      }

      // Construct using org.mlflow.api.proto.Service.FloatClause.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();
        comparator_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        value_ = 0F;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_FloatClause_descriptor;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.FloatClause getDefaultInstanceForType() {
        return org.mlflow.api.proto.Service.FloatClause.getDefaultInstance();
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.FloatClause build() {
        org.mlflow.api.proto.Service.FloatClause result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.FloatClause buildPartial() {
        org.mlflow.api.proto.Service.FloatClause result = new org.mlflow.api.proto.Service.FloatClause(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.comparator_ = comparator_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.value_ = value_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.mlflow.api.proto.Service.FloatClause) {
          return mergeFrom((org.mlflow.api.proto.Service.FloatClause)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.mlflow.api.proto.Service.FloatClause other) {
        if (other == org.mlflow.api.proto.Service.FloatClause.getDefaultInstance()) return this;
        if (other.hasComparator()) {
          bitField0_ |= 0x00000001;
          comparator_ = other.comparator_;
          onChanged();
        }
        if (other.hasValue()) {
          setValue(other.getValue());
        }
        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.FloatClause parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.mlflow.api.proto.Service.FloatClause) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object comparator_ = "";
      /**
       * <pre>
       * OneOf ("&gt;", "&gt;=", "==", "!=", "&lt;=", "&lt;")
       * </pre>
       *
       * <code>optional string comparator = 1;</code>
       */
      public boolean hasComparator() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * OneOf ("&gt;", "&gt;=", "==", "!=", "&lt;=", "&lt;")
       * </pre>
       *
       * <code>optional string comparator = 1;</code>
       */
      public java.lang.String getComparator() {
        java.lang.Object ref = comparator_;
        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()) {
            comparator_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * OneOf ("&gt;", "&gt;=", "==", "!=", "&lt;=", "&lt;")
       * </pre>
       *
       * <code>optional string comparator = 1;</code>
       */
      public com.google.protobuf.ByteString
          getComparatorBytes() {
        java.lang.Object ref = comparator_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          comparator_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * OneOf ("&gt;", "&gt;=", "==", "!=", "&lt;=", "&lt;")
       * </pre>
       *
       * <code>optional string comparator = 1;</code>
       */
      public Builder setComparator(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        comparator_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * OneOf ("&gt;", "&gt;=", "==", "!=", "&lt;=", "&lt;")
       * </pre>
       *
       * <code>optional string comparator = 1;</code>
       */
      public Builder clearComparator() {
        bitField0_ = (bitField0_ & ~0x00000001);
        comparator_ = getDefaultInstance().getComparator();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * OneOf ("&gt;", "&gt;=", "==", "!=", "&lt;=", "&lt;")
       * </pre>
       *
       * <code>optional string comparator = 1;</code>
       */
      public Builder setComparatorBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        comparator_ = value;
        onChanged();
        return this;
      }

      private float value_ ;
      /**
       * <pre>
       * Float value for comparison.
       * </pre>
       *
       * <code>optional float value = 2;</code>
       */
      public boolean hasValue() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * Float value for comparison.
       * </pre>
       *
       * <code>optional float value = 2;</code>
       */
      public float getValue() {
        return value_;
      }
      /**
       * <pre>
       * Float value for comparison.
       * </pre>
       *
       * <code>optional float value = 2;</code>
       */
      public Builder setValue(float value) {
        bitField0_ |= 0x00000002;
        value_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Float value for comparison.
       * </pre>
       *
       * <code>optional float value = 2;</code>
       */
      public Builder clearValue() {
        bitField0_ = (bitField0_ & ~0x00000002);
        value_ = 0F;
        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.FloatClause)
    }

    // @@protoc_insertion_point(class_scope:mlflow.FloatClause)
    private static final org.mlflow.api.proto.Service.FloatClause DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.FloatClause();
    }

    public static org.mlflow.api.proto.Service.FloatClause getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<FloatClause>
        PARSER = new com.google.protobuf.AbstractParser<FloatClause>() {
      @java.lang.Override
      public FloatClause parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new FloatClause(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<FloatClause> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<FloatClause> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public org.mlflow.api.proto.Service.FloatClause getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface DoubleClauseOrBuilder extends
      // @@protoc_insertion_point(interface_extends:mlflow.DoubleClause)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * OneOf ("&gt;", "&gt;=", "==", "!=", "&lt;=", "&lt;")
     * </pre>
     *
     * <code>optional string comparator = 1;</code>
     */
    boolean hasComparator();
    /**
     * <pre>
     * OneOf ("&gt;", "&gt;=", "==", "!=", "&lt;=", "&lt;")
     * </pre>
     *
     * <code>optional string comparator = 1;</code>
     */
    java.lang.String getComparator();
    /**
     * <pre>
     * OneOf ("&gt;", "&gt;=", "==", "!=", "&lt;=", "&lt;")
     * </pre>
     *
     * <code>optional string comparator = 1;</code>
     */
    com.google.protobuf.ByteString
        getComparatorBytes();

    /**
     * <pre>
     * Float value for comparison.
     * </pre>
     *
     * <code>optional double value = 2;</code>
     */
    boolean hasValue();
    /**
     * <pre>
     * Float value for comparison.
     * </pre>
     *
     * <code>optional double value = 2;</code>
     */
    double getValue();
  }
  /**
   * Protobuf type {@code mlflow.DoubleClause}
   */
  public  static final class DoubleClause extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:mlflow.DoubleClause)
      DoubleClauseOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use DoubleClause.newBuilder() to construct.
    private DoubleClause(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private DoubleClause() {
      comparator_ = "";
      value_ = 0D;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private DoubleClause(
        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;
              comparator_ = bs;
              break;
            }
            case 17: {
              bitField0_ |= 0x00000002;
              value_ = input.readDouble();
              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_DoubleClause_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.mlflow.api.proto.Service.internal_static_mlflow_DoubleClause_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.mlflow.api.proto.Service.DoubleClause.class, org.mlflow.api.proto.Service.DoubleClause.Builder.class);
    }

    private int bitField0_;
    public static final int COMPARATOR_FIELD_NUMBER = 1;
    private volatile java.lang.Object comparator_;
    /**
     * <pre>
     * OneOf ("&gt;", "&gt;=", "==", "!=", "&lt;=", "&lt;")
     * </pre>
     *
     * <code>optional string comparator = 1;</code>
     */
    public boolean hasComparator() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * OneOf ("&gt;", "&gt;=", "==", "!=", "&lt;=", "&lt;")
     * </pre>
     *
     * <code>optional string comparator = 1;</code>
     */
    public java.lang.String getComparator() {
      java.lang.Object ref = comparator_;
      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()) {
          comparator_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * OneOf ("&gt;", "&gt;=", "==", "!=", "&lt;=", "&lt;")
     * </pre>
     *
     * <code>optional string comparator = 1;</code>
     */
    public com.google.protobuf.ByteString
        getComparatorBytes() {
      java.lang.Object ref = comparator_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        comparator_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int VALUE_FIELD_NUMBER = 2;
    private double value_;
    /**
     * <pre>
     * Float value for comparison.
     * </pre>
     *
     * <code>optional double value = 2;</code>
     */
    public boolean hasValue() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     * Float value for comparison.
     * </pre>
     *
     * <code>optional double value = 2;</code>
     */
    public double getValue() {
      return value_;
    }

    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) == 0x00000001)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, comparator_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeDouble(2, value_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, comparator_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeDoubleSize(2, value_);
      }
      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.DoubleClause)) {
        return super.equals(obj);
      }
      org.mlflow.api.proto.Service.DoubleClause other = (org.mlflow.api.proto.Service.DoubleClause) obj;

      boolean result = true;
      result = result && (hasComparator() == other.hasComparator());
      if (hasComparator()) {
        result = result && getComparator()
            .equals(other.getComparator());
      }
      result = result && (hasValue() == other.hasValue());
      if (hasValue()) {
        result = result && (
            java.lang.Double.doubleToLongBits(getValue())
            == java.lang.Double.doubleToLongBits(
                other.getValue()));
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasComparator()) {
        hash = (37 * hash) + COMPARATOR_FIELD_NUMBER;
        hash = (53 * hash) + getComparator().hashCode();
      }
      if (hasValue()) {
        hash = (37 * hash) + VALUE_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            java.lang.Double.doubleToLongBits(getValue()));
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.mlflow.api.proto.Service.DoubleClause parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.DoubleClause 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.DoubleClause parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.DoubleClause 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.DoubleClause parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.DoubleClause 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.DoubleClause parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.DoubleClause 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.DoubleClause parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.DoubleClause 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.DoubleClause 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.DoubleClause 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.DoubleClause 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.DoubleClause}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:mlflow.DoubleClause)
        org.mlflow.api.proto.Service.DoubleClauseOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_DoubleClause_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_DoubleClause_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.DoubleClause.class, org.mlflow.api.proto.Service.DoubleClause.Builder.class);
      }

      // Construct using org.mlflow.api.proto.Service.DoubleClause.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();
        comparator_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        value_ = 0D;
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_DoubleClause_descriptor;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.DoubleClause getDefaultInstanceForType() {
        return org.mlflow.api.proto.Service.DoubleClause.getDefaultInstance();
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.DoubleClause build() {
        org.mlflow.api.proto.Service.DoubleClause result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.DoubleClause buildPartial() {
        org.mlflow.api.proto.Service.DoubleClause result = new org.mlflow.api.proto.Service.DoubleClause(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.comparator_ = comparator_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.value_ = value_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.mlflow.api.proto.Service.DoubleClause) {
          return mergeFrom((org.mlflow.api.proto.Service.DoubleClause)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.mlflow.api.proto.Service.DoubleClause other) {
        if (other == org.mlflow.api.proto.Service.DoubleClause.getDefaultInstance()) return this;
        if (other.hasComparator()) {
          bitField0_ |= 0x00000001;
          comparator_ = other.comparator_;
          onChanged();
        }
        if (other.hasValue()) {
          setValue(other.getValue());
        }
        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.DoubleClause parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.mlflow.api.proto.Service.DoubleClause) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object comparator_ = "";
      /**
       * <pre>
       * OneOf ("&gt;", "&gt;=", "==", "!=", "&lt;=", "&lt;")
       * </pre>
       *
       * <code>optional string comparator = 1;</code>
       */
      public boolean hasComparator() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * OneOf ("&gt;", "&gt;=", "==", "!=", "&lt;=", "&lt;")
       * </pre>
       *
       * <code>optional string comparator = 1;</code>
       */
      public java.lang.String getComparator() {
        java.lang.Object ref = comparator_;
        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()) {
            comparator_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * OneOf ("&gt;", "&gt;=", "==", "!=", "&lt;=", "&lt;")
       * </pre>
       *
       * <code>optional string comparator = 1;</code>
       */
      public com.google.protobuf.ByteString
          getComparatorBytes() {
        java.lang.Object ref = comparator_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          comparator_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * OneOf ("&gt;", "&gt;=", "==", "!=", "&lt;=", "&lt;")
       * </pre>
       *
       * <code>optional string comparator = 1;</code>
       */
      public Builder setComparator(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        comparator_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * OneOf ("&gt;", "&gt;=", "==", "!=", "&lt;=", "&lt;")
       * </pre>
       *
       * <code>optional string comparator = 1;</code>
       */
      public Builder clearComparator() {
        bitField0_ = (bitField0_ & ~0x00000001);
        comparator_ = getDefaultInstance().getComparator();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * OneOf ("&gt;", "&gt;=", "==", "!=", "&lt;=", "&lt;")
       * </pre>
       *
       * <code>optional string comparator = 1;</code>
       */
      public Builder setComparatorBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        comparator_ = value;
        onChanged();
        return this;
      }

      private double value_ ;
      /**
       * <pre>
       * Float value for comparison.
       * </pre>
       *
       * <code>optional double value = 2;</code>
       */
      public boolean hasValue() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * Float value for comparison.
       * </pre>
       *
       * <code>optional double value = 2;</code>
       */
      public double getValue() {
        return value_;
      }
      /**
       * <pre>
       * Float value for comparison.
       * </pre>
       *
       * <code>optional double value = 2;</code>
       */
      public Builder setValue(double value) {
        bitField0_ |= 0x00000002;
        value_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Float value for comparison.
       * </pre>
       *
       * <code>optional double value = 2;</code>
       */
      public Builder clearValue() {
        bitField0_ = (bitField0_ & ~0x00000002);
        value_ = 0D;
        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.DoubleClause)
    }

    // @@protoc_insertion_point(class_scope:mlflow.DoubleClause)
    private static final org.mlflow.api.proto.Service.DoubleClause DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.DoubleClause();
    }

    public static org.mlflow.api.proto.Service.DoubleClause getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<DoubleClause>
        PARSER = new com.google.protobuf.AbstractParser<DoubleClause>() {
      @java.lang.Override
      public DoubleClause parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new DoubleClause(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<DoubleClause> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<DoubleClause> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public org.mlflow.api.proto.Service.DoubleClause getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface SearchRunsOrBuilder extends
      // @@protoc_insertion_point(interface_extends:mlflow.SearchRuns)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * List of experiment IDs to search over.
     * </pre>
     *
     * <code>repeated int64 experiment_ids = 1;</code>
     */
    java.util.List<java.lang.Long> getExperimentIdsList();
    /**
     * <pre>
     * List of experiment IDs to search over.
     * </pre>
     *
     * <code>repeated int64 experiment_ids = 1;</code>
     */
    int getExperimentIdsCount();
    /**
     * <pre>
     * List of experiment IDs to search over.
     * </pre>
     *
     * <code>repeated int64 experiment_ids = 1;</code>
     */
    long getExperimentIds(int index);

    /**
     * <pre>
     * Expressions describing runs (AND-ed together when filtering runs).
     * </pre>
     *
     * <code>repeated .mlflow.SearchExpression anded_expressions = 2;</code>
     */
    java.util.List<org.mlflow.api.proto.Service.SearchExpression> 
        getAndedExpressionsList();
    /**
     * <pre>
     * Expressions describing runs (AND-ed together when filtering runs).
     * </pre>
     *
     * <code>repeated .mlflow.SearchExpression anded_expressions = 2;</code>
     */
    org.mlflow.api.proto.Service.SearchExpression getAndedExpressions(int index);
    /**
     * <pre>
     * Expressions describing runs (AND-ed together when filtering runs).
     * </pre>
     *
     * <code>repeated .mlflow.SearchExpression anded_expressions = 2;</code>
     */
    int getAndedExpressionsCount();
    /**
     * <pre>
     * Expressions describing runs (AND-ed together when filtering runs).
     * </pre>
     *
     * <code>repeated .mlflow.SearchExpression anded_expressions = 2;</code>
     */
    java.util.List<? extends org.mlflow.api.proto.Service.SearchExpressionOrBuilder> 
        getAndedExpressionsOrBuilderList();
    /**
     * <pre>
     * Expressions describing runs (AND-ed together when filtering runs).
     * </pre>
     *
     * <code>repeated .mlflow.SearchExpression anded_expressions = 2;</code>
     */
    org.mlflow.api.proto.Service.SearchExpressionOrBuilder getAndedExpressionsOrBuilder(
        int index);

    /**
     * <code>optional .mlflow.ViewType run_view_type = 3 [default = ACTIVE_ONLY];</code>
     */
    boolean hasRunViewType();
    /**
     * <code>optional .mlflow.ViewType run_view_type = 3 [default = ACTIVE_ONLY];</code>
     */
    org.mlflow.api.proto.Service.ViewType getRunViewType();
  }
  /**
   * Protobuf type {@code mlflow.SearchRuns}
   */
  public  static final class SearchRuns extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:mlflow.SearchRuns)
      SearchRunsOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use SearchRuns.newBuilder() to construct.
    private SearchRuns(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private SearchRuns() {
      experimentIds_ = java.util.Collections.emptyList();
      andedExpressions_ = java.util.Collections.emptyList();
      runViewType_ = 1;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private SearchRuns(
        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 8: {
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001)) {
                experimentIds_ = new java.util.ArrayList<java.lang.Long>();
                mutable_bitField0_ |= 0x00000001;
              }
              experimentIds_.add(input.readInt64());
              break;
            }
            case 10: {
              int length = input.readRawVarint32();
              int limit = input.pushLimit(length);
              if (!((mutable_bitField0_ & 0x00000001) == 0x00000001) && input.getBytesUntilLimit() > 0) {
                experimentIds_ = new java.util.ArrayList<java.lang.Long>();
                mutable_bitField0_ |= 0x00000001;
              }
              while (input.getBytesUntilLimit() > 0) {
                experimentIds_.add(input.readInt64());
              }
              input.popLimit(limit);
              break;
            }
            case 18: {
              if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                andedExpressions_ = new java.util.ArrayList<org.mlflow.api.proto.Service.SearchExpression>();
                mutable_bitField0_ |= 0x00000002;
              }
              andedExpressions_.add(
                  input.readMessage(org.mlflow.api.proto.Service.SearchExpression.PARSER, extensionRegistry));
              break;
            }
            case 24: {
              int rawValue = input.readEnum();
                @SuppressWarnings("deprecation")
              org.mlflow.api.proto.Service.ViewType value = org.mlflow.api.proto.Service.ViewType.valueOf(rawValue);
              if (value == null) {
                unknownFields.mergeVarintField(3, rawValue);
              } else {
                bitField0_ |= 0x00000001;
                runViewType_ = rawValue;
              }
              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) == 0x00000001)) {
          experimentIds_ = java.util.Collections.unmodifiableList(experimentIds_);
        }
        if (((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
          andedExpressions_ = java.util.Collections.unmodifiableList(andedExpressions_);
        }
        this.unknownFields = unknownFields.build();
        makeExtensionsImmutable();
      }
    }
    public static final com.google.protobuf.Descriptors.Descriptor
        getDescriptor() {
      return org.mlflow.api.proto.Service.internal_static_mlflow_SearchRuns_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.mlflow.api.proto.Service.internal_static_mlflow_SearchRuns_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.mlflow.api.proto.Service.SearchRuns.class, org.mlflow.api.proto.Service.SearchRuns.Builder.class);
    }

    public interface ResponseOrBuilder extends
        // @@protoc_insertion_point(interface_extends:mlflow.SearchRuns.Response)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <pre>
       * Runs that match the search criteria.
       * </pre>
       *
       * <code>repeated .mlflow.Run runs = 1;</code>
       */
      java.util.List<org.mlflow.api.proto.Service.Run> 
          getRunsList();
      /**
       * <pre>
       * Runs that match the search criteria.
       * </pre>
       *
       * <code>repeated .mlflow.Run runs = 1;</code>
       */
      org.mlflow.api.proto.Service.Run getRuns(int index);
      /**
       * <pre>
       * Runs that match the search criteria.
       * </pre>
       *
       * <code>repeated .mlflow.Run runs = 1;</code>
       */
      int getRunsCount();
      /**
       * <pre>
       * Runs that match the search criteria.
       * </pre>
       *
       * <code>repeated .mlflow.Run runs = 1;</code>
       */
      java.util.List<? extends org.mlflow.api.proto.Service.RunOrBuilder> 
          getRunsOrBuilderList();
      /**
       * <pre>
       * Runs that match the search criteria.
       * </pre>
       *
       * <code>repeated .mlflow.Run runs = 1;</code>
       */
      org.mlflow.api.proto.Service.RunOrBuilder getRunsOrBuilder(
          int index);
    }
    /**
     * Protobuf type {@code mlflow.SearchRuns.Response}
     */
    public  static final class Response extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:mlflow.SearchRuns.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() {
        runs_ = java.util.Collections.emptyList();
      }

      @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) == 0x00000001)) {
                  runs_ = new java.util.ArrayList<org.mlflow.api.proto.Service.Run>();
                  mutable_bitField0_ |= 0x00000001;
                }
                runs_.add(
                    input.readMessage(org.mlflow.api.proto.Service.Run.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) == 0x00000001)) {
            runs_ = java.util.Collections.unmodifiableList(runs_);
          }
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_SearchRuns_Response_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_SearchRuns_Response_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.SearchRuns.Response.class, org.mlflow.api.proto.Service.SearchRuns.Response.Builder.class);
      }

      public static final int RUNS_FIELD_NUMBER = 1;
      private java.util.List<org.mlflow.api.proto.Service.Run> runs_;
      /**
       * <pre>
       * Runs that match the search criteria.
       * </pre>
       *
       * <code>repeated .mlflow.Run runs = 1;</code>
       */
      public java.util.List<org.mlflow.api.proto.Service.Run> getRunsList() {
        return runs_;
      }
      /**
       * <pre>
       * Runs that match the search criteria.
       * </pre>
       *
       * <code>repeated .mlflow.Run runs = 1;</code>
       */
      public java.util.List<? extends org.mlflow.api.proto.Service.RunOrBuilder> 
          getRunsOrBuilderList() {
        return runs_;
      }
      /**
       * <pre>
       * Runs that match the search criteria.
       * </pre>
       *
       * <code>repeated .mlflow.Run runs = 1;</code>
       */
      public int getRunsCount() {
        return runs_.size();
      }
      /**
       * <pre>
       * Runs that match the search criteria.
       * </pre>
       *
       * <code>repeated .mlflow.Run runs = 1;</code>
       */
      public org.mlflow.api.proto.Service.Run getRuns(int index) {
        return runs_.get(index);
      }
      /**
       * <pre>
       * Runs that match the search criteria.
       * </pre>
       *
       * <code>repeated .mlflow.Run runs = 1;</code>
       */
      public org.mlflow.api.proto.Service.RunOrBuilder getRunsOrBuilder(
          int index) {
        return runs_.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 < runs_.size(); i++) {
          output.writeMessage(1, runs_.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 < runs_.size(); i++) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(1, runs_.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.SearchRuns.Response)) {
          return super.equals(obj);
        }
        org.mlflow.api.proto.Service.SearchRuns.Response other = (org.mlflow.api.proto.Service.SearchRuns.Response) obj;

        boolean result = true;
        result = result && getRunsList()
            .equals(other.getRunsList());
        result = result && unknownFields.equals(other.unknownFields);
        return result;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        if (getRunsCount() > 0) {
          hash = (37 * hash) + RUNS_FIELD_NUMBER;
          hash = (53 * hash) + getRunsList().hashCode();
        }
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static org.mlflow.api.proto.Service.SearchRuns.Response parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.SearchRuns.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.SearchRuns.Response parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.SearchRuns.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.SearchRuns.Response parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.SearchRuns.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.SearchRuns.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.SearchRuns.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.SearchRuns.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.SearchRuns.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.SearchRuns.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.SearchRuns.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.SearchRuns.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.SearchRuns.Response}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:mlflow.SearchRuns.Response)
          org.mlflow.api.proto.Service.SearchRuns.ResponseOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_SearchRuns_Response_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_SearchRuns_Response_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  org.mlflow.api.proto.Service.SearchRuns.Response.class, org.mlflow.api.proto.Service.SearchRuns.Response.Builder.class);
        }

        // Construct using org.mlflow.api.proto.Service.SearchRuns.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) {
            getRunsFieldBuilder();
          }
        }
        @java.lang.Override
        public Builder clear() {
          super.clear();
          if (runsBuilder_ == null) {
            runs_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            runsBuilder_.clear();
          }
          return this;
        }

        @java.lang.Override
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_SearchRuns_Response_descriptor;
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.SearchRuns.Response getDefaultInstanceForType() {
          return org.mlflow.api.proto.Service.SearchRuns.Response.getDefaultInstance();
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.SearchRuns.Response build() {
          org.mlflow.api.proto.Service.SearchRuns.Response result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.SearchRuns.Response buildPartial() {
          org.mlflow.api.proto.Service.SearchRuns.Response result = new org.mlflow.api.proto.Service.SearchRuns.Response(this);
          int from_bitField0_ = bitField0_;
          if (runsBuilder_ == null) {
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
              runs_ = java.util.Collections.unmodifiableList(runs_);
              bitField0_ = (bitField0_ & ~0x00000001);
            }
            result.runs_ = runs_;
          } else {
            result.runs_ = runsBuilder_.build();
          }
          onBuilt();
          return result;
        }

        @java.lang.Override
        public Builder clone() {
          return (Builder) super.clone();
        }
        @java.lang.Override
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.setField(field, value);
        }
        @java.lang.Override
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }
        @java.lang.Override
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }
        @java.lang.Override
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }
        @java.lang.Override
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }
        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof org.mlflow.api.proto.Service.SearchRuns.Response) {
            return mergeFrom((org.mlflow.api.proto.Service.SearchRuns.Response)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(org.mlflow.api.proto.Service.SearchRuns.Response other) {
          if (other == org.mlflow.api.proto.Service.SearchRuns.Response.getDefaultInstance()) return this;
          if (runsBuilder_ == null) {
            if (!other.runs_.isEmpty()) {
              if (runs_.isEmpty()) {
                runs_ = other.runs_;
                bitField0_ = (bitField0_ & ~0x00000001);
              } else {
                ensureRunsIsMutable();
                runs_.addAll(other.runs_);
              }
              onChanged();
            }
          } else {
            if (!other.runs_.isEmpty()) {
              if (runsBuilder_.isEmpty()) {
                runsBuilder_.dispose();
                runsBuilder_ = null;
                runs_ = other.runs_;
                bitField0_ = (bitField0_ & ~0x00000001);
                runsBuilder_ = 
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                     getRunsFieldBuilder() : null;
              } else {
                runsBuilder_.addAllMessages(other.runs_);
              }
            }
          }
          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.SearchRuns.Response parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (org.mlflow.api.proto.Service.SearchRuns.Response) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        private java.util.List<org.mlflow.api.proto.Service.Run> runs_ =
          java.util.Collections.emptyList();
        private void ensureRunsIsMutable() {
          if (!((bitField0_ & 0x00000001) == 0x00000001)) {
            runs_ = new java.util.ArrayList<org.mlflow.api.proto.Service.Run>(runs_);
            bitField0_ |= 0x00000001;
           }
        }

        private com.google.protobuf.RepeatedFieldBuilderV3<
            org.mlflow.api.proto.Service.Run, org.mlflow.api.proto.Service.Run.Builder, org.mlflow.api.proto.Service.RunOrBuilder> runsBuilder_;

        /**
         * <pre>
         * Runs that match the search criteria.
         * </pre>
         *
         * <code>repeated .mlflow.Run runs = 1;</code>
         */
        public java.util.List<org.mlflow.api.proto.Service.Run> getRunsList() {
          if (runsBuilder_ == null) {
            return java.util.Collections.unmodifiableList(runs_);
          } else {
            return runsBuilder_.getMessageList();
          }
        }
        /**
         * <pre>
         * Runs that match the search criteria.
         * </pre>
         *
         * <code>repeated .mlflow.Run runs = 1;</code>
         */
        public int getRunsCount() {
          if (runsBuilder_ == null) {
            return runs_.size();
          } else {
            return runsBuilder_.getCount();
          }
        }
        /**
         * <pre>
         * Runs that match the search criteria.
         * </pre>
         *
         * <code>repeated .mlflow.Run runs = 1;</code>
         */
        public org.mlflow.api.proto.Service.Run getRuns(int index) {
          if (runsBuilder_ == null) {
            return runs_.get(index);
          } else {
            return runsBuilder_.getMessage(index);
          }
        }
        /**
         * <pre>
         * Runs that match the search criteria.
         * </pre>
         *
         * <code>repeated .mlflow.Run runs = 1;</code>
         */
        public Builder setRuns(
            int index, org.mlflow.api.proto.Service.Run value) {
          if (runsBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureRunsIsMutable();
            runs_.set(index, value);
            onChanged();
          } else {
            runsBuilder_.setMessage(index, value);
          }
          return this;
        }
        /**
         * <pre>
         * Runs that match the search criteria.
         * </pre>
         *
         * <code>repeated .mlflow.Run runs = 1;</code>
         */
        public Builder setRuns(
            int index, org.mlflow.api.proto.Service.Run.Builder builderForValue) {
          if (runsBuilder_ == null) {
            ensureRunsIsMutable();
            runs_.set(index, builderForValue.build());
            onChanged();
          } else {
            runsBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * Runs that match the search criteria.
         * </pre>
         *
         * <code>repeated .mlflow.Run runs = 1;</code>
         */
        public Builder addRuns(org.mlflow.api.proto.Service.Run value) {
          if (runsBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureRunsIsMutable();
            runs_.add(value);
            onChanged();
          } else {
            runsBuilder_.addMessage(value);
          }
          return this;
        }
        /**
         * <pre>
         * Runs that match the search criteria.
         * </pre>
         *
         * <code>repeated .mlflow.Run runs = 1;</code>
         */
        public Builder addRuns(
            int index, org.mlflow.api.proto.Service.Run value) {
          if (runsBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureRunsIsMutable();
            runs_.add(index, value);
            onChanged();
          } else {
            runsBuilder_.addMessage(index, value);
          }
          return this;
        }
        /**
         * <pre>
         * Runs that match the search criteria.
         * </pre>
         *
         * <code>repeated .mlflow.Run runs = 1;</code>
         */
        public Builder addRuns(
            org.mlflow.api.proto.Service.Run.Builder builderForValue) {
          if (runsBuilder_ == null) {
            ensureRunsIsMutable();
            runs_.add(builderForValue.build());
            onChanged();
          } else {
            runsBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * Runs that match the search criteria.
         * </pre>
         *
         * <code>repeated .mlflow.Run runs = 1;</code>
         */
        public Builder addRuns(
            int index, org.mlflow.api.proto.Service.Run.Builder builderForValue) {
          if (runsBuilder_ == null) {
            ensureRunsIsMutable();
            runs_.add(index, builderForValue.build());
            onChanged();
          } else {
            runsBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * Runs that match the search criteria.
         * </pre>
         *
         * <code>repeated .mlflow.Run runs = 1;</code>
         */
        public Builder addAllRuns(
            java.lang.Iterable<? extends org.mlflow.api.proto.Service.Run> values) {
          if (runsBuilder_ == null) {
            ensureRunsIsMutable();
            com.google.protobuf.AbstractMessageLite.Builder.addAll(
                values, runs_);
            onChanged();
          } else {
            runsBuilder_.addAllMessages(values);
          }
          return this;
        }
        /**
         * <pre>
         * Runs that match the search criteria.
         * </pre>
         *
         * <code>repeated .mlflow.Run runs = 1;</code>
         */
        public Builder clearRuns() {
          if (runsBuilder_ == null) {
            runs_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000001);
            onChanged();
          } else {
            runsBuilder_.clear();
          }
          return this;
        }
        /**
         * <pre>
         * Runs that match the search criteria.
         * </pre>
         *
         * <code>repeated .mlflow.Run runs = 1;</code>
         */
        public Builder removeRuns(int index) {
          if (runsBuilder_ == null) {
            ensureRunsIsMutable();
            runs_.remove(index);
            onChanged();
          } else {
            runsBuilder_.remove(index);
          }
          return this;
        }
        /**
         * <pre>
         * Runs that match the search criteria.
         * </pre>
         *
         * <code>repeated .mlflow.Run runs = 1;</code>
         */
        public org.mlflow.api.proto.Service.Run.Builder getRunsBuilder(
            int index) {
          return getRunsFieldBuilder().getBuilder(index);
        }
        /**
         * <pre>
         * Runs that match the search criteria.
         * </pre>
         *
         * <code>repeated .mlflow.Run runs = 1;</code>
         */
        public org.mlflow.api.proto.Service.RunOrBuilder getRunsOrBuilder(
            int index) {
          if (runsBuilder_ == null) {
            return runs_.get(index);  } else {
            return runsBuilder_.getMessageOrBuilder(index);
          }
        }
        /**
         * <pre>
         * Runs that match the search criteria.
         * </pre>
         *
         * <code>repeated .mlflow.Run runs = 1;</code>
         */
        public java.util.List<? extends org.mlflow.api.proto.Service.RunOrBuilder> 
             getRunsOrBuilderList() {
          if (runsBuilder_ != null) {
            return runsBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(runs_);
          }
        }
        /**
         * <pre>
         * Runs that match the search criteria.
         * </pre>
         *
         * <code>repeated .mlflow.Run runs = 1;</code>
         */
        public org.mlflow.api.proto.Service.Run.Builder addRunsBuilder() {
          return getRunsFieldBuilder().addBuilder(
              org.mlflow.api.proto.Service.Run.getDefaultInstance());
        }
        /**
         * <pre>
         * Runs that match the search criteria.
         * </pre>
         *
         * <code>repeated .mlflow.Run runs = 1;</code>
         */
        public org.mlflow.api.proto.Service.Run.Builder addRunsBuilder(
            int index) {
          return getRunsFieldBuilder().addBuilder(
              index, org.mlflow.api.proto.Service.Run.getDefaultInstance());
        }
        /**
         * <pre>
         * Runs that match the search criteria.
         * </pre>
         *
         * <code>repeated .mlflow.Run runs = 1;</code>
         */
        public java.util.List<org.mlflow.api.proto.Service.Run.Builder> 
             getRunsBuilderList() {
          return getRunsFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilderV3<
            org.mlflow.api.proto.Service.Run, org.mlflow.api.proto.Service.Run.Builder, org.mlflow.api.proto.Service.RunOrBuilder> 
            getRunsFieldBuilder() {
          if (runsBuilder_ == null) {
            runsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
                org.mlflow.api.proto.Service.Run, org.mlflow.api.proto.Service.Run.Builder, org.mlflow.api.proto.Service.RunOrBuilder>(
                    runs_,
                    ((bitField0_ & 0x00000001) == 0x00000001),
                    getParentForChildren(),
                    isClean());
            runs_ = null;
          }
          return runsBuilder_;
        }
        @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.SearchRuns.Response)
      }

      // @@protoc_insertion_point(class_scope:mlflow.SearchRuns.Response)
      private static final org.mlflow.api.proto.Service.SearchRuns.Response DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.SearchRuns.Response();
      }

      public static org.mlflow.api.proto.Service.SearchRuns.Response getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      @java.lang.Deprecated public static final com.google.protobuf.Parser<Response>
          PARSER = new com.google.protobuf.AbstractParser<Response>() {
        @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<Response> parser() {
        return PARSER;
      }

      @java.lang.Override
      public com.google.protobuf.Parser<Response> getParserForType() {
        return PARSER;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.SearchRuns.Response getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    private int bitField0_;
    public static final int EXPERIMENT_IDS_FIELD_NUMBER = 1;
    private java.util.List<java.lang.Long> experimentIds_;
    /**
     * <pre>
     * List of experiment IDs to search over.
     * </pre>
     *
     * <code>repeated int64 experiment_ids = 1;</code>
     */
    public java.util.List<java.lang.Long>
        getExperimentIdsList() {
      return experimentIds_;
    }
    /**
     * <pre>
     * List of experiment IDs to search over.
     * </pre>
     *
     * <code>repeated int64 experiment_ids = 1;</code>
     */
    public int getExperimentIdsCount() {
      return experimentIds_.size();
    }
    /**
     * <pre>
     * List of experiment IDs to search over.
     * </pre>
     *
     * <code>repeated int64 experiment_ids = 1;</code>
     */
    public long getExperimentIds(int index) {
      return experimentIds_.get(index);
    }

    public static final int ANDED_EXPRESSIONS_FIELD_NUMBER = 2;
    private java.util.List<org.mlflow.api.proto.Service.SearchExpression> andedExpressions_;
    /**
     * <pre>
     * Expressions describing runs (AND-ed together when filtering runs).
     * </pre>
     *
     * <code>repeated .mlflow.SearchExpression anded_expressions = 2;</code>
     */
    public java.util.List<org.mlflow.api.proto.Service.SearchExpression> getAndedExpressionsList() {
      return andedExpressions_;
    }
    /**
     * <pre>
     * Expressions describing runs (AND-ed together when filtering runs).
     * </pre>
     *
     * <code>repeated .mlflow.SearchExpression anded_expressions = 2;</code>
     */
    public java.util.List<? extends org.mlflow.api.proto.Service.SearchExpressionOrBuilder> 
        getAndedExpressionsOrBuilderList() {
      return andedExpressions_;
    }
    /**
     * <pre>
     * Expressions describing runs (AND-ed together when filtering runs).
     * </pre>
     *
     * <code>repeated .mlflow.SearchExpression anded_expressions = 2;</code>
     */
    public int getAndedExpressionsCount() {
      return andedExpressions_.size();
    }
    /**
     * <pre>
     * Expressions describing runs (AND-ed together when filtering runs).
     * </pre>
     *
     * <code>repeated .mlflow.SearchExpression anded_expressions = 2;</code>
     */
    public org.mlflow.api.proto.Service.SearchExpression getAndedExpressions(int index) {
      return andedExpressions_.get(index);
    }
    /**
     * <pre>
     * Expressions describing runs (AND-ed together when filtering runs).
     * </pre>
     *
     * <code>repeated .mlflow.SearchExpression anded_expressions = 2;</code>
     */
    public org.mlflow.api.proto.Service.SearchExpressionOrBuilder getAndedExpressionsOrBuilder(
        int index) {
      return andedExpressions_.get(index);
    }

    public static final int RUN_VIEW_TYPE_FIELD_NUMBER = 3;
    private int runViewType_;
    /**
     * <code>optional .mlflow.ViewType run_view_type = 3 [default = ACTIVE_ONLY];</code>
     */
    public boolean hasRunViewType() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <code>optional .mlflow.ViewType run_view_type = 3 [default = ACTIVE_ONLY];</code>
     */
    public org.mlflow.api.proto.Service.ViewType getRunViewType() {
      @SuppressWarnings("deprecation")
      org.mlflow.api.proto.Service.ViewType result = org.mlflow.api.proto.Service.ViewType.valueOf(runViewType_);
      return result == null ? org.mlflow.api.proto.Service.ViewType.ACTIVE_ONLY : result;
    }

    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 < experimentIds_.size(); i++) {
        output.writeInt64(1, experimentIds_.get(i));
      }
      for (int i = 0; i < andedExpressions_.size(); i++) {
        output.writeMessage(2, andedExpressions_.get(i));
      }
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        output.writeEnum(3, runViewType_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      {
        int dataSize = 0;
        for (int i = 0; i < experimentIds_.size(); i++) {
          dataSize += com.google.protobuf.CodedOutputStream
            .computeInt64SizeNoTag(experimentIds_.get(i));
        }
        size += dataSize;
        size += 1 * getExperimentIdsList().size();
      }
      for (int i = 0; i < andedExpressions_.size(); i++) {
        size += com.google.protobuf.CodedOutputStream
          .computeMessageSize(2, andedExpressions_.get(i));
      }
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.CodedOutputStream
          .computeEnumSize(3, runViewType_);
      }
      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.SearchRuns)) {
        return super.equals(obj);
      }
      org.mlflow.api.proto.Service.SearchRuns other = (org.mlflow.api.proto.Service.SearchRuns) obj;

      boolean result = true;
      result = result && getExperimentIdsList()
          .equals(other.getExperimentIdsList());
      result = result && getAndedExpressionsList()
          .equals(other.getAndedExpressionsList());
      result = result && (hasRunViewType() == other.hasRunViewType());
      if (hasRunViewType()) {
        result = result && runViewType_ == other.runViewType_;
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (getExperimentIdsCount() > 0) {
        hash = (37 * hash) + EXPERIMENT_IDS_FIELD_NUMBER;
        hash = (53 * hash) + getExperimentIdsList().hashCode();
      }
      if (getAndedExpressionsCount() > 0) {
        hash = (37 * hash) + ANDED_EXPRESSIONS_FIELD_NUMBER;
        hash = (53 * hash) + getAndedExpressionsList().hashCode();
      }
      if (hasRunViewType()) {
        hash = (37 * hash) + RUN_VIEW_TYPE_FIELD_NUMBER;
        hash = (53 * hash) + runViewType_;
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.mlflow.api.proto.Service.SearchRuns parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.SearchRuns 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.SearchRuns parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.SearchRuns 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.SearchRuns parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.SearchRuns 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.SearchRuns parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.SearchRuns 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.SearchRuns parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.SearchRuns 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.SearchRuns 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.SearchRuns 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.SearchRuns 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.SearchRuns}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:mlflow.SearchRuns)
        org.mlflow.api.proto.Service.SearchRunsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_SearchRuns_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_SearchRuns_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.SearchRuns.class, org.mlflow.api.proto.Service.SearchRuns.Builder.class);
      }

      // Construct using org.mlflow.api.proto.Service.SearchRuns.newBuilder()
      private Builder() {
        maybeForceBuilderInitialization();
      }

      private Builder(
          com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
        super(parent);
        maybeForceBuilderInitialization();
      }
      private void maybeForceBuilderInitialization() {
        if (com.google.protobuf.GeneratedMessageV3
                .alwaysUseFieldBuilders) {
          getAndedExpressionsFieldBuilder();
        }
      }
      @java.lang.Override
      public Builder clear() {
        super.clear();
        experimentIds_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000001);
        if (andedExpressionsBuilder_ == null) {
          andedExpressions_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
        } else {
          andedExpressionsBuilder_.clear();
        }
        runViewType_ = 1;
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_SearchRuns_descriptor;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.SearchRuns getDefaultInstanceForType() {
        return org.mlflow.api.proto.Service.SearchRuns.getDefaultInstance();
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.SearchRuns build() {
        org.mlflow.api.proto.Service.SearchRuns result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.SearchRuns buildPartial() {
        org.mlflow.api.proto.Service.SearchRuns result = new org.mlflow.api.proto.Service.SearchRuns(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          experimentIds_ = java.util.Collections.unmodifiableList(experimentIds_);
          bitField0_ = (bitField0_ & ~0x00000001);
        }
        result.experimentIds_ = experimentIds_;
        if (andedExpressionsBuilder_ == null) {
          if (((bitField0_ & 0x00000002) == 0x00000002)) {
            andedExpressions_ = java.util.Collections.unmodifiableList(andedExpressions_);
            bitField0_ = (bitField0_ & ~0x00000002);
          }
          result.andedExpressions_ = andedExpressions_;
        } else {
          result.andedExpressions_ = andedExpressionsBuilder_.build();
        }
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000001;
        }
        result.runViewType_ = runViewType_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.mlflow.api.proto.Service.SearchRuns) {
          return mergeFrom((org.mlflow.api.proto.Service.SearchRuns)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.mlflow.api.proto.Service.SearchRuns other) {
        if (other == org.mlflow.api.proto.Service.SearchRuns.getDefaultInstance()) return this;
        if (!other.experimentIds_.isEmpty()) {
          if (experimentIds_.isEmpty()) {
            experimentIds_ = other.experimentIds_;
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            ensureExperimentIdsIsMutable();
            experimentIds_.addAll(other.experimentIds_);
          }
          onChanged();
        }
        if (andedExpressionsBuilder_ == null) {
          if (!other.andedExpressions_.isEmpty()) {
            if (andedExpressions_.isEmpty()) {
              andedExpressions_ = other.andedExpressions_;
              bitField0_ = (bitField0_ & ~0x00000002);
            } else {
              ensureAndedExpressionsIsMutable();
              andedExpressions_.addAll(other.andedExpressions_);
            }
            onChanged();
          }
        } else {
          if (!other.andedExpressions_.isEmpty()) {
            if (andedExpressionsBuilder_.isEmpty()) {
              andedExpressionsBuilder_.dispose();
              andedExpressionsBuilder_ = null;
              andedExpressions_ = other.andedExpressions_;
              bitField0_ = (bitField0_ & ~0x00000002);
              andedExpressionsBuilder_ = 
                com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                   getAndedExpressionsFieldBuilder() : null;
            } else {
              andedExpressionsBuilder_.addAllMessages(other.andedExpressions_);
            }
          }
        }
        if (other.hasRunViewType()) {
          setRunViewType(other.getRunViewType());
        }
        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.SearchRuns parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.mlflow.api.proto.Service.SearchRuns) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.util.List<java.lang.Long> experimentIds_ = java.util.Collections.emptyList();
      private void ensureExperimentIdsIsMutable() {
        if (!((bitField0_ & 0x00000001) == 0x00000001)) {
          experimentIds_ = new java.util.ArrayList<java.lang.Long>(experimentIds_);
          bitField0_ |= 0x00000001;
         }
      }
      /**
       * <pre>
       * List of experiment IDs to search over.
       * </pre>
       *
       * <code>repeated int64 experiment_ids = 1;</code>
       */
      public java.util.List<java.lang.Long>
          getExperimentIdsList() {
        return java.util.Collections.unmodifiableList(experimentIds_);
      }
      /**
       * <pre>
       * List of experiment IDs to search over.
       * </pre>
       *
       * <code>repeated int64 experiment_ids = 1;</code>
       */
      public int getExperimentIdsCount() {
        return experimentIds_.size();
      }
      /**
       * <pre>
       * List of experiment IDs to search over.
       * </pre>
       *
       * <code>repeated int64 experiment_ids = 1;</code>
       */
      public long getExperimentIds(int index) {
        return experimentIds_.get(index);
      }
      /**
       * <pre>
       * List of experiment IDs to search over.
       * </pre>
       *
       * <code>repeated int64 experiment_ids = 1;</code>
       */
      public Builder setExperimentIds(
          int index, long value) {
        ensureExperimentIdsIsMutable();
        experimentIds_.set(index, value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * List of experiment IDs to search over.
       * </pre>
       *
       * <code>repeated int64 experiment_ids = 1;</code>
       */
      public Builder addExperimentIds(long value) {
        ensureExperimentIdsIsMutable();
        experimentIds_.add(value);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * List of experiment IDs to search over.
       * </pre>
       *
       * <code>repeated int64 experiment_ids = 1;</code>
       */
      public Builder addAllExperimentIds(
          java.lang.Iterable<? extends java.lang.Long> values) {
        ensureExperimentIdsIsMutable();
        com.google.protobuf.AbstractMessageLite.Builder.addAll(
            values, experimentIds_);
        onChanged();
        return this;
      }
      /**
       * <pre>
       * List of experiment IDs to search over.
       * </pre>
       *
       * <code>repeated int64 experiment_ids = 1;</code>
       */
      public Builder clearExperimentIds() {
        experimentIds_ = java.util.Collections.emptyList();
        bitField0_ = (bitField0_ & ~0x00000001);
        onChanged();
        return this;
      }

      private java.util.List<org.mlflow.api.proto.Service.SearchExpression> andedExpressions_ =
        java.util.Collections.emptyList();
      private void ensureAndedExpressionsIsMutable() {
        if (!((bitField0_ & 0x00000002) == 0x00000002)) {
          andedExpressions_ = new java.util.ArrayList<org.mlflow.api.proto.Service.SearchExpression>(andedExpressions_);
          bitField0_ |= 0x00000002;
         }
      }

      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.mlflow.api.proto.Service.SearchExpression, org.mlflow.api.proto.Service.SearchExpression.Builder, org.mlflow.api.proto.Service.SearchExpressionOrBuilder> andedExpressionsBuilder_;

      /**
       * <pre>
       * Expressions describing runs (AND-ed together when filtering runs).
       * </pre>
       *
       * <code>repeated .mlflow.SearchExpression anded_expressions = 2;</code>
       */
      public java.util.List<org.mlflow.api.proto.Service.SearchExpression> getAndedExpressionsList() {
        if (andedExpressionsBuilder_ == null) {
          return java.util.Collections.unmodifiableList(andedExpressions_);
        } else {
          return andedExpressionsBuilder_.getMessageList();
        }
      }
      /**
       * <pre>
       * Expressions describing runs (AND-ed together when filtering runs).
       * </pre>
       *
       * <code>repeated .mlflow.SearchExpression anded_expressions = 2;</code>
       */
      public int getAndedExpressionsCount() {
        if (andedExpressionsBuilder_ == null) {
          return andedExpressions_.size();
        } else {
          return andedExpressionsBuilder_.getCount();
        }
      }
      /**
       * <pre>
       * Expressions describing runs (AND-ed together when filtering runs).
       * </pre>
       *
       * <code>repeated .mlflow.SearchExpression anded_expressions = 2;</code>
       */
      public org.mlflow.api.proto.Service.SearchExpression getAndedExpressions(int index) {
        if (andedExpressionsBuilder_ == null) {
          return andedExpressions_.get(index);
        } else {
          return andedExpressionsBuilder_.getMessage(index);
        }
      }
      /**
       * <pre>
       * Expressions describing runs (AND-ed together when filtering runs).
       * </pre>
       *
       * <code>repeated .mlflow.SearchExpression anded_expressions = 2;</code>
       */
      public Builder setAndedExpressions(
          int index, org.mlflow.api.proto.Service.SearchExpression value) {
        if (andedExpressionsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAndedExpressionsIsMutable();
          andedExpressions_.set(index, value);
          onChanged();
        } else {
          andedExpressionsBuilder_.setMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Expressions describing runs (AND-ed together when filtering runs).
       * </pre>
       *
       * <code>repeated .mlflow.SearchExpression anded_expressions = 2;</code>
       */
      public Builder setAndedExpressions(
          int index, org.mlflow.api.proto.Service.SearchExpression.Builder builderForValue) {
        if (andedExpressionsBuilder_ == null) {
          ensureAndedExpressionsIsMutable();
          andedExpressions_.set(index, builderForValue.build());
          onChanged();
        } else {
          andedExpressionsBuilder_.setMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Expressions describing runs (AND-ed together when filtering runs).
       * </pre>
       *
       * <code>repeated .mlflow.SearchExpression anded_expressions = 2;</code>
       */
      public Builder addAndedExpressions(org.mlflow.api.proto.Service.SearchExpression value) {
        if (andedExpressionsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAndedExpressionsIsMutable();
          andedExpressions_.add(value);
          onChanged();
        } else {
          andedExpressionsBuilder_.addMessage(value);
        }
        return this;
      }
      /**
       * <pre>
       * Expressions describing runs (AND-ed together when filtering runs).
       * </pre>
       *
       * <code>repeated .mlflow.SearchExpression anded_expressions = 2;</code>
       */
      public Builder addAndedExpressions(
          int index, org.mlflow.api.proto.Service.SearchExpression value) {
        if (andedExpressionsBuilder_ == null) {
          if (value == null) {
            throw new NullPointerException();
          }
          ensureAndedExpressionsIsMutable();
          andedExpressions_.add(index, value);
          onChanged();
        } else {
          andedExpressionsBuilder_.addMessage(index, value);
        }
        return this;
      }
      /**
       * <pre>
       * Expressions describing runs (AND-ed together when filtering runs).
       * </pre>
       *
       * <code>repeated .mlflow.SearchExpression anded_expressions = 2;</code>
       */
      public Builder addAndedExpressions(
          org.mlflow.api.proto.Service.SearchExpression.Builder builderForValue) {
        if (andedExpressionsBuilder_ == null) {
          ensureAndedExpressionsIsMutable();
          andedExpressions_.add(builderForValue.build());
          onChanged();
        } else {
          andedExpressionsBuilder_.addMessage(builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Expressions describing runs (AND-ed together when filtering runs).
       * </pre>
       *
       * <code>repeated .mlflow.SearchExpression anded_expressions = 2;</code>
       */
      public Builder addAndedExpressions(
          int index, org.mlflow.api.proto.Service.SearchExpression.Builder builderForValue) {
        if (andedExpressionsBuilder_ == null) {
          ensureAndedExpressionsIsMutable();
          andedExpressions_.add(index, builderForValue.build());
          onChanged();
        } else {
          andedExpressionsBuilder_.addMessage(index, builderForValue.build());
        }
        return this;
      }
      /**
       * <pre>
       * Expressions describing runs (AND-ed together when filtering runs).
       * </pre>
       *
       * <code>repeated .mlflow.SearchExpression anded_expressions = 2;</code>
       */
      public Builder addAllAndedExpressions(
          java.lang.Iterable<? extends org.mlflow.api.proto.Service.SearchExpression> values) {
        if (andedExpressionsBuilder_ == null) {
          ensureAndedExpressionsIsMutable();
          com.google.protobuf.AbstractMessageLite.Builder.addAll(
              values, andedExpressions_);
          onChanged();
        } else {
          andedExpressionsBuilder_.addAllMessages(values);
        }
        return this;
      }
      /**
       * <pre>
       * Expressions describing runs (AND-ed together when filtering runs).
       * </pre>
       *
       * <code>repeated .mlflow.SearchExpression anded_expressions = 2;</code>
       */
      public Builder clearAndedExpressions() {
        if (andedExpressionsBuilder_ == null) {
          andedExpressions_ = java.util.Collections.emptyList();
          bitField0_ = (bitField0_ & ~0x00000002);
          onChanged();
        } else {
          andedExpressionsBuilder_.clear();
        }
        return this;
      }
      /**
       * <pre>
       * Expressions describing runs (AND-ed together when filtering runs).
       * </pre>
       *
       * <code>repeated .mlflow.SearchExpression anded_expressions = 2;</code>
       */
      public Builder removeAndedExpressions(int index) {
        if (andedExpressionsBuilder_ == null) {
          ensureAndedExpressionsIsMutable();
          andedExpressions_.remove(index);
          onChanged();
        } else {
          andedExpressionsBuilder_.remove(index);
        }
        return this;
      }
      /**
       * <pre>
       * Expressions describing runs (AND-ed together when filtering runs).
       * </pre>
       *
       * <code>repeated .mlflow.SearchExpression anded_expressions = 2;</code>
       */
      public org.mlflow.api.proto.Service.SearchExpression.Builder getAndedExpressionsBuilder(
          int index) {
        return getAndedExpressionsFieldBuilder().getBuilder(index);
      }
      /**
       * <pre>
       * Expressions describing runs (AND-ed together when filtering runs).
       * </pre>
       *
       * <code>repeated .mlflow.SearchExpression anded_expressions = 2;</code>
       */
      public org.mlflow.api.proto.Service.SearchExpressionOrBuilder getAndedExpressionsOrBuilder(
          int index) {
        if (andedExpressionsBuilder_ == null) {
          return andedExpressions_.get(index);  } else {
          return andedExpressionsBuilder_.getMessageOrBuilder(index);
        }
      }
      /**
       * <pre>
       * Expressions describing runs (AND-ed together when filtering runs).
       * </pre>
       *
       * <code>repeated .mlflow.SearchExpression anded_expressions = 2;</code>
       */
      public java.util.List<? extends org.mlflow.api.proto.Service.SearchExpressionOrBuilder> 
           getAndedExpressionsOrBuilderList() {
        if (andedExpressionsBuilder_ != null) {
          return andedExpressionsBuilder_.getMessageOrBuilderList();
        } else {
          return java.util.Collections.unmodifiableList(andedExpressions_);
        }
      }
      /**
       * <pre>
       * Expressions describing runs (AND-ed together when filtering runs).
       * </pre>
       *
       * <code>repeated .mlflow.SearchExpression anded_expressions = 2;</code>
       */
      public org.mlflow.api.proto.Service.SearchExpression.Builder addAndedExpressionsBuilder() {
        return getAndedExpressionsFieldBuilder().addBuilder(
            org.mlflow.api.proto.Service.SearchExpression.getDefaultInstance());
      }
      /**
       * <pre>
       * Expressions describing runs (AND-ed together when filtering runs).
       * </pre>
       *
       * <code>repeated .mlflow.SearchExpression anded_expressions = 2;</code>
       */
      public org.mlflow.api.proto.Service.SearchExpression.Builder addAndedExpressionsBuilder(
          int index) {
        return getAndedExpressionsFieldBuilder().addBuilder(
            index, org.mlflow.api.proto.Service.SearchExpression.getDefaultInstance());
      }
      /**
       * <pre>
       * Expressions describing runs (AND-ed together when filtering runs).
       * </pre>
       *
       * <code>repeated .mlflow.SearchExpression anded_expressions = 2;</code>
       */
      public java.util.List<org.mlflow.api.proto.Service.SearchExpression.Builder> 
           getAndedExpressionsBuilderList() {
        return getAndedExpressionsFieldBuilder().getBuilderList();
      }
      private com.google.protobuf.RepeatedFieldBuilderV3<
          org.mlflow.api.proto.Service.SearchExpression, org.mlflow.api.proto.Service.SearchExpression.Builder, org.mlflow.api.proto.Service.SearchExpressionOrBuilder> 
          getAndedExpressionsFieldBuilder() {
        if (andedExpressionsBuilder_ == null) {
          andedExpressionsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
              org.mlflow.api.proto.Service.SearchExpression, org.mlflow.api.proto.Service.SearchExpression.Builder, org.mlflow.api.proto.Service.SearchExpressionOrBuilder>(
                  andedExpressions_,
                  ((bitField0_ & 0x00000002) == 0x00000002),
                  getParentForChildren(),
                  isClean());
          andedExpressions_ = null;
        }
        return andedExpressionsBuilder_;
      }

      private int runViewType_ = 1;
      /**
       * <code>optional .mlflow.ViewType run_view_type = 3 [default = ACTIVE_ONLY];</code>
       */
      public boolean hasRunViewType() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <code>optional .mlflow.ViewType run_view_type = 3 [default = ACTIVE_ONLY];</code>
       */
      public org.mlflow.api.proto.Service.ViewType getRunViewType() {
        @SuppressWarnings("deprecation")
        org.mlflow.api.proto.Service.ViewType result = org.mlflow.api.proto.Service.ViewType.valueOf(runViewType_);
        return result == null ? org.mlflow.api.proto.Service.ViewType.ACTIVE_ONLY : result;
      }
      /**
       * <code>optional .mlflow.ViewType run_view_type = 3 [default = ACTIVE_ONLY];</code>
       */
      public Builder setRunViewType(org.mlflow.api.proto.Service.ViewType value) {
        if (value == null) {
          throw new NullPointerException();
        }
        bitField0_ |= 0x00000004;
        runViewType_ = value.getNumber();
        onChanged();
        return this;
      }
      /**
       * <code>optional .mlflow.ViewType run_view_type = 3 [default = ACTIVE_ONLY];</code>
       */
      public Builder clearRunViewType() {
        bitField0_ = (bitField0_ & ~0x00000004);
        runViewType_ = 1;
        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.SearchRuns)
    }

    // @@protoc_insertion_point(class_scope:mlflow.SearchRuns)
    private static final org.mlflow.api.proto.Service.SearchRuns DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.SearchRuns();
    }

    public static org.mlflow.api.proto.Service.SearchRuns getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<SearchRuns>
        PARSER = new com.google.protobuf.AbstractParser<SearchRuns>() {
      @java.lang.Override
      public SearchRuns parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new SearchRuns(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<SearchRuns> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<SearchRuns> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public org.mlflow.api.proto.Service.SearchRuns getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface ListArtifactsOrBuilder extends
      // @@protoc_insertion_point(interface_extends:mlflow.ListArtifacts)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * ID of the run whose artifacts to list.
     * </pre>
     *
     * <code>optional string run_uuid = 1;</code>
     */
    boolean hasRunUuid();
    /**
     * <pre>
     * ID of the run whose artifacts to list.
     * </pre>
     *
     * <code>optional string run_uuid = 1;</code>
     */
    java.lang.String getRunUuid();
    /**
     * <pre>
     * ID of the run whose artifacts to list.
     * </pre>
     *
     * <code>optional string run_uuid = 1;</code>
     */
    com.google.protobuf.ByteString
        getRunUuidBytes();

    /**
     * <pre>
     * Filter artifacts matching this path (a relative path from the root artifact directory).
     * </pre>
     *
     * <code>optional string path = 2;</code>
     */
    boolean hasPath();
    /**
     * <pre>
     * Filter artifacts matching this path (a relative path from the root artifact directory).
     * </pre>
     *
     * <code>optional string path = 2;</code>
     */
    java.lang.String getPath();
    /**
     * <pre>
     * Filter artifacts matching this path (a relative path from the root artifact directory).
     * </pre>
     *
     * <code>optional string path = 2;</code>
     */
    com.google.protobuf.ByteString
        getPathBytes();
  }
  /**
   * Protobuf type {@code mlflow.ListArtifacts}
   */
  public  static final class ListArtifacts extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:mlflow.ListArtifacts)
      ListArtifactsOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use ListArtifacts.newBuilder() to construct.
    private ListArtifacts(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private ListArtifacts() {
      runUuid_ = "";
      path_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private ListArtifacts(
        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;
              runUuid_ = bs;
              break;
            }
            case 18: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000002;
              path_ = 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_ListArtifacts_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.mlflow.api.proto.Service.internal_static_mlflow_ListArtifacts_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.mlflow.api.proto.Service.ListArtifacts.class, org.mlflow.api.proto.Service.ListArtifacts.Builder.class);
    }

    public interface ResponseOrBuilder extends
        // @@protoc_insertion_point(interface_extends:mlflow.ListArtifacts.Response)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <pre>
       * Root artifact directory for the run.
       * </pre>
       *
       * <code>optional string root_uri = 1;</code>
       */
      boolean hasRootUri();
      /**
       * <pre>
       * Root artifact directory for the run.
       * </pre>
       *
       * <code>optional string root_uri = 1;</code>
       */
      java.lang.String getRootUri();
      /**
       * <pre>
       * Root artifact directory for the run.
       * </pre>
       *
       * <code>optional string root_uri = 1;</code>
       */
      com.google.protobuf.ByteString
          getRootUriBytes();

      /**
       * <pre>
       * File location and metadata for artifacts.
       * </pre>
       *
       * <code>repeated .mlflow.FileInfo files = 2;</code>
       */
      java.util.List<org.mlflow.api.proto.Service.FileInfo> 
          getFilesList();
      /**
       * <pre>
       * File location and metadata for artifacts.
       * </pre>
       *
       * <code>repeated .mlflow.FileInfo files = 2;</code>
       */
      org.mlflow.api.proto.Service.FileInfo getFiles(int index);
      /**
       * <pre>
       * File location and metadata for artifacts.
       * </pre>
       *
       * <code>repeated .mlflow.FileInfo files = 2;</code>
       */
      int getFilesCount();
      /**
       * <pre>
       * File location and metadata for artifacts.
       * </pre>
       *
       * <code>repeated .mlflow.FileInfo files = 2;</code>
       */
      java.util.List<? extends org.mlflow.api.proto.Service.FileInfoOrBuilder> 
          getFilesOrBuilderList();
      /**
       * <pre>
       * File location and metadata for artifacts.
       * </pre>
       *
       * <code>repeated .mlflow.FileInfo files = 2;</code>
       */
      org.mlflow.api.proto.Service.FileInfoOrBuilder getFilesOrBuilder(
          int index);
    }
    /**
     * Protobuf type {@code mlflow.ListArtifacts.Response}
     */
    public  static final class Response extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:mlflow.ListArtifacts.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() {
        rootUri_ = "";
        files_ = java.util.Collections.emptyList();
      }

      @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: {
                com.google.protobuf.ByteString bs = input.readBytes();
                bitField0_ |= 0x00000001;
                rootUri_ = bs;
                break;
              }
              case 18: {
                if (!((mutable_bitField0_ & 0x00000002) == 0x00000002)) {
                  files_ = new java.util.ArrayList<org.mlflow.api.proto.Service.FileInfo>();
                  mutable_bitField0_ |= 0x00000002;
                }
                files_.add(
                    input.readMessage(org.mlflow.api.proto.Service.FileInfo.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_ & 0x00000002) == 0x00000002)) {
            files_ = java.util.Collections.unmodifiableList(files_);
          }
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_ListArtifacts_Response_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_ListArtifacts_Response_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.ListArtifacts.Response.class, org.mlflow.api.proto.Service.ListArtifacts.Response.Builder.class);
      }

      private int bitField0_;
      public static final int ROOT_URI_FIELD_NUMBER = 1;
      private volatile java.lang.Object rootUri_;
      /**
       * <pre>
       * Root artifact directory for the run.
       * </pre>
       *
       * <code>optional string root_uri = 1;</code>
       */
      public boolean hasRootUri() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * Root artifact directory for the run.
       * </pre>
       *
       * <code>optional string root_uri = 1;</code>
       */
      public java.lang.String getRootUri() {
        java.lang.Object ref = rootUri_;
        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()) {
            rootUri_ = s;
          }
          return s;
        }
      }
      /**
       * <pre>
       * Root artifact directory for the run.
       * </pre>
       *
       * <code>optional string root_uri = 1;</code>
       */
      public com.google.protobuf.ByteString
          getRootUriBytes() {
        java.lang.Object ref = rootUri_;
        if (ref instanceof java.lang.String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          rootUri_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }

      public static final int FILES_FIELD_NUMBER = 2;
      private java.util.List<org.mlflow.api.proto.Service.FileInfo> files_;
      /**
       * <pre>
       * File location and metadata for artifacts.
       * </pre>
       *
       * <code>repeated .mlflow.FileInfo files = 2;</code>
       */
      public java.util.List<org.mlflow.api.proto.Service.FileInfo> getFilesList() {
        return files_;
      }
      /**
       * <pre>
       * File location and metadata for artifacts.
       * </pre>
       *
       * <code>repeated .mlflow.FileInfo files = 2;</code>
       */
      public java.util.List<? extends org.mlflow.api.proto.Service.FileInfoOrBuilder> 
          getFilesOrBuilderList() {
        return files_;
      }
      /**
       * <pre>
       * File location and metadata for artifacts.
       * </pre>
       *
       * <code>repeated .mlflow.FileInfo files = 2;</code>
       */
      public int getFilesCount() {
        return files_.size();
      }
      /**
       * <pre>
       * File location and metadata for artifacts.
       * </pre>
       *
       * <code>repeated .mlflow.FileInfo files = 2;</code>
       */
      public org.mlflow.api.proto.Service.FileInfo getFiles(int index) {
        return files_.get(index);
      }
      /**
       * <pre>
       * File location and metadata for artifacts.
       * </pre>
       *
       * <code>repeated .mlflow.FileInfo files = 2;</code>
       */
      public org.mlflow.api.proto.Service.FileInfoOrBuilder getFilesOrBuilder(
          int index) {
        return files_.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 {
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          com.google.protobuf.GeneratedMessageV3.writeString(output, 1, rootUri_);
        }
        for (int i = 0; i < files_.size(); i++) {
          output.writeMessage(2, files_.get(i));
        }
        unknownFields.writeTo(output);
      }

      @java.lang.Override
      public int getSerializedSize() {
        int size = memoizedSize;
        if (size != -1) return size;

        size = 0;
        if (((bitField0_ & 0x00000001) == 0x00000001)) {
          size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, rootUri_);
        }
        for (int i = 0; i < files_.size(); i++) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(2, files_.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.ListArtifacts.Response)) {
          return super.equals(obj);
        }
        org.mlflow.api.proto.Service.ListArtifacts.Response other = (org.mlflow.api.proto.Service.ListArtifacts.Response) obj;

        boolean result = true;
        result = result && (hasRootUri() == other.hasRootUri());
        if (hasRootUri()) {
          result = result && getRootUri()
              .equals(other.getRootUri());
        }
        result = result && getFilesList()
            .equals(other.getFilesList());
        result = result && unknownFields.equals(other.unknownFields);
        return result;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        if (hasRootUri()) {
          hash = (37 * hash) + ROOT_URI_FIELD_NUMBER;
          hash = (53 * hash) + getRootUri().hashCode();
        }
        if (getFilesCount() > 0) {
          hash = (37 * hash) + FILES_FIELD_NUMBER;
          hash = (53 * hash) + getFilesList().hashCode();
        }
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static org.mlflow.api.proto.Service.ListArtifacts.Response parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.ListArtifacts.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.ListArtifacts.Response parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.ListArtifacts.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.ListArtifacts.Response parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.ListArtifacts.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.ListArtifacts.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.ListArtifacts.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.ListArtifacts.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.ListArtifacts.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.ListArtifacts.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.ListArtifacts.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.ListArtifacts.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.ListArtifacts.Response}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:mlflow.ListArtifacts.Response)
          org.mlflow.api.proto.Service.ListArtifacts.ResponseOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_ListArtifacts_Response_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_ListArtifacts_Response_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  org.mlflow.api.proto.Service.ListArtifacts.Response.class, org.mlflow.api.proto.Service.ListArtifacts.Response.Builder.class);
        }

        // Construct using org.mlflow.api.proto.Service.ListArtifacts.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) {
            getFilesFieldBuilder();
          }
        }
        @java.lang.Override
        public Builder clear() {
          super.clear();
          rootUri_ = "";
          bitField0_ = (bitField0_ & ~0x00000001);
          if (filesBuilder_ == null) {
            files_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000002);
          } else {
            filesBuilder_.clear();
          }
          return this;
        }

        @java.lang.Override
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_ListArtifacts_Response_descriptor;
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.ListArtifacts.Response getDefaultInstanceForType() {
          return org.mlflow.api.proto.Service.ListArtifacts.Response.getDefaultInstance();
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.ListArtifacts.Response build() {
          org.mlflow.api.proto.Service.ListArtifacts.Response result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.ListArtifacts.Response buildPartial() {
          org.mlflow.api.proto.Service.ListArtifacts.Response result = new org.mlflow.api.proto.Service.ListArtifacts.Response(this);
          int from_bitField0_ = bitField0_;
          int to_bitField0_ = 0;
          if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
            to_bitField0_ |= 0x00000001;
          }
          result.rootUri_ = rootUri_;
          if (filesBuilder_ == null) {
            if (((bitField0_ & 0x00000002) == 0x00000002)) {
              files_ = java.util.Collections.unmodifiableList(files_);
              bitField0_ = (bitField0_ & ~0x00000002);
            }
            result.files_ = files_;
          } else {
            result.files_ = filesBuilder_.build();
          }
          result.bitField0_ = to_bitField0_;
          onBuilt();
          return result;
        }

        @java.lang.Override
        public Builder clone() {
          return (Builder) super.clone();
        }
        @java.lang.Override
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.setField(field, value);
        }
        @java.lang.Override
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }
        @java.lang.Override
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }
        @java.lang.Override
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }
        @java.lang.Override
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }
        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof org.mlflow.api.proto.Service.ListArtifacts.Response) {
            return mergeFrom((org.mlflow.api.proto.Service.ListArtifacts.Response)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(org.mlflow.api.proto.Service.ListArtifacts.Response other) {
          if (other == org.mlflow.api.proto.Service.ListArtifacts.Response.getDefaultInstance()) return this;
          if (other.hasRootUri()) {
            bitField0_ |= 0x00000001;
            rootUri_ = other.rootUri_;
            onChanged();
          }
          if (filesBuilder_ == null) {
            if (!other.files_.isEmpty()) {
              if (files_.isEmpty()) {
                files_ = other.files_;
                bitField0_ = (bitField0_ & ~0x00000002);
              } else {
                ensureFilesIsMutable();
                files_.addAll(other.files_);
              }
              onChanged();
            }
          } else {
            if (!other.files_.isEmpty()) {
              if (filesBuilder_.isEmpty()) {
                filesBuilder_.dispose();
                filesBuilder_ = null;
                files_ = other.files_;
                bitField0_ = (bitField0_ & ~0x00000002);
                filesBuilder_ = 
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                     getFilesFieldBuilder() : null;
              } else {
                filesBuilder_.addAllMessages(other.files_);
              }
            }
          }
          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.ListArtifacts.Response parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (org.mlflow.api.proto.Service.ListArtifacts.Response) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        private java.lang.Object rootUri_ = "";
        /**
         * <pre>
         * Root artifact directory for the run.
         * </pre>
         *
         * <code>optional string root_uri = 1;</code>
         */
        public boolean hasRootUri() {
          return ((bitField0_ & 0x00000001) == 0x00000001);
        }
        /**
         * <pre>
         * Root artifact directory for the run.
         * </pre>
         *
         * <code>optional string root_uri = 1;</code>
         */
        public java.lang.String getRootUri() {
          java.lang.Object ref = rootUri_;
          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()) {
              rootUri_ = s;
            }
            return s;
          } else {
            return (java.lang.String) ref;
          }
        }
        /**
         * <pre>
         * Root artifact directory for the run.
         * </pre>
         *
         * <code>optional string root_uri = 1;</code>
         */
        public com.google.protobuf.ByteString
            getRootUriBytes() {
          java.lang.Object ref = rootUri_;
          if (ref instanceof String) {
            com.google.protobuf.ByteString b = 
                com.google.protobuf.ByteString.copyFromUtf8(
                    (java.lang.String) ref);
            rootUri_ = b;
            return b;
          } else {
            return (com.google.protobuf.ByteString) ref;
          }
        }
        /**
         * <pre>
         * Root artifact directory for the run.
         * </pre>
         *
         * <code>optional string root_uri = 1;</code>
         */
        public Builder setRootUri(
            java.lang.String value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
          rootUri_ = value;
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Root artifact directory for the run.
         * </pre>
         *
         * <code>optional string root_uri = 1;</code>
         */
        public Builder clearRootUri() {
          bitField0_ = (bitField0_ & ~0x00000001);
          rootUri_ = getDefaultInstance().getRootUri();
          onChanged();
          return this;
        }
        /**
         * <pre>
         * Root artifact directory for the run.
         * </pre>
         *
         * <code>optional string root_uri = 1;</code>
         */
        public Builder setRootUriBytes(
            com.google.protobuf.ByteString value) {
          if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
          rootUri_ = value;
          onChanged();
          return this;
        }

        private java.util.List<org.mlflow.api.proto.Service.FileInfo> files_ =
          java.util.Collections.emptyList();
        private void ensureFilesIsMutable() {
          if (!((bitField0_ & 0x00000002) == 0x00000002)) {
            files_ = new java.util.ArrayList<org.mlflow.api.proto.Service.FileInfo>(files_);
            bitField0_ |= 0x00000002;
           }
        }

        private com.google.protobuf.RepeatedFieldBuilderV3<
            org.mlflow.api.proto.Service.FileInfo, org.mlflow.api.proto.Service.FileInfo.Builder, org.mlflow.api.proto.Service.FileInfoOrBuilder> filesBuilder_;

        /**
         * <pre>
         * File location and metadata for artifacts.
         * </pre>
         *
         * <code>repeated .mlflow.FileInfo files = 2;</code>
         */
        public java.util.List<org.mlflow.api.proto.Service.FileInfo> getFilesList() {
          if (filesBuilder_ == null) {
            return java.util.Collections.unmodifiableList(files_);
          } else {
            return filesBuilder_.getMessageList();
          }
        }
        /**
         * <pre>
         * File location and metadata for artifacts.
         * </pre>
         *
         * <code>repeated .mlflow.FileInfo files = 2;</code>
         */
        public int getFilesCount() {
          if (filesBuilder_ == null) {
            return files_.size();
          } else {
            return filesBuilder_.getCount();
          }
        }
        /**
         * <pre>
         * File location and metadata for artifacts.
         * </pre>
         *
         * <code>repeated .mlflow.FileInfo files = 2;</code>
         */
        public org.mlflow.api.proto.Service.FileInfo getFiles(int index) {
          if (filesBuilder_ == null) {
            return files_.get(index);
          } else {
            return filesBuilder_.getMessage(index);
          }
        }
        /**
         * <pre>
         * File location and metadata for artifacts.
         * </pre>
         *
         * <code>repeated .mlflow.FileInfo files = 2;</code>
         */
        public Builder setFiles(
            int index, org.mlflow.api.proto.Service.FileInfo value) {
          if (filesBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureFilesIsMutable();
            files_.set(index, value);
            onChanged();
          } else {
            filesBuilder_.setMessage(index, value);
          }
          return this;
        }
        /**
         * <pre>
         * File location and metadata for artifacts.
         * </pre>
         *
         * <code>repeated .mlflow.FileInfo files = 2;</code>
         */
        public Builder setFiles(
            int index, org.mlflow.api.proto.Service.FileInfo.Builder builderForValue) {
          if (filesBuilder_ == null) {
            ensureFilesIsMutable();
            files_.set(index, builderForValue.build());
            onChanged();
          } else {
            filesBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * File location and metadata for artifacts.
         * </pre>
         *
         * <code>repeated .mlflow.FileInfo files = 2;</code>
         */
        public Builder addFiles(org.mlflow.api.proto.Service.FileInfo value) {
          if (filesBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureFilesIsMutable();
            files_.add(value);
            onChanged();
          } else {
            filesBuilder_.addMessage(value);
          }
          return this;
        }
        /**
         * <pre>
         * File location and metadata for artifacts.
         * </pre>
         *
         * <code>repeated .mlflow.FileInfo files = 2;</code>
         */
        public Builder addFiles(
            int index, org.mlflow.api.proto.Service.FileInfo value) {
          if (filesBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureFilesIsMutable();
            files_.add(index, value);
            onChanged();
          } else {
            filesBuilder_.addMessage(index, value);
          }
          return this;
        }
        /**
         * <pre>
         * File location and metadata for artifacts.
         * </pre>
         *
         * <code>repeated .mlflow.FileInfo files = 2;</code>
         */
        public Builder addFiles(
            org.mlflow.api.proto.Service.FileInfo.Builder builderForValue) {
          if (filesBuilder_ == null) {
            ensureFilesIsMutable();
            files_.add(builderForValue.build());
            onChanged();
          } else {
            filesBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * File location and metadata for artifacts.
         * </pre>
         *
         * <code>repeated .mlflow.FileInfo files = 2;</code>
         */
        public Builder addFiles(
            int index, org.mlflow.api.proto.Service.FileInfo.Builder builderForValue) {
          if (filesBuilder_ == null) {
            ensureFilesIsMutable();
            files_.add(index, builderForValue.build());
            onChanged();
          } else {
            filesBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * File location and metadata for artifacts.
         * </pre>
         *
         * <code>repeated .mlflow.FileInfo files = 2;</code>
         */
        public Builder addAllFiles(
            java.lang.Iterable<? extends org.mlflow.api.proto.Service.FileInfo> values) {
          if (filesBuilder_ == null) {
            ensureFilesIsMutable();
            com.google.protobuf.AbstractMessageLite.Builder.addAll(
                values, files_);
            onChanged();
          } else {
            filesBuilder_.addAllMessages(values);
          }
          return this;
        }
        /**
         * <pre>
         * File location and metadata for artifacts.
         * </pre>
         *
         * <code>repeated .mlflow.FileInfo files = 2;</code>
         */
        public Builder clearFiles() {
          if (filesBuilder_ == null) {
            files_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000002);
            onChanged();
          } else {
            filesBuilder_.clear();
          }
          return this;
        }
        /**
         * <pre>
         * File location and metadata for artifacts.
         * </pre>
         *
         * <code>repeated .mlflow.FileInfo files = 2;</code>
         */
        public Builder removeFiles(int index) {
          if (filesBuilder_ == null) {
            ensureFilesIsMutable();
            files_.remove(index);
            onChanged();
          } else {
            filesBuilder_.remove(index);
          }
          return this;
        }
        /**
         * <pre>
         * File location and metadata for artifacts.
         * </pre>
         *
         * <code>repeated .mlflow.FileInfo files = 2;</code>
         */
        public org.mlflow.api.proto.Service.FileInfo.Builder getFilesBuilder(
            int index) {
          return getFilesFieldBuilder().getBuilder(index);
        }
        /**
         * <pre>
         * File location and metadata for artifacts.
         * </pre>
         *
         * <code>repeated .mlflow.FileInfo files = 2;</code>
         */
        public org.mlflow.api.proto.Service.FileInfoOrBuilder getFilesOrBuilder(
            int index) {
          if (filesBuilder_ == null) {
            return files_.get(index);  } else {
            return filesBuilder_.getMessageOrBuilder(index);
          }
        }
        /**
         * <pre>
         * File location and metadata for artifacts.
         * </pre>
         *
         * <code>repeated .mlflow.FileInfo files = 2;</code>
         */
        public java.util.List<? extends org.mlflow.api.proto.Service.FileInfoOrBuilder> 
             getFilesOrBuilderList() {
          if (filesBuilder_ != null) {
            return filesBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(files_);
          }
        }
        /**
         * <pre>
         * File location and metadata for artifacts.
         * </pre>
         *
         * <code>repeated .mlflow.FileInfo files = 2;</code>
         */
        public org.mlflow.api.proto.Service.FileInfo.Builder addFilesBuilder() {
          return getFilesFieldBuilder().addBuilder(
              org.mlflow.api.proto.Service.FileInfo.getDefaultInstance());
        }
        /**
         * <pre>
         * File location and metadata for artifacts.
         * </pre>
         *
         * <code>repeated .mlflow.FileInfo files = 2;</code>
         */
        public org.mlflow.api.proto.Service.FileInfo.Builder addFilesBuilder(
            int index) {
          return getFilesFieldBuilder().addBuilder(
              index, org.mlflow.api.proto.Service.FileInfo.getDefaultInstance());
        }
        /**
         * <pre>
         * File location and metadata for artifacts.
         * </pre>
         *
         * <code>repeated .mlflow.FileInfo files = 2;</code>
         */
        public java.util.List<org.mlflow.api.proto.Service.FileInfo.Builder> 
             getFilesBuilderList() {
          return getFilesFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilderV3<
            org.mlflow.api.proto.Service.FileInfo, org.mlflow.api.proto.Service.FileInfo.Builder, org.mlflow.api.proto.Service.FileInfoOrBuilder> 
            getFilesFieldBuilder() {
          if (filesBuilder_ == null) {
            filesBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
                org.mlflow.api.proto.Service.FileInfo, org.mlflow.api.proto.Service.FileInfo.Builder, org.mlflow.api.proto.Service.FileInfoOrBuilder>(
                    files_,
                    ((bitField0_ & 0x00000002) == 0x00000002),
                    getParentForChildren(),
                    isClean());
            files_ = null;
          }
          return filesBuilder_;
        }
        @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.ListArtifacts.Response)
      }

      // @@protoc_insertion_point(class_scope:mlflow.ListArtifacts.Response)
      private static final org.mlflow.api.proto.Service.ListArtifacts.Response DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.ListArtifacts.Response();
      }

      public static org.mlflow.api.proto.Service.ListArtifacts.Response getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      @java.lang.Deprecated public static final com.google.protobuf.Parser<Response>
          PARSER = new com.google.protobuf.AbstractParser<Response>() {
        @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<Response> parser() {
        return PARSER;
      }

      @java.lang.Override
      public com.google.protobuf.Parser<Response> getParserForType() {
        return PARSER;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.ListArtifacts.Response getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    private int bitField0_;
    public static final int RUN_UUID_FIELD_NUMBER = 1;
    private volatile java.lang.Object runUuid_;
    /**
     * <pre>
     * ID of the run whose artifacts to list.
     * </pre>
     *
     * <code>optional string run_uuid = 1;</code>
     */
    public boolean hasRunUuid() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * ID of the run whose artifacts to list.
     * </pre>
     *
     * <code>optional string run_uuid = 1;</code>
     */
    public java.lang.String getRunUuid() {
      java.lang.Object ref = runUuid_;
      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()) {
          runUuid_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * ID of the run whose artifacts to list.
     * </pre>
     *
     * <code>optional string run_uuid = 1;</code>
     */
    public com.google.protobuf.ByteString
        getRunUuidBytes() {
      java.lang.Object ref = runUuid_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        runUuid_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int PATH_FIELD_NUMBER = 2;
    private volatile java.lang.Object path_;
    /**
     * <pre>
     * Filter artifacts matching this path (a relative path from the root artifact directory).
     * </pre>
     *
     * <code>optional string path = 2;</code>
     */
    public boolean hasPath() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     * Filter artifacts matching this path (a relative path from the root artifact directory).
     * </pre>
     *
     * <code>optional string path = 2;</code>
     */
    public java.lang.String getPath() {
      java.lang.Object ref = path_;
      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()) {
          path_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Filter artifacts matching this path (a relative path from the root artifact directory).
     * </pre>
     *
     * <code>optional string path = 2;</code>
     */
    public com.google.protobuf.ByteString
        getPathBytes() {
      java.lang.Object ref = path_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        path_ = 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) == 0x00000001)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, runUuid_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, path_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, runUuid_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, path_);
      }
      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.ListArtifacts)) {
        return super.equals(obj);
      }
      org.mlflow.api.proto.Service.ListArtifacts other = (org.mlflow.api.proto.Service.ListArtifacts) obj;

      boolean result = true;
      result = result && (hasRunUuid() == other.hasRunUuid());
      if (hasRunUuid()) {
        result = result && getRunUuid()
            .equals(other.getRunUuid());
      }
      result = result && (hasPath() == other.hasPath());
      if (hasPath()) {
        result = result && getPath()
            .equals(other.getPath());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasRunUuid()) {
        hash = (37 * hash) + RUN_UUID_FIELD_NUMBER;
        hash = (53 * hash) + getRunUuid().hashCode();
      }
      if (hasPath()) {
        hash = (37 * hash) + PATH_FIELD_NUMBER;
        hash = (53 * hash) + getPath().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.mlflow.api.proto.Service.ListArtifacts parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.ListArtifacts 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.ListArtifacts parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.ListArtifacts 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.ListArtifacts parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.ListArtifacts 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.ListArtifacts parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.ListArtifacts 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.ListArtifacts parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.ListArtifacts 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.ListArtifacts 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.ListArtifacts 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.ListArtifacts 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.ListArtifacts}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:mlflow.ListArtifacts)
        org.mlflow.api.proto.Service.ListArtifactsOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_ListArtifacts_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_ListArtifacts_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.ListArtifacts.class, org.mlflow.api.proto.Service.ListArtifacts.Builder.class);
      }

      // Construct using org.mlflow.api.proto.Service.ListArtifacts.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();
        runUuid_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        path_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_ListArtifacts_descriptor;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.ListArtifacts getDefaultInstanceForType() {
        return org.mlflow.api.proto.Service.ListArtifacts.getDefaultInstance();
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.ListArtifacts build() {
        org.mlflow.api.proto.Service.ListArtifacts result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.ListArtifacts buildPartial() {
        org.mlflow.api.proto.Service.ListArtifacts result = new org.mlflow.api.proto.Service.ListArtifacts(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.runUuid_ = runUuid_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.path_ = path_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.mlflow.api.proto.Service.ListArtifacts) {
          return mergeFrom((org.mlflow.api.proto.Service.ListArtifacts)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.mlflow.api.proto.Service.ListArtifacts other) {
        if (other == org.mlflow.api.proto.Service.ListArtifacts.getDefaultInstance()) return this;
        if (other.hasRunUuid()) {
          bitField0_ |= 0x00000001;
          runUuid_ = other.runUuid_;
          onChanged();
        }
        if (other.hasPath()) {
          bitField0_ |= 0x00000002;
          path_ = other.path_;
          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.ListArtifacts parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.mlflow.api.proto.Service.ListArtifacts) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object runUuid_ = "";
      /**
       * <pre>
       * ID of the run whose artifacts to list.
       * </pre>
       *
       * <code>optional string run_uuid = 1;</code>
       */
      public boolean hasRunUuid() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * ID of the run whose artifacts to list.
       * </pre>
       *
       * <code>optional string run_uuid = 1;</code>
       */
      public java.lang.String getRunUuid() {
        java.lang.Object ref = runUuid_;
        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()) {
            runUuid_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * ID of the run whose artifacts to list.
       * </pre>
       *
       * <code>optional string run_uuid = 1;</code>
       */
      public com.google.protobuf.ByteString
          getRunUuidBytes() {
        java.lang.Object ref = runUuid_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          runUuid_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * ID of the run whose artifacts to list.
       * </pre>
       *
       * <code>optional string run_uuid = 1;</code>
       */
      public Builder setRunUuid(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        runUuid_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * ID of the run whose artifacts to list.
       * </pre>
       *
       * <code>optional string run_uuid = 1;</code>
       */
      public Builder clearRunUuid() {
        bitField0_ = (bitField0_ & ~0x00000001);
        runUuid_ = getDefaultInstance().getRunUuid();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * ID of the run whose artifacts to list.
       * </pre>
       *
       * <code>optional string run_uuid = 1;</code>
       */
      public Builder setRunUuidBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        runUuid_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object path_ = "";
      /**
       * <pre>
       * Filter artifacts matching this path (a relative path from the root artifact directory).
       * </pre>
       *
       * <code>optional string path = 2;</code>
       */
      public boolean hasPath() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * Filter artifacts matching this path (a relative path from the root artifact directory).
       * </pre>
       *
       * <code>optional string path = 2;</code>
       */
      public java.lang.String getPath() {
        java.lang.Object ref = path_;
        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()) {
            path_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Filter artifacts matching this path (a relative path from the root artifact directory).
       * </pre>
       *
       * <code>optional string path = 2;</code>
       */
      public com.google.protobuf.ByteString
          getPathBytes() {
        java.lang.Object ref = path_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          path_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Filter artifacts matching this path (a relative path from the root artifact directory).
       * </pre>
       *
       * <code>optional string path = 2;</code>
       */
      public Builder setPath(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        path_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Filter artifacts matching this path (a relative path from the root artifact directory).
       * </pre>
       *
       * <code>optional string path = 2;</code>
       */
      public Builder clearPath() {
        bitField0_ = (bitField0_ & ~0x00000002);
        path_ = getDefaultInstance().getPath();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Filter artifacts matching this path (a relative path from the root artifact directory).
       * </pre>
       *
       * <code>optional string path = 2;</code>
       */
      public Builder setPathBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        path_ = 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.ListArtifacts)
    }

    // @@protoc_insertion_point(class_scope:mlflow.ListArtifacts)
    private static final org.mlflow.api.proto.Service.ListArtifacts DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.ListArtifacts();
    }

    public static org.mlflow.api.proto.Service.ListArtifacts getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<ListArtifacts>
        PARSER = new com.google.protobuf.AbstractParser<ListArtifacts>() {
      @java.lang.Override
      public ListArtifacts parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new ListArtifacts(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<ListArtifacts> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<ListArtifacts> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public org.mlflow.api.proto.Service.ListArtifacts getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface FileInfoOrBuilder extends
      // @@protoc_insertion_point(interface_extends:mlflow.FileInfo)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * Path relative to the root artifact directory run.
     * </pre>
     *
     * <code>optional string path = 1;</code>
     */
    boolean hasPath();
    /**
     * <pre>
     * Path relative to the root artifact directory run.
     * </pre>
     *
     * <code>optional string path = 1;</code>
     */
    java.lang.String getPath();
    /**
     * <pre>
     * Path relative to the root artifact directory run.
     * </pre>
     *
     * <code>optional string path = 1;</code>
     */
    com.google.protobuf.ByteString
        getPathBytes();

    /**
     * <pre>
     * Whether the path is a directory.
     * </pre>
     *
     * <code>optional bool is_dir = 2;</code>
     */
    boolean hasIsDir();
    /**
     * <pre>
     * Whether the path is a directory.
     * </pre>
     *
     * <code>optional bool is_dir = 2;</code>
     */
    boolean getIsDir();

    /**
     * <pre>
     * Size in bytes. Unset for directories.
     * </pre>
     *
     * <code>optional int64 file_size = 3;</code>
     */
    boolean hasFileSize();
    /**
     * <pre>
     * Size in bytes. Unset for directories.
     * </pre>
     *
     * <code>optional int64 file_size = 3;</code>
     */
    long getFileSize();
  }
  /**
   * <pre>
   * Metadata of a single artifact file or directory.
   * </pre>
   *
   * Protobuf type {@code mlflow.FileInfo}
   */
  public  static final class FileInfo extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:mlflow.FileInfo)
      FileInfoOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use FileInfo.newBuilder() to construct.
    private FileInfo(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private FileInfo() {
      path_ = "";
      isDir_ = false;
      fileSize_ = 0L;
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private FileInfo(
        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;
              path_ = bs;
              break;
            }
            case 16: {
              bitField0_ |= 0x00000002;
              isDir_ = input.readBool();
              break;
            }
            case 24: {
              bitField0_ |= 0x00000004;
              fileSize_ = input.readInt64();
              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_FileInfo_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.mlflow.api.proto.Service.internal_static_mlflow_FileInfo_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.mlflow.api.proto.Service.FileInfo.class, org.mlflow.api.proto.Service.FileInfo.Builder.class);
    }

    private int bitField0_;
    public static final int PATH_FIELD_NUMBER = 1;
    private volatile java.lang.Object path_;
    /**
     * <pre>
     * Path relative to the root artifact directory run.
     * </pre>
     *
     * <code>optional string path = 1;</code>
     */
    public boolean hasPath() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * Path relative to the root artifact directory run.
     * </pre>
     *
     * <code>optional string path = 1;</code>
     */
    public java.lang.String getPath() {
      java.lang.Object ref = path_;
      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()) {
          path_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Path relative to the root artifact directory run.
     * </pre>
     *
     * <code>optional string path = 1;</code>
     */
    public com.google.protobuf.ByteString
        getPathBytes() {
      java.lang.Object ref = path_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        path_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int IS_DIR_FIELD_NUMBER = 2;
    private boolean isDir_;
    /**
     * <pre>
     * Whether the path is a directory.
     * </pre>
     *
     * <code>optional bool is_dir = 2;</code>
     */
    public boolean hasIsDir() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     * Whether the path is a directory.
     * </pre>
     *
     * <code>optional bool is_dir = 2;</code>
     */
    public boolean getIsDir() {
      return isDir_;
    }

    public static final int FILE_SIZE_FIELD_NUMBER = 3;
    private long fileSize_;
    /**
     * <pre>
     * Size in bytes. Unset for directories.
     * </pre>
     *
     * <code>optional int64 file_size = 3;</code>
     */
    public boolean hasFileSize() {
      return ((bitField0_ & 0x00000004) == 0x00000004);
    }
    /**
     * <pre>
     * Size in bytes. Unset for directories.
     * </pre>
     *
     * <code>optional int64 file_size = 3;</code>
     */
    public long getFileSize() {
      return fileSize_;
    }

    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) == 0x00000001)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, path_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        output.writeBool(2, isDir_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        output.writeInt64(3, fileSize_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, path_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.CodedOutputStream
          .computeBoolSize(2, isDir_);
      }
      if (((bitField0_ & 0x00000004) == 0x00000004)) {
        size += com.google.protobuf.CodedOutputStream
          .computeInt64Size(3, fileSize_);
      }
      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.FileInfo)) {
        return super.equals(obj);
      }
      org.mlflow.api.proto.Service.FileInfo other = (org.mlflow.api.proto.Service.FileInfo) obj;

      boolean result = true;
      result = result && (hasPath() == other.hasPath());
      if (hasPath()) {
        result = result && getPath()
            .equals(other.getPath());
      }
      result = result && (hasIsDir() == other.hasIsDir());
      if (hasIsDir()) {
        result = result && (getIsDir()
            == other.getIsDir());
      }
      result = result && (hasFileSize() == other.hasFileSize());
      if (hasFileSize()) {
        result = result && (getFileSize()
            == other.getFileSize());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasPath()) {
        hash = (37 * hash) + PATH_FIELD_NUMBER;
        hash = (53 * hash) + getPath().hashCode();
      }
      if (hasIsDir()) {
        hash = (37 * hash) + IS_DIR_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
            getIsDir());
      }
      if (hasFileSize()) {
        hash = (37 * hash) + FILE_SIZE_FIELD_NUMBER;
        hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
            getFileSize());
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.mlflow.api.proto.Service.FileInfo parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.FileInfo 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.FileInfo parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.FileInfo 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.FileInfo parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.FileInfo 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.FileInfo parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.FileInfo 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.FileInfo parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.FileInfo 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.FileInfo 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.FileInfo 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.FileInfo 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;
    }
    /**
     * <pre>
     * Metadata of a single artifact file or directory.
     * </pre>
     *
     * Protobuf type {@code mlflow.FileInfo}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:mlflow.FileInfo)
        org.mlflow.api.proto.Service.FileInfoOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_FileInfo_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_FileInfo_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.FileInfo.class, org.mlflow.api.proto.Service.FileInfo.Builder.class);
      }

      // Construct using org.mlflow.api.proto.Service.FileInfo.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();
        path_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        isDir_ = false;
        bitField0_ = (bitField0_ & ~0x00000002);
        fileSize_ = 0L;
        bitField0_ = (bitField0_ & ~0x00000004);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_FileInfo_descriptor;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.FileInfo getDefaultInstanceForType() {
        return org.mlflow.api.proto.Service.FileInfo.getDefaultInstance();
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.FileInfo build() {
        org.mlflow.api.proto.Service.FileInfo result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.FileInfo buildPartial() {
        org.mlflow.api.proto.Service.FileInfo result = new org.mlflow.api.proto.Service.FileInfo(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.path_ = path_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.isDir_ = isDir_;
        if (((from_bitField0_ & 0x00000004) == 0x00000004)) {
          to_bitField0_ |= 0x00000004;
        }
        result.fileSize_ = fileSize_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.mlflow.api.proto.Service.FileInfo) {
          return mergeFrom((org.mlflow.api.proto.Service.FileInfo)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.mlflow.api.proto.Service.FileInfo other) {
        if (other == org.mlflow.api.proto.Service.FileInfo.getDefaultInstance()) return this;
        if (other.hasPath()) {
          bitField0_ |= 0x00000001;
          path_ = other.path_;
          onChanged();
        }
        if (other.hasIsDir()) {
          setIsDir(other.getIsDir());
        }
        if (other.hasFileSize()) {
          setFileSize(other.getFileSize());
        }
        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.FileInfo parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.mlflow.api.proto.Service.FileInfo) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object path_ = "";
      /**
       * <pre>
       * Path relative to the root artifact directory run.
       * </pre>
       *
       * <code>optional string path = 1;</code>
       */
      public boolean hasPath() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * Path relative to the root artifact directory run.
       * </pre>
       *
       * <code>optional string path = 1;</code>
       */
      public java.lang.String getPath() {
        java.lang.Object ref = path_;
        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()) {
            path_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Path relative to the root artifact directory run.
       * </pre>
       *
       * <code>optional string path = 1;</code>
       */
      public com.google.protobuf.ByteString
          getPathBytes() {
        java.lang.Object ref = path_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          path_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Path relative to the root artifact directory run.
       * </pre>
       *
       * <code>optional string path = 1;</code>
       */
      public Builder setPath(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        path_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Path relative to the root artifact directory run.
       * </pre>
       *
       * <code>optional string path = 1;</code>
       */
      public Builder clearPath() {
        bitField0_ = (bitField0_ & ~0x00000001);
        path_ = getDefaultInstance().getPath();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Path relative to the root artifact directory run.
       * </pre>
       *
       * <code>optional string path = 1;</code>
       */
      public Builder setPathBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        path_ = value;
        onChanged();
        return this;
      }

      private boolean isDir_ ;
      /**
       * <pre>
       * Whether the path is a directory.
       * </pre>
       *
       * <code>optional bool is_dir = 2;</code>
       */
      public boolean hasIsDir() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * Whether the path is a directory.
       * </pre>
       *
       * <code>optional bool is_dir = 2;</code>
       */
      public boolean getIsDir() {
        return isDir_;
      }
      /**
       * <pre>
       * Whether the path is a directory.
       * </pre>
       *
       * <code>optional bool is_dir = 2;</code>
       */
      public Builder setIsDir(boolean value) {
        bitField0_ |= 0x00000002;
        isDir_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Whether the path is a directory.
       * </pre>
       *
       * <code>optional bool is_dir = 2;</code>
       */
      public Builder clearIsDir() {
        bitField0_ = (bitField0_ & ~0x00000002);
        isDir_ = false;
        onChanged();
        return this;
      }

      private long fileSize_ ;
      /**
       * <pre>
       * Size in bytes. Unset for directories.
       * </pre>
       *
       * <code>optional int64 file_size = 3;</code>
       */
      public boolean hasFileSize() {
        return ((bitField0_ & 0x00000004) == 0x00000004);
      }
      /**
       * <pre>
       * Size in bytes. Unset for directories.
       * </pre>
       *
       * <code>optional int64 file_size = 3;</code>
       */
      public long getFileSize() {
        return fileSize_;
      }
      /**
       * <pre>
       * Size in bytes. Unset for directories.
       * </pre>
       *
       * <code>optional int64 file_size = 3;</code>
       */
      public Builder setFileSize(long value) {
        bitField0_ |= 0x00000004;
        fileSize_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Size in bytes. Unset for directories.
       * </pre>
       *
       * <code>optional int64 file_size = 3;</code>
       */
      public Builder clearFileSize() {
        bitField0_ = (bitField0_ & ~0x00000004);
        fileSize_ = 0L;
        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.FileInfo)
    }

    // @@protoc_insertion_point(class_scope:mlflow.FileInfo)
    private static final org.mlflow.api.proto.Service.FileInfo DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.FileInfo();
    }

    public static org.mlflow.api.proto.Service.FileInfo getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<FileInfo>
        PARSER = new com.google.protobuf.AbstractParser<FileInfo>() {
      @java.lang.Override
      public FileInfo parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new FileInfo(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<FileInfo> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<FileInfo> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public org.mlflow.api.proto.Service.FileInfo getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface GetArtifactOrBuilder extends
      // @@protoc_insertion_point(interface_extends:mlflow.GetArtifact)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * ID of the run from which to fetch the artifact.
     * </pre>
     *
     * <code>optional string run_uuid = 1;</code>
     */
    boolean hasRunUuid();
    /**
     * <pre>
     * ID of the run from which to fetch the artifact.
     * </pre>
     *
     * <code>optional string run_uuid = 1;</code>
     */
    java.lang.String getRunUuid();
    /**
     * <pre>
     * ID of the run from which to fetch the artifact.
     * </pre>
     *
     * <code>optional string run_uuid = 1;</code>
     */
    com.google.protobuf.ByteString
        getRunUuidBytes();

    /**
     * <pre>
     * Path of the artifact to fetch (relative to the root artifact directory for the run).
     * </pre>
     *
     * <code>optional string path = 2;</code>
     */
    boolean hasPath();
    /**
     * <pre>
     * Path of the artifact to fetch (relative to the root artifact directory for the run).
     * </pre>
     *
     * <code>optional string path = 2;</code>
     */
    java.lang.String getPath();
    /**
     * <pre>
     * Path of the artifact to fetch (relative to the root artifact directory for the run).
     * </pre>
     *
     * <code>optional string path = 2;</code>
     */
    com.google.protobuf.ByteString
        getPathBytes();
  }
  /**
   * Protobuf type {@code mlflow.GetArtifact}
   */
  public  static final class GetArtifact extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:mlflow.GetArtifact)
      GetArtifactOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use GetArtifact.newBuilder() to construct.
    private GetArtifact(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private GetArtifact() {
      runUuid_ = "";
      path_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private GetArtifact(
        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;
              runUuid_ = bs;
              break;
            }
            case 18: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000002;
              path_ = 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_GetArtifact_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.mlflow.api.proto.Service.internal_static_mlflow_GetArtifact_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.mlflow.api.proto.Service.GetArtifact.class, org.mlflow.api.proto.Service.GetArtifact.Builder.class);
    }

    public interface ResponseOrBuilder extends
        // @@protoc_insertion_point(interface_extends:mlflow.GetArtifact.Response)
        com.google.protobuf.MessageOrBuilder {
    }
    /**
     * <pre>
     * Empty because the data of the file will be streamed back in the HTTP response.
     * The response will have an HTTP status code of 404 if the artifact path is not found.
     * </pre>
     *
     * Protobuf type {@code mlflow.GetArtifact.Response}
     */
    public  static final class Response extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:mlflow.GetArtifact.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
      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_GetArtifact_Response_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_GetArtifact_Response_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.GetArtifact.Response.class, org.mlflow.api.proto.Service.GetArtifact.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.GetArtifact.Response)) {
          return super.equals(obj);
        }
        org.mlflow.api.proto.Service.GetArtifact.Response other = (org.mlflow.api.proto.Service.GetArtifact.Response) obj;

        boolean result = true;
        result = result && unknownFields.equals(other.unknownFields);
        return result;
      }

      @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.GetArtifact.Response parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.GetArtifact.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.GetArtifact.Response parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.GetArtifact.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.GetArtifact.Response parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.GetArtifact.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.GetArtifact.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.GetArtifact.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.GetArtifact.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.GetArtifact.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.GetArtifact.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.GetArtifact.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.GetArtifact.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;
      }
      /**
       * <pre>
       * Empty because the data of the file will be streamed back in the HTTP response.
       * The response will have an HTTP status code of 404 if the artifact path is not found.
       * </pre>
       *
       * Protobuf type {@code mlflow.GetArtifact.Response}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:mlflow.GetArtifact.Response)
          org.mlflow.api.proto.Service.GetArtifact.ResponseOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_GetArtifact_Response_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_GetArtifact_Response_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  org.mlflow.api.proto.Service.GetArtifact.Response.class, org.mlflow.api.proto.Service.GetArtifact.Response.Builder.class);
        }

        // Construct using org.mlflow.api.proto.Service.GetArtifact.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_GetArtifact_Response_descriptor;
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.GetArtifact.Response getDefaultInstanceForType() {
          return org.mlflow.api.proto.Service.GetArtifact.Response.getDefaultInstance();
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.GetArtifact.Response build() {
          org.mlflow.api.proto.Service.GetArtifact.Response result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.GetArtifact.Response buildPartial() {
          org.mlflow.api.proto.Service.GetArtifact.Response result = new org.mlflow.api.proto.Service.GetArtifact.Response(this);
          onBuilt();
          return result;
        }

        @java.lang.Override
        public Builder clone() {
          return (Builder) super.clone();
        }
        @java.lang.Override
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.setField(field, value);
        }
        @java.lang.Override
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }
        @java.lang.Override
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }
        @java.lang.Override
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }
        @java.lang.Override
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }
        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof org.mlflow.api.proto.Service.GetArtifact.Response) {
            return mergeFrom((org.mlflow.api.proto.Service.GetArtifact.Response)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(org.mlflow.api.proto.Service.GetArtifact.Response other) {
          if (other == org.mlflow.api.proto.Service.GetArtifact.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.GetArtifact.Response parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (org.mlflow.api.proto.Service.GetArtifact.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.GetArtifact.Response)
      }

      // @@protoc_insertion_point(class_scope:mlflow.GetArtifact.Response)
      private static final org.mlflow.api.proto.Service.GetArtifact.Response DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.GetArtifact.Response();
      }

      public static org.mlflow.api.proto.Service.GetArtifact.Response getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      @java.lang.Deprecated public static final com.google.protobuf.Parser<Response>
          PARSER = new com.google.protobuf.AbstractParser<Response>() {
        @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<Response> parser() {
        return PARSER;
      }

      @java.lang.Override
      public com.google.protobuf.Parser<Response> getParserForType() {
        return PARSER;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.GetArtifact.Response getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    private int bitField0_;
    public static final int RUN_UUID_FIELD_NUMBER = 1;
    private volatile java.lang.Object runUuid_;
    /**
     * <pre>
     * ID of the run from which to fetch the artifact.
     * </pre>
     *
     * <code>optional string run_uuid = 1;</code>
     */
    public boolean hasRunUuid() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * ID of the run from which to fetch the artifact.
     * </pre>
     *
     * <code>optional string run_uuid = 1;</code>
     */
    public java.lang.String getRunUuid() {
      java.lang.Object ref = runUuid_;
      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()) {
          runUuid_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * ID of the run from which to fetch the artifact.
     * </pre>
     *
     * <code>optional string run_uuid = 1;</code>
     */
    public com.google.protobuf.ByteString
        getRunUuidBytes() {
      java.lang.Object ref = runUuid_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        runUuid_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int PATH_FIELD_NUMBER = 2;
    private volatile java.lang.Object path_;
    /**
     * <pre>
     * Path of the artifact to fetch (relative to the root artifact directory for the run).
     * </pre>
     *
     * <code>optional string path = 2;</code>
     */
    public boolean hasPath() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     * Path of the artifact to fetch (relative to the root artifact directory for the run).
     * </pre>
     *
     * <code>optional string path = 2;</code>
     */
    public java.lang.String getPath() {
      java.lang.Object ref = path_;
      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()) {
          path_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Path of the artifact to fetch (relative to the root artifact directory for the run).
     * </pre>
     *
     * <code>optional string path = 2;</code>
     */
    public com.google.protobuf.ByteString
        getPathBytes() {
      java.lang.Object ref = path_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        path_ = 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) == 0x00000001)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, runUuid_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, path_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, runUuid_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, path_);
      }
      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.GetArtifact)) {
        return super.equals(obj);
      }
      org.mlflow.api.proto.Service.GetArtifact other = (org.mlflow.api.proto.Service.GetArtifact) obj;

      boolean result = true;
      result = result && (hasRunUuid() == other.hasRunUuid());
      if (hasRunUuid()) {
        result = result && getRunUuid()
            .equals(other.getRunUuid());
      }
      result = result && (hasPath() == other.hasPath());
      if (hasPath()) {
        result = result && getPath()
            .equals(other.getPath());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasRunUuid()) {
        hash = (37 * hash) + RUN_UUID_FIELD_NUMBER;
        hash = (53 * hash) + getRunUuid().hashCode();
      }
      if (hasPath()) {
        hash = (37 * hash) + PATH_FIELD_NUMBER;
        hash = (53 * hash) + getPath().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.mlflow.api.proto.Service.GetArtifact parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.GetArtifact 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.GetArtifact parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.GetArtifact 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.GetArtifact parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.GetArtifact 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.GetArtifact parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.GetArtifact 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.GetArtifact parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.GetArtifact 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.GetArtifact 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.GetArtifact 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.GetArtifact 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.GetArtifact}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:mlflow.GetArtifact)
        org.mlflow.api.proto.Service.GetArtifactOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_GetArtifact_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_GetArtifact_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.GetArtifact.class, org.mlflow.api.proto.Service.GetArtifact.Builder.class);
      }

      // Construct using org.mlflow.api.proto.Service.GetArtifact.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();
        runUuid_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        path_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_GetArtifact_descriptor;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.GetArtifact getDefaultInstanceForType() {
        return org.mlflow.api.proto.Service.GetArtifact.getDefaultInstance();
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.GetArtifact build() {
        org.mlflow.api.proto.Service.GetArtifact result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.GetArtifact buildPartial() {
        org.mlflow.api.proto.Service.GetArtifact result = new org.mlflow.api.proto.Service.GetArtifact(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.runUuid_ = runUuid_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.path_ = path_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.mlflow.api.proto.Service.GetArtifact) {
          return mergeFrom((org.mlflow.api.proto.Service.GetArtifact)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.mlflow.api.proto.Service.GetArtifact other) {
        if (other == org.mlflow.api.proto.Service.GetArtifact.getDefaultInstance()) return this;
        if (other.hasRunUuid()) {
          bitField0_ |= 0x00000001;
          runUuid_ = other.runUuid_;
          onChanged();
        }
        if (other.hasPath()) {
          bitField0_ |= 0x00000002;
          path_ = other.path_;
          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.GetArtifact parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.mlflow.api.proto.Service.GetArtifact) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object runUuid_ = "";
      /**
       * <pre>
       * ID of the run from which to fetch the artifact.
       * </pre>
       *
       * <code>optional string run_uuid = 1;</code>
       */
      public boolean hasRunUuid() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * ID of the run from which to fetch the artifact.
       * </pre>
       *
       * <code>optional string run_uuid = 1;</code>
       */
      public java.lang.String getRunUuid() {
        java.lang.Object ref = runUuid_;
        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()) {
            runUuid_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * ID of the run from which to fetch the artifact.
       * </pre>
       *
       * <code>optional string run_uuid = 1;</code>
       */
      public com.google.protobuf.ByteString
          getRunUuidBytes() {
        java.lang.Object ref = runUuid_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          runUuid_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * ID of the run from which to fetch the artifact.
       * </pre>
       *
       * <code>optional string run_uuid = 1;</code>
       */
      public Builder setRunUuid(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        runUuid_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * ID of the run from which to fetch the artifact.
       * </pre>
       *
       * <code>optional string run_uuid = 1;</code>
       */
      public Builder clearRunUuid() {
        bitField0_ = (bitField0_ & ~0x00000001);
        runUuid_ = getDefaultInstance().getRunUuid();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * ID of the run from which to fetch the artifact.
       * </pre>
       *
       * <code>optional string run_uuid = 1;</code>
       */
      public Builder setRunUuidBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        runUuid_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object path_ = "";
      /**
       * <pre>
       * Path of the artifact to fetch (relative to the root artifact directory for the run).
       * </pre>
       *
       * <code>optional string path = 2;</code>
       */
      public boolean hasPath() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * Path of the artifact to fetch (relative to the root artifact directory for the run).
       * </pre>
       *
       * <code>optional string path = 2;</code>
       */
      public java.lang.String getPath() {
        java.lang.Object ref = path_;
        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()) {
            path_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Path of the artifact to fetch (relative to the root artifact directory for the run).
       * </pre>
       *
       * <code>optional string path = 2;</code>
       */
      public com.google.protobuf.ByteString
          getPathBytes() {
        java.lang.Object ref = path_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          path_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Path of the artifact to fetch (relative to the root artifact directory for the run).
       * </pre>
       *
       * <code>optional string path = 2;</code>
       */
      public Builder setPath(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        path_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Path of the artifact to fetch (relative to the root artifact directory for the run).
       * </pre>
       *
       * <code>optional string path = 2;</code>
       */
      public Builder clearPath() {
        bitField0_ = (bitField0_ & ~0x00000002);
        path_ = getDefaultInstance().getPath();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Path of the artifact to fetch (relative to the root artifact directory for the run).
       * </pre>
       *
       * <code>optional string path = 2;</code>
       */
      public Builder setPathBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        path_ = 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.GetArtifact)
    }

    // @@protoc_insertion_point(class_scope:mlflow.GetArtifact)
    private static final org.mlflow.api.proto.Service.GetArtifact DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.GetArtifact();
    }

    public static org.mlflow.api.proto.Service.GetArtifact getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<GetArtifact>
        PARSER = new com.google.protobuf.AbstractParser<GetArtifact>() {
      @java.lang.Override
      public GetArtifact parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GetArtifact(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<GetArtifact> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<GetArtifact> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public org.mlflow.api.proto.Service.GetArtifact getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  public interface GetMetricHistoryOrBuilder extends
      // @@protoc_insertion_point(interface_extends:mlflow.GetMetricHistory)
      com.google.protobuf.MessageOrBuilder {

    /**
     * <pre>
     * ID of the run from which to fetch metric values.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    boolean hasRunUuid();
    /**
     * <pre>
     * ID of the run from which to fetch metric values.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    java.lang.String getRunUuid();
    /**
     * <pre>
     * ID of the run from which to fetch metric values.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    com.google.protobuf.ByteString
        getRunUuidBytes();

    /**
     * <pre>
     * Name of the metric.
     * </pre>
     *
     * <code>optional string metric_key = 2 [(.validate_required) = true];</code>
     */
    boolean hasMetricKey();
    /**
     * <pre>
     * Name of the metric.
     * </pre>
     *
     * <code>optional string metric_key = 2 [(.validate_required) = true];</code>
     */
    java.lang.String getMetricKey();
    /**
     * <pre>
     * Name of the metric.
     * </pre>
     *
     * <code>optional string metric_key = 2 [(.validate_required) = true];</code>
     */
    com.google.protobuf.ByteString
        getMetricKeyBytes();
  }
  /**
   * Protobuf type {@code mlflow.GetMetricHistory}
   */
  public  static final class GetMetricHistory extends
      com.google.protobuf.GeneratedMessageV3 implements
      // @@protoc_insertion_point(message_implements:mlflow.GetMetricHistory)
      GetMetricHistoryOrBuilder {
  private static final long serialVersionUID = 0L;
    // Use GetMetricHistory.newBuilder() to construct.
    private GetMetricHistory(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
      super(builder);
    }
    private GetMetricHistory() {
      runUuid_ = "";
      metricKey_ = "";
    }

    @java.lang.Override
    public final com.google.protobuf.UnknownFieldSet
    getUnknownFields() {
      return this.unknownFields;
    }
    private GetMetricHistory(
        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;
              runUuid_ = bs;
              break;
            }
            case 18: {
              com.google.protobuf.ByteString bs = input.readBytes();
              bitField0_ |= 0x00000002;
              metricKey_ = 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_GetMetricHistory_descriptor;
    }

    @java.lang.Override
    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
        internalGetFieldAccessorTable() {
      return org.mlflow.api.proto.Service.internal_static_mlflow_GetMetricHistory_fieldAccessorTable
          .ensureFieldAccessorsInitialized(
              org.mlflow.api.proto.Service.GetMetricHistory.class, org.mlflow.api.proto.Service.GetMetricHistory.Builder.class);
    }

    public interface ResponseOrBuilder extends
        // @@protoc_insertion_point(interface_extends:mlflow.GetMetricHistory.Response)
        com.google.protobuf.MessageOrBuilder {

      /**
       * <pre>
       * All logged values for this metric.
       * </pre>
       *
       * <code>repeated .mlflow.Metric metrics = 1;</code>
       */
      java.util.List<org.mlflow.api.proto.Service.Metric> 
          getMetricsList();
      /**
       * <pre>
       * All logged values for this metric.
       * </pre>
       *
       * <code>repeated .mlflow.Metric metrics = 1;</code>
       */
      org.mlflow.api.proto.Service.Metric getMetrics(int index);
      /**
       * <pre>
       * All logged values for this metric.
       * </pre>
       *
       * <code>repeated .mlflow.Metric metrics = 1;</code>
       */
      int getMetricsCount();
      /**
       * <pre>
       * All logged values for this metric.
       * </pre>
       *
       * <code>repeated .mlflow.Metric metrics = 1;</code>
       */
      java.util.List<? extends org.mlflow.api.proto.Service.MetricOrBuilder> 
          getMetricsOrBuilderList();
      /**
       * <pre>
       * All logged values for this metric.
       * </pre>
       *
       * <code>repeated .mlflow.Metric metrics = 1;</code>
       */
      org.mlflow.api.proto.Service.MetricOrBuilder getMetricsOrBuilder(
          int index);
    }
    /**
     * Protobuf type {@code mlflow.GetMetricHistory.Response}
     */
    public  static final class Response extends
        com.google.protobuf.GeneratedMessageV3 implements
        // @@protoc_insertion_point(message_implements:mlflow.GetMetricHistory.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() {
        metrics_ = java.util.Collections.emptyList();
      }

      @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) == 0x00000001)) {
                  metrics_ = new java.util.ArrayList<org.mlflow.api.proto.Service.Metric>();
                  mutable_bitField0_ |= 0x00000001;
                }
                metrics_.add(
                    input.readMessage(org.mlflow.api.proto.Service.Metric.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) == 0x00000001)) {
            metrics_ = java.util.Collections.unmodifiableList(metrics_);
          }
          this.unknownFields = unknownFields.build();
          makeExtensionsImmutable();
        }
      }
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_GetMetricHistory_Response_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_GetMetricHistory_Response_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.GetMetricHistory.Response.class, org.mlflow.api.proto.Service.GetMetricHistory.Response.Builder.class);
      }

      public static final int METRICS_FIELD_NUMBER = 1;
      private java.util.List<org.mlflow.api.proto.Service.Metric> metrics_;
      /**
       * <pre>
       * All logged values for this metric.
       * </pre>
       *
       * <code>repeated .mlflow.Metric metrics = 1;</code>
       */
      public java.util.List<org.mlflow.api.proto.Service.Metric> getMetricsList() {
        return metrics_;
      }
      /**
       * <pre>
       * All logged values for this metric.
       * </pre>
       *
       * <code>repeated .mlflow.Metric metrics = 1;</code>
       */
      public java.util.List<? extends org.mlflow.api.proto.Service.MetricOrBuilder> 
          getMetricsOrBuilderList() {
        return metrics_;
      }
      /**
       * <pre>
       * All logged values for this metric.
       * </pre>
       *
       * <code>repeated .mlflow.Metric metrics = 1;</code>
       */
      public int getMetricsCount() {
        return metrics_.size();
      }
      /**
       * <pre>
       * All logged values for this metric.
       * </pre>
       *
       * <code>repeated .mlflow.Metric metrics = 1;</code>
       */
      public org.mlflow.api.proto.Service.Metric getMetrics(int index) {
        return metrics_.get(index);
      }
      /**
       * <pre>
       * All logged values for this metric.
       * </pre>
       *
       * <code>repeated .mlflow.Metric metrics = 1;</code>
       */
      public org.mlflow.api.proto.Service.MetricOrBuilder getMetricsOrBuilder(
          int index) {
        return metrics_.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 < metrics_.size(); i++) {
          output.writeMessage(1, metrics_.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 < metrics_.size(); i++) {
          size += com.google.protobuf.CodedOutputStream
            .computeMessageSize(1, metrics_.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.GetMetricHistory.Response)) {
          return super.equals(obj);
        }
        org.mlflow.api.proto.Service.GetMetricHistory.Response other = (org.mlflow.api.proto.Service.GetMetricHistory.Response) obj;

        boolean result = true;
        result = result && getMetricsList()
            .equals(other.getMetricsList());
        result = result && unknownFields.equals(other.unknownFields);
        return result;
      }

      @java.lang.Override
      public int hashCode() {
        if (memoizedHashCode != 0) {
          return memoizedHashCode;
        }
        int hash = 41;
        hash = (19 * hash) + getDescriptor().hashCode();
        if (getMetricsCount() > 0) {
          hash = (37 * hash) + METRICS_FIELD_NUMBER;
          hash = (53 * hash) + getMetricsList().hashCode();
        }
        hash = (29 * hash) + unknownFields.hashCode();
        memoizedHashCode = hash;
        return hash;
      }

      public static org.mlflow.api.proto.Service.GetMetricHistory.Response parseFrom(
          java.nio.ByteBuffer data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.GetMetricHistory.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.GetMetricHistory.Response parseFrom(
          com.google.protobuf.ByteString data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.GetMetricHistory.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.GetMetricHistory.Response parseFrom(byte[] data)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return PARSER.parseFrom(data);
      }
      public static org.mlflow.api.proto.Service.GetMetricHistory.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.GetMetricHistory.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.GetMetricHistory.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.GetMetricHistory.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.GetMetricHistory.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.GetMetricHistory.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.GetMetricHistory.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.GetMetricHistory.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.GetMetricHistory.Response}
       */
      public static final class Builder extends
          com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
          // @@protoc_insertion_point(builder_implements:mlflow.GetMetricHistory.Response)
          org.mlflow.api.proto.Service.GetMetricHistory.ResponseOrBuilder {
        public static final com.google.protobuf.Descriptors.Descriptor
            getDescriptor() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_GetMetricHistory_Response_descriptor;
        }

        @java.lang.Override
        protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
            internalGetFieldAccessorTable() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_GetMetricHistory_Response_fieldAccessorTable
              .ensureFieldAccessorsInitialized(
                  org.mlflow.api.proto.Service.GetMetricHistory.Response.class, org.mlflow.api.proto.Service.GetMetricHistory.Response.Builder.class);
        }

        // Construct using org.mlflow.api.proto.Service.GetMetricHistory.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) {
            getMetricsFieldBuilder();
          }
        }
        @java.lang.Override
        public Builder clear() {
          super.clear();
          if (metricsBuilder_ == null) {
            metrics_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000001);
          } else {
            metricsBuilder_.clear();
          }
          return this;
        }

        @java.lang.Override
        public com.google.protobuf.Descriptors.Descriptor
            getDescriptorForType() {
          return org.mlflow.api.proto.Service.internal_static_mlflow_GetMetricHistory_Response_descriptor;
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.GetMetricHistory.Response getDefaultInstanceForType() {
          return org.mlflow.api.proto.Service.GetMetricHistory.Response.getDefaultInstance();
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.GetMetricHistory.Response build() {
          org.mlflow.api.proto.Service.GetMetricHistory.Response result = buildPartial();
          if (!result.isInitialized()) {
            throw newUninitializedMessageException(result);
          }
          return result;
        }

        @java.lang.Override
        public org.mlflow.api.proto.Service.GetMetricHistory.Response buildPartial() {
          org.mlflow.api.proto.Service.GetMetricHistory.Response result = new org.mlflow.api.proto.Service.GetMetricHistory.Response(this);
          int from_bitField0_ = bitField0_;
          if (metricsBuilder_ == null) {
            if (((bitField0_ & 0x00000001) == 0x00000001)) {
              metrics_ = java.util.Collections.unmodifiableList(metrics_);
              bitField0_ = (bitField0_ & ~0x00000001);
            }
            result.metrics_ = metrics_;
          } else {
            result.metrics_ = metricsBuilder_.build();
          }
          onBuilt();
          return result;
        }

        @java.lang.Override
        public Builder clone() {
          return (Builder) super.clone();
        }
        @java.lang.Override
        public Builder setField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.setField(field, value);
        }
        @java.lang.Override
        public Builder clearField(
            com.google.protobuf.Descriptors.FieldDescriptor field) {
          return (Builder) super.clearField(field);
        }
        @java.lang.Override
        public Builder clearOneof(
            com.google.protobuf.Descriptors.OneofDescriptor oneof) {
          return (Builder) super.clearOneof(oneof);
        }
        @java.lang.Override
        public Builder setRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            int index, java.lang.Object value) {
          return (Builder) super.setRepeatedField(field, index, value);
        }
        @java.lang.Override
        public Builder addRepeatedField(
            com.google.protobuf.Descriptors.FieldDescriptor field,
            java.lang.Object value) {
          return (Builder) super.addRepeatedField(field, value);
        }
        @java.lang.Override
        public Builder mergeFrom(com.google.protobuf.Message other) {
          if (other instanceof org.mlflow.api.proto.Service.GetMetricHistory.Response) {
            return mergeFrom((org.mlflow.api.proto.Service.GetMetricHistory.Response)other);
          } else {
            super.mergeFrom(other);
            return this;
          }
        }

        public Builder mergeFrom(org.mlflow.api.proto.Service.GetMetricHistory.Response other) {
          if (other == org.mlflow.api.proto.Service.GetMetricHistory.Response.getDefaultInstance()) return this;
          if (metricsBuilder_ == null) {
            if (!other.metrics_.isEmpty()) {
              if (metrics_.isEmpty()) {
                metrics_ = other.metrics_;
                bitField0_ = (bitField0_ & ~0x00000001);
              } else {
                ensureMetricsIsMutable();
                metrics_.addAll(other.metrics_);
              }
              onChanged();
            }
          } else {
            if (!other.metrics_.isEmpty()) {
              if (metricsBuilder_.isEmpty()) {
                metricsBuilder_.dispose();
                metricsBuilder_ = null;
                metrics_ = other.metrics_;
                bitField0_ = (bitField0_ & ~0x00000001);
                metricsBuilder_ = 
                  com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
                     getMetricsFieldBuilder() : null;
              } else {
                metricsBuilder_.addAllMessages(other.metrics_);
              }
            }
          }
          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.GetMetricHistory.Response parsedMessage = null;
          try {
            parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
          } catch (com.google.protobuf.InvalidProtocolBufferException e) {
            parsedMessage = (org.mlflow.api.proto.Service.GetMetricHistory.Response) e.getUnfinishedMessage();
            throw e.unwrapIOException();
          } finally {
            if (parsedMessage != null) {
              mergeFrom(parsedMessage);
            }
          }
          return this;
        }
        private int bitField0_;

        private java.util.List<org.mlflow.api.proto.Service.Metric> metrics_ =
          java.util.Collections.emptyList();
        private void ensureMetricsIsMutable() {
          if (!((bitField0_ & 0x00000001) == 0x00000001)) {
            metrics_ = new java.util.ArrayList<org.mlflow.api.proto.Service.Metric>(metrics_);
            bitField0_ |= 0x00000001;
           }
        }

        private com.google.protobuf.RepeatedFieldBuilderV3<
            org.mlflow.api.proto.Service.Metric, org.mlflow.api.proto.Service.Metric.Builder, org.mlflow.api.proto.Service.MetricOrBuilder> metricsBuilder_;

        /**
         * <pre>
         * All logged values for this metric.
         * </pre>
         *
         * <code>repeated .mlflow.Metric metrics = 1;</code>
         */
        public java.util.List<org.mlflow.api.proto.Service.Metric> getMetricsList() {
          if (metricsBuilder_ == null) {
            return java.util.Collections.unmodifiableList(metrics_);
          } else {
            return metricsBuilder_.getMessageList();
          }
        }
        /**
         * <pre>
         * All logged values for this metric.
         * </pre>
         *
         * <code>repeated .mlflow.Metric metrics = 1;</code>
         */
        public int getMetricsCount() {
          if (metricsBuilder_ == null) {
            return metrics_.size();
          } else {
            return metricsBuilder_.getCount();
          }
        }
        /**
         * <pre>
         * All logged values for this metric.
         * </pre>
         *
         * <code>repeated .mlflow.Metric metrics = 1;</code>
         */
        public org.mlflow.api.proto.Service.Metric getMetrics(int index) {
          if (metricsBuilder_ == null) {
            return metrics_.get(index);
          } else {
            return metricsBuilder_.getMessage(index);
          }
        }
        /**
         * <pre>
         * All logged values for this metric.
         * </pre>
         *
         * <code>repeated .mlflow.Metric metrics = 1;</code>
         */
        public Builder setMetrics(
            int index, org.mlflow.api.proto.Service.Metric value) {
          if (metricsBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureMetricsIsMutable();
            metrics_.set(index, value);
            onChanged();
          } else {
            metricsBuilder_.setMessage(index, value);
          }
          return this;
        }
        /**
         * <pre>
         * All logged values for this metric.
         * </pre>
         *
         * <code>repeated .mlflow.Metric metrics = 1;</code>
         */
        public Builder setMetrics(
            int index, org.mlflow.api.proto.Service.Metric.Builder builderForValue) {
          if (metricsBuilder_ == null) {
            ensureMetricsIsMutable();
            metrics_.set(index, builderForValue.build());
            onChanged();
          } else {
            metricsBuilder_.setMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * All logged values for this metric.
         * </pre>
         *
         * <code>repeated .mlflow.Metric metrics = 1;</code>
         */
        public Builder addMetrics(org.mlflow.api.proto.Service.Metric value) {
          if (metricsBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureMetricsIsMutable();
            metrics_.add(value);
            onChanged();
          } else {
            metricsBuilder_.addMessage(value);
          }
          return this;
        }
        /**
         * <pre>
         * All logged values for this metric.
         * </pre>
         *
         * <code>repeated .mlflow.Metric metrics = 1;</code>
         */
        public Builder addMetrics(
            int index, org.mlflow.api.proto.Service.Metric value) {
          if (metricsBuilder_ == null) {
            if (value == null) {
              throw new NullPointerException();
            }
            ensureMetricsIsMutable();
            metrics_.add(index, value);
            onChanged();
          } else {
            metricsBuilder_.addMessage(index, value);
          }
          return this;
        }
        /**
         * <pre>
         * All logged values for this metric.
         * </pre>
         *
         * <code>repeated .mlflow.Metric metrics = 1;</code>
         */
        public Builder addMetrics(
            org.mlflow.api.proto.Service.Metric.Builder builderForValue) {
          if (metricsBuilder_ == null) {
            ensureMetricsIsMutable();
            metrics_.add(builderForValue.build());
            onChanged();
          } else {
            metricsBuilder_.addMessage(builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * All logged values for this metric.
         * </pre>
         *
         * <code>repeated .mlflow.Metric metrics = 1;</code>
         */
        public Builder addMetrics(
            int index, org.mlflow.api.proto.Service.Metric.Builder builderForValue) {
          if (metricsBuilder_ == null) {
            ensureMetricsIsMutable();
            metrics_.add(index, builderForValue.build());
            onChanged();
          } else {
            metricsBuilder_.addMessage(index, builderForValue.build());
          }
          return this;
        }
        /**
         * <pre>
         * All logged values for this metric.
         * </pre>
         *
         * <code>repeated .mlflow.Metric metrics = 1;</code>
         */
        public Builder addAllMetrics(
            java.lang.Iterable<? extends org.mlflow.api.proto.Service.Metric> values) {
          if (metricsBuilder_ == null) {
            ensureMetricsIsMutable();
            com.google.protobuf.AbstractMessageLite.Builder.addAll(
                values, metrics_);
            onChanged();
          } else {
            metricsBuilder_.addAllMessages(values);
          }
          return this;
        }
        /**
         * <pre>
         * All logged values for this metric.
         * </pre>
         *
         * <code>repeated .mlflow.Metric metrics = 1;</code>
         */
        public Builder clearMetrics() {
          if (metricsBuilder_ == null) {
            metrics_ = java.util.Collections.emptyList();
            bitField0_ = (bitField0_ & ~0x00000001);
            onChanged();
          } else {
            metricsBuilder_.clear();
          }
          return this;
        }
        /**
         * <pre>
         * All logged values for this metric.
         * </pre>
         *
         * <code>repeated .mlflow.Metric metrics = 1;</code>
         */
        public Builder removeMetrics(int index) {
          if (metricsBuilder_ == null) {
            ensureMetricsIsMutable();
            metrics_.remove(index);
            onChanged();
          } else {
            metricsBuilder_.remove(index);
          }
          return this;
        }
        /**
         * <pre>
         * All logged values for this metric.
         * </pre>
         *
         * <code>repeated .mlflow.Metric metrics = 1;</code>
         */
        public org.mlflow.api.proto.Service.Metric.Builder getMetricsBuilder(
            int index) {
          return getMetricsFieldBuilder().getBuilder(index);
        }
        /**
         * <pre>
         * All logged values for this metric.
         * </pre>
         *
         * <code>repeated .mlflow.Metric metrics = 1;</code>
         */
        public org.mlflow.api.proto.Service.MetricOrBuilder getMetricsOrBuilder(
            int index) {
          if (metricsBuilder_ == null) {
            return metrics_.get(index);  } else {
            return metricsBuilder_.getMessageOrBuilder(index);
          }
        }
        /**
         * <pre>
         * All logged values for this metric.
         * </pre>
         *
         * <code>repeated .mlflow.Metric metrics = 1;</code>
         */
        public java.util.List<? extends org.mlflow.api.proto.Service.MetricOrBuilder> 
             getMetricsOrBuilderList() {
          if (metricsBuilder_ != null) {
            return metricsBuilder_.getMessageOrBuilderList();
          } else {
            return java.util.Collections.unmodifiableList(metrics_);
          }
        }
        /**
         * <pre>
         * All logged values for this metric.
         * </pre>
         *
         * <code>repeated .mlflow.Metric metrics = 1;</code>
         */
        public org.mlflow.api.proto.Service.Metric.Builder addMetricsBuilder() {
          return getMetricsFieldBuilder().addBuilder(
              org.mlflow.api.proto.Service.Metric.getDefaultInstance());
        }
        /**
         * <pre>
         * All logged values for this metric.
         * </pre>
         *
         * <code>repeated .mlflow.Metric metrics = 1;</code>
         */
        public org.mlflow.api.proto.Service.Metric.Builder addMetricsBuilder(
            int index) {
          return getMetricsFieldBuilder().addBuilder(
              index, org.mlflow.api.proto.Service.Metric.getDefaultInstance());
        }
        /**
         * <pre>
         * All logged values for this metric.
         * </pre>
         *
         * <code>repeated .mlflow.Metric metrics = 1;</code>
         */
        public java.util.List<org.mlflow.api.proto.Service.Metric.Builder> 
             getMetricsBuilderList() {
          return getMetricsFieldBuilder().getBuilderList();
        }
        private com.google.protobuf.RepeatedFieldBuilderV3<
            org.mlflow.api.proto.Service.Metric, org.mlflow.api.proto.Service.Metric.Builder, org.mlflow.api.proto.Service.MetricOrBuilder> 
            getMetricsFieldBuilder() {
          if (metricsBuilder_ == null) {
            metricsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
                org.mlflow.api.proto.Service.Metric, org.mlflow.api.proto.Service.Metric.Builder, org.mlflow.api.proto.Service.MetricOrBuilder>(
                    metrics_,
                    ((bitField0_ & 0x00000001) == 0x00000001),
                    getParentForChildren(),
                    isClean());
            metrics_ = null;
          }
          return metricsBuilder_;
        }
        @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.GetMetricHistory.Response)
      }

      // @@protoc_insertion_point(class_scope:mlflow.GetMetricHistory.Response)
      private static final org.mlflow.api.proto.Service.GetMetricHistory.Response DEFAULT_INSTANCE;
      static {
        DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.GetMetricHistory.Response();
      }

      public static org.mlflow.api.proto.Service.GetMetricHistory.Response getDefaultInstance() {
        return DEFAULT_INSTANCE;
      }

      @java.lang.Deprecated public static final com.google.protobuf.Parser<Response>
          PARSER = new com.google.protobuf.AbstractParser<Response>() {
        @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<Response> parser() {
        return PARSER;
      }

      @java.lang.Override
      public com.google.protobuf.Parser<Response> getParserForType() {
        return PARSER;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.GetMetricHistory.Response getDefaultInstanceForType() {
        return DEFAULT_INSTANCE;
      }

    }

    private int bitField0_;
    public static final int RUN_UUID_FIELD_NUMBER = 1;
    private volatile java.lang.Object runUuid_;
    /**
     * <pre>
     * ID of the run from which to fetch metric values.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    public boolean hasRunUuid() {
      return ((bitField0_ & 0x00000001) == 0x00000001);
    }
    /**
     * <pre>
     * ID of the run from which to fetch metric values.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    public java.lang.String getRunUuid() {
      java.lang.Object ref = runUuid_;
      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()) {
          runUuid_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * ID of the run from which to fetch metric values.
     * </pre>
     *
     * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
     */
    public com.google.protobuf.ByteString
        getRunUuidBytes() {
      java.lang.Object ref = runUuid_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        runUuid_ = b;
        return b;
      } else {
        return (com.google.protobuf.ByteString) ref;
      }
    }

    public static final int METRIC_KEY_FIELD_NUMBER = 2;
    private volatile java.lang.Object metricKey_;
    /**
     * <pre>
     * Name of the metric.
     * </pre>
     *
     * <code>optional string metric_key = 2 [(.validate_required) = true];</code>
     */
    public boolean hasMetricKey() {
      return ((bitField0_ & 0x00000002) == 0x00000002);
    }
    /**
     * <pre>
     * Name of the metric.
     * </pre>
     *
     * <code>optional string metric_key = 2 [(.validate_required) = true];</code>
     */
    public java.lang.String getMetricKey() {
      java.lang.Object ref = metricKey_;
      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()) {
          metricKey_ = s;
        }
        return s;
      }
    }
    /**
     * <pre>
     * Name of the metric.
     * </pre>
     *
     * <code>optional string metric_key = 2 [(.validate_required) = true];</code>
     */
    public com.google.protobuf.ByteString
        getMetricKeyBytes() {
      java.lang.Object ref = metricKey_;
      if (ref instanceof java.lang.String) {
        com.google.protobuf.ByteString b = 
            com.google.protobuf.ByteString.copyFromUtf8(
                (java.lang.String) ref);
        metricKey_ = 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) == 0x00000001)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 1, runUuid_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        com.google.protobuf.GeneratedMessageV3.writeString(output, 2, metricKey_);
      }
      unknownFields.writeTo(output);
    }

    @java.lang.Override
    public int getSerializedSize() {
      int size = memoizedSize;
      if (size != -1) return size;

      size = 0;
      if (((bitField0_ & 0x00000001) == 0x00000001)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, runUuid_);
      }
      if (((bitField0_ & 0x00000002) == 0x00000002)) {
        size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, metricKey_);
      }
      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.GetMetricHistory)) {
        return super.equals(obj);
      }
      org.mlflow.api.proto.Service.GetMetricHistory other = (org.mlflow.api.proto.Service.GetMetricHistory) obj;

      boolean result = true;
      result = result && (hasRunUuid() == other.hasRunUuid());
      if (hasRunUuid()) {
        result = result && getRunUuid()
            .equals(other.getRunUuid());
      }
      result = result && (hasMetricKey() == other.hasMetricKey());
      if (hasMetricKey()) {
        result = result && getMetricKey()
            .equals(other.getMetricKey());
      }
      result = result && unknownFields.equals(other.unknownFields);
      return result;
    }

    @java.lang.Override
    public int hashCode() {
      if (memoizedHashCode != 0) {
        return memoizedHashCode;
      }
      int hash = 41;
      hash = (19 * hash) + getDescriptor().hashCode();
      if (hasRunUuid()) {
        hash = (37 * hash) + RUN_UUID_FIELD_NUMBER;
        hash = (53 * hash) + getRunUuid().hashCode();
      }
      if (hasMetricKey()) {
        hash = (37 * hash) + METRIC_KEY_FIELD_NUMBER;
        hash = (53 * hash) + getMetricKey().hashCode();
      }
      hash = (29 * hash) + unknownFields.hashCode();
      memoizedHashCode = hash;
      return hash;
    }

    public static org.mlflow.api.proto.Service.GetMetricHistory parseFrom(
        java.nio.ByteBuffer data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.GetMetricHistory 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.GetMetricHistory parseFrom(
        com.google.protobuf.ByteString data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.GetMetricHistory 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.GetMetricHistory parseFrom(byte[] data)
        throws com.google.protobuf.InvalidProtocolBufferException {
      return PARSER.parseFrom(data);
    }
    public static org.mlflow.api.proto.Service.GetMetricHistory 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.GetMetricHistory parseFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.GetMetricHistory 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.GetMetricHistory parseDelimitedFrom(java.io.InputStream input)
        throws java.io.IOException {
      return com.google.protobuf.GeneratedMessageV3
          .parseDelimitedWithIOException(PARSER, input);
    }
    public static org.mlflow.api.proto.Service.GetMetricHistory 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.GetMetricHistory 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.GetMetricHistory 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.GetMetricHistory 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.GetMetricHistory}
     */
    public static final class Builder extends
        com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
        // @@protoc_insertion_point(builder_implements:mlflow.GetMetricHistory)
        org.mlflow.api.proto.Service.GetMetricHistoryOrBuilder {
      public static final com.google.protobuf.Descriptors.Descriptor
          getDescriptor() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_GetMetricHistory_descriptor;
      }

      @java.lang.Override
      protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
          internalGetFieldAccessorTable() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_GetMetricHistory_fieldAccessorTable
            .ensureFieldAccessorsInitialized(
                org.mlflow.api.proto.Service.GetMetricHistory.class, org.mlflow.api.proto.Service.GetMetricHistory.Builder.class);
      }

      // Construct using org.mlflow.api.proto.Service.GetMetricHistory.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();
        runUuid_ = "";
        bitField0_ = (bitField0_ & ~0x00000001);
        metricKey_ = "";
        bitField0_ = (bitField0_ & ~0x00000002);
        return this;
      }

      @java.lang.Override
      public com.google.protobuf.Descriptors.Descriptor
          getDescriptorForType() {
        return org.mlflow.api.proto.Service.internal_static_mlflow_GetMetricHistory_descriptor;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.GetMetricHistory getDefaultInstanceForType() {
        return org.mlflow.api.proto.Service.GetMetricHistory.getDefaultInstance();
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.GetMetricHistory build() {
        org.mlflow.api.proto.Service.GetMetricHistory result = buildPartial();
        if (!result.isInitialized()) {
          throw newUninitializedMessageException(result);
        }
        return result;
      }

      @java.lang.Override
      public org.mlflow.api.proto.Service.GetMetricHistory buildPartial() {
        org.mlflow.api.proto.Service.GetMetricHistory result = new org.mlflow.api.proto.Service.GetMetricHistory(this);
        int from_bitField0_ = bitField0_;
        int to_bitField0_ = 0;
        if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
          to_bitField0_ |= 0x00000001;
        }
        result.runUuid_ = runUuid_;
        if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
          to_bitField0_ |= 0x00000002;
        }
        result.metricKey_ = metricKey_;
        result.bitField0_ = to_bitField0_;
        onBuilt();
        return result;
      }

      @java.lang.Override
      public Builder clone() {
        return (Builder) super.clone();
      }
      @java.lang.Override
      public Builder setField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.setField(field, value);
      }
      @java.lang.Override
      public Builder clearField(
          com.google.protobuf.Descriptors.FieldDescriptor field) {
        return (Builder) super.clearField(field);
      }
      @java.lang.Override
      public Builder clearOneof(
          com.google.protobuf.Descriptors.OneofDescriptor oneof) {
        return (Builder) super.clearOneof(oneof);
      }
      @java.lang.Override
      public Builder setRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          int index, java.lang.Object value) {
        return (Builder) super.setRepeatedField(field, index, value);
      }
      @java.lang.Override
      public Builder addRepeatedField(
          com.google.protobuf.Descriptors.FieldDescriptor field,
          java.lang.Object value) {
        return (Builder) super.addRepeatedField(field, value);
      }
      @java.lang.Override
      public Builder mergeFrom(com.google.protobuf.Message other) {
        if (other instanceof org.mlflow.api.proto.Service.GetMetricHistory) {
          return mergeFrom((org.mlflow.api.proto.Service.GetMetricHistory)other);
        } else {
          super.mergeFrom(other);
          return this;
        }
      }

      public Builder mergeFrom(org.mlflow.api.proto.Service.GetMetricHistory other) {
        if (other == org.mlflow.api.proto.Service.GetMetricHistory.getDefaultInstance()) return this;
        if (other.hasRunUuid()) {
          bitField0_ |= 0x00000001;
          runUuid_ = other.runUuid_;
          onChanged();
        }
        if (other.hasMetricKey()) {
          bitField0_ |= 0x00000002;
          metricKey_ = other.metricKey_;
          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.GetMetricHistory parsedMessage = null;
        try {
          parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          parsedMessage = (org.mlflow.api.proto.Service.GetMetricHistory) e.getUnfinishedMessage();
          throw e.unwrapIOException();
        } finally {
          if (parsedMessage != null) {
            mergeFrom(parsedMessage);
          }
        }
        return this;
      }
      private int bitField0_;

      private java.lang.Object runUuid_ = "";
      /**
       * <pre>
       * ID of the run from which to fetch metric values.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public boolean hasRunUuid() {
        return ((bitField0_ & 0x00000001) == 0x00000001);
      }
      /**
       * <pre>
       * ID of the run from which to fetch metric values.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public java.lang.String getRunUuid() {
        java.lang.Object ref = runUuid_;
        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()) {
            runUuid_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * ID of the run from which to fetch metric values.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public com.google.protobuf.ByteString
          getRunUuidBytes() {
        java.lang.Object ref = runUuid_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          runUuid_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * ID of the run from which to fetch metric values.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public Builder setRunUuid(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        runUuid_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * ID of the run from which to fetch metric values.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public Builder clearRunUuid() {
        bitField0_ = (bitField0_ & ~0x00000001);
        runUuid_ = getDefaultInstance().getRunUuid();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * ID of the run from which to fetch metric values.
       * </pre>
       *
       * <code>optional string run_uuid = 1 [(.validate_required) = true];</code>
       */
      public Builder setRunUuidBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000001;
        runUuid_ = value;
        onChanged();
        return this;
      }

      private java.lang.Object metricKey_ = "";
      /**
       * <pre>
       * Name of the metric.
       * </pre>
       *
       * <code>optional string metric_key = 2 [(.validate_required) = true];</code>
       */
      public boolean hasMetricKey() {
        return ((bitField0_ & 0x00000002) == 0x00000002);
      }
      /**
       * <pre>
       * Name of the metric.
       * </pre>
       *
       * <code>optional string metric_key = 2 [(.validate_required) = true];</code>
       */
      public java.lang.String getMetricKey() {
        java.lang.Object ref = metricKey_;
        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()) {
            metricKey_ = s;
          }
          return s;
        } else {
          return (java.lang.String) ref;
        }
      }
      /**
       * <pre>
       * Name of the metric.
       * </pre>
       *
       * <code>optional string metric_key = 2 [(.validate_required) = true];</code>
       */
      public com.google.protobuf.ByteString
          getMetricKeyBytes() {
        java.lang.Object ref = metricKey_;
        if (ref instanceof String) {
          com.google.protobuf.ByteString b = 
              com.google.protobuf.ByteString.copyFromUtf8(
                  (java.lang.String) ref);
          metricKey_ = b;
          return b;
        } else {
          return (com.google.protobuf.ByteString) ref;
        }
      }
      /**
       * <pre>
       * Name of the metric.
       * </pre>
       *
       * <code>optional string metric_key = 2 [(.validate_required) = true];</code>
       */
      public Builder setMetricKey(
          java.lang.String value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        metricKey_ = value;
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Name of the metric.
       * </pre>
       *
       * <code>optional string metric_key = 2 [(.validate_required) = true];</code>
       */
      public Builder clearMetricKey() {
        bitField0_ = (bitField0_ & ~0x00000002);
        metricKey_ = getDefaultInstance().getMetricKey();
        onChanged();
        return this;
      }
      /**
       * <pre>
       * Name of the metric.
       * </pre>
       *
       * <code>optional string metric_key = 2 [(.validate_required) = true];</code>
       */
      public Builder setMetricKeyBytes(
          com.google.protobuf.ByteString value) {
        if (value == null) {
    throw new NullPointerException();
  }
  bitField0_ |= 0x00000002;
        metricKey_ = 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.GetMetricHistory)
    }

    // @@protoc_insertion_point(class_scope:mlflow.GetMetricHistory)
    private static final org.mlflow.api.proto.Service.GetMetricHistory DEFAULT_INSTANCE;
    static {
      DEFAULT_INSTANCE = new org.mlflow.api.proto.Service.GetMetricHistory();
    }

    public static org.mlflow.api.proto.Service.GetMetricHistory getDefaultInstance() {
      return DEFAULT_INSTANCE;
    }

    @java.lang.Deprecated public static final com.google.protobuf.Parser<GetMetricHistory>
        PARSER = new com.google.protobuf.AbstractParser<GetMetricHistory>() {
      @java.lang.Override
      public GetMetricHistory parsePartialFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws com.google.protobuf.InvalidProtocolBufferException {
        return new GetMetricHistory(input, extensionRegistry);
      }
    };

    public static com.google.protobuf.Parser<GetMetricHistory> parser() {
      return PARSER;
    }

    @java.lang.Override
    public com.google.protobuf.Parser<GetMetricHistory> getParserForType() {
      return PARSER;
    }

    @java.lang.Override
    public org.mlflow.api.proto.Service.GetMetricHistory getDefaultInstanceForType() {
      return DEFAULT_INSTANCE;
    }

  }

  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_Metric_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_Metric_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_Param_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_Param_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_Run_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_Run_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_RunData_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_RunData_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_RunTag_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_RunTag_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_RunInfo_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_RunInfo_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_Experiment_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_Experiment_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_CreateExperiment_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_CreateExperiment_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_CreateExperiment_Response_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_CreateExperiment_Response_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_ListExperiments_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_ListExperiments_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_ListExperiments_Response_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_ListExperiments_Response_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_GetExperiment_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_GetExperiment_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_GetExperiment_Response_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_GetExperiment_Response_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_DeleteExperiment_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_DeleteExperiment_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_DeleteExperiment_Response_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_DeleteExperiment_Response_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_RestoreExperiment_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_RestoreExperiment_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_RestoreExperiment_Response_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_RestoreExperiment_Response_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_CreateRun_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_CreateRun_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_CreateRun_Response_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_CreateRun_Response_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_UpdateRun_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_UpdateRun_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_UpdateRun_Response_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_UpdateRun_Response_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_DeleteRun_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_DeleteRun_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_DeleteRun_Response_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_DeleteRun_Response_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_RestoreRun_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_RestoreRun_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_RestoreRun_Response_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_RestoreRun_Response_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_LogMetric_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_LogMetric_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_LogMetric_Response_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_LogMetric_Response_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_LogParam_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_LogParam_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_LogParam_Response_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_LogParam_Response_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_SetTag_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_SetTag_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_SetTag_Response_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_SetTag_Response_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_GetRun_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_GetRun_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_GetRun_Response_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_GetRun_Response_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_GetMetric_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_GetMetric_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_GetMetric_Response_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_GetMetric_Response_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_GetParam_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_GetParam_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_GetParam_Response_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_GetParam_Response_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_SearchExpression_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_SearchExpression_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_MetricSearchExpression_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_MetricSearchExpression_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_ParameterSearchExpression_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_ParameterSearchExpression_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_StringClause_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_StringClause_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_FloatClause_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_FloatClause_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_DoubleClause_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_DoubleClause_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_SearchRuns_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_SearchRuns_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_SearchRuns_Response_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_SearchRuns_Response_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_ListArtifacts_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_ListArtifacts_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_ListArtifacts_Response_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_ListArtifacts_Response_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_FileInfo_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_FileInfo_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_GetArtifact_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_GetArtifact_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_GetArtifact_Response_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_GetArtifact_Response_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_GetMetricHistory_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_GetMetricHistory_fieldAccessorTable;
  private static final com.google.protobuf.Descriptors.Descriptor
    internal_static_mlflow_GetMetricHistory_Response_descriptor;
  private static final 
    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
      internal_static_mlflow_GetMetricHistory_Response_fieldAccessorTable;

  public static com.google.protobuf.Descriptors.FileDescriptor
      getDescriptor() {
    return descriptor;
  }
  private static  com.google.protobuf.Descriptors.FileDescriptor
      descriptor;
  static {
    java.lang.String[] descriptorData = {
      "\n\rservice.proto\022\006mlflow\032\025scalapb/scalapb" +
      ".proto\032\020databricks.proto\"7\n\006Metric\022\013\n\003ke" +
      "y\030\001 \001(\t\022\r\n\005value\030\002 \001(\001\022\021\n\ttimestamp\030\003 \001(" +
      "\003\"#\n\005Param\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t\"C" +
      "\n\003Run\022\035\n\004info\030\001 \001(\0132\017.mlflow.RunInfo\022\035\n\004" +
      "data\030\002 \001(\0132\017.mlflow.RunData\"g\n\007RunData\022\037" +
      "\n\007metrics\030\001 \003(\0132\016.mlflow.Metric\022\035\n\006param" +
      "s\030\002 \003(\0132\r.mlflow.Param\022\034\n\004tags\030\003 \003(\0132\016.m" +
      "lflow.RunTag\"$\n\006RunTag\022\013\n\003key\030\001 \001(\t\022\r\n\005v" +
      "alue\030\002 \001(\t\"\271\002\n\007RunInfo\022\020\n\010run_uuid\030\001 \001(\t" +
      "\022\025\n\rexperiment_id\030\002 \001(\003\022\014\n\004name\030\003 \001(\t\022\'\n" +
      "\013source_type\030\004 \001(\0162\022.mlflow.SourceType\022\023" +
      "\n\013source_name\030\005 \001(\t\022\017\n\007user_id\030\006 \001(\t\022!\n\006" +
      "status\030\007 \001(\0162\021.mlflow.RunStatus\022\022\n\nstart" +
      "_time\030\010 \001(\003\022\020\n\010end_time\030\t \001(\003\022\026\n\016source_" +
      "version\030\n \001(\t\022\030\n\020entry_point_name\030\013 \001(\t\022" +
      "\024\n\014artifact_uri\030\r \001(\t\022\027\n\017lifecycle_stage" +
      "\030\016 \001(\t\"\226\001\n\nExperiment\022\025\n\rexperiment_id\030\001" +
      " \001(\003\022\014\n\004name\030\002 \001(\t\022\031\n\021artifact_location\030" +
      "\003 \001(\t\022\027\n\017lifecycle_stage\030\004 \001(\t\022\030\n\020last_u" +
      "pdate_time\030\005 \001(\003\022\025\n\rcreation_time\030\006 \001(\003\"" +
      "\221\001\n\020CreateExperiment\022\022\n\004name\030\001 \001(\tB\004\210\265\030\001" +
      "\022\031\n\021artifact_location\030\002 \001(\t\032!\n\010Response\022" +
      "\025\n\rexperiment_id\030\001 \001(\003:+\342?(\n&com.databri" +
      "cks.rpc.RPC[$this.Response]\"\230\001\n\017ListExpe" +
      "riments\022#\n\tview_type\030\001 \001(\0162\020.mlflow.View" +
      "Type\0323\n\010Response\022\'\n\013experiments\030\001 \003(\0132\022." +
      "mlflow.Experiment:+\342?(\n&com.databricks.r" +
      "pc.RPC[$this.Response]\"\254\001\n\rGetExperiment" +
      "\022\033\n\rexperiment_id\030\001 \001(\003B\004\210\265\030\001\032Q\n\010Respons" +
      "e\022&\n\nexperiment\030\001 \001(\0132\022.mlflow.Experimen" +
      "t\022\035\n\004runs\030\002 \003(\0132\017.mlflow.RunInfo:+\342?(\n&c" +
      "om.databricks.rpc.RPC[$this.Response]\"h\n" +
      "\020DeleteExperiment\022\033\n\rexperiment_id\030\001 \001(\003" +
      "B\004\210\265\030\001\032\n\n\010Response:+\342?(\n&com.databricks." +
      "rpc.RPC[$this.Response]\"i\n\021RestoreExperi" +
      "ment\022\033\n\rexperiment_id\030\001 \001(\003B\004\210\265\030\001\032\n\n\010Res" +
      "ponse:+\342?(\n&com.databricks.rpc.RPC[$this" +
      ".Response]\"\321\002\n\tCreateRun\022\025\n\rexperiment_i" +
      "d\030\001 \001(\003\022\017\n\007user_id\030\002 \001(\t\022\020\n\010run_name\030\003 \001" +
      "(\t\022\'\n\013source_type\030\004 \001(\0162\022.mlflow.SourceT" +
      "ype\022\023\n\013source_name\030\005 \001(\t\022\030\n\020entry_point_" +
      "name\030\006 \001(\t\022\022\n\nstart_time\030\007 \001(\003\022\026\n\016source" +
      "_version\030\010 \001(\t\022\034\n\004tags\030\t \003(\0132\016.mlflow.Ru" +
      "nTag\022\025\n\rparent_run_id\030\n \001(\t\032$\n\010Response\022" +
      "\030\n\003run\030\001 \001(\0132\013.mlflow.Run:+\342?(\n&com.data" +
      "bricks.rpc.RPC[$this.Response]\"\264\001\n\tUpdat" +
      "eRun\022\026\n\010run_uuid\030\001 \001(\tB\004\210\265\030\001\022!\n\006status\030\002" +
      " \001(\0162\021.mlflow.RunStatus\022\020\n\010end_time\030\003 \001(" +
      "\003\032-\n\010Response\022!\n\010run_info\030\001 \001(\0132\017.mlflow" +
      ".RunInfo:+\342?(\n&com.databricks.rpc.RPC[$t" +
      "his.Response]\"Z\n\tDeleteRun\022\024\n\006run_id\030\001 \001" +
      "(\tB\004\210\265\030\001\032\n\n\010Response:+\342?(\n&com.databrick" +
      "s.rpc.RPC[$this.Response]\"[\n\nRestoreRun\022" +
      "\024\n\006run_id\030\001 \001(\tB\004\210\265\030\001\032\n\n\010Response:+\342?(\n&" +
      "com.databricks.rpc.RPC[$this.Response]\"\235" +
      "\001\n\tLogMetric\022\026\n\010run_uuid\030\001 \001(\tB\004\210\265\030\001\022\021\n\003" +
      "key\030\002 \001(\tB\004\210\265\030\001\022\023\n\005value\030\003 \001(\001B\004\210\265\030\001\022\027\n\t" +
      "timestamp\030\004 \001(\003B\004\210\265\030\001\032\n\n\010Response:+\342?(\n&" +
      "com.databricks.rpc.RPC[$this.Response]\"\203" +
      "\001\n\010LogParam\022\026\n\010run_uuid\030\001 \001(\tB\004\210\265\030\001\022\021\n\003k" +
      "ey\030\002 \001(\tB\004\210\265\030\001\022\023\n\005value\030\003 \001(\tB\004\210\265\030\001\032\n\n\010R" +
      "esponse:+\342?(\n&com.databricks.rpc.RPC[$th" +
      "is.Response]\"\201\001\n\006SetTag\022\026\n\010run_uuid\030\001 \001(" +
      "\tB\004\210\265\030\001\022\021\n\003key\030\002 \001(\tB\004\210\265\030\001\022\023\n\005value\030\003 \001(" +
      "\tB\004\210\265\030\001\032\n\n\010Response:+\342?(\n&com.databricks" +
      ".rpc.RPC[$this.Response]\"s\n\006GetRun\022\026\n\010ru" +
      "n_uuid\030\001 \001(\tB\004\210\265\030\001\032$\n\010Response\022\030\n\003run\030\001 " +
      "\001(\0132\013.mlflow.Run:+\342?(\n&com.databricks.rp" +
      "c.RPC[$this.Response]\"\226\001\n\tGetMetric\022\026\n\010r" +
      "un_uuid\030\001 \001(\tB\004\210\265\030\001\022\030\n\nmetric_key\030\002 \001(\tB" +
      "\004\210\265\030\001\032*\n\010Response\022\036\n\006metric\030\001 \001(\0132\016.mlfl" +
      "ow.Metric:+\342?(\n&com.databricks.rpc.RPC[$" +
      "this.Response]\"\227\001\n\010GetParam\022\026\n\010run_uuid\030" +
      "\001 \001(\tB\004\210\265\030\001\022\030\n\nparam_name\030\002 \001(\tB\004\210\265\030\001\032,\n" +
      "\010Response\022 \n\tparameter\030\001 \001(\0132\r.mlflow.Pa" +
      "ram:+\342?(\n&com.databricks.rpc.RPC[$this.R" +
      "esponse]\"\212\001\n\020SearchExpression\0220\n\006metric\030" +
      "\001 \001(\0132\036.mlflow.MetricSearchExpressionH\000\022" +
      "6\n\tparameter\030\002 \001(\0132!.mlflow.ParameterSea" +
      "rchExpressionH\000B\014\n\nexpression\"}\n\026MetricS" +
      "earchExpression\022\013\n\003key\030\001 \001(\t\022$\n\005float\030\002 " +
      "\001(\0132\023.mlflow.FloatClauseH\000\022&\n\006double\030\003 \001" +
      "(\0132\024.mlflow.DoubleClauseH\000B\010\n\006clause\"Z\n\031" +
      "ParameterSearchExpression\022\013\n\003key\030\001 \001(\t\022&" +
      "\n\006string\030\002 \001(\0132\024.mlflow.StringClauseH\000B\010" +
      "\n\006clause\"1\n\014StringClause\022\022\n\ncomparator\030\001" +
      " \001(\t\022\r\n\005value\030\002 \001(\t\"0\n\013FloatClause\022\022\n\nco" +
      "mparator\030\001 \001(\t\022\r\n\005value\030\002 \001(\002\"1\n\014DoubleC" +
      "lause\022\022\n\ncomparator\030\001 \001(\t\022\r\n\005value\030\002 \001(\001" +
      "\"\343\001\n\nSearchRuns\022\026\n\016experiment_ids\030\001 \003(\003\022" +
      "3\n\021anded_expressions\030\002 \003(\0132\030.mlflow.Sear" +
      "chExpression\0224\n\rrun_view_type\030\003 \001(\0162\020.ml" +
      "flow.ViewType:\013ACTIVE_ONLY\032%\n\010Response\022\031" +
      "\n\004runs\030\001 \003(\0132\013.mlflow.Run:+\342?(\n&com.data" +
      "bricks.rpc.RPC[$this.Response]\"\233\001\n\rListA" +
      "rtifacts\022\020\n\010run_uuid\030\001 \001(\t\022\014\n\004path\030\002 \001(\t" +
      "\032=\n\010Response\022\020\n\010root_uri\030\001 \001(\t\022\037\n\005files\030" +
      "\002 \003(\0132\020.mlflow.FileInfo:+\342?(\n&com.databr" +
      "icks.rpc.RPC[$this.Response]\";\n\010FileInfo" +
      "\022\014\n\004path\030\001 \001(\t\022\016\n\006is_dir\030\002 \001(\010\022\021\n\tfile_s" +
      "ize\030\003 \001(\003\"f\n\013GetArtifact\022\020\n\010run_uuid\030\001 \001" +
      "(\t\022\014\n\004path\030\002 \001(\t\032\n\n\010Response:+\342?(\n&com.d" +
      "atabricks.rpc.RPC[$this.Response]\"\236\001\n\020Ge" +
      "tMetricHistory\022\026\n\010run_uuid\030\001 \001(\tB\004\210\265\030\001\022\030" +
      "\n\nmetric_key\030\002 \001(\tB\004\210\265\030\001\032+\n\010Response\022\037\n\007" +
      "metrics\030\001 \003(\0132\016.mlflow.Metric:+\342?(\n&com." +
      "databricks.rpc.RPC[$this.Response]*6\n\010Vi" +
      "ewType\022\017\n\013ACTIVE_ONLY\020\001\022\020\n\014DELETED_ONLY\020" +
      "\002\022\007\n\003ALL\020\003*I\n\nSourceType\022\014\n\010NOTEBOOK\020\001\022\007" +
      "\n\003JOB\020\002\022\013\n\007PROJECT\020\003\022\t\n\005LOCAL\020\004\022\014\n\007UNKNO" +
      "WN\020\350\007*M\n\tRunStatus\022\013\n\007RUNNING\020\001\022\r\n\tSCHED" +
      "ULED\020\002\022\014\n\010FINISHED\020\003\022\n\n\006FAILED\020\004\022\n\n\006KILL" +
      "ED\020\0052\217\023\n\rMlflowService\022\234\001\n\020createExperim" +
      "ent\022\030.mlflow.CreateExperiment\032!.mlflow.C" +
      "reateExperiment.Response\"K\202\265\030G\n0\n\004POST\022\"" +
      "/preview/mlflow/experiments/create\032\004\010\002\020\000" +
      "\020\001*\021Create Experiment\022\225\001\n\017listExperiment" +
      "s\022\027.mlflow.ListExperiments\032 .mlflow.List" +
      "Experiments.Response\"G\202\265\030C\n-\n\003GET\022 /prev" +
      "iew/mlflow/experiments/list\032\004\010\002\020\000\020\001*\020Lis" +
      "t Experiments\022\214\001\n\rgetExperiment\022\025.mlflow" +
      ".GetExperiment\032\036.mlflow.GetExperiment.Re" +
      "sponse\"D\202\265\030@\n,\n\003GET\022\037/preview/mlflow/exp" +
      "eriments/get\032\004\010\002\020\000\020\001*\016Get Experiment\022\234\001\n" +
      "\020deleteExperiment\022\030.mlflow.DeleteExperim" +
      "ent\032!.mlflow.DeleteExperiment.Response\"K" +
      "\202\265\030G\n0\n\004POST\022\"/preview/mlflow/experiment" +
      "s/delete\032\004\010\002\020\000\020\001*\021Delete Experiment\022\241\001\n\021" +
      "restoreExperiment\022\031.mlflow.RestoreExperi" +
      "ment\032\".mlflow.RestoreExperiment.Response" +
      "\"M\202\265\030I\n1\n\004POST\022#/preview/mlflow/experime" +
      "nts/restore\032\004\010\002\020\000\020\001*\022Restore Experiment\022" +
      "y\n\tcreateRun\022\021.mlflow.CreateRun\032\032.mlflow" +
      ".CreateRun.Response\"=\202\265\0309\n)\n\004POST\022\033/prev" +
      "iew/mlflow/runs/create\032\004\010\002\020\000\020\001*\nCreate R" +
      "un\022y\n\tupdateRun\022\021.mlflow.UpdateRun\032\032.mlf" +
      "low.UpdateRun.Response\"=\202\265\0309\n)\n\004POST\022\033/p" +
      "review/mlflow/runs/update\032\004\010\002\020\000\020\001*\nUpdat" +
      "e Run\022m\n\tdeleteRun\022\021.mlflow.DeleteRun\032\032." +
      "mlflow.DeleteRun.Response\"1\202\265\030-\n)\n\004POST\022" +
      "\033/preview/mlflow/runs/delete\032\004\010\002\020\000\020\001\022q\n\n" +
      "restoreRun\022\022.mlflow.RestoreRun\032\033.mlflow." +
      "RestoreRun.Response\"2\202\265\030.\n*\n\004POST\022\034/prev" +
      "iew/mlflow/runs/restore\032\004\010\002\020\000\020\001\022}\n\tlogMe" +
      "tric\022\021.mlflow.LogMetric\032\032.mlflow.LogMetr" +
      "ic.Response\"A\202\265\030=\n-\n\004POST\022\037/preview/mlfl" +
      "ow/runs/log-metric\032\004\010\002\020\000\020\001*\nLog Metric\022|" +
      "\n\010logParam\022\020.mlflow.LogParam\032\031.mlflow.Lo" +
      "gParam.Response\"C\202\265\030?\n0\n\004POST\022\"/preview/" +
      "mlflow/runs/log-parameter\032\004\010\002\020\000\020\001*\tLog P" +
      "aram\022n\n\006setTag\022\016.mlflow.SetTag\032\027.mlflow." +
      "SetTag.Response\";\202\265\0307\n*\n\004POST\022\034/preview/" +
      "mlflow/runs/set-tag\032\004\010\002\020\000\020\001*\007Set Tag\022i\n\006" +
      "getRun\022\016.mlflow.GetRun\032\027.mlflow.GetRun.R" +
      "esponse\"6\202\265\0302\n%\n\003GET\022\030/preview/mlflow/ru" +
      "ns/get\032\004\010\002\020\000\020\001*\007Get Run\022x\n\tgetMetric\022\021.m" +
      "lflow.GetMetric\032\032.mlflow.GetMetric.Respo" +
      "nse\"<\202\265\0308\n(\n\003GET\022\033/preview/mlflow/metric" +
      "s/get\032\004\010\002\020\000\020\001*\nGet Metric\022s\n\010getParam\022\020." +
      "mlflow.GetParam\032\031.mlflow.GetParam.Respon" +
      "se\":\202\265\0306\n\'\n\003GET\022\032/preview/mlflow/params/" +
      "get\032\004\010\002\020\000\020\001*\tGet Param\022\247\001\n\nsearchRuns\022\022." +
      "mlflow.SearchRuns\032\033.mlflow.SearchRuns.Re" +
      "sponse\"h\202\265\030d\n)\n\004POST\022\033/preview/mlflow/ru" +
      "ns/search\032\004\010\002\020\000\n(\n\003GET\022\033/preview/mlflow/" +
      "runs/search\032\004\010\002\020\000\020\001*\013Search Runs\022\213\001\n\rlis" +
      "tArtifacts\022\025.mlflow.ListArtifacts\032\036.mlfl" +
      "ow.ListArtifacts.Response\"C\202\265\030?\n+\n\003GET\022\036" +
      "/preview/mlflow/artifacts/list\032\004\010\002\020\000\020\001*\016" +
      "List Artifacts\022\235\001\n\020getMetricHistory\022\030.ml" +
      "flow.GetMetricHistory\032!.mlflow.GetMetric" +
      "History.Response\"L\202\265\030H\n0\n\003GET\022#/preview/" +
      "mlflow/metrics/get-history\032\004\010\002\020\000\020\001*\022Get " +
      "Metric HistoryB\036\n\024org.mlflow.api.proto\220\001" +
      "\001\342?\002\020\001"
    };
    com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
        new com.google.protobuf.Descriptors.FileDescriptor.    InternalDescriptorAssigner() {
          public com.google.protobuf.ExtensionRegistry assignDescriptors(
              com.google.protobuf.Descriptors.FileDescriptor root) {
            descriptor = root;
            return null;
          }
        };
    com.google.protobuf.Descriptors.FileDescriptor
      .internalBuildGeneratedFileFrom(descriptorData,
        new com.google.protobuf.Descriptors.FileDescriptor[] {
          org.mlflow.scalapb_interface.Scalapb.getDescriptor(),
          com.databricks.api.proto.databricks.Databricks.getDescriptor(),
        }, assigner);
    internal_static_mlflow_Metric_descriptor =
      getDescriptor().getMessageTypes().get(0);
    internal_static_mlflow_Metric_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_Metric_descriptor,
        new java.lang.String[] { "Key", "Value", "Timestamp", });
    internal_static_mlflow_Param_descriptor =
      getDescriptor().getMessageTypes().get(1);
    internal_static_mlflow_Param_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_Param_descriptor,
        new java.lang.String[] { "Key", "Value", });
    internal_static_mlflow_Run_descriptor =
      getDescriptor().getMessageTypes().get(2);
    internal_static_mlflow_Run_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_Run_descriptor,
        new java.lang.String[] { "Info", "Data", });
    internal_static_mlflow_RunData_descriptor =
      getDescriptor().getMessageTypes().get(3);
    internal_static_mlflow_RunData_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_RunData_descriptor,
        new java.lang.String[] { "Metrics", "Params", "Tags", });
    internal_static_mlflow_RunTag_descriptor =
      getDescriptor().getMessageTypes().get(4);
    internal_static_mlflow_RunTag_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_RunTag_descriptor,
        new java.lang.String[] { "Key", "Value", });
    internal_static_mlflow_RunInfo_descriptor =
      getDescriptor().getMessageTypes().get(5);
    internal_static_mlflow_RunInfo_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_RunInfo_descriptor,
        new java.lang.String[] { "RunUuid", "ExperimentId", "Name", "SourceType", "SourceName", "UserId", "Status", "StartTime", "EndTime", "SourceVersion", "EntryPointName", "ArtifactUri", "LifecycleStage", });
    internal_static_mlflow_Experiment_descriptor =
      getDescriptor().getMessageTypes().get(6);
    internal_static_mlflow_Experiment_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_Experiment_descriptor,
        new java.lang.String[] { "ExperimentId", "Name", "ArtifactLocation", "LifecycleStage", "LastUpdateTime", "CreationTime", });
    internal_static_mlflow_CreateExperiment_descriptor =
      getDescriptor().getMessageTypes().get(7);
    internal_static_mlflow_CreateExperiment_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_CreateExperiment_descriptor,
        new java.lang.String[] { "Name", "ArtifactLocation", });
    internal_static_mlflow_CreateExperiment_Response_descriptor =
      internal_static_mlflow_CreateExperiment_descriptor.getNestedTypes().get(0);
    internal_static_mlflow_CreateExperiment_Response_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_CreateExperiment_Response_descriptor,
        new java.lang.String[] { "ExperimentId", });
    internal_static_mlflow_ListExperiments_descriptor =
      getDescriptor().getMessageTypes().get(8);
    internal_static_mlflow_ListExperiments_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_ListExperiments_descriptor,
        new java.lang.String[] { "ViewType", });
    internal_static_mlflow_ListExperiments_Response_descriptor =
      internal_static_mlflow_ListExperiments_descriptor.getNestedTypes().get(0);
    internal_static_mlflow_ListExperiments_Response_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_ListExperiments_Response_descriptor,
        new java.lang.String[] { "Experiments", });
    internal_static_mlflow_GetExperiment_descriptor =
      getDescriptor().getMessageTypes().get(9);
    internal_static_mlflow_GetExperiment_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_GetExperiment_descriptor,
        new java.lang.String[] { "ExperimentId", });
    internal_static_mlflow_GetExperiment_Response_descriptor =
      internal_static_mlflow_GetExperiment_descriptor.getNestedTypes().get(0);
    internal_static_mlflow_GetExperiment_Response_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_GetExperiment_Response_descriptor,
        new java.lang.String[] { "Experiment", "Runs", });
    internal_static_mlflow_DeleteExperiment_descriptor =
      getDescriptor().getMessageTypes().get(10);
    internal_static_mlflow_DeleteExperiment_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_DeleteExperiment_descriptor,
        new java.lang.String[] { "ExperimentId", });
    internal_static_mlflow_DeleteExperiment_Response_descriptor =
      internal_static_mlflow_DeleteExperiment_descriptor.getNestedTypes().get(0);
    internal_static_mlflow_DeleteExperiment_Response_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_DeleteExperiment_Response_descriptor,
        new java.lang.String[] { });
    internal_static_mlflow_RestoreExperiment_descriptor =
      getDescriptor().getMessageTypes().get(11);
    internal_static_mlflow_RestoreExperiment_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_RestoreExperiment_descriptor,
        new java.lang.String[] { "ExperimentId", });
    internal_static_mlflow_RestoreExperiment_Response_descriptor =
      internal_static_mlflow_RestoreExperiment_descriptor.getNestedTypes().get(0);
    internal_static_mlflow_RestoreExperiment_Response_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_RestoreExperiment_Response_descriptor,
        new java.lang.String[] { });
    internal_static_mlflow_CreateRun_descriptor =
      getDescriptor().getMessageTypes().get(12);
    internal_static_mlflow_CreateRun_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_CreateRun_descriptor,
        new java.lang.String[] { "ExperimentId", "UserId", "RunName", "SourceType", "SourceName", "EntryPointName", "StartTime", "SourceVersion", "Tags", "ParentRunId", });
    internal_static_mlflow_CreateRun_Response_descriptor =
      internal_static_mlflow_CreateRun_descriptor.getNestedTypes().get(0);
    internal_static_mlflow_CreateRun_Response_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_CreateRun_Response_descriptor,
        new java.lang.String[] { "Run", });
    internal_static_mlflow_UpdateRun_descriptor =
      getDescriptor().getMessageTypes().get(13);
    internal_static_mlflow_UpdateRun_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_UpdateRun_descriptor,
        new java.lang.String[] { "RunUuid", "Status", "EndTime", });
    internal_static_mlflow_UpdateRun_Response_descriptor =
      internal_static_mlflow_UpdateRun_descriptor.getNestedTypes().get(0);
    internal_static_mlflow_UpdateRun_Response_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_UpdateRun_Response_descriptor,
        new java.lang.String[] { "RunInfo", });
    internal_static_mlflow_DeleteRun_descriptor =
      getDescriptor().getMessageTypes().get(14);
    internal_static_mlflow_DeleteRun_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_DeleteRun_descriptor,
        new java.lang.String[] { "RunId", });
    internal_static_mlflow_DeleteRun_Response_descriptor =
      internal_static_mlflow_DeleteRun_descriptor.getNestedTypes().get(0);
    internal_static_mlflow_DeleteRun_Response_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_DeleteRun_Response_descriptor,
        new java.lang.String[] { });
    internal_static_mlflow_RestoreRun_descriptor =
      getDescriptor().getMessageTypes().get(15);
    internal_static_mlflow_RestoreRun_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_RestoreRun_descriptor,
        new java.lang.String[] { "RunId", });
    internal_static_mlflow_RestoreRun_Response_descriptor =
      internal_static_mlflow_RestoreRun_descriptor.getNestedTypes().get(0);
    internal_static_mlflow_RestoreRun_Response_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_RestoreRun_Response_descriptor,
        new java.lang.String[] { });
    internal_static_mlflow_LogMetric_descriptor =
      getDescriptor().getMessageTypes().get(16);
    internal_static_mlflow_LogMetric_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_LogMetric_descriptor,
        new java.lang.String[] { "RunUuid", "Key", "Value", "Timestamp", });
    internal_static_mlflow_LogMetric_Response_descriptor =
      internal_static_mlflow_LogMetric_descriptor.getNestedTypes().get(0);
    internal_static_mlflow_LogMetric_Response_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_LogMetric_Response_descriptor,
        new java.lang.String[] { });
    internal_static_mlflow_LogParam_descriptor =
      getDescriptor().getMessageTypes().get(17);
    internal_static_mlflow_LogParam_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_LogParam_descriptor,
        new java.lang.String[] { "RunUuid", "Key", "Value", });
    internal_static_mlflow_LogParam_Response_descriptor =
      internal_static_mlflow_LogParam_descriptor.getNestedTypes().get(0);
    internal_static_mlflow_LogParam_Response_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_LogParam_Response_descriptor,
        new java.lang.String[] { });
    internal_static_mlflow_SetTag_descriptor =
      getDescriptor().getMessageTypes().get(18);
    internal_static_mlflow_SetTag_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_SetTag_descriptor,
        new java.lang.String[] { "RunUuid", "Key", "Value", });
    internal_static_mlflow_SetTag_Response_descriptor =
      internal_static_mlflow_SetTag_descriptor.getNestedTypes().get(0);
    internal_static_mlflow_SetTag_Response_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_SetTag_Response_descriptor,
        new java.lang.String[] { });
    internal_static_mlflow_GetRun_descriptor =
      getDescriptor().getMessageTypes().get(19);
    internal_static_mlflow_GetRun_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_GetRun_descriptor,
        new java.lang.String[] { "RunUuid", });
    internal_static_mlflow_GetRun_Response_descriptor =
      internal_static_mlflow_GetRun_descriptor.getNestedTypes().get(0);
    internal_static_mlflow_GetRun_Response_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_GetRun_Response_descriptor,
        new java.lang.String[] { "Run", });
    internal_static_mlflow_GetMetric_descriptor =
      getDescriptor().getMessageTypes().get(20);
    internal_static_mlflow_GetMetric_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_GetMetric_descriptor,
        new java.lang.String[] { "RunUuid", "MetricKey", });
    internal_static_mlflow_GetMetric_Response_descriptor =
      internal_static_mlflow_GetMetric_descriptor.getNestedTypes().get(0);
    internal_static_mlflow_GetMetric_Response_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_GetMetric_Response_descriptor,
        new java.lang.String[] { "Metric", });
    internal_static_mlflow_GetParam_descriptor =
      getDescriptor().getMessageTypes().get(21);
    internal_static_mlflow_GetParam_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_GetParam_descriptor,
        new java.lang.String[] { "RunUuid", "ParamName", });
    internal_static_mlflow_GetParam_Response_descriptor =
      internal_static_mlflow_GetParam_descriptor.getNestedTypes().get(0);
    internal_static_mlflow_GetParam_Response_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_GetParam_Response_descriptor,
        new java.lang.String[] { "Parameter", });
    internal_static_mlflow_SearchExpression_descriptor =
      getDescriptor().getMessageTypes().get(22);
    internal_static_mlflow_SearchExpression_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_SearchExpression_descriptor,
        new java.lang.String[] { "Metric", "Parameter", "Expression", });
    internal_static_mlflow_MetricSearchExpression_descriptor =
      getDescriptor().getMessageTypes().get(23);
    internal_static_mlflow_MetricSearchExpression_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_MetricSearchExpression_descriptor,
        new java.lang.String[] { "Key", "Float", "Double", "Clause", });
    internal_static_mlflow_ParameterSearchExpression_descriptor =
      getDescriptor().getMessageTypes().get(24);
    internal_static_mlflow_ParameterSearchExpression_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_ParameterSearchExpression_descriptor,
        new java.lang.String[] { "Key", "String", "Clause", });
    internal_static_mlflow_StringClause_descriptor =
      getDescriptor().getMessageTypes().get(25);
    internal_static_mlflow_StringClause_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_StringClause_descriptor,
        new java.lang.String[] { "Comparator", "Value", });
    internal_static_mlflow_FloatClause_descriptor =
      getDescriptor().getMessageTypes().get(26);
    internal_static_mlflow_FloatClause_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_FloatClause_descriptor,
        new java.lang.String[] { "Comparator", "Value", });
    internal_static_mlflow_DoubleClause_descriptor =
      getDescriptor().getMessageTypes().get(27);
    internal_static_mlflow_DoubleClause_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_DoubleClause_descriptor,
        new java.lang.String[] { "Comparator", "Value", });
    internal_static_mlflow_SearchRuns_descriptor =
      getDescriptor().getMessageTypes().get(28);
    internal_static_mlflow_SearchRuns_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_SearchRuns_descriptor,
        new java.lang.String[] { "ExperimentIds", "AndedExpressions", "RunViewType", });
    internal_static_mlflow_SearchRuns_Response_descriptor =
      internal_static_mlflow_SearchRuns_descriptor.getNestedTypes().get(0);
    internal_static_mlflow_SearchRuns_Response_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_SearchRuns_Response_descriptor,
        new java.lang.String[] { "Runs", });
    internal_static_mlflow_ListArtifacts_descriptor =
      getDescriptor().getMessageTypes().get(29);
    internal_static_mlflow_ListArtifacts_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_ListArtifacts_descriptor,
        new java.lang.String[] { "RunUuid", "Path", });
    internal_static_mlflow_ListArtifacts_Response_descriptor =
      internal_static_mlflow_ListArtifacts_descriptor.getNestedTypes().get(0);
    internal_static_mlflow_ListArtifacts_Response_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_ListArtifacts_Response_descriptor,
        new java.lang.String[] { "RootUri", "Files", });
    internal_static_mlflow_FileInfo_descriptor =
      getDescriptor().getMessageTypes().get(30);
    internal_static_mlflow_FileInfo_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_FileInfo_descriptor,
        new java.lang.String[] { "Path", "IsDir", "FileSize", });
    internal_static_mlflow_GetArtifact_descriptor =
      getDescriptor().getMessageTypes().get(31);
    internal_static_mlflow_GetArtifact_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_GetArtifact_descriptor,
        new java.lang.String[] { "RunUuid", "Path", });
    internal_static_mlflow_GetArtifact_Response_descriptor =
      internal_static_mlflow_GetArtifact_descriptor.getNestedTypes().get(0);
    internal_static_mlflow_GetArtifact_Response_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_GetArtifact_Response_descriptor,
        new java.lang.String[] { });
    internal_static_mlflow_GetMetricHistory_descriptor =
      getDescriptor().getMessageTypes().get(32);
    internal_static_mlflow_GetMetricHistory_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_GetMetricHistory_descriptor,
        new java.lang.String[] { "RunUuid", "MetricKey", });
    internal_static_mlflow_GetMetricHistory_Response_descriptor =
      internal_static_mlflow_GetMetricHistory_descriptor.getNestedTypes().get(0);
    internal_static_mlflow_GetMetricHistory_Response_fieldAccessorTable = new
      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
        internal_static_mlflow_GetMetricHistory_Response_descriptor,
        new java.lang.String[] { "Metrics", });
    com.google.protobuf.ExtensionRegistry registry =
        com.google.protobuf.ExtensionRegistry.newInstance();
    registry.add(com.databricks.api.proto.databricks.Databricks.rpc);
    registry.add(org.mlflow.scalapb_interface.Scalapb.message);
    registry.add(org.mlflow.scalapb_interface.Scalapb.options);
    registry.add(com.databricks.api.proto.databricks.Databricks.validateRequired);
    com.google.protobuf.Descriptors.FileDescriptor
        .internalUpdateFileDescriptor(descriptor, registry);
    org.mlflow.scalapb_interface.Scalapb.getDescriptor();
    com.databricks.api.proto.databricks.Databricks.getDescriptor();
  }

  // @@protoc_insertion_point(outer_class_scope)
}
