diff --git a/internal/server/server.go b/internal/server/server.go index c4c0d711..68bb8394 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -533,38 +533,7 @@ func (s *Server) handleChatCompletions(c *gin.Context) { return } - // Select provider based on model name - providerName := "openai" // default - modelLower := strings.ToLower(req.Model) - if strings.HasPrefix(modelLower, "gemini/") || strings.Contains(modelLower, "gemini") || strings.HasPrefix(modelLower, "google/") { - providerName = "gemini" - } else if strings.HasPrefix(modelLower, "deepseek/") || (strings.Contains(modelLower, "deepseek") && !strings.Contains(modelLower, "ollama")) { - // Only use deepseek provider if it's not explicitly tagged for ollama - providerName = "deepseek" - } else if strings.HasPrefix(modelLower, "moonshot/") || strings.Contains(modelLower, "kimi") || strings.Contains(modelLower, "moonshot") { - providerName = "moonshot" - } else if strings.HasPrefix(modelLower, "grok/") || strings.Contains(modelLower, "grok") { - providerName = "grok" - } else if strings.HasPrefix(modelLower, "ollama/") || - strings.Contains(modelLower, "glm-") || - strings.Contains(modelLower, "qwen") || - strings.Contains(modelLower, "gemma") || - strings.Contains(modelLower, "llama") || - strings.Contains(modelLower, "mistral") || - strings.Contains(modelLower, "phi") || - strings.Contains(modelLower, "yi") || - strings.Contains(modelLower, "codellama") || - strings.Contains(modelLower, "command-r") { - providerName = "ollama" - } - - provider, ok := s.providers[providerName] - if !ok { - c.JSON(http.StatusInternalServerError, gin.H{"error": fmt.Sprintf("Provider %s not enabled or supported", providerName)}) - return - } - - // Strip common prefixes + // Strip common prefixes and prepare model ID modelID := req.Model prefixes := []string{"gemini/", "google/", "openai/", "deepseek/", "moonshot/", "grok/", "ollama/"} for _, p := range prefixes { @@ -590,6 +559,13 @@ func (s *Server) handleChatCompletions(c *gin.Context) { log.Printf("[ROUTER] %s (%s: %s)", modelID, decision.Strategy, decision.Reason) } + // Select provider based on the resolved model name + provider, providerName, err := s.selectProvider(modelID) + if err != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) + return + } + // Convert ChatCompletionRequest to UnifiedRequest unifiedReq := &models.UnifiedRequest{ Model: modelID,