|
package localai |
|
|
|
import ( |
|
"github.com/gofiber/fiber/v2" |
|
"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) func(c *fiber.Ctx) error { |
|
return func(c *fiber.Ctx) error { |
|
input := new(schema.StoresSet) |
|
|
|
if err := c.BodyParser(input); err != nil { |
|
return err |
|
} |
|
|
|
sb, err := backend.StoreBackend(sl, appConfig, input.Store) |
|
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.Context(), sb, input.Keys, vals) |
|
if err != nil { |
|
return err |
|
} |
|
|
|
return c.Send(nil) |
|
} |
|
} |
|
|
|
func StoresDeleteEndpoint(sl *model.ModelLoader, appConfig *config.ApplicationConfig) func(c *fiber.Ctx) error { |
|
return func(c *fiber.Ctx) error { |
|
input := new(schema.StoresDelete) |
|
|
|
if err := c.BodyParser(input); err != nil { |
|
return err |
|
} |
|
|
|
sb, err := backend.StoreBackend(sl, appConfig, input.Store) |
|
if err != nil { |
|
return err |
|
} |
|
|
|
if err := store.DeleteCols(c.Context(), sb, input.Keys); err != nil { |
|
return err |
|
} |
|
|
|
return c.Send(nil) |
|
} |
|
} |
|
|
|
func StoresGetEndpoint(sl *model.ModelLoader, appConfig *config.ApplicationConfig) func(c *fiber.Ctx) error { |
|
return func(c *fiber.Ctx) error { |
|
input := new(schema.StoresGet) |
|
|
|
if err := c.BodyParser(input); err != nil { |
|
return err |
|
} |
|
|
|
sb, err := backend.StoreBackend(sl, appConfig, input.Store) |
|
if err != nil { |
|
return err |
|
} |
|
|
|
keys, vals, err := store.GetCols(c.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(res) |
|
} |
|
} |
|
|
|
func StoresFindEndpoint(sl *model.ModelLoader, appConfig *config.ApplicationConfig) func(c *fiber.Ctx) error { |
|
return func(c *fiber.Ctx) error { |
|
input := new(schema.StoresFind) |
|
|
|
if err := c.BodyParser(input); err != nil { |
|
return err |
|
} |
|
|
|
sb, err := backend.StoreBackend(sl, appConfig, input.Store) |
|
if err != nil { |
|
return err |
|
} |
|
|
|
keys, vals, similarities, err := store.Find(c.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(res) |
|
} |
|
} |
|
|