mirror of
https://github.com/router-for-me/CLIProxyAPI.git
synced 2026-02-03 13:00:52 +08:00
refactor: remove duplicate provider check in gemini v1beta1 route
Simplifies routing logic by delegating all provider/mapping/proxy decisions to FallbackHandler. Previously, the route checked for provider/mapping availability before calling the handler, then FallbackHandler performed the same checks again. Changes: - Remove model extraction and provider checking from route (lines 182-201) - Route now only checks if request is POST with /models/ path - FallbackHandler handles provider -> mapping -> proxy fallback - Remove unused internal/util import Benefits: - Eliminates duplicate checks (addresses PR review feedback #2) - Centralizes all provider/mapping logic in FallbackHandler - Reduces routing code by ~20 lines - Aligns with how other /api/provider routes work Performance: No impact (checks still happen once in FallbackHandler)
This commit is contained in:
@@ -9,7 +9,6 @@ import (
|
|||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github.com/router-for-me/CLIProxyAPI/v6/internal/logging"
|
"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"
|
||||||
"github.com/router-for-me/CLIProxyAPI/v6/sdk/api/handlers/claude"
|
"github.com/router-for-me/CLIProxyAPI/v6/sdk/api/handlers/claude"
|
||||||
"github.com/router-for-me/CLIProxyAPI/v6/sdk/api/handlers/gemini"
|
"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)
|
}, m.modelMapper)
|
||||||
geminiV1Beta1Handler := geminiV1Beta1Fallback.WrapHandler(geminiBridge)
|
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.
|
// 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) {
|
ampAPI.Any("/provider/google/v1beta1/*path", func(c *gin.Context) {
|
||||||
if c.Request.Method == "POST" {
|
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/") {
|
if path := c.Param("path"); strings.Contains(path, "/models/") {
|
||||||
modelPart := path[strings.Index(path, "/models/")+len("/models/"):]
|
// POST with /models/ path -> use Gemini bridge with fallback handler
|
||||||
if colonIdx := strings.Index(modelPart, ":"); colonIdx > 0 {
|
// FallbackHandler will check provider/mapping and proxy if needed
|
||||||
modelPart = modelPart[:colonIdx]
|
geminiV1Beta1Handler(c)
|
||||||
}
|
return
|
||||||
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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Non-POST or no local provider available -> proxy upstream
|
// Non-POST or no local provider available -> proxy upstream
|
||||||
|
|||||||
Reference in New Issue
Block a user