relay-router.go 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. package router
  2. import (
  3. "one-api/controller"
  4. "one-api/middleware"
  5. "one-api/relay"
  6. "github.com/gin-gonic/gin"
  7. )
  8. func SetRelayRouter(router *gin.Engine) {
  9. router.Use(middleware.CORS())
  10. router.Use(middleware.DecompressRequestMiddleware())
  11. router.Use(middleware.StatsMiddleware())
  12. // https://platform.openai.com/docs/api-reference/introduction
  13. modelsRouter := router.Group("/v1/models")
  14. modelsRouter.Use(middleware.TokenAuth())
  15. {
  16. modelsRouter.GET("", controller.ListModels)
  17. modelsRouter.GET("/:model", controller.RetrieveModel)
  18. }
  19. playgroundRouter := router.Group("/pg")
  20. playgroundRouter.Use(middleware.UserAuth(), middleware.Distribute())
  21. {
  22. playgroundRouter.POST("/chat/completions", controller.Playground)
  23. }
  24. relayV1Router := router.Group("/v1")
  25. relayV1Router.Use(middleware.TokenAuth())
  26. relayV1Router.Use(middleware.ModelRequestRateLimit())
  27. {
  28. // WebSocket 路由
  29. wsRouter := relayV1Router.Group("")
  30. wsRouter.Use(middleware.Distribute())
  31. wsRouter.GET("/realtime", controller.WssRelay)
  32. }
  33. {
  34. //http router
  35. httpRouter := relayV1Router.Group("")
  36. httpRouter.Use(middleware.Distribute())
  37. httpRouter.POST("/messages", controller.RelayClaude)
  38. httpRouter.POST("/completions", controller.Relay)
  39. httpRouter.POST("/chat/completions", controller.Relay)
  40. httpRouter.POST("/edits", controller.Relay)
  41. httpRouter.POST("/images/generations", controller.Relay)
  42. httpRouter.POST("/images/edits", controller.Relay)
  43. httpRouter.POST("/images/variations", controller.RelayNotImplemented)
  44. httpRouter.POST("/embeddings", controller.Relay)
  45. httpRouter.POST("/engines/:model/embeddings", controller.Relay)
  46. httpRouter.POST("/audio/transcriptions", controller.Relay)
  47. httpRouter.POST("/audio/translations", controller.Relay)
  48. httpRouter.POST("/audio/speech", controller.Relay)
  49. httpRouter.POST("/responses", controller.Relay)
  50. httpRouter.GET("/files", controller.RelayNotImplemented)
  51. httpRouter.POST("/files", controller.RelayNotImplemented)
  52. httpRouter.DELETE("/files/:id", controller.RelayNotImplemented)
  53. httpRouter.GET("/files/:id", controller.RelayNotImplemented)
  54. httpRouter.GET("/files/:id/content", controller.RelayNotImplemented)
  55. httpRouter.POST("/fine-tunes", controller.RelayNotImplemented)
  56. httpRouter.GET("/fine-tunes", controller.RelayNotImplemented)
  57. httpRouter.GET("/fine-tunes/:id", controller.RelayNotImplemented)
  58. httpRouter.POST("/fine-tunes/:id/cancel", controller.RelayNotImplemented)
  59. httpRouter.GET("/fine-tunes/:id/events", controller.RelayNotImplemented)
  60. httpRouter.DELETE("/models/:model", controller.RelayNotImplemented)
  61. httpRouter.POST("/moderations", controller.Relay)
  62. httpRouter.POST("/rerank", controller.Relay)
  63. httpRouter.POST("/models/*path", controller.Relay)
  64. }
  65. relayMjRouter := router.Group("/mj")
  66. registerMjRouterGroup(relayMjRouter)
  67. relayMjModeRouter := router.Group("/:mode/mj")
  68. registerMjRouterGroup(relayMjModeRouter)
  69. //relayMjRouter.Use()
  70. relaySunoRouter := router.Group("/suno")
  71. relaySunoRouter.Use(middleware.TokenAuth(), middleware.Distribute())
  72. {
  73. relaySunoRouter.POST("/submit/:action", controller.RelayTask)
  74. relaySunoRouter.POST("/fetch", controller.RelayTask)
  75. relaySunoRouter.GET("/fetch/:id", controller.RelayTask)
  76. }
  77. relayGeminiRouter := router.Group("/v1beta")
  78. relayGeminiRouter.Use(middleware.TokenAuth())
  79. relayGeminiRouter.Use(middleware.ModelRequestRateLimit())
  80. relayGeminiRouter.Use(middleware.Distribute())
  81. {
  82. // Gemini API 路径格式: /v1beta/models/{model_name}:{action}
  83. relayGeminiRouter.POST("/models/*path", controller.Relay)
  84. }
  85. }
  86. func registerMjRouterGroup(relayMjRouter *gin.RouterGroup) {
  87. relayMjRouter.GET("/image/:id", relay.RelayMidjourneyImage)
  88. relayMjRouter.Use(middleware.TokenAuth(), middleware.Distribute())
  89. {
  90. relayMjRouter.POST("/submit/action", controller.RelayMidjourney)
  91. relayMjRouter.POST("/submit/shorten", controller.RelayMidjourney)
  92. relayMjRouter.POST("/submit/modal", controller.RelayMidjourney)
  93. relayMjRouter.POST("/submit/imagine", controller.RelayMidjourney)
  94. relayMjRouter.POST("/submit/change", controller.RelayMidjourney)
  95. relayMjRouter.POST("/submit/simple-change", controller.RelayMidjourney)
  96. relayMjRouter.POST("/submit/describe", controller.RelayMidjourney)
  97. relayMjRouter.POST("/submit/blend", controller.RelayMidjourney)
  98. relayMjRouter.POST("/submit/edits", controller.RelayMidjourney)
  99. relayMjRouter.POST("/submit/video", controller.RelayMidjourney)
  100. relayMjRouter.POST("/notify", controller.RelayMidjourney)
  101. relayMjRouter.GET("/task/:id/fetch", controller.RelayMidjourney)
  102. relayMjRouter.GET("/task/:id/image-seed", controller.RelayMidjourney)
  103. relayMjRouter.POST("/task/list-by-condition", controller.RelayMidjourney)
  104. relayMjRouter.POST("/insight-face/swap", controller.RelayMidjourney)
  105. relayMjRouter.POST("/submit/upload-discord-images", controller.RelayMidjourney)
  106. }
  107. }