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:
co-authored by
Claude Sonnet 5
parent
22efb9ca70
commit
9dc44decd7
@@ -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"
|
||||||
|
|||||||
@@ -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, "/")
|
||||||
|
|
||||||
|
|||||||
@@ -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, "/")
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user