feat(umind): ver qué se leyó de cada fuente, fragmento por fragmento
Una fuente crawleada decía "9 fragmentos" y nada más. Las notas y archivos al menos tienen Editar, que muestra su texto; un sitio no tiene nada — era una caja negra, sin forma de saber si el crawler leyó los precios o el pie de página. Y cuando el agente contesta mal, la primera pregunta es justamente qué tiene cargado de verdad. Cada fuente gana un "Ver" que abre sus fragmentos tal como quedaron indexados, numerados y en orden, con la advertencia que importa: esto es exactamente lo que el asistente puede consultar — si acá falta algo, eso mismo le va a faltar en las respuestas. El botón se apaga cuando la fuente no tiene fragmentos todavía (procesando o con error): abrir un visor vacío no informa nada. El endpoint pasa por accesoDocumento como todos los sub-recursos, y devuelve solo el contenido — el embedding no viaja: son miles de números que no le sirven a nadie en pantalla. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
be01d95631
commit
ffa24a068f
@@ -1092,3 +1092,26 @@ func DuplicarUmindAgenteHandler(c *fiber.Ctx) error {
|
||||
"aviso": "El conocimiento se está copiando en segundo plano. Los canales y las claves de las herramientas no se copian: hay que configurarlos en la copia.",
|
||||
})
|
||||
}
|
||||
|
||||
// GetFragmentosDocumentoHandler muestra lo que se leyó de una fuente, fragmento
|
||||
// por fragmento. Es la única ventana a lo que el agente tiene de verdad: el
|
||||
// contenido nunca se muestra entero en ningún otro lado.
|
||||
// GET /umind/documentos/:id/fragmentos
|
||||
func GetFragmentosDocumentoHandler(c *fiber.Ctx) error {
|
||||
id, err := strconv.ParseUint(c.Params("id"), 10, 64)
|
||||
if err != nil {
|
||||
return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": "id inválido"})
|
||||
}
|
||||
if err := accesoDocumento(c, uint(id)); err != nil {
|
||||
return err
|
||||
}
|
||||
chunks, err := models.GetUmindChunksByDocumento(uint(id))
|
||||
if err != nil {
|
||||
return c.Status(fiber.StatusInternalServerError).JSON(fiber.Map{"error": err.Error()})
|
||||
}
|
||||
out := make([]fiber.Map, len(chunks))
|
||||
for i, ch := range chunks {
|
||||
out[i] = fiber.Map{"ID": ch.ID, "contenido": ch.Contenido}
|
||||
}
|
||||
return c.JSON(fiber.Map{"items": out})
|
||||
}
|
||||
|
||||
@@ -43,6 +43,7 @@ func RegistrarRutasUmind(g fiber.Router, scope fiber.Handler, escritura fiber.Ha
|
||||
g.Post("/umind/documentos", w(controllers.CreateUmindDocumentoHandler)...)
|
||||
g.Post("/umind/documentos/texto", w(controllers.CreateUmindTextoHandler)...)
|
||||
g.Post("/umind/documentos/archivo", w(controllers.CreateUmindArchivoHandler)...)
|
||||
g.Get("/umind/documentos/:id/fragmentos", r(controllers.GetFragmentosDocumentoHandler)...)
|
||||
g.Put("/umind/documentos/:id", w(controllers.ActualizarUmindDocumentoHandler)...)
|
||||
g.Post("/umind/documentos/:id/reprocesar", w(controllers.ReprocesarUmindDocumentoHandler)...)
|
||||
g.Delete("/umind/documentos/:id", w(controllers.DeleteUmindDocumentoHandler)...)
|
||||
|
||||
Reference in New Issue
Block a user