fix(plantillas): "Leer con IA" fallaba con la config de IA que ya está en producción

Escribí una segunda implementación de "llamar al proveedor" en vez de usar la
que ya existe (callAI, la del bot de Telegram). Esa copia no hablaba Anthropic
—se lo mandaba todo al endpoint de OpenAI— y, si la config tenía la URL base
vacía (lo normal: la vista dice que es opcional), armaba una URL relativa que
ni siquiera es una petición válida. Cualquiera de las dos cosas terminaba en
el 502.

Ahora usa callAI, que despacha por proveedor y completa la URL base. El error
del proveedor queda en el log del servidor y el mensaje llega entero a la vista;
si la respuesta no trae mensaje, la vista muestra el status para distinguir un
fallo de la app de uno del proxy.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Lizandro Guarnizo
2026-08-17 19:07:03 -05:00
co-authored by Claude Opus 5
parent c4b0305112
commit ac47769c27
3 changed files with 29 additions and 93 deletions
@@ -2,6 +2,7 @@ package controllers
import (
"io"
"log"
"math"
"strconv"
"text/template"
@@ -135,7 +136,10 @@ func ImportarPlantillaDocumento(c *fiber.Ctx) error {
tipo := c.FormValue("tipo", "cotizacion")
html, err := services.ConvertirEnPlantilla(tipo, texto)
if err != nil {
return c.Status(502).JSON(fiber.Map{"error": err.Error()})
// Al log también: el mensaje del proveedor es lo único que dice por qué
// falló, y desde el navegador se ve recortado.
log.Printf("[PLANTILLAS] importar (%s, %s): %v", tipo, archivo.Filename, err)
return c.Status(422).JSON(fiber.Map{"error": err.Error()})
}
// Si la IA devolvió algo que no compila, es mejor decirlo acá que al guardar.
if _, err := template.New("validate").Parse(html); err != nil {