🚀 feat(auth): support new model API paths in authentication and routing

- Updated TokenAuth middleware to handle requests for both `/v1beta/models/` and `/v1/models/`.
- Adjusted distributor middleware to recognize the new model path.
- Enhanced relay mode determination to include the new model path.
- Added route for handling POST requests to `/models/*path`.

These changes ensure compatibility with the new model API structure, improving the overall routing and authentication flow.
This commit is contained in:
CaIon
2025-06-25 00:19:38 +08:00
parent 64782027c4
commit 048a625181
4 changed files with 4 additions and 3 deletions

View File

@@ -184,7 +184,7 @@ func TokenAuth() func(c *gin.Context) {
} }
} }
// gemini api 从query中获取key // gemini api 从query中获取key
if strings.HasPrefix(c.Request.URL.Path, "/v1beta/models/") { if strings.HasPrefix(c.Request.URL.Path, "/v1beta/models/") || strings.HasPrefix(c.Request.URL.Path, "/v1/models/") {
skKey := c.Query("key") skKey := c.Query("key")
if skKey != "" { if skKey != "" {
c.Request.Header.Set("Authorization", "Bearer "+skKey) c.Request.Header.Set("Authorization", "Bearer "+skKey)

View File

@@ -179,7 +179,7 @@ func getModelRequest(c *gin.Context) (*ModelRequest, bool, error) {
} }
c.Set("platform", string(constant.TaskPlatformKling)) c.Set("platform", string(constant.TaskPlatformKling))
c.Set("relay_mode", relayMode) c.Set("relay_mode", relayMode)
} else if strings.HasPrefix(c.Request.URL.Path, "/v1beta/models/") { } else if strings.HasPrefix(c.Request.URL.Path, "/v1beta/models/") || strings.HasPrefix(c.Request.URL.Path, "/v1/models/") {
// Gemini API 路径处理: /v1beta/models/gemini-2.0-flash:generateContent // Gemini API 路径处理: /v1beta/models/gemini-2.0-flash:generateContent
relayMode := relayconstant.RelayModeGemini relayMode := relayconstant.RelayModeGemini
modelName := extractModelNameFromGeminiPath(c.Request.URL.Path) modelName := extractModelNameFromGeminiPath(c.Request.URL.Path)

View File

@@ -80,7 +80,7 @@ func Path2RelayMode(path string) int {
relayMode = RelayModeRerank relayMode = RelayModeRerank
} else if strings.HasPrefix(path, "/v1/realtime") { } else if strings.HasPrefix(path, "/v1/realtime") {
relayMode = RelayModeRealtime relayMode = RelayModeRealtime
} else if strings.HasPrefix(path, "/v1beta/models") { } else if strings.HasPrefix(path, "/v1beta/models") || strings.HasPrefix(path, "/v1/models") {
relayMode = RelayModeGemini relayMode = RelayModeGemini
} }
return relayMode return relayMode

View File

@@ -63,6 +63,7 @@ func SetRelayRouter(router *gin.Engine) {
httpRouter.DELETE("/models/:model", controller.RelayNotImplemented) httpRouter.DELETE("/models/:model", controller.RelayNotImplemented)
httpRouter.POST("/moderations", controller.Relay) httpRouter.POST("/moderations", controller.Relay)
httpRouter.POST("/rerank", controller.Relay) httpRouter.POST("/rerank", controller.Relay)
httpRouter.POST("/models/*path", controller.Relay)
} }
relayMjRouter := router.Group("/mj") relayMjRouter := router.Group("/mj")