El sistema de vCard necesitaba usar la IA configurada en /app/ai-config y el único camino era /api/v1/ia/ollama-generate, que autentica con cookie de sesión: incómodo para una llamada entre servidores y la razón de los 401. Ahora hay POST /api/v2/vcard/ia, bajo el mismo scope y la misma API key (Bearer + IP) que ya usa esa integración para los QR y los VCF. Manda prompt, recibe texto. La clave del proveedor no sale del servidor. La alternativa —devolverle la configuración con la api_key adentro, como hace el Landing Generator— reparte la credencial de OpenAI/Anthropic a cada aplicación que la quiera usar. El módulo va fijo en "ia": si lo eligiera quien llama, una llave con scope vcard podría usar la configuración del agente o la del Landing Generator. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
40 lines
1.4 KiB
Go
40 lines
1.4 KiB
Go
package controllers
|
|
|
|
import (
|
|
"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 {
|
|
return c.Status(502).JSON(fiber.Map{"error": err.Error()})
|
|
}
|
|
return c.JSON(fiber.Map{"texto": texto})
|
|
}
|