package main import ( "fmt" "log" "os" "strconv" "gongzheng_minimax/handler" "gongzheng_minimax/service" "github.com/gin-gonic/gin" "github.com/joho/godotenv" ) func main() { // Load .env file if err := godotenv.Load(); err != nil { log.Printf("Warning: .env file not found: %v", err) } // Initialize LLM service llmService := service.NewLLMService(service.Config{ LLMApiURL: os.Getenv("LLM_API_URL"), LLMApiKey: os.Getenv("LLM_API_KEY"), MiniMaxApiKey: os.Getenv("MiniMaxApiKey"), MiniMaxApiURL: os.Getenv("MiniMaxApiURL"), FILE_URL: os.Getenv("FILE_URL"), LLMOurApiUrl: os.Getenv("LLMOurApiUrl"), LLMOurApiKey: os.Getenv("LLMOurApiKey"), }) fmt.Println("config: ", llmService) // Get token configuration from environment variables sigExp, err := strconv.Atoi(os.Getenv("SIG_EXP")) if err != nil { sigExp = 3600 // Default to 1 hour if not set } // Initialize token service tokenService := service.NewTokenService(service.TokenConfig{ AppID: os.Getenv("APP_ID"), AppKey: os.Getenv("APP_KEY"), SigExp: sigExp, }) // Initialize handlers llmHandler := handler.NewLLMHandler(llmService) tokenHandler := handler.NewTokenHandler(tokenService) // Create Gin router router := gin.Default() // Add CORS middleware router.Use(func(c *gin.Context) { c.Writer.Header().Set("Access-Control-Allow-Origin", "*") c.Writer.Header().Set("Access-Control-Allow-Credentials", "true") c.Writer.Header().Set("Access-Control-Allow-Headers", "Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, accept, origin, Cache-Control, X-Requested-With") c.Writer.Header().Set("Access-Control-Allow-Methods", "POST, OPTIONS, GET, PUT, DELETE") if c.Request.Method == "OPTIONS" { c.AbortWithStatus(204) return } c.Next() }) // Define routes router.POST("/chat", llmHandler.Chat) router.POST("/chat-messages/:task_id/stop", llmHandler.StopConversation) router.DELETE("/conversations/:conversation_id", llmHandler.DeleteConversation) router.POST("/speech/synthesize", llmHandler.SynthesizeSpeech) router.GET("/stream-text", llmHandler.StreamText) router.POST("/token", tokenHandler.GenerateToken) // Define routes router.GET("/", func(c *gin.Context) { c.JSON(200, gin.H{ "status": "ok", "message": "Service is healthy", }) }) // Define routes router.GET("/health", func(c *gin.Context) { c.JSON(200, gin.H{ "status": "ok", "message": "Service is healthy", }) }) // Serve static files router.Static("/static", "./static") router.Static("/audio", "./audio") // 添加音频文件访问服务 // Get host and port from environment variables host := os.Getenv("HOST") if host == "" { host = "0.0.0.0" // Default to all interfaces } port := os.Getenv("PORT") if port == "" { port = "80" } // Start server serverAddr := host + ":" + port log.Printf("Server starting on %s", serverAddr) if err := router.Run(serverAddr); err != nil { log.Fatalf("Failed to start server: %v", err) } }