La integración muestra solo "error code: 502" y el motivo no quedaba escrito en ningún lado. Ahora se loguea. Y el estado separa los dos casos: 503 si falta configurar la IA de este lado, 502 si el que falló fue el proveedor. Con el mismo código para ambos no se sabe a quién mirar. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
53 lines
1.8 KiB
Go
53 lines
1.8 KiB
Go
package controllers
|
|
|
|
import (
|
|
"log"
|
|
"strings"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
"github.com/sujit-baniya/fiber-boilerplate/pkg/services"
|
|
)
|
|
|
|
// GenerarTextoIA corre una generación con la configuración de IA que el staff
|
|
// eligió en /app/ai-config para el módulo "ia" (el que la pantalla llama
|
|
// "IA / vCard").
|
|
//
|
|
// La clave del proveedor no sale de acá: la integración manda su prompt con su
|
|
// propia API key de /api/v2 y recibe el texto. Es la diferencia con devolverle
|
|
// la configuración —incluida la clave de OpenAI o Anthropic— a otra aplicación.
|
|
//
|
|
// POST /api/v2/vcard/ia {"prompt": "...", "sistema": "..."}
|
|
func GenerarTextoIA(c *fiber.Ctx) error {
|
|
var body struct {
|
|
Prompt string `json:"prompt"`
|
|
Sistema string `json:"sistema"`
|
|
}
|
|
if err := c.BodyParser(&body); err != nil {
|
|
return c.Status(400).JSON(fiber.Map{"error": "body inválido"})
|
|
}
|
|
if body.Prompt == "" {
|
|
return c.Status(400).JSON(fiber.Map{"error": "prompt requerido"})
|
|
}
|
|
if body.Sistema == "" {
|
|
body.Sistema = "Respondé de forma clara y breve."
|
|
}
|
|
|
|
// El módulo va fijo: si lo eligiera quien llama, una llave con scope vcard
|
|
// podría usar la configuración del agente o la del Landing Generator.
|
|
texto, err := services.CompletarTextoIA("ia", body.Sistema, body.Prompt)
|
|
if err != nil {
|
|
// Al log también: la integración suele mostrar solo el código de estado,
|
|
// y sin esta línea el motivo no queda registrado en ningún lado.
|
|
log.Printf("[IA v2] falló la generación: %v", err)
|
|
|
|
// 503 cuando falta configurar algo de este lado y 502 cuando el que
|
|
// falló fue el proveedor: son problemas de dueños distintos.
|
|
estado := 502
|
|
if strings.Contains(err.Error(), "configuración de IA") {
|
|
estado = 503
|
|
}
|
|
return c.Status(estado).JSON(fiber.Map{"error": err.Error()})
|
|
}
|
|
return c.JSON(fiber.Map{"texto": texto})
|
|
}
|