switch to Fiber

This commit is contained in:
Dave Lee 2023-06-12 02:28:31 -04:00
parent f308b6ead9
commit 115766205c
4 changed files with 81 additions and 46 deletions

27
apiv2/localai_fiber.go Normal file
View file

@ -0,0 +1,27 @@
package apiv2
import (
model "github.com/go-skynet/LocalAI/pkg/model"
"github.com/gofiber/fiber/v2"
)
func RegisterNewLocalAIFiberServer(configManager *ConfigManager, loader *model.ModelLoader, app *fiber.App) *LocalAIServer {
engine := NewLocalAIEngine(loader)
localAI := LocalAIServer{
configManager: configManager,
loader: loader,
engine: &engine,
}
v2Group := app.Group("/v2")
var mw []StrictMiddlewareFunc
// Use our validation middleware to check all requests against the
// OpenAPI schema.
// v2Group.Use(middleware.OapiRequestValidator(swagger))
// We now register our petStore above as the handler for the interface
RegisterHandlers(v2Group, NewStrictHandler(&localAI, mw))
return &localAI
}

View file

@ -1,23 +1,23 @@
package apiv2
import (
"net/http"
// import (
// "net/http"
"github.com/go-skynet/LocalAI/pkg/model"
)
// "github.com/go-skynet/LocalAI/pkg/model"
// )
func NewLocalAINetHTTPServer(configManager *ConfigManager, loader *model.ModelLoader, address string) *LocalAIServer {
engine := NewLocalAIEngine(loader)
localAI := LocalAIServer{
configManager: configManager,
loader: loader,
engine: &engine,
}
// func NewLocalAINetHTTPServer(configManager *ConfigManager, loader *model.ModelLoader, address string) *LocalAIServer {
// engine := NewLocalAIEngine(loader)
// localAI := LocalAIServer{
// configManager: configManager,
// loader: loader,
// engine: &engine,
// }
var middlewares []StrictMiddlewareFunc
// var middlewares []StrictMiddlewareFunc
http.Handle("/", Handler(NewStrictHandler(&localAI, middlewares)))
// http.Handle("/", Handler(NewStrictHandler(&localAI, middlewares)))
http.ListenAndServe(address, nil)
return &localAI
}
// http.ListenAndServe(address, nil)
// return &localAI
// }

66
main.go
View file

@ -69,11 +69,17 @@ func main() {
EnvVars: []string{"ADDRESS"},
Value: ":8080",
},
&cli.StringFlag{
Name: "addressv2",
DefaultText: "Bind address for the API server (DEBUG v2 TEST)",
EnvVars: []string{"ADDRESS_V2"},
Value: ":8085",
// &cli.StringFlag{
// Name: "addressv2",
// DefaultText: "Bind address for the API server (DEBUG v2 TEST)",
// EnvVars: []string{"ADDRESS_V2"},
// Value: ":8085",
// },
&cli.BoolFlag{
Name: "exp-v2",
DefaultText: "Enable the experimental v2 API server",
EnvVars: []string{"EXPERIMENTAL_V2"},
Value: true,
},
&cli.StringFlag{
Name: "image-path",
@ -141,30 +147,6 @@ It uses llama.cpp, ggml and gpt4all as backend with golang c bindings.
loader := model.NewModelLoader(ctx.String("models-path"), ctx.String("templates-path"))
if av2 := ctx.String("addressv2"); av2 != "" {
v2ConfigManager := apiv2.NewConfigManager()
registered, cfgErr := v2ConfigManager.LoadConfigDirectory(ctx.String("config-path"))
if cfgErr != nil {
panic("failed to load config directory todo better handler here")
}
for i, reg := range registered {
log.Log().Msgf("%d: %+v", i, reg)
testField, exists := v2ConfigManager.GetConfig(reg)
if exists {
log.Log().Msgf("!! %s: %s", testField.GetRegistration().Endpoint, testField.GetLocalSettings().ModelPath)
}
}
v2Server := apiv2.NewLocalAINetHTTPServer(v2ConfigManager, loader, ctx.String("addressv2"))
log.Log().Msgf("NEW v2 test: %+v", v2Server)
}
app, err := api.App(
api.WithConfigFile(ctx.String("config-file")),
api.WithJSONStringPreload(ctx.String("preload-models")),
@ -186,6 +168,32 @@ It uses llama.cpp, ggml and gpt4all as backend with golang c bindings.
return err
}
// if av2 := ctx.String("addressv2"); av2 != "" {
if ctx.Bool("exp-v2") {
v2ConfigManager := apiv2.NewConfigManager()
registered, cfgErr := v2ConfigManager.LoadConfigDirectory(ctx.String("config-path"))
if cfgErr != nil {
panic("failed to load config directory todo better handler here")
}
for i, reg := range registered {
log.Log().Msgf("%d: %+v", i, reg)
testField, exists := v2ConfigManager.GetConfig(reg)
if exists {
log.Log().Msgf("!! %s: %s", testField.GetRegistration().Endpoint, testField.GetLocalSettings().ModelPath)
}
}
// v2Server := apiv2.NewLocalAINetHTTPServer(v2ConfigManager, loader, ctx.String("addressv2"))
v2Server := apiv2.RegisterNewLocalAIFiberServer(v2ConfigManager, loader, app)
log.Log().Msgf("NEW v2 test: %+v", v2Server)
}
return app.Listen(ctx.String("address"))
},
}

View file

@ -1,7 +1,7 @@
package: apiv2
generate:
models: true
chi-server: true
fiber-server: true
strict-server: true
output: apiv2/localai.gen.go
output-options: