@java.lang.Override
      public Builder mergeFrom(
          com.google.protobuf.CodedInputStream input,
          com.google.protobuf.ExtensionRegistryLite extensionRegistry)
          throws java.io.IOException {
        if (extensionRegistry == null) {
          throw new java.lang.NullPointerException();
        }
        try {
          boolean done = false;
          while (!done) {
            int tag = input.readTag();
            switch (tag) {
              case 0:
                done = true;
                break;
              case 8:
                {
                  promptTokenCount_ = input.readInt32();
                  bitField0_ |= 0x00000001;
                  break;
                } // case 8
              case 16:
                {
                  candidatesTokenCount_ = input.readInt32();
                  bitField0_ |= 0x00000002;
                  break;
                } // case 16
              case 24:
                {
                  totalTokenCount_ = input.readInt32();
                  bitField0_ |= 0x00000004;
                  break;
                } // case 24
              case 40:
                {
                  cachedContentTokenCount_ = input.readInt32();
                  bitField0_ |= 0x00000008;
                  break;
                } // case 40
              case 74:
                {
                  com.google.cloud.vertexai.api.ModalityTokenCount m =
                      input.readMessage(
                          com.google.cloud.vertexai.api.ModalityTokenCount.parser(),
                          extensionRegistry);
                  if (promptTokensDetailsBuilder_ == null) {
                    ensurePromptTokensDetailsIsMutable();
                    promptTokensDetails_.add(m);
                  } else {
                    promptTokensDetailsBuilder_.addMessage(m);
                  }
                  break;
                } // case 74
              case 82:
                {
                  com.google.cloud.vertexai.api.ModalityTokenCount m =
                      input.readMessage(
                          com.google.cloud.vertexai.api.ModalityTokenCount.parser(),
                          extensionRegistry);
                  if (cacheTokensDetailsBuilder_ == null) {
                    ensureCacheTokensDetailsIsMutable();
                    cacheTokensDetails_.add(m);
                  } else {
                    cacheTokensDetailsBuilder_.addMessage(m);
                  }
                  break;
                } // case 82
              case 90:
                {
                  com.google.cloud.vertexai.api.ModalityTokenCount m =
                      input.readMessage(
                          com.google.cloud.vertexai.api.ModalityTokenCount.parser(),
                          extensionRegistry);
                  if (candidatesTokensDetailsBuilder_ == null) {
                    ensureCandidatesTokensDetailsIsMutable();
                    candidatesTokensDetails_.add(m);
                  } else {
                    candidatesTokensDetailsBuilder_.addMessage(m);
                  }
                  break;
                } // case 90
              default:
                {
                  if (!super.parseUnknownField(input, extensionRegistry, tag)) {
                    done = true; // was an endgroup tag
                  }
                  break;
                } // default:
            } // switch (tag)
          } // while (!done)
        } catch (com.google.protobuf.InvalidProtocolBufferException e) {
          throw e.unwrapIOException();
        } finally {
          onChanged();
        } // finally
        return this;
      }
<pre>
Usage metadata about response(s).
</pre>

Protobuf type {@code google.cloud.vertexai.v1.GenerateContentResponse.UsageMetadata}
java-vertexai/proto-google-cloud-vertexai-v1/src/main/java/com/google/cloud/vertexai/api/GenerateContentResponse.java