Inspiración

En cualquier equipo, las políticas y los procedimientos viven repartidos entre PDFs, hojas de cálculo, notas y repositorios, y a veces dicen cosas incompatibles. Una regla exige aprobación para todo gasto desde USD 100; otra exime los gastos menores de USD 200. ¿Qué pasa con una compra de USD 150?

Un asistente de IA corriente respondería con seguridad y elegiría una de las dos. Nosotros queríamos lo contrario: una herramienta que muestre los dos lados con su evidencia, que distinga lo que dicen las fuentes de lo que deduce, y que reconozca cuándo no sabe. De ahí nace Terengue y su lema: Sé más inteligente.

Qué hace

Terengue es un segundo cerebro para equipos (reto 07, «Second Brain»):

  • Espacios compartidos con roles de administrador, editor y lector, y conocimiento aislado por espacio.
  • Biblioteca de documentos con estados honestos: un archivo guardado no se presenta como indexado.
  • Respuestas con evidencia: cada afirmación se etiqueta como respaldada, inferida o incierta, con cita a la página, línea, campo o celda exactos.
  • Posibles contradicciones con ambas afirmaciones, su contexto y sin ganador automático.
  • Grafo de documentos y conceptos, e interfaz en español e inglés.

Cómo lo construimos

  • Núcleo en Pure BoxLang, reutilizable e independiente de la interfaz, con BoxLang AI para embeddings, recuperación y respuestas.
  • PostgreSQL con pgvector como única base: cuentas, metadatos y vectores, sin base vectorial ni de grafos adicional.
  • Next.js y TypeScript para la web, que solo delega en BoxLang; la lógica de negocio y los permisos viven en el backend.
  • Docker Compose para todo, sin instalar runtimes en el equipo.

Trabajamos con un plan de diez fases (00–09), cada una con pruebas de cierre y una matriz de requisitos verificables. Dividimos el trabajo en tres roles en paralelo —plataforma y seguridad, núcleo de conocimiento y web— unidos por contratos explícitos.

Una decisión de diseño atraviesa todo el proyecto: las ubicaciones de las citas salen de la extracción del documento, nunca del modelo, y el filtro por espacio se aplica antes de recuperar, no después. Así, un fragmento de otro espacio no llega jamás al contexto del proveedor, por parecido que sea.

Retos

  • Citas precisas en ocho formatos. Extraer texto es fácil; conservar página, línea, ruta JSON o celda no lo es. Para DOCX y XLSX no había un loader disponible que preservara coordenadas y tuvimos que leer el OOXML directamente.
  • Presupuesto con concurrencia. El límite de USD 20 diarios exige reservar el coste antes de cada llamada y conciliarlo después, para que dos operaciones simultáneas no gasten el mismo saldo.
  • Trabajo en paralelo. La pantalla de biblioteca se construyó antes que su backend, contra un contrato y un doble de pruebas. Al comparar ramas descubrimos que el backend y la web usaban vocabularios distintos para los estados de un documento.
  • Honestidad como requisito. Distinguir un fallo del documento de un presupuesto agotado o de un proveedor caído obliga a clasificar cada error, no a mostrar un genérico «algo salió mal».

Qué aprendimos

  • Que validar la viabilidad antes de diseñar tablas ahorra reescrituras: varias capacidades que dábamos por hechas no existían tal como las imaginábamos.
  • Que una métrica global no basta. Nuestra suite de aceptación exige $\frac{18}{20} = 90\,\%$ de casos correctos, pero cero fallos de abstención y cero falsos conflictos: una media favorable no compensa una cita inventada.
  • Que «no lo sé» es una respuesta válida, y a menudo la más útil.

Estado actual y próximos pasos

Hoy funcionan las cuentas, los espacios con roles y la biblioteca de documentos, junto con el control de presupuesto de IA. El chat con citas, la detección de contradicciones y el grafo están especificados y planificados, y son lo siguiente en construirse.

Built With

  • boxlang
  • nextjs
  • openai
  • postgress
Share this project:

Updates

Submission history