diff --git a/internal/api/modules/amp/routes.go b/internal/api/modules/amp/routes.go index 8cb208fe..6826dbbe 100644 --- a/internal/api/modules/amp/routes.go +++ b/internal/api/modules/amp/routes.go @@ -9,7 +9,6 @@ import ( "github.com/gin-gonic/gin" "github.com/router-for-me/CLIProxyAPI/v6/internal/logging" - "github.com/router-for-me/CLIProxyAPI/v6/internal/util" "github.com/router-for-me/CLIProxyAPI/v6/sdk/api/handlers" "github.com/router-for-me/CLIProxyAPI/v6/sdk/api/handlers/claude" "github.com/router-for-me/CLIProxyAPI/v6/sdk/api/handlers/gemini" @@ -175,30 +174,16 @@ func (m *AmpModule) registerManagementRoutes(engine *gin.Engine, baseHandler *ha }, m.modelMapper) geminiV1Beta1Handler := geminiV1Beta1Fallback.WrapHandler(geminiBridge) - // Route POST model calls through Gemini bridge when a local provider exists, otherwise proxy. + // Route POST model calls through Gemini bridge with FallbackHandler. + // FallbackHandler checks provider -> mapping -> proxy fallback automatically. // All other methods (e.g., GET model listing) always proxy to upstream to preserve Amp CLI behavior. ampAPI.Any("/provider/google/v1beta1/*path", func(c *gin.Context) { if c.Request.Method == "POST" { - // Attempt to extract the model name from the AMP-style path if path := c.Param("path"); strings.Contains(path, "/models/") { - modelPart := path[strings.Index(path, "/models/")+len("/models/"):] - if colonIdx := strings.Index(modelPart, ":"); colonIdx > 0 { - modelPart = modelPart[:colonIdx] - } - if modelPart != "" { - normalized, _ := util.NormalizeGeminiThinkingModel(modelPart) - // Only handle locally when we have a provider or a valid mapping; otherwise fall back to proxy - hasProvider := len(util.GetProviderName(normalized)) > 0 - if !hasProvider && m.modelMapper != nil { - // Check if mapped model has provider (MapModel returns target only if it has providers) - hasProvider = m.modelMapper.MapModel(normalized) != "" - } - - if hasProvider { - geminiV1Beta1Handler(c) - return - } - } + // POST with /models/ path -> use Gemini bridge with fallback handler + // FallbackHandler will check provider/mapping and proxy if needed + geminiV1Beta1Handler(c) + return } } // Non-POST or no local provider available -> proxy upstream