packages feed

amazonka-sagemaker-2.0: gen/Amazonka/SageMaker/Types/RecommendationJobContainerConfig.hs

{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.SageMaker.Types.RecommendationJobContainerConfig
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.SageMaker.Types.RecommendationJobContainerConfig where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import qualified Amazonka.Prelude as Prelude
import Amazonka.SageMaker.Types.RecommendationJobPayloadConfig

-- | Specifies mandatory fields for running an Inference Recommender job
-- directly in the
-- <https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateInferenceRecommendationsJob.html CreateInferenceRecommendationsJob>
-- API. The fields specified in @ContainerConfig@ override the
-- corresponding fields in the model package. Use @ContainerConfig@ if you
-- want to specify these fields for the recommendation job but don\'t want
-- to edit them in your model package.
--
-- /See:/ 'newRecommendationJobContainerConfig' smart constructor.
data RecommendationJobContainerConfig = RecommendationJobContainerConfig'
  { -- | The machine learning domain of the model and its components.
    --
    -- Valid Values:
    -- @COMPUTER_VISION | NATURAL_LANGUAGE_PROCESSING | MACHINE_LEARNING@
    domain :: Prelude.Maybe Prelude.Text,
    -- | The machine learning framework of the container image.
    --
    -- Valid Values: @TENSORFLOW | PYTORCH | XGBOOST | SAGEMAKER-SCIKIT-LEARN@
    framework :: Prelude.Maybe Prelude.Text,
    -- | The framework version of the container image.
    frameworkVersion :: Prelude.Maybe Prelude.Text,
    -- | The name of a pre-trained machine learning model benchmarked by Amazon
    -- SageMaker Inference Recommender that matches your model.
    --
    -- Valid Values:
    -- @efficientnetb7 | unet | xgboost | faster-rcnn-resnet101 | nasnetlarge | vgg16 | inception-v3 | mask-rcnn | sagemaker-scikit-learn | densenet201-gluon | resnet18v2-gluon | xception | densenet201 | yolov4 | resnet152 | bert-base-cased | xceptionV1-keras | resnet50 | retinanet@
    nearestModelName :: Prelude.Maybe Prelude.Text,
    -- | Specifies the @SamplePayloadUrl@ and all other sample payload-related
    -- fields.
    payloadConfig :: Prelude.Maybe RecommendationJobPayloadConfig,
    -- | A list of the instance types that are used to generate inferences in
    -- real-time.
    supportedInstanceTypes :: Prelude.Maybe [Prelude.Text],
    -- | The machine learning task that the model accomplishes.
    --
    -- Valid Values:
    -- @IMAGE_CLASSIFICATION | OBJECT_DETECTION | TEXT_GENERATION | IMAGE_SEGMENTATION | FILL_MASK | CLASSIFICATION | REGRESSION | OTHER@
    task :: Prelude.Maybe Prelude.Text
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'RecommendationJobContainerConfig' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'domain', 'recommendationJobContainerConfig_domain' - The machine learning domain of the model and its components.
--
-- Valid Values:
-- @COMPUTER_VISION | NATURAL_LANGUAGE_PROCESSING | MACHINE_LEARNING@
--
-- 'framework', 'recommendationJobContainerConfig_framework' - The machine learning framework of the container image.
--
-- Valid Values: @TENSORFLOW | PYTORCH | XGBOOST | SAGEMAKER-SCIKIT-LEARN@
--
-- 'frameworkVersion', 'recommendationJobContainerConfig_frameworkVersion' - The framework version of the container image.
--
-- 'nearestModelName', 'recommendationJobContainerConfig_nearestModelName' - The name of a pre-trained machine learning model benchmarked by Amazon
-- SageMaker Inference Recommender that matches your model.
--
-- Valid Values:
-- @efficientnetb7 | unet | xgboost | faster-rcnn-resnet101 | nasnetlarge | vgg16 | inception-v3 | mask-rcnn | sagemaker-scikit-learn | densenet201-gluon | resnet18v2-gluon | xception | densenet201 | yolov4 | resnet152 | bert-base-cased | xceptionV1-keras | resnet50 | retinanet@
--
-- 'payloadConfig', 'recommendationJobContainerConfig_payloadConfig' - Specifies the @SamplePayloadUrl@ and all other sample payload-related
-- fields.
--
-- 'supportedInstanceTypes', 'recommendationJobContainerConfig_supportedInstanceTypes' - A list of the instance types that are used to generate inferences in
-- real-time.
--
-- 'task', 'recommendationJobContainerConfig_task' - The machine learning task that the model accomplishes.
--
-- Valid Values:
-- @IMAGE_CLASSIFICATION | OBJECT_DETECTION | TEXT_GENERATION | IMAGE_SEGMENTATION | FILL_MASK | CLASSIFICATION | REGRESSION | OTHER@
newRecommendationJobContainerConfig ::
  RecommendationJobContainerConfig
newRecommendationJobContainerConfig =
  RecommendationJobContainerConfig'
    { domain =
        Prelude.Nothing,
      framework = Prelude.Nothing,
      frameworkVersion = Prelude.Nothing,
      nearestModelName = Prelude.Nothing,
      payloadConfig = Prelude.Nothing,
      supportedInstanceTypes = Prelude.Nothing,
      task = Prelude.Nothing
    }

-- | The machine learning domain of the model and its components.
--
-- Valid Values:
-- @COMPUTER_VISION | NATURAL_LANGUAGE_PROCESSING | MACHINE_LEARNING@
recommendationJobContainerConfig_domain :: Lens.Lens' RecommendationJobContainerConfig (Prelude.Maybe Prelude.Text)
recommendationJobContainerConfig_domain = Lens.lens (\RecommendationJobContainerConfig' {domain} -> domain) (\s@RecommendationJobContainerConfig' {} a -> s {domain = a} :: RecommendationJobContainerConfig)

-- | The machine learning framework of the container image.
--
-- Valid Values: @TENSORFLOW | PYTORCH | XGBOOST | SAGEMAKER-SCIKIT-LEARN@
recommendationJobContainerConfig_framework :: Lens.Lens' RecommendationJobContainerConfig (Prelude.Maybe Prelude.Text)
recommendationJobContainerConfig_framework = Lens.lens (\RecommendationJobContainerConfig' {framework} -> framework) (\s@RecommendationJobContainerConfig' {} a -> s {framework = a} :: RecommendationJobContainerConfig)

-- | The framework version of the container image.
recommendationJobContainerConfig_frameworkVersion :: Lens.Lens' RecommendationJobContainerConfig (Prelude.Maybe Prelude.Text)
recommendationJobContainerConfig_frameworkVersion = Lens.lens (\RecommendationJobContainerConfig' {frameworkVersion} -> frameworkVersion) (\s@RecommendationJobContainerConfig' {} a -> s {frameworkVersion = a} :: RecommendationJobContainerConfig)

-- | The name of a pre-trained machine learning model benchmarked by Amazon
-- SageMaker Inference Recommender that matches your model.
--
-- Valid Values:
-- @efficientnetb7 | unet | xgboost | faster-rcnn-resnet101 | nasnetlarge | vgg16 | inception-v3 | mask-rcnn | sagemaker-scikit-learn | densenet201-gluon | resnet18v2-gluon | xception | densenet201 | yolov4 | resnet152 | bert-base-cased | xceptionV1-keras | resnet50 | retinanet@
recommendationJobContainerConfig_nearestModelName :: Lens.Lens' RecommendationJobContainerConfig (Prelude.Maybe Prelude.Text)
recommendationJobContainerConfig_nearestModelName = Lens.lens (\RecommendationJobContainerConfig' {nearestModelName} -> nearestModelName) (\s@RecommendationJobContainerConfig' {} a -> s {nearestModelName = a} :: RecommendationJobContainerConfig)

-- | Specifies the @SamplePayloadUrl@ and all other sample payload-related
-- fields.
recommendationJobContainerConfig_payloadConfig :: Lens.Lens' RecommendationJobContainerConfig (Prelude.Maybe RecommendationJobPayloadConfig)
recommendationJobContainerConfig_payloadConfig = Lens.lens (\RecommendationJobContainerConfig' {payloadConfig} -> payloadConfig) (\s@RecommendationJobContainerConfig' {} a -> s {payloadConfig = a} :: RecommendationJobContainerConfig)

-- | A list of the instance types that are used to generate inferences in
-- real-time.
recommendationJobContainerConfig_supportedInstanceTypes :: Lens.Lens' RecommendationJobContainerConfig (Prelude.Maybe [Prelude.Text])
recommendationJobContainerConfig_supportedInstanceTypes = Lens.lens (\RecommendationJobContainerConfig' {supportedInstanceTypes} -> supportedInstanceTypes) (\s@RecommendationJobContainerConfig' {} a -> s {supportedInstanceTypes = a} :: RecommendationJobContainerConfig) Prelude.. Lens.mapping Lens.coerced

-- | The machine learning task that the model accomplishes.
--
-- Valid Values:
-- @IMAGE_CLASSIFICATION | OBJECT_DETECTION | TEXT_GENERATION | IMAGE_SEGMENTATION | FILL_MASK | CLASSIFICATION | REGRESSION | OTHER@
recommendationJobContainerConfig_task :: Lens.Lens' RecommendationJobContainerConfig (Prelude.Maybe Prelude.Text)
recommendationJobContainerConfig_task = Lens.lens (\RecommendationJobContainerConfig' {task} -> task) (\s@RecommendationJobContainerConfig' {} a -> s {task = a} :: RecommendationJobContainerConfig)

instance
  Data.FromJSON
    RecommendationJobContainerConfig
  where
  parseJSON =
    Data.withObject
      "RecommendationJobContainerConfig"
      ( \x ->
          RecommendationJobContainerConfig'
            Prelude.<$> (x Data..:? "Domain")
            Prelude.<*> (x Data..:? "Framework")
            Prelude.<*> (x Data..:? "FrameworkVersion")
            Prelude.<*> (x Data..:? "NearestModelName")
            Prelude.<*> (x Data..:? "PayloadConfig")
            Prelude.<*> ( x
                            Data..:? "SupportedInstanceTypes"
                            Data..!= Prelude.mempty
                        )
            Prelude.<*> (x Data..:? "Task")
      )

instance
  Prelude.Hashable
    RecommendationJobContainerConfig
  where
  hashWithSalt
    _salt
    RecommendationJobContainerConfig' {..} =
      _salt
        `Prelude.hashWithSalt` domain
        `Prelude.hashWithSalt` framework
        `Prelude.hashWithSalt` frameworkVersion
        `Prelude.hashWithSalt` nearestModelName
        `Prelude.hashWithSalt` payloadConfig
        `Prelude.hashWithSalt` supportedInstanceTypes
        `Prelude.hashWithSalt` task

instance
  Prelude.NFData
    RecommendationJobContainerConfig
  where
  rnf RecommendationJobContainerConfig' {..} =
    Prelude.rnf domain
      `Prelude.seq` Prelude.rnf framework
      `Prelude.seq` Prelude.rnf frameworkVersion
      `Prelude.seq` Prelude.rnf nearestModelName
      `Prelude.seq` Prelude.rnf payloadConfig
      `Prelude.seq` Prelude.rnf supportedInstanceTypes
      `Prelude.seq` Prelude.rnf task

instance Data.ToJSON RecommendationJobContainerConfig where
  toJSON RecommendationJobContainerConfig' {..} =
    Data.object
      ( Prelude.catMaybes
          [ ("Domain" Data..=) Prelude.<$> domain,
            ("Framework" Data..=) Prelude.<$> framework,
            ("FrameworkVersion" Data..=)
              Prelude.<$> frameworkVersion,
            ("NearestModelName" Data..=)
              Prelude.<$> nearestModelName,
            ("PayloadConfig" Data..=) Prelude.<$> payloadConfig,
            ("SupportedInstanceTypes" Data..=)
              Prelude.<$> supportedInstanceTypes,
            ("Task" Data..=) Prelude.<$> task
          ]
      )