|
package services |
|
|
|
import ( |
|
"regexp" |
|
|
|
"github.com/mudler/LocalAI/core/config" |
|
"github.com/mudler/LocalAI/pkg/model" |
|
) |
|
|
|
func ListModels(bcl *config.BackendConfigLoader, ml *model.ModelLoader, filter string, excludeConfigured bool) ([]string, error) { |
|
|
|
models, err := ml.ListFilesInModelPath() |
|
if err != nil { |
|
return nil, err |
|
} |
|
|
|
var mm map[string]interface{} = map[string]interface{}{} |
|
|
|
dataModels := []string{} |
|
|
|
var filterFn func(name string) bool |
|
|
|
|
|
if filter == "" { |
|
filterFn = func(_ string) bool { return true } |
|
} else { |
|
|
|
rxp, err := regexp.Compile(filter) |
|
if err != nil { |
|
return nil, err |
|
} |
|
filterFn = func(name string) bool { |
|
return rxp.MatchString(name) |
|
} |
|
} |
|
|
|
|
|
for _, c := range bcl.GetAllBackendConfigs() { |
|
if excludeConfigured { |
|
mm[c.Model] = nil |
|
} |
|
|
|
if filterFn(c.Name) { |
|
dataModels = append(dataModels, c.Name) |
|
} |
|
} |
|
|
|
|
|
for _, m := range models { |
|
|
|
if _, exists := mm[m]; !exists && filterFn(m) { |
|
dataModels = append(dataModels, m) |
|
} |
|
} |
|
|
|
return dataModels, nil |
|
} |
|
|