func()

in cli/azd/extensions/microsoft.azd.ai.builder/internal/pkg/azure/ai/model_catalog.go [112:173]


func (c *ModelCatalogService) ListFilteredModels(
	ctx context.Context,
	allModels map[string]*AiModel,
	options *FilterOptions,
) []*AiModel {
	if options == nil {
		options = &FilterOptions{}
	}

	filteredModels := []*AiModel{}

	for _, model := range allModels {
		// Initialize flags to true if the corresponding filter is not provided.
		isCapabilityMatch := len(options.Capabilities) == 0
		isLocationMatch := len(options.Locations) == 0
		isStatusMatch := len(options.Statuses) == 0
		isFormatMatch := len(options.Formats) == 0
		isKindMatch := len(options.Kinds) == 0

		for _, location := range model.Locations {
			if !isCapabilityMatch && len(options.Capabilities) > 0 {
				for modelCapability := range location.Model.Model.Capabilities {
					if slices.Contains(options.Capabilities, modelCapability) {
						isCapabilityMatch = true
						break
					}
				}
			}

			if !isLocationMatch && len(options.Locations) > 0 &&
				slices.Contains(options.Locations, *location.Location.Name) {
				isLocationMatch = true
			}

			if !isStatusMatch && len(options.Statuses) > 0 &&
				slices.Contains(options.Statuses, string(*location.Model.Model.LifecycleStatus)) {
				isStatusMatch = true
			}

			if !isFormatMatch && len(options.Formats) > 0 &&
				slices.Contains(options.Formats, *location.Model.Model.Format) {
				isFormatMatch = true
			}

			if !isKindMatch && len(options.Kinds) > 0 &&
				slices.Contains(options.Kinds, *location.Model.Kind) {
				isKindMatch = true
			}
		}

		if isLocationMatch && isCapabilityMatch && isFormatMatch && isStatusMatch && isKindMatch {
			filteredModels = append(filteredModels, model)
		}
	}

	// Sort the filtered models by name
	slices.SortFunc(filteredModels, func(a, b *AiModel) int {
		return strings.Compare(a.Name, b.Name)
	})

	return filteredModels
}