GPT-backend/main.go
2024-10-10 16:26:51 +02:00

105 lines
1.8 KiB
Go

package main
import (
"flag"
"fmt"
"log"
"os"
"strings"
"github.com/gin-contrib/cors"
"github.com/gin-gonic/gin"
)
func read_config() string {
f, ferr := os.ReadFile(config)
if ferr != nil {
log.Fatalf("failed to read config file: %v", ferr)
}
tmp_srv := strings.TrimSpace(string(f))
tmp_srv = strings.ReplaceAll(tmp_srv, "\r", "")
srvs := []string{}
/// delete comment rows
for _, server := range strings.Split(tmp_srv, "\n") {
if strings.HasPrefix(server, "#") {
continue
} else if server == "" {
continue
} else {
server = strings.ReplaceAll(server, " ", "")
srvs = append(srvs, server)
}
}
var server_list string
if len(srvs) > 1 {
server_list = strings.Join(srvs, ",")
} else {
server_list = srvs[0]
}
if debug {
fmt.Printf("config: '%s'\n", server_list)
}
return server_list
}
func main() {
var server_list string
flag.Usage = usage
flag.Parse()
if version {
fmt.Printf("%s: %s\n", os.Args[0], _Version)
os.Exit(0)
}
if servers == "" && config == "" {
fmt.Println("no servers specified")
usage()
}
hosts := Hosts{}
if config != "" {
server_list = read_config()
} else {
server_list = servers
}
error := hosts.Init(server_list)
if error != nil {
panic(error)
}
r := gin.Default()
r.Use(cors.Default())
r.GET("/api/tags", func(c *gin.Context) {
models, err := get_ollama_tags(hosts)
if err != nil {
panic(err)
}
c.JSON(200, models)
})
sapp := r.Group("/_app")
sapp.Static("/", "./static/_app")
static := r.Group("/static")
static.Static("/", "./static/static")
r.StaticFile("/", "./static/index.html")
r.StaticFile("/favicon.png", "./static/favicon.png")
r.ForwardedByClientIP = true
fmt.Println("Starting server on port " + port)
r.Run(":" + port)
fmt.Print("END")
}