chore(rag): separate lifecycle migrations from startup
This commit is contained in:
parent
551cfe8816
commit
46a70ca145
9 changed files with 122 additions and 14 deletions
|
|
@ -16,4 +16,4 @@ COPY --from=build /app/dist ./dist
|
||||||
COPY --from=build /app/migrations ./migrations
|
COPY --from=build /app/migrations ./migrations
|
||||||
COPY public ./public
|
COPY public ./public
|
||||||
EXPOSE 3000
|
EXPOSE 3000
|
||||||
CMD ["sh", "-c", "node dist/modules/catalog/migrations.js && node dist/server.js"]
|
CMD ["node", "dist/server.js"]
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
**Modulo:** RAG
|
**Modulo:** RAG
|
||||||
**Ultima actualizacion:** 2026-09-11
|
**Ultima actualizacion:** 2026-09-11
|
||||||
**Ultima modificacion por:** Subagente Implementacion ciclo de vida del conocimiento
|
**Ultima modificacion por:** Subagente Implementacion ciclo de vida del conocimiento
|
||||||
**Estado:** Punto 2 implementado localmente; pendiente de migracion y validacion en produccion
|
**Estado:** Punto 2 desplegado; pendiente de preparar PostgreSQL, migrar el corpus y validar en produccion
|
||||||
|
|
||||||
Esta guia explica como descubrir y consumir la API. El contrato tecnico completo y canonico se publica en OpenAPI 3.1.1; este documento prioriza el camino rapido, las decisiones de uso y los ejemplos habituales.
|
Esta guia explica como descubrir y consumir la API. El contrato tecnico completo y canonico se publica en OpenAPI 3.1.1; este documento prioriza el camino rapido, las decisiones de uso y los ejemplos habituales.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
**Modulo:** RAG
|
**Modulo:** RAG
|
||||||
**Ultima actualizacion:** 2026-09-08
|
**Ultima actualizacion:** 2026-09-08
|
||||||
**Ultima modificacion por:** Agente RAG 2
|
**Ultima modificacion por:** Agente RAG 2
|
||||||
**Estado:** Diseño cerrado, pendiente de implementacion
|
**Estado:** Implementado y desplegado; pendiente de preparar PostgreSQL y ejecutar la migracion legacy
|
||||||
|
|
||||||
## Resultado esperado
|
## Resultado esperado
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
**Modulo:** RAG
|
**Modulo:** RAG
|
||||||
**Ultima actualizacion:** 2026-09-11
|
**Ultima actualizacion:** 2026-09-11
|
||||||
**Ultima modificacion por:** Subagente Implementacion ciclo de vida del conocimiento
|
**Ultima modificacion por:** Subagente Implementacion ciclo de vida del conocimiento
|
||||||
**Estado:** V1 desplegada en VPS2; ciclo de vida implementado localmente pendiente de migracion productiva
|
**Estado:** V1 desplegada en VPS2; ciclo de vida desplegado, pendiente de configurar PostgreSQL y migrar el corpus
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -246,15 +246,21 @@ Ese archivo no debe versionarse porque contiene secretos reales.
|
||||||
- el estado persistente vectorial vive en `qdrant`
|
- el estado persistente vectorial vive en `qdrant`
|
||||||
- desde el punto 2, el catalogo de fuentes y versiones vive en PostgreSQL
|
- desde el punto 2, el catalogo de fuentes y versiones vive en PostgreSQL
|
||||||
|
|
||||||
### Arranque con migraciones
|
### Migraciones SQL separadas del arranque
|
||||||
|
|
||||||
La imagen arranca ejecutando primero:
|
El servicio RAG arranca únicamente con:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
node dist/modules/catalog/migrations.js && node dist/server.js
|
node dist/server.js
|
||||||
```
|
```
|
||||||
|
|
||||||
Si `POSTGRES_URL` no esta configurada, el migrador informa que omite migraciones. Si PostgreSQL esta configurado y una migracion falla o cambia su checksum, el servicio no debe completar el arranque.
|
Las migraciones SQL se ejecutan de forma explicita cuando corresponda:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm run migrate:lifecycle
|
||||||
|
```
|
||||||
|
|
||||||
|
El comando comprueba `rag_schema_migrations`, aplica solo archivos nuevos y detiene el proceso si detecta un checksum cambiado. Un reinicio o deploy normal no modifica el esquema.
|
||||||
|
|
||||||
### Secuencia operativa del punto 2
|
### Secuencia operativa del punto 2
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,75 @@
|
||||||
|
|
||||||
## Registro de sesion
|
## Registro de sesion
|
||||||
|
|
||||||
|
### 2026-09-11 - Agente RAG 2 - Preparacion PostgreSQL
|
||||||
|
|
||||||
|
**Modelo:** gpt-5.6-luna
|
||||||
|
**Session ID OpenCode:** `ses_29bdbd003ffeLrLjUlFgnp08Y7`
|
||||||
|
**Directorio:** `/home/pancho/Documentos/Empresa/Desarrollo/IA/RAG`
|
||||||
|
|
||||||
|
**Trabajo realizado:**
|
||||||
|
- Inspeccion de solo lectura completada por SSH en VPS2 usando el contenedor `ia_servicios_postgres-ia-servicios`.
|
||||||
|
- Creada la base `db_rag` y el usuario dedicado `usr_rag`, propietario de su base y con permisos completos sobre su esquema y objetos futuros.
|
||||||
|
- Verificado el acceso de `usr_rag` por TCP contra `db_rag`.
|
||||||
|
- Separada la ejecucion de migraciones SQL del arranque normal del servicio RAG.
|
||||||
|
- Actualizados el procedimiento de despliegue y los paquetes de mejoras diferidas.
|
||||||
|
|
||||||
|
**Validacion:**
|
||||||
|
- `npm run check` correcto.
|
||||||
|
- `npm test` correcto: 25/25.
|
||||||
|
- `npm run build` correcto.
|
||||||
|
- `git diff --check` correcto.
|
||||||
|
|
||||||
|
**Estado final:**
|
||||||
|
- PostgreSQL preparado a nivel de base y usuario.
|
||||||
|
- Pendiente configurar la conexion en EasyPanel, ejecutar explicitamente el esquema y verificar produccion.
|
||||||
|
- La contraseña se entrega fuera de este historial y no se persiste en documentacion.
|
||||||
|
|
||||||
|
**Archivos modificados:**
|
||||||
|
- `Dockerfile`
|
||||||
|
- `package.json`
|
||||||
|
- `docs/DESPLIEGUE_EASYPANEL.md`
|
||||||
|
- `docs/PENDIENTES_RAG.md`
|
||||||
|
- `docs/HISTORIAL_SESIONES.md`
|
||||||
|
|
||||||
|
### 2026-09-11 - Agente RAG 2 - Mejoras diferidas
|
||||||
|
|
||||||
|
**Modelo:** openai/gpt-6-astra
|
||||||
|
**Session ID OpenCode:** `ses_29bdbd003ffeLrLjUlFgnp08Y7`
|
||||||
|
**Rol:** Continuidad operativa y evolutiva del RAG.
|
||||||
|
|
||||||
|
- Añadido paquete posterior de seguimiento del corpus por API y frontend al punto 2.
|
||||||
|
- Añadido paquete posterior de backups manuales al punto 7, limitado a RAG y Qdrant; la base de n8n queda fuera.
|
||||||
|
- Retirados los backups habituales del prerrequisito bloqueante PostgreSQL, conservando el snapshot propio de la migracion legacy.
|
||||||
|
- Estado: mejoras diferidas sin urgencia; preparacion PostgreSQL sigue como tarea actual.
|
||||||
|
- Archivos: `RAG/docs/PENDIENTES_RAG.md`, `RAG/docs/HISTORIAL_SESIONES.md`, `docs/HISTORIAL_SESIONES.md`.
|
||||||
|
|
||||||
|
### 2026-09-11 - Agente RAG 2
|
||||||
|
|
||||||
|
**Modelo:** gpt-5.6-luna
|
||||||
|
**Session ID OpenCode:** `ses_29bdbd003ffeLrLjUlFgnp08Y7`
|
||||||
|
**Directorio:** `/home/pancho/Documentos/Empresa/Desarrollo/IA/RAG`
|
||||||
|
|
||||||
|
**Trabajo realizado:**
|
||||||
|
- Confirmado que PostgreSQL se introdujo con el punto 2 y que no existia una URL previa del RAG que se hubiera perdido.
|
||||||
|
- Detectada la omision de configuracion operativa de la nueva dependencia en EasyPanel.
|
||||||
|
- Documentado el incidente en `docs/REGISTRO_SITUACIONES.md`.
|
||||||
|
- Creado en `PENDIENTES_RAG.md` el prerrequisito bloqueante de preparar PostgreSQL, crear/verificar esquema, configurar conexion, revisar operacion y cargar las fuentes actuales.
|
||||||
|
- Actualizados los estados de la documentacion del punto 2.
|
||||||
|
|
||||||
|
**Estado final:**
|
||||||
|
- No se ejecutaran migraciones legacy, pruebas de ciclo de vida ni OCR hasta completar el prerrequisito PostgreSQL.
|
||||||
|
|
||||||
|
**Archivos modificados:**
|
||||||
|
- `RAG/docs/PENDIENTES_RAG.md`
|
||||||
|
- `RAG/docs/API_RAG.md`
|
||||||
|
- `RAG/docs/INGESTA.md`
|
||||||
|
- `RAG/docs/SISTEMA_RAG_BASE.md`
|
||||||
|
- `RAG/docs/CONTRATO_CICLO_VIDA_Y_OCR.md`
|
||||||
|
- `RAG/docs/DESPLIEGUE_EASYPANEL.md`
|
||||||
|
- `RAG/docs/HISTORIAL_SESIONES.md`
|
||||||
|
- `docs/REGISTRO_SITUACIONES.md`
|
||||||
|
|
||||||
### 2026-04-06 - Agente RAG 2
|
### 2026-04-06 - Agente RAG 2
|
||||||
|
|
||||||
**Modelo:** gpt-5.4
|
**Modelo:** gpt-5.4
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
**Modulo:** RAG
|
**Modulo:** RAG
|
||||||
**Ultima actualizacion:** 2026-09-11
|
**Ultima actualizacion:** 2026-09-11
|
||||||
**Ultima modificacion por:** Subagente Implementacion ciclo de vida del conocimiento
|
**Ultima modificacion por:** Subagente Implementacion ciclo de vida del conocimiento
|
||||||
**Estado:** Punto 2 implementado localmente; pendiente de migracion y validacion en produccion
|
**Estado:** Punto 2 desplegado; pendiente de preparar PostgreSQL, migrar el corpus y validar en produccion
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
# Pendientes priorizados del RAG
|
# Pendientes priorizados del RAG
|
||||||
|
|
||||||
**Ultima actualizacion:** 2026-09-08
|
**Ultima actualizacion:** 2026-09-11
|
||||||
**Responsable de la priorizacion:** Usuario
|
**Responsable de la priorizacion:** Usuario
|
||||||
**Estado:** Activo
|
**Estado:** Activo
|
||||||
|
|
||||||
|
|
@ -17,7 +17,20 @@ Este documento es la fuente canonica del orden de trabajo pendiente del modulo R
|
||||||
|
|
||||||
## 2. Ciclo de vida del conocimiento
|
## 2. Ciclo de vida del conocimiento
|
||||||
|
|
||||||
**Diseño:** Contrato de implementacion cerrado en [`CONTRATO_CICLO_VIDA_Y_OCR.md`](./CONTRATO_CICLO_VIDA_Y_OCR.md). Pendiente de implementar y validar en produccion antes de iniciar el punto 3.
|
**Estado:** Implementado y desplegado; bloqueado por la preparacion operativa de PostgreSQL y la migracion controlada del corpus.
|
||||||
|
|
||||||
|
El contrato de implementacion esta cerrado en [`CONTRATO_CICLO_VIDA_Y_OCR.md`](./CONTRATO_CICLO_VIDA_Y_OCR.md). Antes de ejecutar las pruebas de migracion o activar el ciclo de vida hay que completar este prerrequisito:
|
||||||
|
|
||||||
|
### Prerrequisito bloqueante: preparar PostgreSQL
|
||||||
|
|
||||||
|
- Confirmar que existe la instancia y la base de datos que usara RAG en EasyPanel.
|
||||||
|
- Obtener el hostname interno, puerto, nombre de base de datos, usuario y requisitos SSL.
|
||||||
|
- Configurar `POSTGRES_URL`, `POSTGRES_SSL` y `LIFECYCLE_ADMIN_TOKEN` en el servicio RAG.
|
||||||
|
- Arrancar las migraciones del esquema y verificar las tablas, permisos y `SELECT 1` desde RAG.
|
||||||
|
- Revisar que no falten variables, red interna, credenciales, almacenamiento persistente o permisos de migracion. La configuracion de backups queda diferida al paquete del punto 7.
|
||||||
|
- Inventariar las fuentes actuales de Qdrant y preparar su carga en el catalogo PostgreSQL.
|
||||||
|
|
||||||
|
No ejecutar la migracion legacy, activar enforcement ni iniciar OCR hasta cerrar este prerrequisito.
|
||||||
|
|
||||||
- Crear un catalogo de fuentes y versiones ingeridas.
|
- Crear un catalogo de fuentes y versiones ingeridas.
|
||||||
- Saber que documento esta vigente, obsoleto, reemplazado o pendiente de reingesta.
|
- Saber que documento esta vigente, obsoleto, reemplazado o pendiente de reingesta.
|
||||||
|
|
@ -25,6 +38,16 @@ Este documento es la fuente canonica del orden de trabajo pendiente del modulo R
|
||||||
- Registrar fecha de indexacion, modelo de embeddings, proveedor y version del contenido.
|
- Registrar fecha de indexacion, modelo de embeddings, proveedor y version del contenido.
|
||||||
- Facilitar el reemplazo o rollback de una fuente sin depender de operaciones manuales dificiles de auditar.
|
- Facilitar el reemplazo o rollback de una fuente sin depender de operaciones manuales dificiles de auditar.
|
||||||
|
|
||||||
|
### Paquete de mejora posterior: seguimiento del corpus en API y frontend
|
||||||
|
|
||||||
|
**Prioridad:** Diferida, sin urgencia; no bloquea la preparacion de PostgreSQL ni el cierre funcional del punto 2. Retomar al trabajar en el frontend de gestion.
|
||||||
|
|
||||||
|
- Exponer por API los documentos que componen cada version de una fuente.
|
||||||
|
- Exponer el historial de intentos de ingesta, resultados y errores.
|
||||||
|
- Incluir fechas y detalles de error de las versiones en las respuestas de la API.
|
||||||
|
- Ampliar la vista basica del playground a una gestion de fuentes, documentos, versiones e ingestas con su estado e historial.
|
||||||
|
- Incorporar al frontend las operaciones ya disponibles por API: activacion, rollback, reintento y purga.
|
||||||
|
|
||||||
## 3. OCR integrado en la ingesta
|
## 3. OCR integrado en la ingesta
|
||||||
|
|
||||||
**Diseño:** Contrato de implementacion cerrado en [`CONTRATO_CICLO_VIDA_Y_OCR.md`](./CONTRATO_CICLO_VIDA_Y_OCR.md). Su ejecucion queda bloqueada hasta completar el punto 2.
|
**Diseño:** Contrato de implementacion cerrado en [`CONTRATO_CICLO_VIDA_Y_OCR.md`](./CONTRATO_CICLO_VIDA_Y_OCR.md). Su ejecucion queda bloqueada hasta completar el punto 2.
|
||||||
|
|
@ -68,6 +91,16 @@ Este documento es la fuente canonica del orden de trabajo pendiente del modulo R
|
||||||
- Revisar copias temporales o backups asociados a la migracion antes de eliminarlos.
|
- Revisar copias temporales o backups asociados a la migracion antes de eliminarlos.
|
||||||
- Mantener un procedimiento fiable de despliegue, verificacion y rollback.
|
- Mantener un procedimiento fiable de despliegue, verificacion y rollback.
|
||||||
|
|
||||||
|
### Paquete de mejora posterior: backups manuales del RAG
|
||||||
|
|
||||||
|
**Prioridad:** Diferida, sin urgencia; no bloquea la preparacion actual de PostgreSQL. Sin programacion automatica.
|
||||||
|
|
||||||
|
- Configurar el destino de backups y diagnosticar el error observado al crearlo en EasyPanel.
|
||||||
|
- Preparar copias manuales de la nueva base del RAG y snapshots de Qdrant; `db_gestion_flujos_n8n` es ajena a este alcance.
|
||||||
|
- Definir una ventana sin escrituras para obtener copias coherentes de ambos almacenes.
|
||||||
|
- Documentar y comprobar la restauracion, incluyendo la recuperacion de los permisos necesarios.
|
||||||
|
- Este paquete difiere la solucion habitual de backups; el snapshot previo exigido por la migracion legacy sigue formando parte de esa operacion.
|
||||||
|
|
||||||
## 8. Sistema de evaluacion
|
## 8. Sistema de evaluacion
|
||||||
|
|
||||||
- Revisar periodicamente los logs de evaluacion almacenados en Qdrant.
|
- Revisar periodicamente los logs de evaluacion almacenados en Qdrant.
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
**Modulo:** RAG
|
**Modulo:** RAG
|
||||||
**Ultima actualizacion:** 2026-09-11
|
**Ultima actualizacion:** 2026-09-11
|
||||||
**Ultima modificacion por:** Agente RAG 2
|
**Ultima modificacion por:** Agente RAG 2
|
||||||
**Estado:** V1 operativa; ciclo de vida implementado localmente y pendiente de despliegue
|
**Estado:** V1 operativa; ciclo de vida desplegado y pendiente de preparar PostgreSQL y migrar el corpus
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -111,7 +111,7 @@ Cada fuente dispone de versiones controladas en PostgreSQL, mientras Qdrant cons
|
||||||
|
|
||||||
Esto permite actualizar una fuente sin mezclar contenido antiguo y nuevo, detectar ingestas identicas, conservar versiones anteriores y hacer rollback sin recalcular embeddings. Los parametros de consulta actuales no cambian.
|
Esto permite actualizar una fuente sin mezclar contenido antiguo y nuevo, detectar ingestas identicas, conservar versiones anteriores y hacer rollback sin recalcular embeddings. Los parametros de consulta actuales no cambian.
|
||||||
|
|
||||||
Esta mejora esta implementada y validada localmente. Falta desplegarla y registrar el corpus existente como version inicial antes de activarla en produccion.
|
Esta mejora esta implementada y desplegada. Falta preparar PostgreSQL, registrar el corpus existente como version inicial y validarla antes de activar enforcement en produccion.
|
||||||
|
|
||||||
Los pendientes vigentes, su prioridad y su estado se mantienen en [`PENDIENTES_RAG.md`](./PENDIENTES_RAG.md).
|
Los pendientes vigentes, su prioridad y su estado se mantienen en [`PENDIENTES_RAG.md`](./PENDIENTES_RAG.md).
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "tsx watch src/server.ts",
|
"dev": "tsx watch src/server.ts",
|
||||||
"build": "tsc -p tsconfig.json",
|
"build": "tsc -p tsconfig.json",
|
||||||
"start": "node dist/modules/catalog/migrations.js && node dist/server.js",
|
"start": "node dist/server.js",
|
||||||
"migrate:lifecycle": "node dist/modules/catalog/migrations.js",
|
"migrate:lifecycle": "node dist/modules/catalog/migrations.js",
|
||||||
"migrate:legacy:lifecycle": "node dist/scripts/migrate-legacy-lifecycle.js",
|
"migrate:legacy:lifecycle": "node dist/scripts/migrate-legacy-lifecycle.js",
|
||||||
"test": "NODE_ENV=test tsx --test tests/**/*.test.ts",
|
"test": "NODE_ENV=test tsx --test tests/**/*.test.ts",
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue