# frozen_string_literal: true

# Copyright 2022 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# Auto-generated by gapic-generator-ruby. DO NOT EDIT!


module Google
  module Cloud
    module AIPlatform
      module V1
        module Schema
          module TrainingJob
            module Definition
              # A TrainingJob that trains and uploads an AutoML Image Classification Model.
              # @!attribute [rw] inputs
              #   @return [::Google::Cloud::AIPlatform::V1::Schema::TrainingJob::Definition::AutoMlImageClassificationInputs]
              #     The input parameters of this TrainingJob.
              # @!attribute [rw] metadata
              #   @return [::Google::Cloud::AIPlatform::V1::Schema::TrainingJob::Definition::AutoMlImageClassificationMetadata]
              #     The metadata information.
              class AutoMlImageClassification
                include ::Google::Protobuf::MessageExts
                extend ::Google::Protobuf::MessageExts::ClassMethods
              end

              # @!attribute [rw] model_type
              #   @return [::Google::Cloud::AIPlatform::V1::Schema::TrainingJob::Definition::AutoMlImageClassificationInputs::ModelType]
              # @!attribute [rw] base_model_id
              #   @return [::String]
              #     The ID of the `base` model. If it is specified, the new model will be
              #     trained based on the `base` model. Otherwise, the new model will be
              #     trained from scratch. The `base` model must be in the same
              #     Project and Location as the new Model to train, and have the same
              #     modelType.
              # @!attribute [rw] budget_milli_node_hours
              #   @return [::Integer]
              #     The training budget of creating this model, expressed in milli node
              #     hours i.e. 1,000 value in this field means 1 node hour. The actual
              #     metadata.costMilliNodeHours will be equal or less than this value.
              #     If further model training ceases to provide any improvements, it will
              #     stop without using the full budget and the metadata.successfulStopReason
              #     will be `model-converged`.
              #     Note, node_hour  = actual_hour * number_of_nodes_involved.
              #     For modelType `cloud`(default), the budget must be between 8,000
              #     and 800,000 milli node hours, inclusive. The default value is 192,000
              #     which represents one day in wall time, considering 8 nodes are used.
              #     For model types `mobile-tf-low-latency-1`, `mobile-tf-versatile-1`,
              #     `mobile-tf-high-accuracy-1`, the training budget must be between
              #     1,000 and 100,000 milli node hours, inclusive.
              #     The default value is 24,000 which represents one day in wall time on a
              #     single node that is used.
              # @!attribute [rw] disable_early_stopping
              #   @return [::Boolean]
              #     Use the entire training budget. This disables the early stopping feature.
              #     When false the early stopping feature is enabled, which means that
              #     AutoML Image Classification might stop training before the entire
              #     training budget has been used.
              # @!attribute [rw] multi_label
              #   @return [::Boolean]
              #     If false, a single-label (multi-class) Model will be trained (i.e.
              #     assuming that for each image just up to one annotation may be
              #     applicable). If true, a multi-label Model will be trained (i.e.
              #     assuming that for each image multiple annotations may be applicable).
              class AutoMlImageClassificationInputs
                include ::Google::Protobuf::MessageExts
                extend ::Google::Protobuf::MessageExts::ClassMethods

                module ModelType
                  # Should not be set.
                  MODEL_TYPE_UNSPECIFIED = 0

                  # A Model best tailored to be used within Google Cloud, and which cannot
                  # be exported.
                  # Default.
                  CLOUD = 1

                  # A model that, in addition to being available within Google
                  # Cloud, can also be exported (see ModelService.ExportModel) as TensorFlow
                  # or Core ML model and used on a mobile or edge device afterwards.
                  # Expected to have low latency, but may have lower prediction
                  # quality than other mobile models.
                  MOBILE_TF_LOW_LATENCY_1 = 2

                  # A model that, in addition to being available within Google
                  # Cloud, can also be exported (see ModelService.ExportModel) as TensorFlow
                  # or Core ML model and used on a mobile or edge device with afterwards.
                  MOBILE_TF_VERSATILE_1 = 3

                  # A model that, in addition to being available within Google
                  # Cloud, can also be exported (see ModelService.ExportModel) as TensorFlow
                  # or Core ML model and used on a mobile or edge device afterwards.
                  # Expected to have a higher latency, but should also have a higher
                  # prediction quality than other mobile models.
                  MOBILE_TF_HIGH_ACCURACY_1 = 4
                end
              end

              # @!attribute [rw] cost_milli_node_hours
              #   @return [::Integer]
              #     The actual training cost of creating this model, expressed in
              #     milli node hours, i.e. 1,000 value in this field means 1 node hour.
              #     Guaranteed to not exceed inputs.budgetMilliNodeHours.
              # @!attribute [rw] successful_stop_reason
              #   @return [::Google::Cloud::AIPlatform::V1::Schema::TrainingJob::Definition::AutoMlImageClassificationMetadata::SuccessfulStopReason]
              #     For successful job completions, this is the reason why the job has
              #     finished.
              class AutoMlImageClassificationMetadata
                include ::Google::Protobuf::MessageExts
                extend ::Google::Protobuf::MessageExts::ClassMethods

                module SuccessfulStopReason
                  # Should not be set.
                  SUCCESSFUL_STOP_REASON_UNSPECIFIED = 0

                  # The inputs.budgetMilliNodeHours had been reached.
                  BUDGET_REACHED = 1

                  # Further training of the Model ceased to increase its quality, since it
                  # already has converged.
                  MODEL_CONVERGED = 2
                end
              end
            end
          end
        end
      end
    end
  end
end
