package localai import ( "github.com/labstack/echo/v4" "github.com/mudler/LocalAI/core/backend" "github.com/mudler/LocalAI/core/config" "github.com/mudler/LocalAI/core/schema" "github.com/mudler/LocalAI/pkg/model" "github.com/mudler/LocalAI/pkg/store" ) func StoresSetEndpoint(sl *model.ModelLoader, appConfig *config.ApplicationConfig) echo.HandlerFunc { return func(c echo.Context) error { input := new(schema.StoresSet) if err := c.Bind(input); err != nil { return err } sb, err := backend.StoreBackend(sl, appConfig, input.Store, input.Backend) if err != nil { return err } vals := make([][]byte, len(input.Values)) for i, v := range input.Values { vals[i] = []byte(v) } err = store.SetCols(c.Request().Context(), sb, input.Keys, vals) if err != nil { return err } return c.NoContent(200) } } func StoresDeleteEndpoint(sl *model.ModelLoader, appConfig *config.ApplicationConfig) echo.HandlerFunc { return func(c echo.Context) error { input := new(schema.StoresDelete) if err := c.Bind(input); err != nil { return err } sb, err := backend.StoreBackend(sl, appConfig, input.Store, input.Backend) if err != nil { return err } if err := store.DeleteCols(c.Request().Context(), sb, input.Keys); err != nil { return err } return c.NoContent(200) } } func StoresGetEndpoint(sl *model.ModelLoader, appConfig *config.ApplicationConfig) echo.HandlerFunc { return func(c echo.Context) error { input := new(schema.StoresGet) if err := c.Bind(input); err != nil { return err } sb, err := backend.StoreBackend(sl, appConfig, input.Store, input.Backend) if err != nil { return err } keys, vals, err := store.GetCols(c.Request().Context(), sb, input.Keys) if err != nil { return err } res := schema.StoresGetResponse{ Keys: keys, Values: make([]string, len(vals)), } for i, v := range vals { res.Values[i] = string(v) } return c.JSON(200, res) } } func StoresFindEndpoint(sl *model.ModelLoader, appConfig *config.ApplicationConfig) echo.HandlerFunc { return func(c echo.Context) error { input := new(schema.StoresFind) if err := c.Bind(input); err != nil { return err } sb, err := backend.StoreBackend(sl, appConfig, input.Store, input.Backend) if err != nil { return err } keys, vals, similarities, err := store.Find(c.Request().Context(), sb, input.Key, input.Topk) if err != nil { return err } res := schema.StoresFindResponse{ Keys: keys, Values: make([]string, len(vals)), Similarities: similarities, } for i, v := range vals { res.Values[i] = string(v) } return c.JSON(200, res) } }