Pipeline de síntesis — reunir los documentos, descubrir las contradicciones
La pipeline de síntesis multi-documento toma un conjunto de páginas/documentos de un archivo y produce páginas wiki reunidas: cada página sintetiza las fuentes, señala dónde las fuentes no están de acuerdo (contradiction detection), respeta los presupues…
La pipeline de síntesis multi-documento toma un conjunto de páginas/documentos de un archivo y produce páginas wiki reunidas: cada página sintetiza las fuentes, señala dónde las fuentes no están de acuerdo (contradiction detection), respeta los presupuestos de tokens/llamadas/páginas por run, y toca el sistema de archivos solo tras la aprobación selectiva de aquello que se quiere insertar.
Función Community (la pipeline corre sobre las mismas infraestructuras del chat orchestrator; los límites de presupuesto por run). Fuentes:docs/SERVICES.md(el dominio Synthesis,synthesisPageWriter.ts),README.md:33. Filas de procedencia:FACT-CENSUS.mdF-SYNTH-1.
Cómo corre la pipeline
La pipeline la orquesta runSynthesisPipeline (fachada synthesisService.ts; el cuerpo en synthesis/synthesisStages.ts — runPipelineStages, callSynthesisLLMStage, …):
| Paso | Qué hace |
|---|---|
| 1. Extracción de entidades | del corpus seleccionado (synthesisStages.ts:569) |
| 2. Página por archivo | generatePageSummary por página (:282) |
| 3-4. El fondo y la decisión | los bloques finales con el system prompt (la inyección del bloque wiki: Pass 4 solo en el rol SYSTEM, synthesisStages.ts:784-788) |
| Contradicciones | synthesisContradictionService.ts: el pareo de candidatas vía Jaccard (umbral 0.15) + el juez LLM por pareja (judgePairContradiction) + los marcadores de contradicción sobre las páginas |
| Huérfanas y wikilinks rotos | synthesisOrphanService.ts (detectOrphanPages, detectBrokenWikilinks) |
| Escritura | synthesisPageWriter.ts: applyApprovedChanges persiste los cambios aprobados; el frontmatter de fuente (buildSourceFrontmatter) cita la procedencia |
Seguimiento del presupuesto
BudgetTracker (synthesisBudgetService.ts) acota tokens / llamadas LLM / páginas por run (la configuración vía loadBudgetConfig): la pipeline se detiene cuando el presupuesto se agota — la salida ya escrita sigue válida. El watchdog del presupuesto va a la par con el del chat orchestrator.
La aprobación selectiva
Los cambios propuestos por la síntesis NO aterrizan automáticamente en la wiki: pasan por el flujo de aprobación (applyApprovedChanges persiste solo aquello que quien aprueba confirmó). La vista previa determinista (la misma máquina de wikiWriteService) precede a cada escritura; las páginas propuestas llevan el frontmatter de fuente.
Detección de contradicciones
Las parejas candidatas se forman por similitud (Jaccard, umbral 0.15) y las parejas sospechosas pasan al juez LLM (judgePairContradiction): el resultado = los marcadores de contradicción sobre las páginas implicadas (buildContradictionMarker) + el resumen de la afirmación (extractClaimSummary). La fidelidad del proceso se muestrea semanalmente (runFidelitySample, domingo 03:00 — synthesisFidelityService.ts).
Disparadores y colas de trabajo
- Post-OCR: la cola
synthesisTriggerService(onOcrJobCompleted) encola los run de síntesis tras completarse el OCR, con enfriamiento (isCooldownActive). - Reaper: el scheduler
synthesisReaperJob(cada 15 minutos) gira los runPROCESSINGhuérfanos aFAILED.
Esta guía cubre la superficie operativa del pipeline de síntesis; la profundidad técnica vive en el post gemelo:
Provenance
| Sección | Fuente |
|---|---|
| Fachada / etapas / presupuesto / contradicciones | docs/SERVICES.md (§ Synthesis + los módulos synthesis*) — F-SYNTH-1 |
| Disparadores / reaper | docs/SERVICES.md (§ Schedulers & jobs — synthesisTriggerService, synthesisReaperJob) |
| La línea del README | README.md:33 (la línea del synthesis) — F-SYNTH-1 |
| La inyección wiki / Pass 4 | docs/WIKI_SCHEMA_LAYER.md (§ Injection seams — synthesisStages.ts:784-788) |
---
Referencia operativa — Simmetric Chat v0.28.1 (documentos actualizados el 2026-10-02, SHA del censo `aca5b8ff`).