// Copyright (c) 2016, 2018, 2026, Oracle and/or its affiliates.  All rights reserved.
// This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license.
// Code generated. DO NOT EDIT.

// Generative AI Service Management API
//
// OCI Generative AI is a fully managed service that provides a set of state-of-the-art, customizable large language models (LLMs) that cover a wide range of use cases for text generation, summarization, and text embeddings.
// Use the Generative AI service management API to create and manage DedicatedAiCluster, Endpoint, Model, and WorkRequest in the Generative AI service. For example, create a custom model by fine-tuning an out-of-the-box model using your own data, on a fine-tuning dedicated AI cluster. Then, create a hosting dedicated AI cluster with an endpoint to host your custom model.
// To access your custom model endpoints, or to try the out-of-the-box models to generate text, summarize, and create text embeddings see the Generative AI Inference API (https://docs.oracle.com/iaas/api/#/en/generative-ai-inference/latest/).
// To learn more about the service, see the Generative AI documentation (https://docs.oracle.com/iaas/Content/generative-ai/home.htm).
//

package generativeai

import (
	"encoding/json"
	"fmt"
	"github.com/oracle/oci-go-sdk/v65/common"
	"strings"
)

// DedicatedAiCluster Dedicated AI clusters are compute resources that you can use for fine-tuning custom models or for hosting endpoints for custom models. The clusters are dedicated to your models and not shared with users in other tenancies.
// To use any of the API operations, you must be authorized in an IAM policy. If you're not authorized, talk to an administrator who gives OCI resource access to users. See
// Getting Started with Policies (https://docs.oracle.com/iaas/Content/Identity/policiesgs/get-started-with-policies.htm) and Getting Access to Generative AI Resources (https://docs.oracle.com/iaas/Content/generative-ai/iam-policies.htm).
type DedicatedAiCluster struct {

	// The OCID (https://docs.oracle.com/iaas/Content/General/Concepts/identifiers.htm) of the dedicated AI cluster.
	Id *string `mandatory:"true" json:"id"`

	// The dedicated AI cluster type indicating whether this is a fine-tuning/training processor or hosting/inference processor.
	Type DedicatedAiClusterTypeEnum `mandatory:"true" json:"type"`

	// The compartment OCID to create the dedicated AI cluster in.
	CompartmentId *string `mandatory:"true" json:"compartmentId"`

	// The date and time the dedicated AI cluster was created, in the format defined by RFC 3339
	TimeCreated *common.SDKTime `mandatory:"true" json:"timeCreated"`

	// The current state of the dedicated AI cluster.
	LifecycleState DedicatedAiClusterLifecycleStateEnum `mandatory:"true" json:"lifecycleState"`

	// The number of dedicated units in this AI cluster.
	UnitCount *int `mandatory:"true" json:"unitCount"`

	// The shape of dedicated unit in this AI cluster. The underlying hardware configuration is hidden from customers.
	UnitShape DedicatedAiClusterUnitShapeEnum `mandatory:"true" json:"unitShape"`

	// A user-friendly name. Does not have to be unique, and it's changeable.
	DisplayName *string `mandatory:"false" json:"displayName"`

	// An optional description of the dedicated AI cluster.
	Description *string `mandatory:"false" json:"description"`

	// The date and time the dedicated AI cluster was updated, in the format defined by RFC 3339
	TimeUpdated *common.SDKTime `mandatory:"false" json:"timeUpdated"`

	// A message describing the current state with detail that can provide actionable information.
	LifecycleDetails *string `mandatory:"false" json:"lifecycleDetails"`

	Capacity DedicatedAiClusterCapacity `mandatory:"false" json:"capacity"`

	PreviousState *DedicatedAiCluster `mandatory:"false" json:"previousState"`

	// Free-form tags for this resource. Each tag is a simple key-value pair with no predefined name, type, or namespace.
	// For more information, see Resource Tags (https://docs.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).
	// Example: `{"Department": "Finance"}`
	FreeformTags map[string]string `mandatory:"false" json:"freeformTags"`

	// Defined tags for this resource. Each key is predefined and scoped to a namespace.
	// For more information, see Resource Tags (https://docs.oracle.com/iaas/Content/General/Concepts/resourcetags.htm).
	// Example: `{"Operations": {"CostCenter": "42"}}`
	DefinedTags map[string]map[string]interface{} `mandatory:"false" json:"definedTags"`

	// System tags for this resource. Each key is predefined and scoped to a namespace.
	// Example: `{"orcl-cloud": {"free-tier-retained": "true"}}`
	SystemTags map[string]map[string]interface{} `mandatory:"false" json:"systemTags"`
}

func (m DedicatedAiCluster) String() string {
	return common.PointerString(m)
}

// ValidateEnumValue returns an error when providing an unsupported enum value
// This function is being called during constructing API request process
// Not recommended for calling this function directly
func (m DedicatedAiCluster) ValidateEnumValue() (bool, error) {
	errMessage := []string{}
	if _, ok := GetMappingDedicatedAiClusterTypeEnum(string(m.Type)); !ok && m.Type != "" {
		errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for Type: %s. Supported values are: %s.", m.Type, strings.Join(GetDedicatedAiClusterTypeEnumStringValues(), ",")))
	}
	if _, ok := GetMappingDedicatedAiClusterLifecycleStateEnum(string(m.LifecycleState)); !ok && m.LifecycleState != "" {
		errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for LifecycleState: %s. Supported values are: %s.", m.LifecycleState, strings.Join(GetDedicatedAiClusterLifecycleStateEnumStringValues(), ",")))
	}
	if _, ok := GetMappingDedicatedAiClusterUnitShapeEnum(string(m.UnitShape)); !ok && m.UnitShape != "" {
		errMessage = append(errMessage, fmt.Sprintf("unsupported enum value for UnitShape: %s. Supported values are: %s.", m.UnitShape, strings.Join(GetDedicatedAiClusterUnitShapeEnumStringValues(), ",")))
	}

	if len(errMessage) > 0 {
		return true, fmt.Errorf("%s", strings.Join(errMessage, "\n"))
	}
	return false, nil
}

// UnmarshalJSON unmarshals from json
func (m *DedicatedAiCluster) UnmarshalJSON(data []byte) (e error) {
	model := struct {
		DisplayName      *string                              `json:"displayName"`
		Description      *string                              `json:"description"`
		TimeUpdated      *common.SDKTime                      `json:"timeUpdated"`
		LifecycleDetails *string                              `json:"lifecycleDetails"`
		Capacity         dedicatedaiclustercapacity           `json:"capacity"`
		PreviousState    *DedicatedAiCluster                  `json:"previousState"`
		FreeformTags     map[string]string                    `json:"freeformTags"`
		DefinedTags      map[string]map[string]interface{}    `json:"definedTags"`
		SystemTags       map[string]map[string]interface{}    `json:"systemTags"`
		Id               *string                              `json:"id"`
		Type             DedicatedAiClusterTypeEnum           `json:"type"`
		CompartmentId    *string                              `json:"compartmentId"`
		TimeCreated      *common.SDKTime                      `json:"timeCreated"`
		LifecycleState   DedicatedAiClusterLifecycleStateEnum `json:"lifecycleState"`
		UnitCount        *int                                 `json:"unitCount"`
		UnitShape        DedicatedAiClusterUnitShapeEnum      `json:"unitShape"`
	}{}

	e = json.Unmarshal(data, &model)
	if e != nil {
		return
	}
	var nn interface{}
	m.DisplayName = model.DisplayName

	m.Description = model.Description

	m.TimeUpdated = model.TimeUpdated

	m.LifecycleDetails = model.LifecycleDetails

	nn, e = model.Capacity.UnmarshalPolymorphicJSON(model.Capacity.JsonData)
	if e != nil {
		return
	}
	if nn != nil {
		m.Capacity = nn.(DedicatedAiClusterCapacity)
	} else {
		m.Capacity = nil
	}

	m.PreviousState = model.PreviousState

	m.FreeformTags = model.FreeformTags

	m.DefinedTags = model.DefinedTags

	m.SystemTags = model.SystemTags

	m.Id = model.Id

	m.Type = model.Type

	m.CompartmentId = model.CompartmentId

	m.TimeCreated = model.TimeCreated

	m.LifecycleState = model.LifecycleState

	m.UnitCount = model.UnitCount

	m.UnitShape = model.UnitShape

	return
}

// DedicatedAiClusterTypeEnum Enum with underlying type: string
type DedicatedAiClusterTypeEnum string

// Set of constants representing the allowable values for DedicatedAiClusterTypeEnum
const (
	DedicatedAiClusterTypeHosting    DedicatedAiClusterTypeEnum = "HOSTING"
	DedicatedAiClusterTypeFineTuning DedicatedAiClusterTypeEnum = "FINE_TUNING"
)

var mappingDedicatedAiClusterTypeEnum = map[string]DedicatedAiClusterTypeEnum{
	"HOSTING":     DedicatedAiClusterTypeHosting,
	"FINE_TUNING": DedicatedAiClusterTypeFineTuning,
}

var mappingDedicatedAiClusterTypeEnumLowerCase = map[string]DedicatedAiClusterTypeEnum{
	"hosting":     DedicatedAiClusterTypeHosting,
	"fine_tuning": DedicatedAiClusterTypeFineTuning,
}

// GetDedicatedAiClusterTypeEnumValues Enumerates the set of values for DedicatedAiClusterTypeEnum
func GetDedicatedAiClusterTypeEnumValues() []DedicatedAiClusterTypeEnum {
	values := make([]DedicatedAiClusterTypeEnum, 0)
	for _, v := range mappingDedicatedAiClusterTypeEnum {
		values = append(values, v)
	}
	return values
}

// GetDedicatedAiClusterTypeEnumStringValues Enumerates the set of values in String for DedicatedAiClusterTypeEnum
func GetDedicatedAiClusterTypeEnumStringValues() []string {
	return []string{
		"HOSTING",
		"FINE_TUNING",
	}
}

// GetMappingDedicatedAiClusterTypeEnum performs case Insensitive comparison on enum value and return the desired enum
func GetMappingDedicatedAiClusterTypeEnum(val string) (DedicatedAiClusterTypeEnum, bool) {
	enum, ok := mappingDedicatedAiClusterTypeEnumLowerCase[strings.ToLower(val)]
	return enum, ok
}

// DedicatedAiClusterLifecycleStateEnum Enum with underlying type: string
type DedicatedAiClusterLifecycleStateEnum string

// Set of constants representing the allowable values for DedicatedAiClusterLifecycleStateEnum
const (
	DedicatedAiClusterLifecycleStateCreating       DedicatedAiClusterLifecycleStateEnum = "CREATING"
	DedicatedAiClusterLifecycleStateActive         DedicatedAiClusterLifecycleStateEnum = "ACTIVE"
	DedicatedAiClusterLifecycleStateUpdating       DedicatedAiClusterLifecycleStateEnum = "UPDATING"
	DedicatedAiClusterLifecycleStateDeleting       DedicatedAiClusterLifecycleStateEnum = "DELETING"
	DedicatedAiClusterLifecycleStateDeleted        DedicatedAiClusterLifecycleStateEnum = "DELETED"
	DedicatedAiClusterLifecycleStateFailed         DedicatedAiClusterLifecycleStateEnum = "FAILED"
	DedicatedAiClusterLifecycleStateNeedsAttention DedicatedAiClusterLifecycleStateEnum = "NEEDS_ATTENTION"
)

var mappingDedicatedAiClusterLifecycleStateEnum = map[string]DedicatedAiClusterLifecycleStateEnum{
	"CREATING":        DedicatedAiClusterLifecycleStateCreating,
	"ACTIVE":          DedicatedAiClusterLifecycleStateActive,
	"UPDATING":        DedicatedAiClusterLifecycleStateUpdating,
	"DELETING":        DedicatedAiClusterLifecycleStateDeleting,
	"DELETED":         DedicatedAiClusterLifecycleStateDeleted,
	"FAILED":          DedicatedAiClusterLifecycleStateFailed,
	"NEEDS_ATTENTION": DedicatedAiClusterLifecycleStateNeedsAttention,
}

var mappingDedicatedAiClusterLifecycleStateEnumLowerCase = map[string]DedicatedAiClusterLifecycleStateEnum{
	"creating":        DedicatedAiClusterLifecycleStateCreating,
	"active":          DedicatedAiClusterLifecycleStateActive,
	"updating":        DedicatedAiClusterLifecycleStateUpdating,
	"deleting":        DedicatedAiClusterLifecycleStateDeleting,
	"deleted":         DedicatedAiClusterLifecycleStateDeleted,
	"failed":          DedicatedAiClusterLifecycleStateFailed,
	"needs_attention": DedicatedAiClusterLifecycleStateNeedsAttention,
}

// GetDedicatedAiClusterLifecycleStateEnumValues Enumerates the set of values for DedicatedAiClusterLifecycleStateEnum
func GetDedicatedAiClusterLifecycleStateEnumValues() []DedicatedAiClusterLifecycleStateEnum {
	values := make([]DedicatedAiClusterLifecycleStateEnum, 0)
	for _, v := range mappingDedicatedAiClusterLifecycleStateEnum {
		values = append(values, v)
	}
	return values
}

// GetDedicatedAiClusterLifecycleStateEnumStringValues Enumerates the set of values in String for DedicatedAiClusterLifecycleStateEnum
func GetDedicatedAiClusterLifecycleStateEnumStringValues() []string {
	return []string{
		"CREATING",
		"ACTIVE",
		"UPDATING",
		"DELETING",
		"DELETED",
		"FAILED",
		"NEEDS_ATTENTION",
	}
}

// GetMappingDedicatedAiClusterLifecycleStateEnum performs case Insensitive comparison on enum value and return the desired enum
func GetMappingDedicatedAiClusterLifecycleStateEnum(val string) (DedicatedAiClusterLifecycleStateEnum, bool) {
	enum, ok := mappingDedicatedAiClusterLifecycleStateEnumLowerCase[strings.ToLower(val)]
	return enum, ok
}

// DedicatedAiClusterUnitShapeEnum Enum with underlying type: string
type DedicatedAiClusterUnitShapeEnum string

// Set of constants representing the allowable values for DedicatedAiClusterUnitShapeEnum
const (
	DedicatedAiClusterUnitShapeLargeCohere     DedicatedAiClusterUnitShapeEnum = "LARGE_COHERE"
	DedicatedAiClusterUnitShapeLargeCohereV2   DedicatedAiClusterUnitShapeEnum = "LARGE_COHERE_V2"
	DedicatedAiClusterUnitShapeSmallCohere     DedicatedAiClusterUnitShapeEnum = "SMALL_COHERE"
	DedicatedAiClusterUnitShapeSmallCohereV2   DedicatedAiClusterUnitShapeEnum = "SMALL_COHERE_V2"
	DedicatedAiClusterUnitShapeSmallCohere4    DedicatedAiClusterUnitShapeEnum = "SMALL_COHERE_4"
	DedicatedAiClusterUnitShapeEmbedCohere     DedicatedAiClusterUnitShapeEnum = "EMBED_COHERE"
	DedicatedAiClusterUnitShapeLlama270        DedicatedAiClusterUnitShapeEnum = "LLAMA2_70"
	DedicatedAiClusterUnitShapeLargeGeneric    DedicatedAiClusterUnitShapeEnum = "LARGE_GENERIC"
	DedicatedAiClusterUnitShapeLargeCohereV22  DedicatedAiClusterUnitShapeEnum = "LARGE_COHERE_V2_2"
	DedicatedAiClusterUnitShapeLargeGeneric4   DedicatedAiClusterUnitShapeEnum = "LARGE_GENERIC_4"
	DedicatedAiClusterUnitShapeSmallGenericV2  DedicatedAiClusterUnitShapeEnum = "SMALL_GENERIC_V2"
	DedicatedAiClusterUnitShapeLargeGeneric2   DedicatedAiClusterUnitShapeEnum = "LARGE_GENERIC_2"
	DedicatedAiClusterUnitShapeLargeGenericV2  DedicatedAiClusterUnitShapeEnum = "LARGE_GENERIC_V2"
	DedicatedAiClusterUnitShapeLargeGenericV3  DedicatedAiClusterUnitShapeEnum = "LARGE_GENERIC_V3"
	DedicatedAiClusterUnitShapeLargeGenericV4  DedicatedAiClusterUnitShapeEnum = "LARGE_GENERIC_V4"
	DedicatedAiClusterUnitShapeLargeGenericV5  DedicatedAiClusterUnitShapeEnum = "LARGE_GENERIC_V5"
	DedicatedAiClusterUnitShapeCohereH100X1    DedicatedAiClusterUnitShapeEnum = "COHERE_H100_X1"
	DedicatedAiClusterUnitShapeCohereA10080gX1 DedicatedAiClusterUnitShapeEnum = "COHERE_A100_80G_X1"
	DedicatedAiClusterUnitShapeCohereA10040gX1 DedicatedAiClusterUnitShapeEnum = "COHERE_A100_40G_X1"
	DedicatedAiClusterUnitShapeCohereA10X1     DedicatedAiClusterUnitShapeEnum = "COHERE_A10_X1"
	DedicatedAiClusterUnitShapeLargeCohereV3   DedicatedAiClusterUnitShapeEnum = "LARGE_COHERE_V3"
	DedicatedAiClusterUnitShapeRerankCohere    DedicatedAiClusterUnitShapeEnum = "RERANK_COHERE"
	DedicatedAiClusterUnitShapeSmallGenericV1  DedicatedAiClusterUnitShapeEnum = "SMALL_GENERIC_V1"
	DedicatedAiClusterUnitShapeMediumGenericV1 DedicatedAiClusterUnitShapeEnum = "MEDIUM_GENERIC_V1"
	DedicatedAiClusterUnitShapeLargeGenericV1  DedicatedAiClusterUnitShapeEnum = "LARGE_GENERIC_V1"
	DedicatedAiClusterUnitShapeA10X1           DedicatedAiClusterUnitShapeEnum = "A10_X1"
	DedicatedAiClusterUnitShapeA10X2           DedicatedAiClusterUnitShapeEnum = "A10_X2"
	DedicatedAiClusterUnitShapeA10X4           DedicatedAiClusterUnitShapeEnum = "A10_X4"
	DedicatedAiClusterUnitShapeA10040gX1       DedicatedAiClusterUnitShapeEnum = "A100_40G_X1"
	DedicatedAiClusterUnitShapeA10040gX2       DedicatedAiClusterUnitShapeEnum = "A100_40G_X2"
	DedicatedAiClusterUnitShapeA10040gX4       DedicatedAiClusterUnitShapeEnum = "A100_40G_X4"
	DedicatedAiClusterUnitShapeA10040gX8       DedicatedAiClusterUnitShapeEnum = "A100_40G_X8"
	DedicatedAiClusterUnitShapeA10080gX1       DedicatedAiClusterUnitShapeEnum = "A100_80G_X1"
	DedicatedAiClusterUnitShapeA10080gX2       DedicatedAiClusterUnitShapeEnum = "A100_80G_X2"
	DedicatedAiClusterUnitShapeA10080gX4       DedicatedAiClusterUnitShapeEnum = "A100_80G_X4"
	DedicatedAiClusterUnitShapeA10080gX8       DedicatedAiClusterUnitShapeEnum = "A100_80G_X8"
	DedicatedAiClusterUnitShapeH100X1          DedicatedAiClusterUnitShapeEnum = "H100_X1"
	DedicatedAiClusterUnitShapeH100X2          DedicatedAiClusterUnitShapeEnum = "H100_X2"
	DedicatedAiClusterUnitShapeH100X4          DedicatedAiClusterUnitShapeEnum = "H100_X4"
	DedicatedAiClusterUnitShapeH100X8          DedicatedAiClusterUnitShapeEnum = "H100_X8"
	DedicatedAiClusterUnitShapeH200X1          DedicatedAiClusterUnitShapeEnum = "H200_X1"
	DedicatedAiClusterUnitShapeH200X2          DedicatedAiClusterUnitShapeEnum = "H200_X2"
	DedicatedAiClusterUnitShapeH200X4          DedicatedAiClusterUnitShapeEnum = "H200_X4"
	DedicatedAiClusterUnitShapeH200X8          DedicatedAiClusterUnitShapeEnum = "H200_X8"
	DedicatedAiClusterUnitShapeOaiA10X2        DedicatedAiClusterUnitShapeEnum = "OAI_A10_X2"
	DedicatedAiClusterUnitShapeOaiH100X1       DedicatedAiClusterUnitShapeEnum = "OAI_H100_X1"
	DedicatedAiClusterUnitShapeOaiH100X2       DedicatedAiClusterUnitShapeEnum = "OAI_H100_X2"
	DedicatedAiClusterUnitShapeOaiH200X1       DedicatedAiClusterUnitShapeEnum = "OAI_H200_X1"
	DedicatedAiClusterUnitShapeOaiA10080gX1    DedicatedAiClusterUnitShapeEnum = "OAI_A100_80G_X1"
	DedicatedAiClusterUnitShapeOaiA10080gX2    DedicatedAiClusterUnitShapeEnum = "OAI_A100_80G_X2"
	DedicatedAiClusterUnitShapeOaiA10040gX1    DedicatedAiClusterUnitShapeEnum = "OAI_A100_40G_X1"
	DedicatedAiClusterUnitShapeOaiA10040gX4    DedicatedAiClusterUnitShapeEnum = "OAI_A100_40G_X4"
	DedicatedAiClusterUnitShapeB200X1          DedicatedAiClusterUnitShapeEnum = "B200_X1"
	DedicatedAiClusterUnitShapeB200X2          DedicatedAiClusterUnitShapeEnum = "B200_X2"
	DedicatedAiClusterUnitShapeB200X4          DedicatedAiClusterUnitShapeEnum = "B200_X4"
	DedicatedAiClusterUnitShapeB200X8          DedicatedAiClusterUnitShapeEnum = "B200_X8"
	DedicatedAiClusterUnitShapeOaiB200X1       DedicatedAiClusterUnitShapeEnum = "OAI_B200_X1"
	DedicatedAiClusterUnitShapeOaiB200X2       DedicatedAiClusterUnitShapeEnum = "OAI_B200_X2"
	DedicatedAiClusterUnitShapeOaiB200X4       DedicatedAiClusterUnitShapeEnum = "OAI_B200_X4"
	DedicatedAiClusterUnitShapeOaiB200X8       DedicatedAiClusterUnitShapeEnum = "OAI_B200_X8"
	DedicatedAiClusterUnitShapeSbB200X1        DedicatedAiClusterUnitShapeEnum = "SB_B200_X1"
)

var mappingDedicatedAiClusterUnitShapeEnum = map[string]DedicatedAiClusterUnitShapeEnum{
	"LARGE_COHERE":       DedicatedAiClusterUnitShapeLargeCohere,
	"LARGE_COHERE_V2":    DedicatedAiClusterUnitShapeLargeCohereV2,
	"SMALL_COHERE":       DedicatedAiClusterUnitShapeSmallCohere,
	"SMALL_COHERE_V2":    DedicatedAiClusterUnitShapeSmallCohereV2,
	"SMALL_COHERE_4":     DedicatedAiClusterUnitShapeSmallCohere4,
	"EMBED_COHERE":       DedicatedAiClusterUnitShapeEmbedCohere,
	"LLAMA2_70":          DedicatedAiClusterUnitShapeLlama270,
	"LARGE_GENERIC":      DedicatedAiClusterUnitShapeLargeGeneric,
	"LARGE_COHERE_V2_2":  DedicatedAiClusterUnitShapeLargeCohereV22,
	"LARGE_GENERIC_4":    DedicatedAiClusterUnitShapeLargeGeneric4,
	"SMALL_GENERIC_V2":   DedicatedAiClusterUnitShapeSmallGenericV2,
	"LARGE_GENERIC_2":    DedicatedAiClusterUnitShapeLargeGeneric2,
	"LARGE_GENERIC_V2":   DedicatedAiClusterUnitShapeLargeGenericV2,
	"LARGE_GENERIC_V3":   DedicatedAiClusterUnitShapeLargeGenericV3,
	"LARGE_GENERIC_V4":   DedicatedAiClusterUnitShapeLargeGenericV4,
	"LARGE_GENERIC_V5":   DedicatedAiClusterUnitShapeLargeGenericV5,
	"COHERE_H100_X1":     DedicatedAiClusterUnitShapeCohereH100X1,
	"COHERE_A100_80G_X1": DedicatedAiClusterUnitShapeCohereA10080gX1,
	"COHERE_A100_40G_X1": DedicatedAiClusterUnitShapeCohereA10040gX1,
	"COHERE_A10_X1":      DedicatedAiClusterUnitShapeCohereA10X1,
	"LARGE_COHERE_V3":    DedicatedAiClusterUnitShapeLargeCohereV3,
	"RERANK_COHERE":      DedicatedAiClusterUnitShapeRerankCohere,
	"SMALL_GENERIC_V1":   DedicatedAiClusterUnitShapeSmallGenericV1,
	"MEDIUM_GENERIC_V1":  DedicatedAiClusterUnitShapeMediumGenericV1,
	"LARGE_GENERIC_V1":   DedicatedAiClusterUnitShapeLargeGenericV1,
	"A10_X1":             DedicatedAiClusterUnitShapeA10X1,
	"A10_X2":             DedicatedAiClusterUnitShapeA10X2,
	"A10_X4":             DedicatedAiClusterUnitShapeA10X4,
	"A100_40G_X1":        DedicatedAiClusterUnitShapeA10040gX1,
	"A100_40G_X2":        DedicatedAiClusterUnitShapeA10040gX2,
	"A100_40G_X4":        DedicatedAiClusterUnitShapeA10040gX4,
	"A100_40G_X8":        DedicatedAiClusterUnitShapeA10040gX8,
	"A100_80G_X1":        DedicatedAiClusterUnitShapeA10080gX1,
	"A100_80G_X2":        DedicatedAiClusterUnitShapeA10080gX2,
	"A100_80G_X4":        DedicatedAiClusterUnitShapeA10080gX4,
	"A100_80G_X8":        DedicatedAiClusterUnitShapeA10080gX8,
	"H100_X1":            DedicatedAiClusterUnitShapeH100X1,
	"H100_X2":            DedicatedAiClusterUnitShapeH100X2,
	"H100_X4":            DedicatedAiClusterUnitShapeH100X4,
	"H100_X8":            DedicatedAiClusterUnitShapeH100X8,
	"H200_X1":            DedicatedAiClusterUnitShapeH200X1,
	"H200_X2":            DedicatedAiClusterUnitShapeH200X2,
	"H200_X4":            DedicatedAiClusterUnitShapeH200X4,
	"H200_X8":            DedicatedAiClusterUnitShapeH200X8,
	"OAI_A10_X2":         DedicatedAiClusterUnitShapeOaiA10X2,
	"OAI_H100_X1":        DedicatedAiClusterUnitShapeOaiH100X1,
	"OAI_H100_X2":        DedicatedAiClusterUnitShapeOaiH100X2,
	"OAI_H200_X1":        DedicatedAiClusterUnitShapeOaiH200X1,
	"OAI_A100_80G_X1":    DedicatedAiClusterUnitShapeOaiA10080gX1,
	"OAI_A100_80G_X2":    DedicatedAiClusterUnitShapeOaiA10080gX2,
	"OAI_A100_40G_X1":    DedicatedAiClusterUnitShapeOaiA10040gX1,
	"OAI_A100_40G_X4":    DedicatedAiClusterUnitShapeOaiA10040gX4,
	"B200_X1":            DedicatedAiClusterUnitShapeB200X1,
	"B200_X2":            DedicatedAiClusterUnitShapeB200X2,
	"B200_X4":            DedicatedAiClusterUnitShapeB200X4,
	"B200_X8":            DedicatedAiClusterUnitShapeB200X8,
	"OAI_B200_X1":        DedicatedAiClusterUnitShapeOaiB200X1,
	"OAI_B200_X2":        DedicatedAiClusterUnitShapeOaiB200X2,
	"OAI_B200_X4":        DedicatedAiClusterUnitShapeOaiB200X4,
	"OAI_B200_X8":        DedicatedAiClusterUnitShapeOaiB200X8,
	"SB_B200_X1":         DedicatedAiClusterUnitShapeSbB200X1,
}

var mappingDedicatedAiClusterUnitShapeEnumLowerCase = map[string]DedicatedAiClusterUnitShapeEnum{
	"large_cohere":       DedicatedAiClusterUnitShapeLargeCohere,
	"large_cohere_v2":    DedicatedAiClusterUnitShapeLargeCohereV2,
	"small_cohere":       DedicatedAiClusterUnitShapeSmallCohere,
	"small_cohere_v2":    DedicatedAiClusterUnitShapeSmallCohereV2,
	"small_cohere_4":     DedicatedAiClusterUnitShapeSmallCohere4,
	"embed_cohere":       DedicatedAiClusterUnitShapeEmbedCohere,
	"llama2_70":          DedicatedAiClusterUnitShapeLlama270,
	"large_generic":      DedicatedAiClusterUnitShapeLargeGeneric,
	"large_cohere_v2_2":  DedicatedAiClusterUnitShapeLargeCohereV22,
	"large_generic_4":    DedicatedAiClusterUnitShapeLargeGeneric4,
	"small_generic_v2":   DedicatedAiClusterUnitShapeSmallGenericV2,
	"large_generic_2":    DedicatedAiClusterUnitShapeLargeGeneric2,
	"large_generic_v2":   DedicatedAiClusterUnitShapeLargeGenericV2,
	"large_generic_v3":   DedicatedAiClusterUnitShapeLargeGenericV3,
	"large_generic_v4":   DedicatedAiClusterUnitShapeLargeGenericV4,
	"large_generic_v5":   DedicatedAiClusterUnitShapeLargeGenericV5,
	"cohere_h100_x1":     DedicatedAiClusterUnitShapeCohereH100X1,
	"cohere_a100_80g_x1": DedicatedAiClusterUnitShapeCohereA10080gX1,
	"cohere_a100_40g_x1": DedicatedAiClusterUnitShapeCohereA10040gX1,
	"cohere_a10_x1":      DedicatedAiClusterUnitShapeCohereA10X1,
	"large_cohere_v3":    DedicatedAiClusterUnitShapeLargeCohereV3,
	"rerank_cohere":      DedicatedAiClusterUnitShapeRerankCohere,
	"small_generic_v1":   DedicatedAiClusterUnitShapeSmallGenericV1,
	"medium_generic_v1":  DedicatedAiClusterUnitShapeMediumGenericV1,
	"large_generic_v1":   DedicatedAiClusterUnitShapeLargeGenericV1,
	"a10_x1":             DedicatedAiClusterUnitShapeA10X1,
	"a10_x2":             DedicatedAiClusterUnitShapeA10X2,
	"a10_x4":             DedicatedAiClusterUnitShapeA10X4,
	"a100_40g_x1":        DedicatedAiClusterUnitShapeA10040gX1,
	"a100_40g_x2":        DedicatedAiClusterUnitShapeA10040gX2,
	"a100_40g_x4":        DedicatedAiClusterUnitShapeA10040gX4,
	"a100_40g_x8":        DedicatedAiClusterUnitShapeA10040gX8,
	"a100_80g_x1":        DedicatedAiClusterUnitShapeA10080gX1,
	"a100_80g_x2":        DedicatedAiClusterUnitShapeA10080gX2,
	"a100_80g_x4":        DedicatedAiClusterUnitShapeA10080gX4,
	"a100_80g_x8":        DedicatedAiClusterUnitShapeA10080gX8,
	"h100_x1":            DedicatedAiClusterUnitShapeH100X1,
	"h100_x2":            DedicatedAiClusterUnitShapeH100X2,
	"h100_x4":            DedicatedAiClusterUnitShapeH100X4,
	"h100_x8":            DedicatedAiClusterUnitShapeH100X8,
	"h200_x1":            DedicatedAiClusterUnitShapeH200X1,
	"h200_x2":            DedicatedAiClusterUnitShapeH200X2,
	"h200_x4":            DedicatedAiClusterUnitShapeH200X4,
	"h200_x8":            DedicatedAiClusterUnitShapeH200X8,
	"oai_a10_x2":         DedicatedAiClusterUnitShapeOaiA10X2,
	"oai_h100_x1":        DedicatedAiClusterUnitShapeOaiH100X1,
	"oai_h100_x2":        DedicatedAiClusterUnitShapeOaiH100X2,
	"oai_h200_x1":        DedicatedAiClusterUnitShapeOaiH200X1,
	"oai_a100_80g_x1":    DedicatedAiClusterUnitShapeOaiA10080gX1,
	"oai_a100_80g_x2":    DedicatedAiClusterUnitShapeOaiA10080gX2,
	"oai_a100_40g_x1":    DedicatedAiClusterUnitShapeOaiA10040gX1,
	"oai_a100_40g_x4":    DedicatedAiClusterUnitShapeOaiA10040gX4,
	"b200_x1":            DedicatedAiClusterUnitShapeB200X1,
	"b200_x2":            DedicatedAiClusterUnitShapeB200X2,
	"b200_x4":            DedicatedAiClusterUnitShapeB200X4,
	"b200_x8":            DedicatedAiClusterUnitShapeB200X8,
	"oai_b200_x1":        DedicatedAiClusterUnitShapeOaiB200X1,
	"oai_b200_x2":        DedicatedAiClusterUnitShapeOaiB200X2,
	"oai_b200_x4":        DedicatedAiClusterUnitShapeOaiB200X4,
	"oai_b200_x8":        DedicatedAiClusterUnitShapeOaiB200X8,
	"sb_b200_x1":         DedicatedAiClusterUnitShapeSbB200X1,
}

// GetDedicatedAiClusterUnitShapeEnumValues Enumerates the set of values for DedicatedAiClusterUnitShapeEnum
func GetDedicatedAiClusterUnitShapeEnumValues() []DedicatedAiClusterUnitShapeEnum {
	values := make([]DedicatedAiClusterUnitShapeEnum, 0)
	for _, v := range mappingDedicatedAiClusterUnitShapeEnum {
		values = append(values, v)
	}
	return values
}

// GetDedicatedAiClusterUnitShapeEnumStringValues Enumerates the set of values in String for DedicatedAiClusterUnitShapeEnum
func GetDedicatedAiClusterUnitShapeEnumStringValues() []string {
	return []string{
		"LARGE_COHERE",
		"LARGE_COHERE_V2",
		"SMALL_COHERE",
		"SMALL_COHERE_V2",
		"SMALL_COHERE_4",
		"EMBED_COHERE",
		"LLAMA2_70",
		"LARGE_GENERIC",
		"LARGE_COHERE_V2_2",
		"LARGE_GENERIC_4",
		"SMALL_GENERIC_V2",
		"LARGE_GENERIC_2",
		"LARGE_GENERIC_V2",
		"LARGE_GENERIC_V3",
		"LARGE_GENERIC_V4",
		"LARGE_GENERIC_V5",
		"COHERE_H100_X1",
		"COHERE_A100_80G_X1",
		"COHERE_A100_40G_X1",
		"COHERE_A10_X1",
		"LARGE_COHERE_V3",
		"RERANK_COHERE",
		"SMALL_GENERIC_V1",
		"MEDIUM_GENERIC_V1",
		"LARGE_GENERIC_V1",
		"A10_X1",
		"A10_X2",
		"A10_X4",
		"A100_40G_X1",
		"A100_40G_X2",
		"A100_40G_X4",
		"A100_40G_X8",
		"A100_80G_X1",
		"A100_80G_X2",
		"A100_80G_X4",
		"A100_80G_X8",
		"H100_X1",
		"H100_X2",
		"H100_X4",
		"H100_X8",
		"H200_X1",
		"H200_X2",
		"H200_X4",
		"H200_X8",
		"OAI_A10_X2",
		"OAI_H100_X1",
		"OAI_H100_X2",
		"OAI_H200_X1",
		"OAI_A100_80G_X1",
		"OAI_A100_80G_X2",
		"OAI_A100_40G_X1",
		"OAI_A100_40G_X4",
		"B200_X1",
		"B200_X2",
		"B200_X4",
		"B200_X8",
		"OAI_B200_X1",
		"OAI_B200_X2",
		"OAI_B200_X4",
		"OAI_B200_X8",
		"SB_B200_X1",
	}
}

// GetMappingDedicatedAiClusterUnitShapeEnum performs case Insensitive comparison on enum value and return the desired enum
func GetMappingDedicatedAiClusterUnitShapeEnum(val string) (DedicatedAiClusterUnitShapeEnum, bool) {
	enum, ok := mappingDedicatedAiClusterUnitShapeEnumLowerCase[strings.ToLower(val)]
	return enum, ok
}
