fix: unifica el mapeo proveedor→URL, el botón "Probar conexión" tenía su propia copia sin Gemini

El fix anterior de Gemini (22efb9c) solo tocó providerDefaultURL, que usan
el chat/embeddings/whisper reales. TestAiConfigHandler (el botón "Probar
conexión" del panel de AI Config) tenía una tercera copia independiente del
mismo mapeo, sin caso para Gemini ni Deepseek — por eso el chat ya
funcionaba con Gemini pero la prueba de conexión seguía fallando.

Se exporta providerDefaultURL a services.ProviderDefaultURL y el controller
la reusa, en vez de mantener una copia más que se desactualiza cada vez que
se agrega un proveedor.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-08-12 21:38:16 -05:00
co-authored by Claude Sonnet 5
parent 22efb9ca70
commit 9dc44decd7
4 changed files with 10 additions and 14 deletions
+2 -2
View File
@@ -1265,7 +1265,7 @@ func callAI(ai *models.AiConfig, messages []agentMessage, tools []agentTool) (*a
func callOpenAICompatibleAI(ai *models.AiConfig, messages []agentMessage, tools []agentTool) (*agentMessage, error) { func callOpenAICompatibleAI(ai *models.AiConfig, messages []agentMessage, tools []agentTool) (*agentMessage, error) {
baseURL := ai.BaseURL baseURL := ai.BaseURL
if baseURL == "" { if baseURL == "" {
baseURL = providerDefaultURL(ai.Provider) baseURL = ProviderDefaultURL(ai.Provider)
} }
baseURL = strings.TrimRight(baseURL, "/") baseURL = strings.TrimRight(baseURL, "/")
@@ -1483,7 +1483,7 @@ func callAnthropicAI(ai *models.AiConfig, messages []agentMessage, tools []agent
return result, nil return result, nil
} }
func providerDefaultURL(provider string) string { func ProviderDefaultURL(provider string) string {
switch strings.ToLower(provider) { switch strings.ToLower(provider) {
case "openai": case "openai":
return "https://api.openai.com/v1" return "https://api.openai.com/v1"
+1 -1
View File
@@ -29,7 +29,7 @@ func GenerarEmbeddings(ai *models.AiConfig, textos []string) ([][]float32, error
baseURL := ai.BaseURL baseURL := ai.BaseURL
if baseURL == "" { if baseURL == "" {
baseURL = providerDefaultURL(ai.Provider) baseURL = ProviderDefaultURL(ai.Provider)
} }
baseURL = strings.TrimRight(baseURL, "/") baseURL = strings.TrimRight(baseURL, "/")
+1 -1
View File
@@ -32,7 +32,7 @@ func TranscribirAudio(ai *models.AiConfig, audioPath string) (string, error) {
baseURL := ai.BaseURL baseURL := ai.BaseURL
if baseURL == "" { if baseURL == "" {
baseURL = providerDefaultURL(ai.Provider) baseURL = ProviderDefaultURL(ai.Provider)
} }
baseURL = strings.TrimRight(baseURL, "/") baseURL = strings.TrimRight(baseURL, "/")
+6 -10
View File
@@ -10,6 +10,7 @@ import (
"github.com/gofiber/fiber/v2" "github.com/gofiber/fiber/v2"
"github.com/sujit-baniya/fiber-boilerplate/pkg/models" "github.com/sujit-baniya/fiber-boilerplate/pkg/models"
"github.com/sujit-baniya/fiber-boilerplate/pkg/services"
) )
// AiConfigIndex renderiza la vista del panel de configuraciones de IA. // AiConfigIndex renderiza la vista del panel de configuraciones de IA.
@@ -214,18 +215,13 @@ func TestAiConfigHandler(c *fiber.Ctx) error {
req.Header.Set("x-api-key", item.ApiKey) req.Header.Set("x-api-key", item.ApiKey)
req.Header.Set("anthropic-version", "2023-06-01") req.Header.Set("anthropic-version", "2023-06-01")
default: default:
// Mismo mapeo proveedor→URL que usa el chat/embeddings real
// (services.ProviderDefaultURL) — antes esta prueba tenía su propia
// copia desactualizada que no conocía proveedores nuevos como Gemini,
// así que "funcionaba" en el chat pero la prueba de conexión fallaba.
base := item.BaseURL base := item.BaseURL
if base == "" { if base == "" {
switch item.Provider { base = services.ProviderDefaultURL(item.Provider)
case "openai":
base = "https://api.openai.com/v1"
case "qwen":
base = "https://dashscope.aliyuncs.com/compatible-mode/v1"
case "groq":
base = "https://api.groq.com/openai/v1"
default:
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "BaseURL requerida para este provider"})
}
} }
testURL = base + "/models" testURL = base + "/models"
req, _ = http.NewRequest("GET", testURL, nil) req, _ = http.NewRequest("GET", testURL, nil)