package main import ( "os" "github.com/gin-gonic/gin" "github.com/sirupsen/logrus" ) func main() { logrus.SetFormatter(&logrus.TextFormatter{FullTimestamp: true}) logrus.SetLevel(logrus.InfoLevel) if err := loadConfig("config.yaml"); err != nil { logrus.Fatalf("Failed to load config.yaml: %v", err) } logrus.Infof("Loaded config: %+v", appConfig) visitDB := NewVisitDB() if err := loadUITemplate("ui.html"); err != nil { logrus.Fatalf("Failed to load ui.html: %v", err) } var llm LLMClientAPI = NewLLMClient( os.Getenv("OPENAI_API_KEY"), os.Getenv("OPENAI_BASE_URL"), os.Getenv("OPENAI_MODEL"), ) chatService := NewChatService(llm, &visitDB) r := gin.Default() r.GET("/", func(c *gin.Context) { c.Status(200) if err := uiTemplate.Execute(c.Writer, nil); err != nil { logrus.Errorf("Failed to execute ui.html template: %v", err) } }) r.GET("/health", func(c *gin.Context) { c.Status(200) c.JSON(200, gin.H{"status": "ok"}) }) r.POST("/chat", chatService.HandleChat) if err := loadDBEditTemplate("ui_dbedit.html"); err != nil { logrus.Fatalf("Failed to load ui_dbedit.html: %v", err) } r.GET("/admin", func(c *gin.Context) { c.Status(200) if err := uiDBEditTemplate.Execute(c.Writer, nil); err != nil { logrus.Errorf("Failed to execute ui_dbedit.html template: %v", err) } }) r.GET("/db.yaml", func(c *gin.Context) { c.File("db.yaml") }) r.Run(":8080") }