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.Contains(server, "#") { 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") }