# Copyright 2019 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
#
#     http://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.

# NOTE: This file is auto generated by the elixir code generator program.
# Do not edit this file manually.

defmodule GoogleApi.Retail.V2.Model.GoogleCloudRetailV2ServingConfig do
  @moduledoc """
  Configures metadata that is used to generate serving time results (e.g. search results or recommendation predictions).

  ## Attributes

  *   `boostControlIds` (*type:* `list(String.t)`, *default:* `nil`) - Condition boost specifications. If a product matches multiple conditions in the specifications, boost scores from these specifications are all applied and combined in a non-linear way. Maximum number of specifications is 100. Notice that if both ServingConfig.boost_control_ids and SearchRequest.boost_spec are set, the boost conditions from both places are evaluated. If a search request matches multiple boost conditions, the final boost score is equal to the sum of the boost scores from all matched boost conditions. Can only be set if solution_types is SOLUTION_TYPE_SEARCH.
  *   `displayName` (*type:* `String.t`, *default:* `nil`) - Required. The human readable serving config display name. Used in Retail UI. This field must be a UTF-8 encoded string with a length limit of 128 characters. Otherwise, an INVALID_ARGUMENT error is returned.
  *   `diversityLevel` (*type:* `String.t`, *default:* `nil`) - How much diversity to use in recommendation model results e.g. `medium-diversity` or `high-diversity`. Currently supported values: * `no-diversity` * `low-diversity` * `medium-diversity` * `high-diversity` * `auto-diversity` If not specified, we choose default based on recommendation model type. Default value: `no-diversity`. Can only be set if solution_types is SOLUTION_TYPE_RECOMMENDATION.
  *   `diversityType` (*type:* `String.t`, *default:* `nil`) - What kind of diversity to use - data driven or rule based. If unset, the server behavior defaults to RULE_BASED_DIVERSITY.
  *   `doNotAssociateControlIds` (*type:* `list(String.t)`, *default:* `nil`) - Condition do not associate specifications. If multiple do not associate conditions match, all matching do not associate controls in the list will execute. - Order does not matter. - Maximum number of specifications is 100. Can only be set if solution_types is SOLUTION_TYPE_SEARCH.
  *   `dynamicFacetSpec` (*type:* `GoogleApi.Retail.V2.Model.GoogleCloudRetailV2SearchRequestDynamicFacetSpec.t`, *default:* `nil`) - The specification for dynamically generated facets. Notice that only textual facets can be dynamically generated. Can only be set if solution_types is SOLUTION_TYPE_SEARCH.
  *   `enableCategoryFilterLevel` (*type:* `String.t`, *default:* `nil`) - Whether to add additional category filters on the `similar-items` model. If not specified, we enable it by default. Allowed values are: * `no-category-match`: No additional filtering of original results from the model and the customer's filters. * `relaxed-category-match`: Only keep results with categories that match at least one item categories in the PredictRequests's context item. * If customer also sends filters in the PredictRequest, then the results will satisfy both conditions (user given and category match). Can only be set if solution_types is SOLUTION_TYPE_RECOMMENDATION.
  *   `facetControlIds` (*type:* `list(String.t)`, *default:* `nil`) - Facet specifications for faceted search. If empty, no facets are returned. The ids refer to the ids of Control resources with only the Facet control set. These controls are assumed to be in the same Catalog as the ServingConfig. A maximum of 100 values are allowed. Otherwise, an INVALID_ARGUMENT error is returned. Can only be set if solution_types is SOLUTION_TYPE_SEARCH.
  *   `filterControlIds` (*type:* `list(String.t)`, *default:* `nil`) - Condition filter specifications. If a product matches multiple conditions in the specifications, filters from these specifications are all applied and combined via the AND operator. Maximum number of specifications is 100. Can only be set if solution_types is SOLUTION_TYPE_SEARCH.
  *   `ignoreControlIds` (*type:* `list(String.t)`, *default:* `nil`) - Condition ignore specifications. If multiple ignore conditions match, all matching ignore controls in the list will execute. - Order does not matter. - Maximum number of specifications is 100. Can only be set if solution_types is SOLUTION_TYPE_SEARCH.
  *   `ignoreRecsDenylist` (*type:* `boolean()`, *default:* `nil`) - When the flag is enabled, the products in the denylist will not be filtered out in the recommendation filtering results.
  *   `modelId` (*type:* `String.t`, *default:* `nil`) - The id of the model in the same Catalog to use at serving time. Currently only RecommendationModels are supported: https://cloud.google.com/retail/recommendations-ai/docs/create-models Can be changed but only to a compatible model (e.g. others-you-may-like CTR to others-you-may-like CVR). Required when solution_types is SOLUTION_TYPE_RECOMMENDATION.
  *   `name` (*type:* `String.t`, *default:* `nil`) - Immutable. Fully qualified name `projects/*/locations/global/catalogs/*/servingConfig/*`
  *   `onewaySynonymsControlIds` (*type:* `list(String.t)`, *default:* `nil`) - Condition oneway synonyms specifications. If multiple oneway synonyms conditions match, all matching oneway synonyms controls in the list will execute. Order of controls in the list will not matter. Maximum number of specifications is 100. Can only be set if solution_types is SOLUTION_TYPE_SEARCH.
  *   `personalizationSpec` (*type:* `GoogleApi.Retail.V2.Model.GoogleCloudRetailV2SearchRequestPersonalizationSpec.t`, *default:* `nil`) - The specification for personalization spec. Can only be set if solution_types is SOLUTION_TYPE_SEARCH. Notice that if both ServingConfig.personalization_spec and SearchRequest.personalization_spec are set. SearchRequest.personalization_spec will override ServingConfig.personalization_spec.
  *   `priceRerankingLevel` (*type:* `String.t`, *default:* `nil`) - How much price ranking we want in serving results. Price reranking causes product items with a similar recommendation probability to be ordered by price, with the highest-priced items first. This setting could result in a decrease in click-through and conversion rates. Allowed values are: * `no-price-reranking` * `low-price-reranking` * `medium-price-reranking` * `high-price-reranking` If not specified, we choose default based on model type. Default value: `no-price-reranking`. Can only be set if solution_types is SOLUTION_TYPE_RECOMMENDATION.
  *   `redirectControlIds` (*type:* `list(String.t)`, *default:* `nil`) - Condition redirect specifications. Only the first triggered redirect action is applied, even if multiple apply. Maximum number of specifications is 1000. Can only be set if solution_types is SOLUTION_TYPE_SEARCH.
  *   `replacementControlIds` (*type:* `list(String.t)`, *default:* `nil`) - Condition replacement specifications. - Applied according to the order in the list. - A previously replaced term can not be re-replaced. - Maximum number of specifications is 100. Can only be set if solution_types is SOLUTION_TYPE_SEARCH.
  *   `solutionTypes` (*type:* `list(String.t)`, *default:* `nil`) - Required. Immutable. Specifies the solution types that a serving config can be associated with. Currently we support setting only one type of solution.
  *   `twowaySynonymsControlIds` (*type:* `list(String.t)`, *default:* `nil`) - Condition synonyms specifications. If multiple syonyms conditions match, all matching synonyms control in the list will execute. Order of controls in the list will not matter. Maximum number of specifications is 100. Can only be set if solution_types is SOLUTION_TYPE_SEARCH.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :boostControlIds => list(String.t()) | nil,
          :displayName => String.t() | nil,
          :diversityLevel => String.t() | nil,
          :diversityType => String.t() | nil,
          :doNotAssociateControlIds => list(String.t()) | nil,
          :dynamicFacetSpec =>
            GoogleApi.Retail.V2.Model.GoogleCloudRetailV2SearchRequestDynamicFacetSpec.t() | nil,
          :enableCategoryFilterLevel => String.t() | nil,
          :facetControlIds => list(String.t()) | nil,
          :filterControlIds => list(String.t()) | nil,
          :ignoreControlIds => list(String.t()) | nil,
          :ignoreRecsDenylist => boolean() | nil,
          :modelId => String.t() | nil,
          :name => String.t() | nil,
          :onewaySynonymsControlIds => list(String.t()) | nil,
          :personalizationSpec =>
            GoogleApi.Retail.V2.Model.GoogleCloudRetailV2SearchRequestPersonalizationSpec.t()
            | nil,
          :priceRerankingLevel => String.t() | nil,
          :redirectControlIds => list(String.t()) | nil,
          :replacementControlIds => list(String.t()) | nil,
          :solutionTypes => list(String.t()) | nil,
          :twowaySynonymsControlIds => list(String.t()) | nil
        }

  field(:boostControlIds, type: :list)
  field(:displayName)
  field(:diversityLevel)
  field(:diversityType)
  field(:doNotAssociateControlIds, type: :list)

  field(:dynamicFacetSpec,
    as: GoogleApi.Retail.V2.Model.GoogleCloudRetailV2SearchRequestDynamicFacetSpec
  )

  field(:enableCategoryFilterLevel)
  field(:facetControlIds, type: :list)
  field(:filterControlIds, type: :list)
  field(:ignoreControlIds, type: :list)
  field(:ignoreRecsDenylist)
  field(:modelId)
  field(:name)
  field(:onewaySynonymsControlIds, type: :list)

  field(:personalizationSpec,
    as: GoogleApi.Retail.V2.Model.GoogleCloudRetailV2SearchRequestPersonalizationSpec
  )

  field(:priceRerankingLevel)
  field(:redirectControlIds, type: :list)
  field(:replacementControlIds, type: :list)
  field(:solutionTypes, type: :list)
  field(:twowaySynonymsControlIds, type: :list)
end

defimpl Poison.Decoder, for: GoogleApi.Retail.V2.Model.GoogleCloudRetailV2ServingConfig do
  def decode(value, options) do
    GoogleApi.Retail.V2.Model.GoogleCloudRetailV2ServingConfig.decode(value, options)
  end
end

defimpl Poison.Encoder, for: GoogleApi.Retail.V2.Model.GoogleCloudRetailV2ServingConfig do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
