From 9dc44decd7c8236e910db8f97ea7353553c10cb1 Mon Sep 17 00:00:00 2001 From: Lizandro Guarnizo <77708265+lizandrogd@users.noreply.github.com> Date: Wed, 12 Aug 2026 21:38:16 -0500 Subject: [PATCH] =?UTF-8?q?fix:=20unifica=20el=20mapeo=20proveedor?= =?UTF-8?q?=E2=86=92URL,=20el=20bot=C3=B3n=20"Probar=20conexi=C3=B3n"=20te?= =?UTF-8?q?n=C3=ADa=20su=20propia=20copia=20sin=20Gemini?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- pkg/services/telegram_agent_service.go | 4 ++-- pkg/services/umind_embeddings_service.go | 2 +- pkg/services/whisper_service.go | 2 +- rest/controllers/ai_config_controller.go | 16 ++++++---------- 4 files changed, 10 insertions(+), 14 deletions(-) diff --git a/pkg/services/telegram_agent_service.go b/pkg/services/telegram_agent_service.go index 8b55752..64a0f9b 100644 --- a/pkg/services/telegram_agent_service.go +++ b/pkg/services/telegram_agent_service.go @@ -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) { baseURL := ai.BaseURL if baseURL == "" { - baseURL = providerDefaultURL(ai.Provider) + baseURL = ProviderDefaultURL(ai.Provider) } baseURL = strings.TrimRight(baseURL, "/") @@ -1483,7 +1483,7 @@ func callAnthropicAI(ai *models.AiConfig, messages []agentMessage, tools []agent return result, nil } -func providerDefaultURL(provider string) string { +func ProviderDefaultURL(provider string) string { switch strings.ToLower(provider) { case "openai": return "https://api.openai.com/v1" diff --git a/pkg/services/umind_embeddings_service.go b/pkg/services/umind_embeddings_service.go index 6d352ad..a2c2190 100644 --- a/pkg/services/umind_embeddings_service.go +++ b/pkg/services/umind_embeddings_service.go @@ -29,7 +29,7 @@ func GenerarEmbeddings(ai *models.AiConfig, textos []string) ([][]float32, error baseURL := ai.BaseURL if baseURL == "" { - baseURL = providerDefaultURL(ai.Provider) + baseURL = ProviderDefaultURL(ai.Provider) } baseURL = strings.TrimRight(baseURL, "/") diff --git a/pkg/services/whisper_service.go b/pkg/services/whisper_service.go index 86dbd47..83b61ed 100644 --- a/pkg/services/whisper_service.go +++ b/pkg/services/whisper_service.go @@ -32,7 +32,7 @@ func TranscribirAudio(ai *models.AiConfig, audioPath string) (string, error) { baseURL := ai.BaseURL if baseURL == "" { - baseURL = providerDefaultURL(ai.Provider) + baseURL = ProviderDefaultURL(ai.Provider) } baseURL = strings.TrimRight(baseURL, "/") diff --git a/rest/controllers/ai_config_controller.go b/rest/controllers/ai_config_controller.go index 4d7e163..1e9b410 100644 --- a/rest/controllers/ai_config_controller.go +++ b/rest/controllers/ai_config_controller.go @@ -10,6 +10,7 @@ import ( "github.com/gofiber/fiber/v2" "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. @@ -214,18 +215,13 @@ func TestAiConfigHandler(c *fiber.Ctx) error { req.Header.Set("x-api-key", item.ApiKey) req.Header.Set("anthropic-version", "2023-06-01") 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 if base == "" { - switch 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"}) - } + base = services.ProviderDefaultURL(item.Provider) } testURL = base + "/models" req, _ = http.NewRequest("GET", testURL, nil)