mirror of
https://github.com/mudler/LocalAI.git
synced 2024-06-07 19:40:48 +00:00
255748bcba
This PR specifically introduces a `core` folder and moves the following packages over, without any other changes: - `api/backend` - `api/config` - `api/options` - `api/schema` Once this is merged and we confirm there's no regressions, I can migrate over the remaining changes piece by piece to split up application startup, backend services, http, and mqtt as was the goal of the earlier PRs!
70 lines
1.8 KiB
Go
70 lines
1.8 KiB
Go
package openai
|
|
|
|
import (
|
|
"regexp"
|
|
|
|
config "github.com/go-skynet/LocalAI/core/config"
|
|
"github.com/go-skynet/LocalAI/core/schema"
|
|
model "github.com/go-skynet/LocalAI/pkg/model"
|
|
"github.com/gofiber/fiber/v2"
|
|
)
|
|
|
|
func ListModelsEndpoint(loader *model.ModelLoader, cm *config.ConfigLoader) func(ctx *fiber.Ctx) error {
|
|
return func(c *fiber.Ctx) error {
|
|
models, err := loader.ListModels()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
var mm map[string]interface{} = map[string]interface{}{}
|
|
|
|
dataModels := []schema.OpenAIModel{}
|
|
|
|
var filterFn func(name string) bool
|
|
filter := c.Query("filter")
|
|
|
|
// If filter is not specified, do not filter the list by model name
|
|
if filter == "" {
|
|
filterFn = func(_ string) bool { return true }
|
|
} else {
|
|
// If filter _IS_ specified, we compile it to a regex which is used to create the filterFn
|
|
rxp, err := regexp.Compile(filter)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
filterFn = func(name string) bool {
|
|
return rxp.MatchString(name)
|
|
}
|
|
}
|
|
|
|
// By default, exclude any loose files that are already referenced by a configuration file.
|
|
excludeConfigured := c.QueryBool("excludeConfigured", true)
|
|
|
|
// Start with the known configurations
|
|
for _, c := range cm.GetAllConfigs() {
|
|
if excludeConfigured {
|
|
mm[c.Model] = nil
|
|
}
|
|
|
|
if filterFn(c.Name) {
|
|
dataModels = append(dataModels, schema.OpenAIModel{ID: c.Name, Object: "model"})
|
|
}
|
|
}
|
|
|
|
// Then iterate through the loose files:
|
|
for _, m := range models {
|
|
// And only adds them if they shouldn't be skipped.
|
|
if _, exists := mm[m]; !exists && filterFn(m) {
|
|
dataModels = append(dataModels, schema.OpenAIModel{ID: m, Object: "model"})
|
|
}
|
|
}
|
|
|
|
return c.JSON(struct {
|
|
Object string `json:"object"`
|
|
Data []schema.OpenAIModel `json:"data"`
|
|
}{
|
|
Object: "list",
|
|
Data: dataModels,
|
|
})
|
|
}
|
|
}
|