mirror of
https://github.com/mudler/LocalAI.git
synced 2024-06-07 19:40:48 +00:00
81 lines
2.1 KiB
Go
81 lines
2.1 KiB
Go
|
package http
|
||
|
|
||
|
import (
|
||
|
"embed"
|
||
|
"fmt"
|
||
|
"html/template"
|
||
|
"net/http"
|
||
|
|
||
|
"github.com/Masterminds/sprig/v3"
|
||
|
"github.com/go-skynet/LocalAI/core/config"
|
||
|
"github.com/go-skynet/LocalAI/core/schema"
|
||
|
"github.com/go-skynet/LocalAI/internal"
|
||
|
"github.com/go-skynet/LocalAI/pkg/model"
|
||
|
"github.com/gofiber/fiber/v2"
|
||
|
fiberhtml "github.com/gofiber/template/html/v2"
|
||
|
"github.com/russross/blackfriday"
|
||
|
)
|
||
|
|
||
|
//go:embed views/*
|
||
|
var viewsfs embed.FS
|
||
|
|
||
|
func notFoundHandler(c *fiber.Ctx) error {
|
||
|
// Check if the request accepts JSON
|
||
|
if string(c.Context().Request.Header.ContentType()) == "application/json" || len(c.Accepts("html")) == 0 {
|
||
|
// The client expects a JSON response
|
||
|
c.Status(fiber.StatusNotFound).JSON(schema.ErrorResponse{
|
||
|
Error: &schema.APIError{Message: "Resource not found", Code: fiber.StatusNotFound},
|
||
|
})
|
||
|
} else {
|
||
|
// The client expects an HTML response
|
||
|
c.Status(fiber.StatusNotFound).Render("views/404", fiber.Map{})
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func welcomeRoute(
|
||
|
app *fiber.App,
|
||
|
cl *config.BackendConfigLoader,
|
||
|
ml *model.ModelLoader,
|
||
|
appConfig *config.ApplicationConfig,
|
||
|
auth func(*fiber.Ctx) error,
|
||
|
) {
|
||
|
if appConfig.DisableWelcomePage {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
models, _ := ml.ListModels()
|
||
|
backendConfigs := cl.GetAllBackendConfigs()
|
||
|
|
||
|
app.Get("/", auth, func(c *fiber.Ctx) error {
|
||
|
summary := fiber.Map{
|
||
|
"Title": "LocalAI API - " + internal.PrintableVersion(),
|
||
|
"Version": internal.PrintableVersion(),
|
||
|
"Models": models,
|
||
|
"ModelsConfig": backendConfigs,
|
||
|
"ApplicationConfig": appConfig,
|
||
|
}
|
||
|
|
||
|
if string(c.Context().Request.Header.ContentType()) == "application/json" || len(c.Accepts("html")) == 0 {
|
||
|
// The client expects a JSON response
|
||
|
return c.Status(fiber.StatusOK).JSON(summary)
|
||
|
} else {
|
||
|
// Render index
|
||
|
return c.Render("views/index", summary)
|
||
|
}
|
||
|
})
|
||
|
|
||
|
}
|
||
|
|
||
|
func renderEngine() *fiberhtml.Engine {
|
||
|
engine := fiberhtml.NewFileSystem(http.FS(viewsfs), ".html")
|
||
|
engine.AddFuncMap(sprig.FuncMap())
|
||
|
engine.AddFunc("MDToHTML", markDowner)
|
||
|
return engine
|
||
|
}
|
||
|
|
||
|
func markDowner(args ...interface{}) template.HTML {
|
||
|
s := blackfriday.MarkdownCommon([]byte(fmt.Sprintf("%s", args...)))
|
||
|
return template.HTML(s)
|
||
|
}
|