// *** WARNING: this file was generated by pulumi-java-gen. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

package com.pulumi.gcp.vertex.outputs;

import com.pulumi.core.annotations.CustomType;
import com.pulumi.gcp.vertex.outputs.AiEndpointDeployedModelDedicatedResourceAutoscalingMetricSpec;
import com.pulumi.gcp.vertex.outputs.AiEndpointDeployedModelDedicatedResourceMachineSpec;
import java.lang.Integer;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;

@CustomType
public final class AiEndpointDeployedModelDedicatedResource {
    /**
     * @return (Output)
     * The metric specifications that overrides a resource utilization metric (CPU utilization, accelerator&#39;s duty cycle, and so on) target value (default to 60 if not set). At most one entry is allowed per metric. If machine_spec.accelerator_count is above 0, the autoscaling will be based on both CPU utilization and accelerator&#39;s duty cycle metrics and scale up when either metrics exceeds its target value while scale down if both metrics are under their target value. The default target value is 60 for both metrics. If machine_spec.accelerator_count is 0, the autoscaling will be based on CPU utilization metric only with default target value 60 if not explicitly set. For example, in the case of Online Prediction, if you want to override target CPU utilization to 80, you should set autoscaling_metric_specs.metric_name to `aiplatform.googleapis.com/prediction/online/cpu/utilization` and autoscaling_metric_specs.target to `80`.
     * Structure is documented below.
     * 
     */
    private @Nullable List<AiEndpointDeployedModelDedicatedResourceAutoscalingMetricSpec> autoscalingMetricSpecs;
    /**
     * @return (Output)
     * The specification of a single machine used by the prediction.
     * Structure is documented below.
     * 
     */
    private @Nullable List<AiEndpointDeployedModelDedicatedResourceMachineSpec> machineSpecs;
    /**
     * @return (Output)
     * The maximum number of replicas this DeployedModel may be deployed on when the traffic against it increases. If the requested value is too large, the deployment will error, but if deployment succeeds then the ability to scale the model to that many replicas is guaranteed (barring service outages). If traffic against the DeployedModel increases beyond what its replicas at maximum may handle, a portion of the traffic will be dropped. If this value is not provided, a no upper bound for scaling under heavy traffic will be assume, though Vertex AI may be unable to scale beyond certain replica number.
     * 
     */
    private @Nullable Integer maxReplicaCount;
    /**
     * @return (Output)
     * The minimum number of replicas this DeployedModel will be always deployed on. If traffic against it increases, it may dynamically be deployed onto more replicas up to max_replica_count, and as traffic decreases, some of these extra replicas may be freed. If the requested value is too large, the deployment will error.
     * 
     */
    private @Nullable Integer minReplicaCount;

    private AiEndpointDeployedModelDedicatedResource() {}
    /**
     * @return (Output)
     * The metric specifications that overrides a resource utilization metric (CPU utilization, accelerator&#39;s duty cycle, and so on) target value (default to 60 if not set). At most one entry is allowed per metric. If machine_spec.accelerator_count is above 0, the autoscaling will be based on both CPU utilization and accelerator&#39;s duty cycle metrics and scale up when either metrics exceeds its target value while scale down if both metrics are under their target value. The default target value is 60 for both metrics. If machine_spec.accelerator_count is 0, the autoscaling will be based on CPU utilization metric only with default target value 60 if not explicitly set. For example, in the case of Online Prediction, if you want to override target CPU utilization to 80, you should set autoscaling_metric_specs.metric_name to `aiplatform.googleapis.com/prediction/online/cpu/utilization` and autoscaling_metric_specs.target to `80`.
     * Structure is documented below.
     * 
     */
    public List<AiEndpointDeployedModelDedicatedResourceAutoscalingMetricSpec> autoscalingMetricSpecs() {
        return this.autoscalingMetricSpecs == null ? List.of() : this.autoscalingMetricSpecs;
    }
    /**
     * @return (Output)
     * The specification of a single machine used by the prediction.
     * Structure is documented below.
     * 
     */
    public List<AiEndpointDeployedModelDedicatedResourceMachineSpec> machineSpecs() {
        return this.machineSpecs == null ? List.of() : this.machineSpecs;
    }
    /**
     * @return (Output)
     * The maximum number of replicas this DeployedModel may be deployed on when the traffic against it increases. If the requested value is too large, the deployment will error, but if deployment succeeds then the ability to scale the model to that many replicas is guaranteed (barring service outages). If traffic against the DeployedModel increases beyond what its replicas at maximum may handle, a portion of the traffic will be dropped. If this value is not provided, a no upper bound for scaling under heavy traffic will be assume, though Vertex AI may be unable to scale beyond certain replica number.
     * 
     */
    public Optional<Integer> maxReplicaCount() {
        return Optional.ofNullable(this.maxReplicaCount);
    }
    /**
     * @return (Output)
     * The minimum number of replicas this DeployedModel will be always deployed on. If traffic against it increases, it may dynamically be deployed onto more replicas up to max_replica_count, and as traffic decreases, some of these extra replicas may be freed. If the requested value is too large, the deployment will error.
     * 
     */
    public Optional<Integer> minReplicaCount() {
        return Optional.ofNullable(this.minReplicaCount);
    }

    public static Builder builder() {
        return new Builder();
    }

    public static Builder builder(AiEndpointDeployedModelDedicatedResource defaults) {
        return new Builder(defaults);
    }
    @CustomType.Builder
    public static final class Builder {
        private @Nullable List<AiEndpointDeployedModelDedicatedResourceAutoscalingMetricSpec> autoscalingMetricSpecs;
        private @Nullable List<AiEndpointDeployedModelDedicatedResourceMachineSpec> machineSpecs;
        private @Nullable Integer maxReplicaCount;
        private @Nullable Integer minReplicaCount;
        public Builder() {}
        public Builder(AiEndpointDeployedModelDedicatedResource defaults) {
    	      Objects.requireNonNull(defaults);
    	      this.autoscalingMetricSpecs = defaults.autoscalingMetricSpecs;
    	      this.machineSpecs = defaults.machineSpecs;
    	      this.maxReplicaCount = defaults.maxReplicaCount;
    	      this.minReplicaCount = defaults.minReplicaCount;
        }

        @CustomType.Setter
        public Builder autoscalingMetricSpecs(@Nullable List<AiEndpointDeployedModelDedicatedResourceAutoscalingMetricSpec> autoscalingMetricSpecs) {
            this.autoscalingMetricSpecs = autoscalingMetricSpecs;
            return this;
        }
        public Builder autoscalingMetricSpecs(AiEndpointDeployedModelDedicatedResourceAutoscalingMetricSpec... autoscalingMetricSpecs) {
            return autoscalingMetricSpecs(List.of(autoscalingMetricSpecs));
        }
        @CustomType.Setter
        public Builder machineSpecs(@Nullable List<AiEndpointDeployedModelDedicatedResourceMachineSpec> machineSpecs) {
            this.machineSpecs = machineSpecs;
            return this;
        }
        public Builder machineSpecs(AiEndpointDeployedModelDedicatedResourceMachineSpec... machineSpecs) {
            return machineSpecs(List.of(machineSpecs));
        }
        @CustomType.Setter
        public Builder maxReplicaCount(@Nullable Integer maxReplicaCount) {
            this.maxReplicaCount = maxReplicaCount;
            return this;
        }
        @CustomType.Setter
        public Builder minReplicaCount(@Nullable Integer minReplicaCount) {
            this.minReplicaCount = minReplicaCount;
            return this;
        }
        public AiEndpointDeployedModelDedicatedResource build() {
            final var o = new AiEndpointDeployedModelDedicatedResource();
            o.autoscalingMetricSpecs = autoscalingMetricSpecs;
            o.machineSpecs = machineSpecs;
            o.maxReplicaCount = maxReplicaCount;
            o.minReplicaCount = minReplicaCount;
            return o;
        }
    }
}
