package router import ( "github.com/gin-gonic/gin" "one-api/controller" "one-api/middleware" "one-api/relay" ) func SetRelayRouter(router *gin.Engine) { router.Use(middleware.CORS()) // https://platform.openai.com/docs/api-reference/introduction modelsRouter := router.Group("/v1/models") modelsRouter.Use(middleware.TokenAuth()) { modelsRouter.GET("", controller.ListModels) modelsRouter.GET("/:model", controller.RetrieveModel) } playgroundRouter := router.Group("/pg") playgroundRouter.Use(middleware.UserAuth()) { playgroundRouter.POST("/chat/completions", controller.Playground) } relayV1Router := router.Group("/v1") relayV1Router.Use(middleware.TokenAuth()) { // WebSocket 路由 wsRouter := relayV1Router.Group("") wsRouter.Use(middleware.Distribute()) wsRouter.GET("/realtime", controller.WssRelay) } { //http router httpRouter := relayV1Router.Group("") httpRouter.Use(middleware.Distribute()) httpRouter.POST("/completions", controller.Relay) httpRouter.POST("/chat/completions", controller.Relay) httpRouter.POST("/edits", controller.Relay) httpRouter.POST("/images/generations", controller.Relay) httpRouter.POST("/images/edits", controller.RelayNotImplemented) httpRouter.POST("/images/variations", controller.RelayNotImplemented) httpRouter.POST("/embeddings", controller.Relay) httpRouter.POST("/engines/:model/embeddings", controller.Relay) httpRouter.POST("/audio/transcriptions", controller.Relay) httpRouter.POST("/audio/translations", controller.Relay) httpRouter.POST("/audio/speech", controller.Relay) httpRouter.GET("/files", controller.RelayNotImplemented) httpRouter.POST("/files", controller.RelayNotImplemented) httpRouter.DELETE("/files/:id", controller.RelayNotImplemented) httpRouter.GET("/files/:id", controller.RelayNotImplemented) httpRouter.GET("/files/:id/content", controller.RelayNotImplemented) httpRouter.POST("/fine-tunes", controller.RelayNotImplemented) httpRouter.GET("/fine-tunes", controller.RelayNotImplemented) httpRouter.GET("/fine-tunes/:id", controller.RelayNotImplemented) httpRouter.POST("/fine-tunes/:id/cancel", controller.RelayNotImplemented) httpRouter.GET("/fine-tunes/:id/events", controller.RelayNotImplemented) httpRouter.DELETE("/models/:model", controller.RelayNotImplemented) httpRouter.POST("/moderations", controller.Relay) httpRouter.POST("/rerank", controller.Relay) } relayMjRouter := router.Group("/mj") registerMjRouterGroup(relayMjRouter) relayMjModeRouter := router.Group("/:mode/mj") registerMjRouterGroup(relayMjModeRouter) //relayMjRouter.Use() relaySunoRouter := router.Group("/suno") relaySunoRouter.Use(middleware.TokenAuth(), middleware.Distribute()) { relaySunoRouter.POST("/submit/:action", controller.RelayTask) relaySunoRouter.POST("/fetch", controller.RelayTask) relaySunoRouter.GET("/fetch/:id", controller.RelayTask) } } func registerMjRouterGroup(relayMjRouter *gin.RouterGroup) { relayMjRouter.GET("/image/:id", relay.RelayMidjourneyImage) relayMjRouter.Use(middleware.TokenAuth(), middleware.Distribute()) { relayMjRouter.POST("/submit/action", controller.RelayMidjourney) relayMjRouter.POST("/submit/shorten", controller.RelayMidjourney) relayMjRouter.POST("/submit/modal", controller.RelayMidjourney) relayMjRouter.POST("/submit/imagine", controller.RelayMidjourney) relayMjRouter.POST("/submit/change", controller.RelayMidjourney) relayMjRouter.POST("/submit/simple-change", controller.RelayMidjourney) relayMjRouter.POST("/submit/describe", controller.RelayMidjourney) relayMjRouter.POST("/submit/blend", controller.RelayMidjourney) relayMjRouter.POST("/notify", controller.RelayMidjourney) relayMjRouter.GET("/task/:id/fetch", controller.RelayMidjourney) relayMjRouter.GET("/task/:id/image-seed", controller.RelayMidjourney) relayMjRouter.POST("/task/list-by-condition", controller.RelayMidjourney) relayMjRouter.POST("/insight-face/swap", controller.RelayMidjourney) relayMjRouter.POST("/submit/upload-discord-images", controller.RelayMidjourney) } }