From 60c117d6a8782d018618ec418951edc35fa12bff Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2024 13:11:57 -0600 Subject: [PATCH] Automated Protos Update (#87) Co-authored-by: viambot --- api_version.lock | 2 +- .../main/gen/com/google/rpc/BadRequest.java | 394 +++++++++++++++++- .../main/gen/com/google/rpc/ErrorInfo.java | 84 ++-- .../com/google/rpc/ErrorInfoOrBuilder.java | 35 +- .../google/rpc/context/AttributeContext.java | 51 ++- .../viam/app/mlinference/v1/MlInference.java | 219 +++++++++- core/sdk/src/main/resources/protofds/viam.api | Bin 554252 -> 554974 bytes 7 files changed, 712 insertions(+), 73 deletions(-) diff --git a/api_version.lock b/api_version.lock index add9a8b2b..e2e6aca07 100644 --- a/api_version.lock +++ b/api_version.lock @@ -1 +1 @@ -v0.1.376 +v0.1.377 diff --git a/core/sdk/src/main/gen/com/google/rpc/BadRequest.java b/core/sdk/src/main/gen/com/google/rpc/BadRequest.java index dd770989e..f4eb3a4f3 100644 --- a/core/sdk/src/main/gen/com/google/rpc/BadRequest.java +++ b/core/sdk/src/main/gen/com/google/rpc/BadRequest.java @@ -136,6 +136,57 @@ public interface FieldViolationOrBuilder extends */ com.google.protobuf.ByteString getDescriptionBytes(); + + /** + *
+     * The reason of the field-level error. This is a constant value that
+     * identifies the proximate cause of the field-level error. It should
+     * uniquely identify the type of the FieldViolation within the scope of the
+     * google.rpc.ErrorInfo.domain. This should be at most 63
+     * characters and match a regular expression of `[A-Z][A-Z0-9_]+[A-Z0-9]`,
+     * which represents UPPER_SNAKE_CASE.
+     * 
+ * + * string reason = 3 [json_name = "reason"]; + * @return The reason. + */ + java.lang.String getReason(); + /** + *
+     * The reason of the field-level error. This is a constant value that
+     * identifies the proximate cause of the field-level error. It should
+     * uniquely identify the type of the FieldViolation within the scope of the
+     * google.rpc.ErrorInfo.domain. This should be at most 63
+     * characters and match a regular expression of `[A-Z][A-Z0-9_]+[A-Z0-9]`,
+     * which represents UPPER_SNAKE_CASE.
+     * 
+ * + * string reason = 3 [json_name = "reason"]; + * @return The bytes for reason. + */ + com.google.protobuf.ByteString + getReasonBytes(); + + /** + *
+     * Provides a localized error message for field-level errors that is safe to
+     * return to the API consumer.
+     * 
+ * + * .google.rpc.LocalizedMessage localized_message = 4 [json_name = "localizedMessage"]; + * @return Whether the localizedMessage field is set. + */ + boolean hasLocalizedMessage(); + /** + *
+     * Provides a localized error message for field-level errors that is safe to
+     * return to the API consumer.
+     * 
+ * + * .google.rpc.LocalizedMessage localized_message = 4 [json_name = "localizedMessage"]; + * @return The localizedMessage. + */ + com.google.rpc.LocalizedMessage getLocalizedMessage(); } /** *
@@ -152,7 +203,9 @@ public  static final class FieldViolation extends
     private FieldViolation() {
       field_ = "";
       description_ = "";
+      reason_ = "";
     }
+    private int bitField0_;
     public static final int FIELD_FIELD_NUMBER = 1;
     private java.lang.String field_;
     /**
@@ -467,6 +520,169 @@ private void setDescriptionBytes(
 
     }
 
+    public static final int REASON_FIELD_NUMBER = 3;
+    private java.lang.String reason_;
+    /**
+     * 
+     * The reason of the field-level error. This is a constant value that
+     * identifies the proximate cause of the field-level error. It should
+     * uniquely identify the type of the FieldViolation within the scope of the
+     * google.rpc.ErrorInfo.domain. This should be at most 63
+     * characters and match a regular expression of `[A-Z][A-Z0-9_]+[A-Z0-9]`,
+     * which represents UPPER_SNAKE_CASE.
+     * 
+ * + * string reason = 3 [json_name = "reason"]; + * @return The reason. + */ + @java.lang.Override + public java.lang.String getReason() { + return reason_; + } + /** + *
+     * The reason of the field-level error. This is a constant value that
+     * identifies the proximate cause of the field-level error. It should
+     * uniquely identify the type of the FieldViolation within the scope of the
+     * google.rpc.ErrorInfo.domain. This should be at most 63
+     * characters and match a regular expression of `[A-Z][A-Z0-9_]+[A-Z0-9]`,
+     * which represents UPPER_SNAKE_CASE.
+     * 
+ * + * string reason = 3 [json_name = "reason"]; + * @return The bytes for reason. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getReasonBytes() { + return com.google.protobuf.ByteString.copyFromUtf8(reason_); + } + /** + *
+     * The reason of the field-level error. This is a constant value that
+     * identifies the proximate cause of the field-level error. It should
+     * uniquely identify the type of the FieldViolation within the scope of the
+     * google.rpc.ErrorInfo.domain. This should be at most 63
+     * characters and match a regular expression of `[A-Z][A-Z0-9_]+[A-Z0-9]`,
+     * which represents UPPER_SNAKE_CASE.
+     * 
+ * + * string reason = 3 [json_name = "reason"]; + * @param value The reason to set. + */ + private void setReason( + java.lang.String value) { + java.lang.Class valueClass = value.getClass(); + + reason_ = value; + } + /** + *
+     * The reason of the field-level error. This is a constant value that
+     * identifies the proximate cause of the field-level error. It should
+     * uniquely identify the type of the FieldViolation within the scope of the
+     * google.rpc.ErrorInfo.domain. This should be at most 63
+     * characters and match a regular expression of `[A-Z][A-Z0-9_]+[A-Z0-9]`,
+     * which represents UPPER_SNAKE_CASE.
+     * 
+ * + * string reason = 3 [json_name = "reason"]; + */ + private void clearReason() { + + reason_ = getDefaultInstance().getReason(); + } + /** + *
+     * The reason of the field-level error. This is a constant value that
+     * identifies the proximate cause of the field-level error. It should
+     * uniquely identify the type of the FieldViolation within the scope of the
+     * google.rpc.ErrorInfo.domain. This should be at most 63
+     * characters and match a regular expression of `[A-Z][A-Z0-9_]+[A-Z0-9]`,
+     * which represents UPPER_SNAKE_CASE.
+     * 
+ * + * string reason = 3 [json_name = "reason"]; + * @param value The bytes for reason to set. + */ + private void setReasonBytes( + com.google.protobuf.ByteString value) { + checkByteStringIsUtf8(value); + reason_ = value.toStringUtf8(); + + } + + public static final int LOCALIZED_MESSAGE_FIELD_NUMBER = 4; + private com.google.rpc.LocalizedMessage localizedMessage_; + /** + *
+     * Provides a localized error message for field-level errors that is safe to
+     * return to the API consumer.
+     * 
+ * + * .google.rpc.LocalizedMessage localized_message = 4 [json_name = "localizedMessage"]; + */ + @java.lang.Override + public boolean hasLocalizedMessage() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + *
+     * Provides a localized error message for field-level errors that is safe to
+     * return to the API consumer.
+     * 
+ * + * .google.rpc.LocalizedMessage localized_message = 4 [json_name = "localizedMessage"]; + */ + @java.lang.Override + public com.google.rpc.LocalizedMessage getLocalizedMessage() { + return localizedMessage_ == null ? com.google.rpc.LocalizedMessage.getDefaultInstance() : localizedMessage_; + } + /** + *
+     * Provides a localized error message for field-level errors that is safe to
+     * return to the API consumer.
+     * 
+ * + * .google.rpc.LocalizedMessage localized_message = 4 [json_name = "localizedMessage"]; + */ + private void setLocalizedMessage(com.google.rpc.LocalizedMessage value) { + value.getClass(); + localizedMessage_ = value; + bitField0_ |= 0x00000001; + } + /** + *
+     * Provides a localized error message for field-level errors that is safe to
+     * return to the API consumer.
+     * 
+ * + * .google.rpc.LocalizedMessage localized_message = 4 [json_name = "localizedMessage"]; + */ + @java.lang.SuppressWarnings({"ReferenceEquality"}) + private void mergeLocalizedMessage(com.google.rpc.LocalizedMessage value) { + value.getClass(); + if (localizedMessage_ != null && + localizedMessage_ != com.google.rpc.LocalizedMessage.getDefaultInstance()) { + localizedMessage_ = + com.google.rpc.LocalizedMessage.newBuilder(localizedMessage_).mergeFrom(value).buildPartial(); + } else { + localizedMessage_ = value; + } + bitField0_ |= 0x00000001; + } + /** + *
+     * Provides a localized error message for field-level errors that is safe to
+     * return to the API consumer.
+     * 
+ * + * .google.rpc.LocalizedMessage localized_message = 4 [json_name = "localizedMessage"]; + */ + private void clearLocalizedMessage() { localizedMessage_ = null; + bitField0_ = (bitField0_ & ~0x00000001); + } + public static com.google.rpc.BadRequest.FieldViolation parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { @@ -886,6 +1102,177 @@ public Builder setDescriptionBytes( return this; } + /** + *
+       * The reason of the field-level error. This is a constant value that
+       * identifies the proximate cause of the field-level error. It should
+       * uniquely identify the type of the FieldViolation within the scope of the
+       * google.rpc.ErrorInfo.domain. This should be at most 63
+       * characters and match a regular expression of `[A-Z][A-Z0-9_]+[A-Z0-9]`,
+       * which represents UPPER_SNAKE_CASE.
+       * 
+ * + * string reason = 3 [json_name = "reason"]; + * @return The reason. + */ + @java.lang.Override + public java.lang.String getReason() { + return instance.getReason(); + } + /** + *
+       * The reason of the field-level error. This is a constant value that
+       * identifies the proximate cause of the field-level error. It should
+       * uniquely identify the type of the FieldViolation within the scope of the
+       * google.rpc.ErrorInfo.domain. This should be at most 63
+       * characters and match a regular expression of `[A-Z][A-Z0-9_]+[A-Z0-9]`,
+       * which represents UPPER_SNAKE_CASE.
+       * 
+ * + * string reason = 3 [json_name = "reason"]; + * @return The bytes for reason. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getReasonBytes() { + return instance.getReasonBytes(); + } + /** + *
+       * The reason of the field-level error. This is a constant value that
+       * identifies the proximate cause of the field-level error. It should
+       * uniquely identify the type of the FieldViolation within the scope of the
+       * google.rpc.ErrorInfo.domain. This should be at most 63
+       * characters and match a regular expression of `[A-Z][A-Z0-9_]+[A-Z0-9]`,
+       * which represents UPPER_SNAKE_CASE.
+       * 
+ * + * string reason = 3 [json_name = "reason"]; + * @param value The reason to set. + * @return This builder for chaining. + */ + public Builder setReason( + java.lang.String value) { + copyOnWrite(); + instance.setReason(value); + return this; + } + /** + *
+       * The reason of the field-level error. This is a constant value that
+       * identifies the proximate cause of the field-level error. It should
+       * uniquely identify the type of the FieldViolation within the scope of the
+       * google.rpc.ErrorInfo.domain. This should be at most 63
+       * characters and match a regular expression of `[A-Z][A-Z0-9_]+[A-Z0-9]`,
+       * which represents UPPER_SNAKE_CASE.
+       * 
+ * + * string reason = 3 [json_name = "reason"]; + * @return This builder for chaining. + */ + public Builder clearReason() { + copyOnWrite(); + instance.clearReason(); + return this; + } + /** + *
+       * The reason of the field-level error. This is a constant value that
+       * identifies the proximate cause of the field-level error. It should
+       * uniquely identify the type of the FieldViolation within the scope of the
+       * google.rpc.ErrorInfo.domain. This should be at most 63
+       * characters and match a regular expression of `[A-Z][A-Z0-9_]+[A-Z0-9]`,
+       * which represents UPPER_SNAKE_CASE.
+       * 
+ * + * string reason = 3 [json_name = "reason"]; + * @param value The bytes for reason to set. + * @return This builder for chaining. + */ + public Builder setReasonBytes( + com.google.protobuf.ByteString value) { + copyOnWrite(); + instance.setReasonBytes(value); + return this; + } + + /** + *
+       * Provides a localized error message for field-level errors that is safe to
+       * return to the API consumer.
+       * 
+ * + * .google.rpc.LocalizedMessage localized_message = 4 [json_name = "localizedMessage"]; + */ + @java.lang.Override + public boolean hasLocalizedMessage() { + return instance.hasLocalizedMessage(); + } + /** + *
+       * Provides a localized error message for field-level errors that is safe to
+       * return to the API consumer.
+       * 
+ * + * .google.rpc.LocalizedMessage localized_message = 4 [json_name = "localizedMessage"]; + */ + @java.lang.Override + public com.google.rpc.LocalizedMessage getLocalizedMessage() { + return instance.getLocalizedMessage(); + } + /** + *
+       * Provides a localized error message for field-level errors that is safe to
+       * return to the API consumer.
+       * 
+ * + * .google.rpc.LocalizedMessage localized_message = 4 [json_name = "localizedMessage"]; + */ + public Builder setLocalizedMessage(com.google.rpc.LocalizedMessage value) { + copyOnWrite(); + instance.setLocalizedMessage(value); + return this; + } + /** + *
+       * Provides a localized error message for field-level errors that is safe to
+       * return to the API consumer.
+       * 
+ * + * .google.rpc.LocalizedMessage localized_message = 4 [json_name = "localizedMessage"]; + */ + public Builder setLocalizedMessage( + com.google.rpc.LocalizedMessage.Builder builderForValue) { + copyOnWrite(); + instance.setLocalizedMessage(builderForValue.build()); + return this; + } + /** + *
+       * Provides a localized error message for field-level errors that is safe to
+       * return to the API consumer.
+       * 
+ * + * .google.rpc.LocalizedMessage localized_message = 4 [json_name = "localizedMessage"]; + */ + public Builder mergeLocalizedMessage(com.google.rpc.LocalizedMessage value) { + copyOnWrite(); + instance.mergeLocalizedMessage(value); + return this; + } + /** + *
+       * Provides a localized error message for field-level errors that is safe to
+       * return to the API consumer.
+       * 
+ * + * .google.rpc.LocalizedMessage localized_message = 4 [json_name = "localizedMessage"]; + */ + public Builder clearLocalizedMessage() { copyOnWrite(); + instance.clearLocalizedMessage(); + return this; + } + // @@protoc_insertion_point(builder_scope:google.rpc.BadRequest.FieldViolation) } @java.lang.Override @@ -902,12 +1289,15 @@ protected final java.lang.Object dynamicMethod( } case BUILD_MESSAGE_INFO: { java.lang.Object[] objects = new java.lang.Object[] { + "bitField0_", "field_", "description_", + "reason_", + "localizedMessage_", }; java.lang.String info = - "\u0000\u0002\u0000\u0000\u0001\u0002\u0002\u0000\u0000\u0000\u0001\u0208\u0002\u0208" + - ""; + "\u0000\u0004\u0000\u0001\u0001\u0004\u0004\u0000\u0000\u0000\u0001\u0208\u0002\u0208" + + "\u0003\u0208\u0004\u1009\u0000"; return newMessageInfo(DEFAULT_INSTANCE, info, objects); } // fall through diff --git a/core/sdk/src/main/gen/com/google/rpc/ErrorInfo.java b/core/sdk/src/main/gen/com/google/rpc/ErrorInfo.java index 8fdf30244..2314cb3f6 100644 --- a/core/sdk/src/main/gen/com/google/rpc/ErrorInfo.java +++ b/core/sdk/src/main/gen/com/google/rpc/ErrorInfo.java @@ -257,11 +257,12 @@ public int getMetadataCount() { *
    * Additional structured details about this error.
    *
-   * Keys should match /[a-zA-Z0-9-_]/ and be limited to 64 characters in
+   * Keys must match a regular expression of `[a-z][a-zA-Z0-9-_]+` but should
+   * ideally be lowerCamelCase. Also, they must be limited to 64 characters in
    * length. When identifying the current value of an exceeded limit, the units
    * should be contained in the key, not the value.  For example, rather than
-   * {"instanceLimit": "100/request"}, should be returned as,
-   * {"instanceLimitPerRequest": "100"}, if the client exceeds the number of
+   * `{"instanceLimit": "100/request"}`, should be returned as,
+   * `{"instanceLimitPerRequest": "100"}`, if the client exceeds the number of
    * instances that can be created in a single (batch) request.
    * 
* @@ -286,11 +287,12 @@ public java.util.Map getMetadata() { *
    * Additional structured details about this error.
    *
-   * Keys should match /[a-zA-Z0-9-_]/ and be limited to 64 characters in
+   * Keys must match a regular expression of `[a-z][a-zA-Z0-9-_]+` but should
+   * ideally be lowerCamelCase. Also, they must be limited to 64 characters in
    * length. When identifying the current value of an exceeded limit, the units
    * should be contained in the key, not the value.  For example, rather than
-   * {"instanceLimit": "100/request"}, should be returned as,
-   * {"instanceLimitPerRequest": "100"}, if the client exceeds the number of
+   * `{"instanceLimit": "100/request"}`, should be returned as,
+   * `{"instanceLimitPerRequest": "100"}`, if the client exceeds the number of
    * instances that can be created in a single (batch) request.
    * 
* @@ -306,11 +308,12 @@ public java.util.Map getMetadataMap() { *
    * Additional structured details about this error.
    *
-   * Keys should match /[a-zA-Z0-9-_]/ and be limited to 64 characters in
+   * Keys must match a regular expression of `[a-z][a-zA-Z0-9-_]+` but should
+   * ideally be lowerCamelCase. Also, they must be limited to 64 characters in
    * length. When identifying the current value of an exceeded limit, the units
    * should be contained in the key, not the value.  For example, rather than
-   * {"instanceLimit": "100/request"}, should be returned as,
-   * {"instanceLimitPerRequest": "100"}, if the client exceeds the number of
+   * `{"instanceLimit": "100/request"}`, should be returned as,
+   * `{"instanceLimitPerRequest": "100"}`, if the client exceeds the number of
    * instances that can be created in a single (batch) request.
    * 
* @@ -332,11 +335,12 @@ java.lang.String getMetadataOrDefault( *
    * Additional structured details about this error.
    *
-   * Keys should match /[a-zA-Z0-9-_]/ and be limited to 64 characters in
+   * Keys must match a regular expression of `[a-z][a-zA-Z0-9-_]+` but should
+   * ideally be lowerCamelCase. Also, they must be limited to 64 characters in
    * length. When identifying the current value of an exceeded limit, the units
    * should be contained in the key, not the value.  For example, rather than
-   * {"instanceLimit": "100/request"}, should be returned as,
-   * {"instanceLimitPerRequest": "100"}, if the client exceeds the number of
+   * `{"instanceLimit": "100/request"}`, should be returned as,
+   * `{"instanceLimitPerRequest": "100"}`, if the client exceeds the number of
    * instances that can be created in a single (batch) request.
    * 
* @@ -358,11 +362,12 @@ public java.lang.String getMetadataOrThrow( *
    * Additional structured details about this error.
    *
-   * Keys should match /[a-zA-Z0-9-_]/ and be limited to 64 characters in
+   * Keys must match a regular expression of `[a-z][a-zA-Z0-9-_]+` but should
+   * ideally be lowerCamelCase. Also, they must be limited to 64 characters in
    * length. When identifying the current value of an exceeded limit, the units
    * should be contained in the key, not the value.  For example, rather than
-   * {"instanceLimit": "100/request"}, should be returned as,
-   * {"instanceLimitPerRequest": "100"}, if the client exceeds the number of
+   * `{"instanceLimit": "100/request"}`, should be returned as,
+   * `{"instanceLimitPerRequest": "100"}`, if the client exceeds the number of
    * instances that can be created in a single (batch) request.
    * 
* @@ -689,11 +694,12 @@ public int getMetadataCount() { *
      * Additional structured details about this error.
      *
-     * Keys should match /[a-zA-Z0-9-_]/ and be limited to 64 characters in
+     * Keys must match a regular expression of `[a-z][a-zA-Z0-9-_]+` but should
+     * ideally be lowerCamelCase. Also, they must be limited to 64 characters in
      * length. When identifying the current value of an exceeded limit, the units
      * should be contained in the key, not the value.  For example, rather than
-     * {"instanceLimit": "100/request"}, should be returned as,
-     * {"instanceLimitPerRequest": "100"}, if the client exceeds the number of
+     * `{"instanceLimit": "100/request"}`, should be returned as,
+     * `{"instanceLimitPerRequest": "100"}`, if the client exceeds the number of
      * instances that can be created in a single (batch) request.
      * 
* @@ -716,11 +722,12 @@ public Builder clearMetadata() { *
      * Additional structured details about this error.
      *
-     * Keys should match /[a-zA-Z0-9-_]/ and be limited to 64 characters in
+     * Keys must match a regular expression of `[a-z][a-zA-Z0-9-_]+` but should
+     * ideally be lowerCamelCase. Also, they must be limited to 64 characters in
      * length. When identifying the current value of an exceeded limit, the units
      * should be contained in the key, not the value.  For example, rather than
-     * {"instanceLimit": "100/request"}, should be returned as,
-     * {"instanceLimitPerRequest": "100"}, if the client exceeds the number of
+     * `{"instanceLimit": "100/request"}`, should be returned as,
+     * `{"instanceLimitPerRequest": "100"}`, if the client exceeds the number of
      * instances that can be created in a single (batch) request.
      * 
* @@ -746,11 +753,12 @@ public java.util.Map getMetadata() { *
      * Additional structured details about this error.
      *
-     * Keys should match /[a-zA-Z0-9-_]/ and be limited to 64 characters in
+     * Keys must match a regular expression of `[a-z][a-zA-Z0-9-_]+` but should
+     * ideally be lowerCamelCase. Also, they must be limited to 64 characters in
      * length. When identifying the current value of an exceeded limit, the units
      * should be contained in the key, not the value.  For example, rather than
-     * {"instanceLimit": "100/request"}, should be returned as,
-     * {"instanceLimitPerRequest": "100"}, if the client exceeds the number of
+     * `{"instanceLimit": "100/request"}`, should be returned as,
+     * `{"instanceLimitPerRequest": "100"}`, if the client exceeds the number of
      * instances that can be created in a single (batch) request.
      * 
* @@ -765,11 +773,12 @@ public java.util.Map getMetadataMap() { *
      * Additional structured details about this error.
      *
-     * Keys should match /[a-zA-Z0-9-_]/ and be limited to 64 characters in
+     * Keys must match a regular expression of `[a-z][a-zA-Z0-9-_]+` but should
+     * ideally be lowerCamelCase. Also, they must be limited to 64 characters in
      * length. When identifying the current value of an exceeded limit, the units
      * should be contained in the key, not the value.  For example, rather than
-     * {"instanceLimit": "100/request"}, should be returned as,
-     * {"instanceLimitPerRequest": "100"}, if the client exceeds the number of
+     * `{"instanceLimit": "100/request"}`, should be returned as,
+     * `{"instanceLimitPerRequest": "100"}`, if the client exceeds the number of
      * instances that can be created in a single (batch) request.
      * 
* @@ -791,11 +800,12 @@ java.lang.String getMetadataOrDefault( *
      * Additional structured details about this error.
      *
-     * Keys should match /[a-zA-Z0-9-_]/ and be limited to 64 characters in
+     * Keys must match a regular expression of `[a-z][a-zA-Z0-9-_]+` but should
+     * ideally be lowerCamelCase. Also, they must be limited to 64 characters in
      * length. When identifying the current value of an exceeded limit, the units
      * should be contained in the key, not the value.  For example, rather than
-     * {"instanceLimit": "100/request"}, should be returned as,
-     * {"instanceLimitPerRequest": "100"}, if the client exceeds the number of
+     * `{"instanceLimit": "100/request"}`, should be returned as,
+     * `{"instanceLimitPerRequest": "100"}`, if the client exceeds the number of
      * instances that can be created in a single (batch) request.
      * 
* @@ -817,11 +827,12 @@ public java.lang.String getMetadataOrThrow( *
      * Additional structured details about this error.
      *
-     * Keys should match /[a-zA-Z0-9-_]/ and be limited to 64 characters in
+     * Keys must match a regular expression of `[a-z][a-zA-Z0-9-_]+` but should
+     * ideally be lowerCamelCase. Also, they must be limited to 64 characters in
      * length. When identifying the current value of an exceeded limit, the units
      * should be contained in the key, not the value.  For example, rather than
-     * {"instanceLimit": "100/request"}, should be returned as,
-     * {"instanceLimitPerRequest": "100"}, if the client exceeds the number of
+     * `{"instanceLimit": "100/request"}`, should be returned as,
+     * `{"instanceLimitPerRequest": "100"}`, if the client exceeds the number of
      * instances that can be created in a single (batch) request.
      * 
* @@ -840,11 +851,12 @@ public Builder putMetadata( *
      * Additional structured details about this error.
      *
-     * Keys should match /[a-zA-Z0-9-_]/ and be limited to 64 characters in
+     * Keys must match a regular expression of `[a-z][a-zA-Z0-9-_]+` but should
+     * ideally be lowerCamelCase. Also, they must be limited to 64 characters in
      * length. When identifying the current value of an exceeded limit, the units
      * should be contained in the key, not the value.  For example, rather than
-     * {"instanceLimit": "100/request"}, should be returned as,
-     * {"instanceLimitPerRequest": "100"}, if the client exceeds the number of
+     * `{"instanceLimit": "100/request"}`, should be returned as,
+     * `{"instanceLimitPerRequest": "100"}`, if the client exceeds the number of
      * instances that can be created in a single (batch) request.
      * 
* diff --git a/core/sdk/src/main/gen/com/google/rpc/ErrorInfoOrBuilder.java b/core/sdk/src/main/gen/com/google/rpc/ErrorInfoOrBuilder.java index b92024a8c..36d4f1097 100644 --- a/core/sdk/src/main/gen/com/google/rpc/ErrorInfoOrBuilder.java +++ b/core/sdk/src/main/gen/com/google/rpc/ErrorInfoOrBuilder.java @@ -71,11 +71,12 @@ public interface ErrorInfoOrBuilder extends *
    * Additional structured details about this error.
    *
-   * Keys should match /[a-zA-Z0-9-_]/ and be limited to 64 characters in
+   * Keys must match a regular expression of `[a-z][a-zA-Z0-9-_]+` but should
+   * ideally be lowerCamelCase. Also, they must be limited to 64 characters in
    * length. When identifying the current value of an exceeded limit, the units
    * should be contained in the key, not the value.  For example, rather than
-   * {"instanceLimit": "100/request"}, should be returned as,
-   * {"instanceLimitPerRequest": "100"}, if the client exceeds the number of
+   * `{"instanceLimit": "100/request"}`, should be returned as,
+   * `{"instanceLimitPerRequest": "100"}`, if the client exceeds the number of
    * instances that can be created in a single (batch) request.
    * 
* @@ -86,11 +87,12 @@ public interface ErrorInfoOrBuilder extends *
    * Additional structured details about this error.
    *
-   * Keys should match /[a-zA-Z0-9-_]/ and be limited to 64 characters in
+   * Keys must match a regular expression of `[a-z][a-zA-Z0-9-_]+` but should
+   * ideally be lowerCamelCase. Also, they must be limited to 64 characters in
    * length. When identifying the current value of an exceeded limit, the units
    * should be contained in the key, not the value.  For example, rather than
-   * {"instanceLimit": "100/request"}, should be returned as,
-   * {"instanceLimitPerRequest": "100"}, if the client exceeds the number of
+   * `{"instanceLimit": "100/request"}`, should be returned as,
+   * `{"instanceLimitPerRequest": "100"}`, if the client exceeds the number of
    * instances that can be created in a single (batch) request.
    * 
* @@ -108,11 +110,12 @@ boolean containsMetadata( *
    * Additional structured details about this error.
    *
-   * Keys should match /[a-zA-Z0-9-_]/ and be limited to 64 characters in
+   * Keys must match a regular expression of `[a-z][a-zA-Z0-9-_]+` but should
+   * ideally be lowerCamelCase. Also, they must be limited to 64 characters in
    * length. When identifying the current value of an exceeded limit, the units
    * should be contained in the key, not the value.  For example, rather than
-   * {"instanceLimit": "100/request"}, should be returned as,
-   * {"instanceLimitPerRequest": "100"}, if the client exceeds the number of
+   * `{"instanceLimit": "100/request"}`, should be returned as,
+   * `{"instanceLimitPerRequest": "100"}`, if the client exceeds the number of
    * instances that can be created in a single (batch) request.
    * 
* @@ -124,11 +127,12 @@ boolean containsMetadata( *
    * Additional structured details about this error.
    *
-   * Keys should match /[a-zA-Z0-9-_]/ and be limited to 64 characters in
+   * Keys must match a regular expression of `[a-z][a-zA-Z0-9-_]+` but should
+   * ideally be lowerCamelCase. Also, they must be limited to 64 characters in
    * length. When identifying the current value of an exceeded limit, the units
    * should be contained in the key, not the value.  For example, rather than
-   * {"instanceLimit": "100/request"}, should be returned as,
-   * {"instanceLimitPerRequest": "100"}, if the client exceeds the number of
+   * `{"instanceLimit": "100/request"}`, should be returned as,
+   * `{"instanceLimitPerRequest": "100"}`, if the client exceeds the number of
    * instances that can be created in a single (batch) request.
    * 
* @@ -144,11 +148,12 @@ java.lang.String getMetadataOrDefault( *
    * Additional structured details about this error.
    *
-   * Keys should match /[a-zA-Z0-9-_]/ and be limited to 64 characters in
+   * Keys must match a regular expression of `[a-z][a-zA-Z0-9-_]+` but should
+   * ideally be lowerCamelCase. Also, they must be limited to 64 characters in
    * length. When identifying the current value of an exceeded limit, the units
    * should be contained in the key, not the value.  For example, rather than
-   * {"instanceLimit": "100/request"}, should be returned as,
-   * {"instanceLimitPerRequest": "100"}, if the client exceeds the number of
+   * `{"instanceLimit": "100/request"}`, should be returned as,
+   * `{"instanceLimitPerRequest": "100"}`, if the client exceeds the number of
    * instances that can be created in a single (batch) request.
    * 
* diff --git a/core/sdk/src/main/gen/com/google/rpc/context/AttributeContext.java b/core/sdk/src/main/gen/com/google/rpc/context/AttributeContext.java index e6a9b7720..865787d50 100644 --- a/core/sdk/src/main/gen/com/google/rpc/context/AttributeContext.java +++ b/core/sdk/src/main/gen/com/google/rpc/context/AttributeContext.java @@ -7585,7 +7585,8 @@ java.lang.String getLabelsOrThrow( * may be set by external tools to store and retrieve arbitrary metadata. * They are not queryable and should be preserved when modifying objects. * - * More info: https://kubernetes.io/docs/user-guide/annotations + * More info: + * https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ *
* * map<string, string> annotations = 6 [json_name = "annotations"]; @@ -7597,7 +7598,8 @@ java.lang.String getLabelsOrThrow( * may be set by external tools to store and retrieve arbitrary metadata. * They are not queryable and should be preserved when modifying objects. * - * More info: https://kubernetes.io/docs/user-guide/annotations + * More info: + * https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ * * * map<string, string> annotations = 6 [json_name = "annotations"]; @@ -7616,7 +7618,8 @@ boolean containsAnnotations( * may be set by external tools to store and retrieve arbitrary metadata. * They are not queryable and should be preserved when modifying objects. * - * More info: https://kubernetes.io/docs/user-guide/annotations + * More info: + * https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ * * * map<string, string> annotations = 6 [json_name = "annotations"]; @@ -7629,7 +7632,8 @@ boolean containsAnnotations( * may be set by external tools to store and retrieve arbitrary metadata. * They are not queryable and should be preserved when modifying objects. * - * More info: https://kubernetes.io/docs/user-guide/annotations + * More info: + * https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ * * * map<string, string> annotations = 6 [json_name = "annotations"]; @@ -7646,7 +7650,8 @@ java.lang.String getAnnotationsOrDefault( * may be set by external tools to store and retrieve arbitrary metadata. * They are not queryable and should be preserved when modifying objects. * - * More info: https://kubernetes.io/docs/user-guide/annotations + * More info: + * https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ * * * map<string, string> annotations = 6 [json_name = "annotations"]; @@ -8351,7 +8356,8 @@ public int getAnnotationsCount() { * may be set by external tools to store and retrieve arbitrary metadata. * They are not queryable and should be preserved when modifying objects. * - * More info: https://kubernetes.io/docs/user-guide/annotations + * More info: + * https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ * * * map<string, string> annotations = 6 [json_name = "annotations"]; @@ -8377,7 +8383,8 @@ public java.util.Map getAnnotations() { * may be set by external tools to store and retrieve arbitrary metadata. * They are not queryable and should be preserved when modifying objects. * - * More info: https://kubernetes.io/docs/user-guide/annotations + * More info: + * https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ * * * map<string, string> annotations = 6 [json_name = "annotations"]; @@ -8394,7 +8401,8 @@ public java.util.Map getAnnotationsMap() { * may be set by external tools to store and retrieve arbitrary metadata. * They are not queryable and should be preserved when modifying objects. * - * More info: https://kubernetes.io/docs/user-guide/annotations + * More info: + * https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ * * * map<string, string> annotations = 6 [json_name = "annotations"]; @@ -8417,7 +8425,8 @@ java.lang.String getAnnotationsOrDefault( * may be set by external tools to store and retrieve arbitrary metadata. * They are not queryable and should be preserved when modifying objects. * - * More info: https://kubernetes.io/docs/user-guide/annotations + * More info: + * https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ * * * map<string, string> annotations = 6 [json_name = "annotations"]; @@ -8440,7 +8449,8 @@ public java.lang.String getAnnotationsOrThrow( * may be set by external tools to store and retrieve arbitrary metadata. * They are not queryable and should be preserved when modifying objects. * - * More info: https://kubernetes.io/docs/user-guide/annotations + * More info: + * https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ * * * map<string, string> annotations = 6 [json_name = "annotations"]; @@ -9544,7 +9554,8 @@ public int getAnnotationsCount() { * may be set by external tools to store and retrieve arbitrary metadata. * They are not queryable and should be preserved when modifying objects. * - * More info: https://kubernetes.io/docs/user-guide/annotations + * More info: + * https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ * * * map<string, string> annotations = 6 [json_name = "annotations"]; @@ -9568,7 +9579,8 @@ public Builder clearAnnotations() { * may be set by external tools to store and retrieve arbitrary metadata. * They are not queryable and should be preserved when modifying objects. * - * More info: https://kubernetes.io/docs/user-guide/annotations + * More info: + * https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ * * * map<string, string> annotations = 6 [json_name = "annotations"]; @@ -9595,7 +9607,8 @@ public java.util.Map getAnnotations() { * may be set by external tools to store and retrieve arbitrary metadata. * They are not queryable and should be preserved when modifying objects. * - * More info: https://kubernetes.io/docs/user-guide/annotations + * More info: + * https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ * * * map<string, string> annotations = 6 [json_name = "annotations"]; @@ -9611,7 +9624,8 @@ public java.util.Map getAnnotationsMap() { * may be set by external tools to store and retrieve arbitrary metadata. * They are not queryable and should be preserved when modifying objects. * - * More info: https://kubernetes.io/docs/user-guide/annotations + * More info: + * https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ * * * map<string, string> annotations = 6 [json_name = "annotations"]; @@ -9634,7 +9648,8 @@ java.lang.String getAnnotationsOrDefault( * may be set by external tools to store and retrieve arbitrary metadata. * They are not queryable and should be preserved when modifying objects. * - * More info: https://kubernetes.io/docs/user-guide/annotations + * More info: + * https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ * * * map<string, string> annotations = 6 [json_name = "annotations"]; @@ -9657,7 +9672,8 @@ public java.lang.String getAnnotationsOrThrow( * may be set by external tools to store and retrieve arbitrary metadata. * They are not queryable and should be preserved when modifying objects. * - * More info: https://kubernetes.io/docs/user-guide/annotations + * More info: + * https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ * * * map<string, string> annotations = 6 [json_name = "annotations"]; @@ -9677,7 +9693,8 @@ public Builder putAnnotations( * may be set by external tools to store and retrieve arbitrary metadata. * They are not queryable and should be preserved when modifying objects. * - * More info: https://kubernetes.io/docs/user-guide/annotations + * More info: + * https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ * * * map<string, string> annotations = 6 [json_name = "annotations"]; diff --git a/core/sdk/src/main/gen/viam/app/mlinference/v1/MlInference.java b/core/sdk/src/main/gen/viam/app/mlinference/v1/MlInference.java index 0e1ac9bba..678ad7147 100644 --- a/core/sdk/src/main/gen/viam/app/mlinference/v1/MlInference.java +++ b/core/sdk/src/main/gen/viam/app/mlinference/v1/MlInference.java @@ -707,6 +707,28 @@ public static com.google.protobuf.Parser parser() { public interface GetInferenceResponseOrBuilder extends // @@protoc_insertion_point(interface_extends:viam.app.mlinference.v1.GetInferenceResponse) com.google.protobuf.MessageLiteOrBuilder { + + /** + * .viam.service.mlmodel.v1.FlatTensors output_tensors = 1 [json_name = "outputTensors"]; + * @return Whether the outputTensors field is set. + */ + boolean hasOutputTensors(); + /** + * .viam.service.mlmodel.v1.FlatTensors output_tensors = 1 [json_name = "outputTensors"]; + * @return The outputTensors. + */ + com.viam.service.mlmodel.v1.Mlmodel.FlatTensors getOutputTensors(); + + /** + * .viam.app.data.v1.Annotations annotations = 2 [json_name = "annotations"]; + * @return Whether the annotations field is set. + */ + boolean hasAnnotations(); + /** + * .viam.app.data.v1.Annotations annotations = 2 [json_name = "annotations"]; + * @return The annotations. + */ + viam.app.data.v1.Data.Annotations getAnnotations(); } /** * Protobuf type {@code viam.app.mlinference.v1.GetInferenceResponse} @@ -718,6 +740,99 @@ public static final class GetInferenceResponse extends GetInferenceResponseOrBuilder { private GetInferenceResponse() { } + private int bitField0_; + public static final int OUTPUT_TENSORS_FIELD_NUMBER = 1; + private com.viam.service.mlmodel.v1.Mlmodel.FlatTensors outputTensors_; + /** + * .viam.service.mlmodel.v1.FlatTensors output_tensors = 1 [json_name = "outputTensors"]; + */ + @java.lang.Override + public boolean hasOutputTensors() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + * .viam.service.mlmodel.v1.FlatTensors output_tensors = 1 [json_name = "outputTensors"]; + */ + @java.lang.Override + public com.viam.service.mlmodel.v1.Mlmodel.FlatTensors getOutputTensors() { + return outputTensors_ == null ? com.viam.service.mlmodel.v1.Mlmodel.FlatTensors.getDefaultInstance() : outputTensors_; + } + /** + * .viam.service.mlmodel.v1.FlatTensors output_tensors = 1 [json_name = "outputTensors"]; + */ + private void setOutputTensors(com.viam.service.mlmodel.v1.Mlmodel.FlatTensors value) { + value.getClass(); + outputTensors_ = value; + bitField0_ |= 0x00000001; + } + /** + * .viam.service.mlmodel.v1.FlatTensors output_tensors = 1 [json_name = "outputTensors"]; + */ + @java.lang.SuppressWarnings({"ReferenceEquality"}) + private void mergeOutputTensors(com.viam.service.mlmodel.v1.Mlmodel.FlatTensors value) { + value.getClass(); + if (outputTensors_ != null && + outputTensors_ != com.viam.service.mlmodel.v1.Mlmodel.FlatTensors.getDefaultInstance()) { + outputTensors_ = + com.viam.service.mlmodel.v1.Mlmodel.FlatTensors.newBuilder(outputTensors_).mergeFrom(value).buildPartial(); + } else { + outputTensors_ = value; + } + bitField0_ |= 0x00000001; + } + /** + * .viam.service.mlmodel.v1.FlatTensors output_tensors = 1 [json_name = "outputTensors"]; + */ + private void clearOutputTensors() { outputTensors_ = null; + bitField0_ = (bitField0_ & ~0x00000001); + } + + public static final int ANNOTATIONS_FIELD_NUMBER = 2; + private viam.app.data.v1.Data.Annotations annotations_; + /** + * .viam.app.data.v1.Annotations annotations = 2 [json_name = "annotations"]; + */ + @java.lang.Override + public boolean hasAnnotations() { + return ((bitField0_ & 0x00000002) != 0); + } + /** + * .viam.app.data.v1.Annotations annotations = 2 [json_name = "annotations"]; + */ + @java.lang.Override + public viam.app.data.v1.Data.Annotations getAnnotations() { + return annotations_ == null ? viam.app.data.v1.Data.Annotations.getDefaultInstance() : annotations_; + } + /** + * .viam.app.data.v1.Annotations annotations = 2 [json_name = "annotations"]; + */ + private void setAnnotations(viam.app.data.v1.Data.Annotations value) { + value.getClass(); + annotations_ = value; + bitField0_ |= 0x00000002; + } + /** + * .viam.app.data.v1.Annotations annotations = 2 [json_name = "annotations"]; + */ + @java.lang.SuppressWarnings({"ReferenceEquality"}) + private void mergeAnnotations(viam.app.data.v1.Data.Annotations value) { + value.getClass(); + if (annotations_ != null && + annotations_ != viam.app.data.v1.Data.Annotations.getDefaultInstance()) { + annotations_ = + viam.app.data.v1.Data.Annotations.newBuilder(annotations_).mergeFrom(value).buildPartial(); + } else { + annotations_ = value; + } + bitField0_ |= 0x00000002; + } + /** + * .viam.app.data.v1.Annotations annotations = 2 [json_name = "annotations"]; + */ + private void clearAnnotations() { annotations_ = null; + bitField0_ = (bitField0_ & ~0x00000002); + } + public static viam.app.mlinference.v1.MlInference.GetInferenceResponse parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { @@ -815,6 +930,100 @@ private Builder() { } + /** + * .viam.service.mlmodel.v1.FlatTensors output_tensors = 1 [json_name = "outputTensors"]; + */ + @java.lang.Override + public boolean hasOutputTensors() { + return instance.hasOutputTensors(); + } + /** + * .viam.service.mlmodel.v1.FlatTensors output_tensors = 1 [json_name = "outputTensors"]; + */ + @java.lang.Override + public com.viam.service.mlmodel.v1.Mlmodel.FlatTensors getOutputTensors() { + return instance.getOutputTensors(); + } + /** + * .viam.service.mlmodel.v1.FlatTensors output_tensors = 1 [json_name = "outputTensors"]; + */ + public Builder setOutputTensors(com.viam.service.mlmodel.v1.Mlmodel.FlatTensors value) { + copyOnWrite(); + instance.setOutputTensors(value); + return this; + } + /** + * .viam.service.mlmodel.v1.FlatTensors output_tensors = 1 [json_name = "outputTensors"]; + */ + public Builder setOutputTensors( + com.viam.service.mlmodel.v1.Mlmodel.FlatTensors.Builder builderForValue) { + copyOnWrite(); + instance.setOutputTensors(builderForValue.build()); + return this; + } + /** + * .viam.service.mlmodel.v1.FlatTensors output_tensors = 1 [json_name = "outputTensors"]; + */ + public Builder mergeOutputTensors(com.viam.service.mlmodel.v1.Mlmodel.FlatTensors value) { + copyOnWrite(); + instance.mergeOutputTensors(value); + return this; + } + /** + * .viam.service.mlmodel.v1.FlatTensors output_tensors = 1 [json_name = "outputTensors"]; + */ + public Builder clearOutputTensors() { copyOnWrite(); + instance.clearOutputTensors(); + return this; + } + + /** + * .viam.app.data.v1.Annotations annotations = 2 [json_name = "annotations"]; + */ + @java.lang.Override + public boolean hasAnnotations() { + return instance.hasAnnotations(); + } + /** + * .viam.app.data.v1.Annotations annotations = 2 [json_name = "annotations"]; + */ + @java.lang.Override + public viam.app.data.v1.Data.Annotations getAnnotations() { + return instance.getAnnotations(); + } + /** + * .viam.app.data.v1.Annotations annotations = 2 [json_name = "annotations"]; + */ + public Builder setAnnotations(viam.app.data.v1.Data.Annotations value) { + copyOnWrite(); + instance.setAnnotations(value); + return this; + } + /** + * .viam.app.data.v1.Annotations annotations = 2 [json_name = "annotations"]; + */ + public Builder setAnnotations( + viam.app.data.v1.Data.Annotations.Builder builderForValue) { + copyOnWrite(); + instance.setAnnotations(builderForValue.build()); + return this; + } + /** + * .viam.app.data.v1.Annotations annotations = 2 [json_name = "annotations"]; + */ + public Builder mergeAnnotations(viam.app.data.v1.Data.Annotations value) { + copyOnWrite(); + instance.mergeAnnotations(value); + return this; + } + /** + * .viam.app.data.v1.Annotations annotations = 2 [json_name = "annotations"]; + */ + public Builder clearAnnotations() { copyOnWrite(); + instance.clearAnnotations(); + return this; + } + // @@protoc_insertion_point(builder_scope:viam.app.mlinference.v1.GetInferenceResponse) } @java.lang.Override @@ -830,8 +1039,14 @@ protected final java.lang.Object dynamicMethod( return new Builder(); } case BUILD_MESSAGE_INFO: { - java.lang.Object[] objects = null;java.lang.String info = - "\u0000\u0000"; + java.lang.Object[] objects = new java.lang.Object[] { + "bitField0_", + "outputTensors_", + "annotations_", + }; + java.lang.String info = + "\u0000\u0002\u0000\u0001\u0001\u0002\u0002\u0000\u0000\u0000\u0001\u1009\u0000\u0002" + + "\u1009\u0001"; return newMessageInfo(DEFAULT_INSTANCE, info, objects); } // fall through diff --git a/core/sdk/src/main/resources/protofds/viam.api b/core/sdk/src/main/resources/protofds/viam.api index 4bd1a9d08ac2b699366656bcffe86cc37e94c6a9..2261472a602186d3a56fa1d1da80084fda7bb9ca 100644 GIT binary patch delta 22546 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

jkeB$8`;_0bZJ&H_M*9E=)d9-t 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 QPx60sYG{7g`|A9E1NWy6Bme*a