From 670685139af3098a2dbad1c88a59f706ee665c0b Mon Sep 17 00:00:00 2001 From: Luis Pater Date: Wed, 17 Dec 2025 01:17:02 +0800 Subject: [PATCH] fix(api): update route patterns to support wildcards for Gemini actions Normalize action handling by accommodating wildcard patterns in route definitions for Gemini endpoints. Adjust `request.Action` parsing logic to correctly process routes with prefixed actions. --- internal/api/modules/amp/routes.go | 4 ++-- internal/api/server.go | 4 ++-- sdk/api/handlers/gemini/gemini_handlers.go | 5 +++-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/internal/api/modules/amp/routes.go b/internal/api/modules/amp/routes.go index 8d9ec8ae..0abd943a 100644 --- a/internal/api/modules/amp/routes.go +++ b/internal/api/modules/amp/routes.go @@ -267,7 +267,7 @@ func (m *AmpModule) registerProviderAliases(engine *gin.Engine, baseHandler *han v1betaAmp := provider.Group("/v1beta") { v1betaAmp.GET("/models", geminiHandlers.GeminiModels) - v1betaAmp.POST("/models/:action", fallbackHandler.WrapHandler(geminiHandlers.GeminiHandler)) - v1betaAmp.GET("/models/:action", geminiHandlers.GeminiGetHandler) + v1betaAmp.POST("/models/*action", fallbackHandler.WrapHandler(geminiHandlers.GeminiHandler)) + v1betaAmp.GET("/models/*action", geminiHandlers.GeminiGetHandler) } } diff --git a/internal/api/server.go b/internal/api/server.go index 5ffffa1d..e6d03bc3 100644 --- a/internal/api/server.go +++ b/internal/api/server.go @@ -330,8 +330,8 @@ func (s *Server) setupRoutes() { v1beta.Use(AuthMiddleware(s.accessManager)) { v1beta.GET("/models", geminiHandlers.GeminiModels) - v1beta.POST("/models/:action", geminiHandlers.GeminiHandler) - v1beta.GET("/models/:action", geminiHandlers.GeminiGetHandler) + v1beta.POST("/models/*action", geminiHandlers.GeminiHandler) + v1beta.GET("/models/*action", geminiHandlers.GeminiGetHandler) } // Root endpoint diff --git a/sdk/api/handlers/gemini/gemini_handlers.go b/sdk/api/handlers/gemini/gemini_handlers.go index 6cd9ee62..901421b5 100644 --- a/sdk/api/handlers/gemini/gemini_handlers.go +++ b/sdk/api/handlers/gemini/gemini_handlers.go @@ -84,7 +84,8 @@ func (h *GeminiAPIHandler) GeminiGetHandler(c *gin.Context) { }) return } - switch request.Action { + action := strings.TrimPrefix(request.Action, "/") + switch action { case "gemini-3-pro-preview": c.JSON(http.StatusOK, gin.H{ "name": "models/gemini-3-pro-preview", @@ -189,7 +190,7 @@ func (h *GeminiAPIHandler) GeminiHandler(c *gin.Context) { }) return } - action := strings.Split(request.Action, ":") + action := strings.Split(strings.TrimPrefix(request.Action, "/"), ":") if len(action) != 2 { c.JSON(http.StatusNotFound, handlers.ErrorResponse{ Error: handlers.ErrorDetail{