93 lines
2.5 KiB
Go
93 lines
2.5 KiB
Go
package main
|
|
|
|
import (
|
|
"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"),
|
|
})
|
|
|
|
// 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)
|
|
|
|
// Serve static files
|
|
router.Static("/static", "./static")
|
|
|
|
// 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 = "8080"
|
|
}
|
|
|
|
// 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)
|
|
}
|
|
}
|