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
}