Spaces:
Runtime error
Runtime error
package main | |
import ( | |
"log" | |
"net/http" | |
"os" | |
"strings" | |
"github.com/gin-gonic/gin" | |
"github.com/linweiyuan/go-chatgpt-api/api/chatgpt" | |
"github.com/linweiyuan/go-chatgpt-api/api/platform" | |
_ "github.com/linweiyuan/go-chatgpt-api/env" | |
"github.com/linweiyuan/go-chatgpt-api/middleware" | |
) | |
func init() { | |
gin.ForceConsoleColor() | |
gin.SetMode(gin.ReleaseMode) | |
} | |
func main() { | |
router := gin.Default() | |
router.Use(middleware.CORSMiddleware()) | |
router.Use(middleware.CheckHeaderMiddleware()) | |
setupChatGPTAPIs(router) | |
setupPlatformAPIs(router) | |
router.NoRoute(handleFallbackRoute) | |
port := os.Getenv("GO_CHATGPT_API_PORT") | |
if port == "" { | |
port = "8080" | |
} | |
err := router.Run(":" + port) | |
if err != nil { | |
log.Fatal("Failed to start server: " + err.Error()) | |
} | |
} | |
func setupChatGPTAPIs(router *gin.Engine) { | |
chatgptGroup := router.Group("/chatgpt") | |
{ | |
chatgptGroup.POST("/login", chatgpt.Login) | |
conversationsGroup := chatgptGroup.Group("/conversations") | |
{ | |
conversationsGroup.GET("", chatgpt.GetConversations) | |
// PATCH is official method, POST is added for Java support | |
conversationsGroup.PATCH("", chatgpt.ClearConversations) | |
conversationsGroup.POST("", chatgpt.ClearConversations) | |
} | |
conversationGroup := chatgptGroup.Group("/conversation") | |
{ | |
conversationGroup.POST("", chatgpt.CreateConversation) | |
conversationGroup.POST("/gen_title/:id", chatgpt.GenerateTitle) | |
conversationGroup.GET("/:id", chatgpt.GetConversation) | |
// rename or delete conversation use a same API with different parameters | |
conversationGroup.PATCH("/:id", chatgpt.UpdateConversation) | |
conversationGroup.POST("/:id", chatgpt.UpdateConversation) | |
conversationGroup.POST("/message_feedback", chatgpt.FeedbackMessage) | |
} | |
// misc | |
chatgptGroup.GET("/models", chatgpt.GetModels) | |
chatgptGroup.GET("/accounts/check", chatgpt.GetAccountCheck) | |
} | |
} | |
func setupPlatformAPIs(router *gin.Engine) { | |
platformGroup := router.Group("/platform") | |
{ | |
platformGroup.POST("/login", platform.Login) | |
apiGroup := platformGroup.Group("/v1") | |
{ | |
apiGroup.GET("/models", platform.ListModels) | |
apiGroup.GET("/models/:model", platform.RetrieveModel) | |
apiGroup.POST("/completions", platform.CreateCompletions) | |
apiGroup.POST("/chat/completions", platform.CreateChatCompletions) | |
apiGroup.POST("/edits", platform.CreateEdit) | |
apiGroup.POST("/images/generations", platform.CreateImage) | |
apiGroup.POST("/embeddings", platform.CreateEmbeddings) | |
apiGroup.GET("/files", platform.ListFiles) | |
apiGroup.POST("/moderations", platform.CreateModeration) | |
} | |
dashboardGroup := platformGroup.Group("/dashboard") | |
{ | |
billingGroup := dashboardGroup.Group("/billing") | |
{ | |
billingGroup.GET("/credit_grants", platform.GetCreditGrants) | |
billingGroup.GET("/subscription", platform.GetSubscription) | |
} | |
userGroup := dashboardGroup.Group("/user") | |
{ | |
userGroup.GET("/api_keys", platform.GetApiKeys) | |
} | |
} | |
} | |
} | |
func handleFallbackRoute(c *gin.Context) { | |
path := c.Request.URL.Path | |
if strings.HasPrefix(path, "/chatgpt") { | |
trimmedPath := strings.TrimPrefix(path, "/chatgpt") | |
c.Request.URL.Path = trimmedPath | |
chatgpt.Fallback(c) | |
} else { | |
c.JSON(http.StatusNotFound, gin.H{"message": "Route not found"}) | |
} | |
} | |