diff --git a/apiv2/localai_fiber.go b/apiv2/localai_fiber.go new file mode 100644 index 00000000..4fb97a30 --- /dev/null +++ b/apiv2/localai_fiber.go @@ -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 +} diff --git a/apiv2/localai_nethttp.go b/apiv2/localai_nethttp.go index 1eae95cf..1a624602 100644 --- a/apiv2/localai_nethttp.go +++ b/apiv2/localai_nethttp.go @@ -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 +// } diff --git a/main.go b/main.go index 15356b09..3589970d 100644 --- a/main.go +++ b/main.go @@ -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")) }, } diff --git a/openai-openapi/config.yaml b/openai-openapi/config.yaml index 07be6edf..5c47a2ff 100644 --- a/openai-openapi/config.yaml +++ b/openai-openapi/config.yaml @@ -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: