n8n-nodes-engram 0.4.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +66 -5
- package/dist/extraction/EntityExtractor.d.ts +4 -0
- package/dist/extraction/EntityExtractor.js +19 -4
- package/dist/extraction/EntityExtractor.js.map +1 -1
- package/dist/extraction/ExtractionPipeline.d.ts +10 -0
- package/dist/extraction/ExtractionPipeline.js +153 -64
- package/dist/extraction/ExtractionPipeline.js.map +1 -1
- package/dist/extraction/ExtractionSource.d.ts +15 -0
- package/dist/extraction/ExtractionSource.js +32 -0
- package/dist/extraction/ExtractionSource.js.map +1 -0
- package/dist/extraction/RelationshipExtractor.d.ts +4 -0
- package/dist/extraction/RelationshipExtractor.js +19 -4
- package/dist/extraction/RelationshipExtractor.js.map +1 -1
- package/dist/extraction/prompts.d.ts +2 -0
- package/dist/extraction/prompts.js +27 -2
- package/dist/extraction/prompts.js.map +1 -1
- package/dist/memory/EngramChatMemory.d.ts +33 -1
- package/dist/memory/EngramChatMemory.js +150 -24
- package/dist/memory/EngramChatMemory.js.map +1 -1
- package/dist/memory/EngramChatMessageHistory.d.ts +8 -1
- package/dist/memory/EngramChatMessageHistory.js +14 -10
- package/dist/memory/EngramChatMessageHistory.js.map +1 -1
- package/dist/nodes/EngramAdmin/EngramAdmin.node.js +283 -10
- package/dist/nodes/EngramAdmin/EngramAdmin.node.js.map +1 -1
- package/dist/nodes/EngramExplorer/EngramExplorer.node.js +613 -2
- package/dist/nodes/EngramExplorer/EngramExplorer.node.js.map +1 -1
- package/dist/nodes/EngramMemory/EngramMemory.node.js +377 -3
- package/dist/nodes/EngramMemory/EngramMemory.node.js.map +1 -1
- package/dist/schemas/EpisodicNode.schema.d.ts +91 -0
- package/dist/schemas/EpisodicNode.schema.js +37 -5
- package/dist/schemas/EpisodicNode.schema.js.map +1 -1
- package/dist/schemas/ExtractionMetadata.schema.d.ts +123 -0
- package/dist/schemas/ExtractionMetadata.schema.js +96 -0
- package/dist/schemas/ExtractionMetadata.schema.js.map +1 -0
- package/dist/schemas/GraphData.schema.d.ts +979 -4
- package/dist/schemas/GraphData.schema.js +22 -13
- package/dist/schemas/GraphData.schema.js.map +1 -1
- package/dist/schemas/GraphDataMigration.d.ts +37 -0
- package/dist/schemas/GraphDataMigration.js +106 -0
- package/dist/schemas/GraphDataMigration.js.map +1 -0
- package/dist/schemas/index.d.ts +4 -2
- package/dist/schemas/index.js +21 -1
- package/dist/schemas/index.js.map +1 -1
- package/dist/search/ContextBudget.d.ts +15 -0
- package/dist/search/ContextBudget.js +70 -0
- package/dist/search/ContextBudget.js.map +1 -0
- package/dist/search/HybridSearchEngine.d.ts +54 -2
- package/dist/search/HybridSearchEngine.js +224 -27
- package/dist/search/HybridSearchEngine.js.map +1 -1
- package/dist/search/RetrievalGovernance.d.ts +56 -0
- package/dist/search/RetrievalGovernance.js +173 -0
- package/dist/search/RetrievalGovernance.js.map +1 -0
- package/dist/storage/GraphologyStorage.d.ts +34 -6
- package/dist/storage/GraphologyStorage.js +715 -238
- package/dist/storage/GraphologyStorage.js.map +1 -1
- package/dist/storage/IGraphStorage.d.ts +90 -3
- package/dist/storage/Neo4jStorage.d.ts +22 -4
- package/dist/storage/Neo4jStorage.js +499 -27
- package/dist/storage/Neo4jStorage.js.map +1 -1
- package/dist/traversal/GraphTraverser.d.ts +2 -0
- package/dist/traversal/GraphTraverser.js +7 -1
- package/dist/traversal/GraphTraverser.js.map +1 -1
- package/dist/utils/logWrapper.js +1 -2
- package/dist/utils/logWrapper.js.map +1 -1
- package/docs/production-neo4j.md +15 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
|
|
26
26
|
<p align="center">
|
|
27
27
|
<a href="#installation">Installation</a> ·
|
|
28
|
+
<a href="#upgrading-from-v04x">Upgrade</a> ·
|
|
28
29
|
<a href="#node-reference">Nodes</a> ·
|
|
29
30
|
<a href="#storage-backends">Storage</a> ·
|
|
30
31
|
<a href="#knowledge-extraction">Extraction</a> ·
|
|
@@ -53,7 +54,7 @@ Every conversation is stored as an episode. An optional LLM extraction pipeline
|
|
|
53
54
|
| **2** | Storage Backends | Embedded (zero-setup) or Neo4j (production) |
|
|
54
55
|
| **5** | Extraction Stages | Entity, dedup, relationships, contradictions, embeddings |
|
|
55
56
|
| **3** | Search Modes | Full-text, vector, hybrid RRF fusion |
|
|
56
|
-
| **
|
|
57
|
+
| **350** | Tests | Unit + integration across 35 test suites |
|
|
57
58
|
|
|
58
59
|
---
|
|
59
60
|
|
|
@@ -100,6 +101,49 @@ npm install n8n-nodes-engram
|
|
|
100
101
|
|
|
101
102
|
---
|
|
102
103
|
|
|
104
|
+
## Upgrading from v0.4.x
|
|
105
|
+
|
|
106
|
+
Version `0.5.0` adds episode provenance and governance fields. Storage migration and n8n node-version upgrades are separate steps.
|
|
107
|
+
|
|
108
|
+
1. Create a current Engram export or storage/database backup before upgrading the package.
|
|
109
|
+
2. Upgrade `n8n-nodes-engram`, restart n8n, and confirm the installed package version.
|
|
110
|
+
3. Complete the storage-backend steps below.
|
|
111
|
+
4. Run **Engram Admin > Monitoring > Diagnostics** and confirm that no storage migration remains.
|
|
112
|
+
5. Upgrade selected Engram Memory nodes to v2 in an inactive workflow copy before changing production workflows.
|
|
113
|
+
|
|
114
|
+
### Embedded Storage
|
|
115
|
+
|
|
116
|
+
No migration node is required. On first initialization after the package upgrade, Engram:
|
|
117
|
+
|
|
118
|
+
- migrates the embedded graph before opening it;
|
|
119
|
+
- creates and verifies a backup ending in `.pre-schema-2.0.backup.json`;
|
|
120
|
+
- replaces the graph atomically; and
|
|
121
|
+
- leaves the original graph unchanged if backup verification or migration fails.
|
|
122
|
+
|
|
123
|
+
After initialization, use **Engram Admin > Monitoring > Diagnostics** to verify the migration and backup status.
|
|
124
|
+
|
|
125
|
+
### Neo4j Storage
|
|
126
|
+
|
|
127
|
+
Neo4j migration is intentionally operator-controlled so Engram does not perform an unbounded database rewrite during startup.
|
|
128
|
+
|
|
129
|
+
1. Add an **Engram Admin** node configured with the same Neo4j credentials as the production memory workflow.
|
|
130
|
+
2. Select **Lifecycle > Migrate Storage Schema** and run **Dry Run**.
|
|
131
|
+
3. Review the matched legacy episode count.
|
|
132
|
+
4. Select **Migrate**, set **Confirm Migration** to **Confirmed**, and execute a bounded batch.
|
|
133
|
+
5. Repeat until `remaining_count` is `0`, then confirm the result with **Monitoring > Diagnostics**.
|
|
134
|
+
|
|
135
|
+
The Neo4j migration is additive and only fills missing governance fields with conservative defaults.
|
|
136
|
+
|
|
137
|
+
### Engram Memory v2
|
|
138
|
+
|
|
139
|
+
Installing `0.5.0` does not silently change saved Engram Memory nodes. Existing v1 nodes retain their previous behavior until explicitly upgraded through n8n's node upgrade action.
|
|
140
|
+
|
|
141
|
+
- Keep **Human Episode Kind > Active Human** for direct agent conversations.
|
|
142
|
+
- Select **Passive Human** for observed or curated human messages stored by passive ingestion workflows.
|
|
143
|
+
- Validate the upgraded node in an inactive workflow copy before replacing the production workflow.
|
|
144
|
+
|
|
145
|
+
---
|
|
146
|
+
|
|
103
147
|
## Quick Start
|
|
104
148
|
|
|
105
149
|
### Minimal Setup (No LLM Required)
|
|
@@ -140,6 +184,11 @@ On each conversation turn, Engram Memory:
|
|
|
140
184
|
| --- | --- | --- |
|
|
141
185
|
| Storage Backend | Embedded (Graphology) or Neo4j | Embedded |
|
|
142
186
|
| Knowledge Extraction | LLM-powered entity extraction | Disabled |
|
|
187
|
+
| Store Human Episodes | Persist human messages as episodes (v2) | Enabled |
|
|
188
|
+
| Human Episode Kind | Classify human input as active or passive provenance (v2) | Active Human |
|
|
189
|
+
| Store AI Episodes | Persist assistant replies as episodes (v2) | Enabled |
|
|
190
|
+
| Extract from Human Messages | Allow human content to produce facts (v2) | Enabled |
|
|
191
|
+
| Extract from AI Messages | Allow assistant content to produce facts (v2) | Disabled |
|
|
143
192
|
| Semantic Search | Vector embeddings for hybrid search | Disabled |
|
|
144
193
|
| Graph Traversal | BFS enrichment from matched entities | Disabled |
|
|
145
194
|
| Context Window | Recent turns to include | 10 |
|
|
@@ -147,6 +196,8 @@ On each conversation turn, Engram Memory:
|
|
|
147
196
|
| Min Relevance Score | Threshold for inclusion (0–1) | 0.5 |
|
|
148
197
|
| Retention Policy | Episode lifecycle management | Forever |
|
|
149
198
|
|
|
199
|
+
Existing saved Engram Memory nodes retain their original node version and behavior when the package is upgraded. Use n8n's node upgrade action on a workflow copy to adopt v2 controls. Passive ingestion workflows should select **Human Episode Kind > Passive Human**, while direct agent conversations should keep the default **Active Human** classification.
|
|
200
|
+
|
|
150
201
|
### Engram Explorer
|
|
151
202
|
|
|
152
203
|
> Regular node—CRUD operations on the knowledge graph.
|
|
@@ -154,8 +205,8 @@ On each conversation turn, Engram Memory:
|
|
|
154
205
|
| Resource | Operations |
|
|
155
206
|
| --- | --- |
|
|
156
207
|
| **Entity** | Create, Get, Get by Name, List, Search, Update, Delete |
|
|
157
|
-
| **Relationship** | Create, Get, Get Between, Get for Entity, Search, Update, Delete, Get Changelog |
|
|
158
|
-
| **Episode** | Get, Get Recent, Get by Date Range, Get Count |
|
|
208
|
+
| **Relationship** | Create, Get, Get Between, Get for Entity, Search, Review, Update, Delete, Get Changelog |
|
|
209
|
+
| **Episode** | Get, Get Recent, Get by Date Range, Get Count, List, Update, Delete |
|
|
159
210
|
| **Traversal** | BFS from Entity, BFS from Episodes |
|
|
160
211
|
|
|
161
212
|
### Engram Admin
|
|
@@ -165,7 +216,7 @@ On each conversation turn, Engram Memory:
|
|
|
165
216
|
| Resource | Operations |
|
|
166
217
|
| --- | --- |
|
|
167
218
|
| **Monitoring** | Stats, List Groups, Group Stats, Embedding Coverage, Diagnostics |
|
|
168
|
-
| **Lifecycle** | Apply Retention, Clear Group, Bulk Clear Groups, Clear All |
|
|
219
|
+
| **Lifecycle** | Apply Retention, Purge Episodes, Migrate Storage Schema, Clear Group, Bulk Clear Groups, Clear All |
|
|
169
220
|
| **Hygiene** | Orphaned Entities, Duplicate Entities, Expire Stale Edges, Rebuild Search Index, Backfill Embeddings |
|
|
170
221
|
| **Portability** | Export, Import |
|
|
171
222
|
| **Analysis** | Detect Communities |
|
|
@@ -180,9 +231,19 @@ Engram Admin includes a read-only **Monitoring > Diagnostics** operation for pro
|
|
|
180
231
|
|
|
181
232
|
Use **Monitoring > Embedding Coverage** to check whether entities and facts have vectors before enabling hybrid search broadly. Use **Hygiene > Rebuild Search Index** to rebuild the embedded full-text index from stored graph data. Use **Hygiene > Backfill Embeddings** in dry-run mode first, then disable dry-run to fill missing embeddings with the configured embedding model.
|
|
182
233
|
|
|
234
|
+
Explorer entity and relationship searches can optionally return retrieval diagnostics. The aggregate trace shows active filters, bounded candidate scores and decisions, rejection reasons, and which complete items fit the context preview budget. Diagnostics are disabled by default.
|
|
235
|
+
|
|
183
236
|
### Import, Export, and Backups
|
|
184
237
|
|
|
185
|
-
Engram exports include count metadata and a SHA-256 checksum. Imports support **Dry Run** mode, optional maximum item limits, checksum verification, and
|
|
238
|
+
Engram exports use graph format `2.0` and include count metadata and a SHA-256 checksum. Imports support **Dry Run** mode, optional maximum item limits, checksum verification before migration, migration reporting, and reference-integrity warnings before writing data. Existing `1.0` backups remain importable; episodes without provenance are classified as `legacy`, `unverified`, and `proposed` rather than being accepted automatically.
|
|
239
|
+
|
|
240
|
+
Embedded storage upgrades automatically before the graph is opened. Engram creates and verifies an owner-readable backup beside the storage file, writes the migrated graph with atomic replacement, and stops without changing the source if backup verification or migration fails. The backup name ends with `.pre-schema-2.0.backup.json`, and **Monitoring > Diagnostics** reports its path and verification state.
|
|
241
|
+
|
|
242
|
+
Neo4j remains available during an upgrade and does not perform an unbounded startup rewrite. Use **Lifecycle > Migrate Storage Schema** in **Dry Run** mode to inspect the remaining legacy episode count, then apply confirmed bounded batches until the remaining count reaches zero. The migration is additive: it only fills missing governance fields with conservative legacy defaults.
|
|
243
|
+
|
|
244
|
+
For a staged restore, first run the import in **Dry Run** mode and review the source/target versions, default counts, and warnings. Keep the original export unchanged, then perform the write import only after the report matches expectations. Export the restored graph again to create a checksummed `2.0` backup.
|
|
245
|
+
|
|
246
|
+
To remove historical monitor or tool pollution, use Explorer episode filters to inspect the affected source, kind, trust level, or date range. Then run Admin **Lifecycle > Purge Episodes** in dry-run mode before confirming the bounded purge.
|
|
186
247
|
|
|
187
248
|
For production Neo4j deployments, see [`docs/production-neo4j.md`](docs/production-neo4j.md). Ready-to-import starter workflows are available in [`docs/workflows/`](docs/workflows/).
|
|
188
249
|
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import type { LlmClient } from './LlmClient';
|
|
2
|
+
import { type ExtractionSource } from './ExtractionSource';
|
|
2
3
|
export interface ExtractedEntity {
|
|
3
4
|
name: string;
|
|
4
5
|
entity_type: string;
|
|
5
6
|
summary: string;
|
|
7
|
+
confidence: number | null;
|
|
6
8
|
}
|
|
7
9
|
export declare class EntityExtractor {
|
|
8
10
|
private llm;
|
|
9
11
|
constructor(llm: LlmClient);
|
|
10
12
|
extract(humanMessage: string, aiMessage: string, entityTypes: string[], existingEntities: string[]): Promise<ExtractedEntity[]>;
|
|
13
|
+
extractSources(sources: ExtractionSource[], entityTypes: string[], existingEntities: string[], requireConfidence?: boolean): Promise<ExtractedEntity[]>;
|
|
14
|
+
private extractWithPrompt;
|
|
11
15
|
}
|
|
@@ -2,18 +2,22 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.EntityExtractor = void 0;
|
|
4
4
|
const prompts_1 = require("./prompts");
|
|
5
|
+
const ExtractionSource_1 = require("./ExtractionSource");
|
|
5
6
|
class EntityExtractor {
|
|
6
7
|
constructor(llm) {
|
|
7
8
|
this.llm = llm;
|
|
8
9
|
}
|
|
9
10
|
async extract(humanMessage, aiMessage, entityTypes, existingEntities) {
|
|
11
|
+
return this.extractWithPrompt((0, prompts_1.entityExtractionUser)(humanMessage, aiMessage, entityTypes, existingEntities), entityTypes, false);
|
|
12
|
+
}
|
|
13
|
+
async extractSources(sources, entityTypes, existingEntities, requireConfidence = false) {
|
|
14
|
+
return this.extractWithPrompt((0, prompts_1.entityExtractionSourcesUser)((0, ExtractionSource_1.formatExtractionSources)(sources), entityTypes, existingEntities), entityTypes, requireConfidence);
|
|
15
|
+
}
|
|
16
|
+
async extractWithPrompt(prompt, entityTypes, requireConfidence) {
|
|
10
17
|
try {
|
|
11
18
|
const result = await this.llm.chatJson([
|
|
12
19
|
{ role: 'system', content: prompts_1.ENTITY_EXTRACTION_SYSTEM },
|
|
13
|
-
{
|
|
14
|
-
role: 'user',
|
|
15
|
-
content: (0, prompts_1.entityExtractionUser)(humanMessage, aiMessage, entityTypes, existingEntities),
|
|
16
|
-
},
|
|
20
|
+
{ role: 'user', content: prompt },
|
|
17
21
|
]);
|
|
18
22
|
if (!result.entities || !Array.isArray(result.entities)) {
|
|
19
23
|
return [];
|
|
@@ -25,11 +29,22 @@ class EntityExtractor {
|
|
|
25
29
|
typeof e.entity_type === 'string' &&
|
|
26
30
|
e.entity_type.trim() !== '' &&
|
|
27
31
|
typeof e.summary === 'string' &&
|
|
32
|
+
(!requireConfidence ||
|
|
33
|
+
(typeof e.confidence === 'number' &&
|
|
34
|
+
Number.isFinite(e.confidence) &&
|
|
35
|
+
e.confidence >= 0 &&
|
|
36
|
+
e.confidence <= 1)) &&
|
|
28
37
|
(allowedTypes.size === 0 || allowedTypes.has(e.entity_type.toLowerCase().trim())))
|
|
29
38
|
.map((e) => ({
|
|
30
39
|
name: e.name.trim(),
|
|
31
40
|
entity_type: e.entity_type.trim(),
|
|
32
41
|
summary: e.summary.trim(),
|
|
42
|
+
confidence: typeof e.confidence === 'number' &&
|
|
43
|
+
Number.isFinite(e.confidence) &&
|
|
44
|
+
e.confidence >= 0 &&
|
|
45
|
+
e.confidence <= 1
|
|
46
|
+
? e.confidence
|
|
47
|
+
: null,
|
|
33
48
|
}));
|
|
34
49
|
}
|
|
35
50
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityExtractor.js","sourceRoot":"","sources":["../../src/extraction/EntityExtractor.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"EntityExtractor.js","sourceRoot":"","sources":["../../src/extraction/EntityExtractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import type { IGraphStorage } from '../storage/IGraphStorage';
|
|
2
|
+
import { type ExtractionThresholdPolicy } from '../schemas';
|
|
2
3
|
import { type LlmClientConfig } from './LlmClient';
|
|
3
4
|
import { type EmbeddingConfig } from '../embeddings';
|
|
5
|
+
import { type ExtractionSource } from './ExtractionSource';
|
|
4
6
|
export interface ExtractionPipelineConfig {
|
|
5
7
|
llmConfig: LlmClientConfig;
|
|
6
8
|
entityTypes: string[];
|
|
7
9
|
groupId: string;
|
|
8
10
|
embeddingConfig?: EmbeddingConfig;
|
|
11
|
+
requireConfidence?: boolean;
|
|
12
|
+
thresholdPolicy?: ExtractionThresholdPolicy;
|
|
9
13
|
}
|
|
10
14
|
export declare class ExtractionPipeline {
|
|
11
15
|
private storage;
|
|
@@ -17,11 +21,17 @@ export declare class ExtractionPipeline {
|
|
|
17
21
|
private embeddingService;
|
|
18
22
|
private entityTypes;
|
|
19
23
|
private groupId;
|
|
24
|
+
private requireConfidence;
|
|
25
|
+
private thresholdPolicy?;
|
|
20
26
|
constructor(storage: IGraphStorage, config: ExtractionPipelineConfig);
|
|
21
27
|
process(humanMessage: string, aiMessage: string, episodeUuids?: string[]): Promise<void>;
|
|
28
|
+
processSources(sources: ExtractionSource[]): Promise<void>;
|
|
22
29
|
private resolveEntity;
|
|
23
30
|
private expireContradictedEdges;
|
|
24
31
|
private persistRelationship;
|
|
25
32
|
private buildEdgeUpdates;
|
|
33
|
+
private createExtractionMetadata;
|
|
34
|
+
private reviewStatus;
|
|
35
|
+
private mergeExtractionMetadata;
|
|
26
36
|
private findEntity;
|
|
27
37
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ExtractionPipeline = void 0;
|
|
4
|
+
const schemas_1 = require("../schemas");
|
|
4
5
|
const LlmClient_1 = require("./LlmClient");
|
|
5
6
|
const EntityExtractor_1 = require("./EntityExtractor");
|
|
6
7
|
const RelationshipExtractor_1 = require("./RelationshipExtractor");
|
|
@@ -9,9 +10,10 @@ const ContradictionDetector_1 = require("./ContradictionDetector");
|
|
|
9
10
|
const EdgeDeduplicator_1 = require("./EdgeDeduplicator");
|
|
10
11
|
const embeddings_1 = require("../embeddings");
|
|
11
12
|
const temporal_1 = require("../utils/temporal");
|
|
12
|
-
const
|
|
13
|
+
const ExtractionSource_1 = require("./ExtractionSource");
|
|
13
14
|
class ExtractionPipeline {
|
|
14
15
|
constructor(storage, config) {
|
|
16
|
+
var _a;
|
|
15
17
|
this.embeddingService = null;
|
|
16
18
|
const llm = new LlmClient_1.LlmClient(config.llmConfig);
|
|
17
19
|
this.storage = storage;
|
|
@@ -22,30 +24,62 @@ class ExtractionPipeline {
|
|
|
22
24
|
this.edgeDeduplicator = new EdgeDeduplicator_1.EdgeDeduplicator(llm);
|
|
23
25
|
this.entityTypes = config.entityTypes;
|
|
24
26
|
this.groupId = config.groupId;
|
|
27
|
+
this.requireConfidence = (_a = config.requireConfidence) !== null && _a !== void 0 ? _a : false;
|
|
28
|
+
this.thresholdPolicy = config.thresholdPolicy;
|
|
29
|
+
if (this.thresholdPolicy) {
|
|
30
|
+
(0, schemas_1.decideExtractionReview)(0.5, this.thresholdPolicy);
|
|
31
|
+
}
|
|
25
32
|
if (config.embeddingConfig) {
|
|
26
33
|
this.embeddingService = new embeddings_1.EmbeddingService(config.embeddingConfig);
|
|
27
34
|
}
|
|
28
35
|
}
|
|
29
36
|
async process(humanMessage, aiMessage, episodeUuids = []) {
|
|
37
|
+
var _a, _b;
|
|
38
|
+
const sources = [];
|
|
39
|
+
if (humanMessage) {
|
|
40
|
+
sources.push({
|
|
41
|
+
content: humanMessage,
|
|
42
|
+
role: 'human',
|
|
43
|
+
episode_kind: 'active_human',
|
|
44
|
+
episode_uuid: (_a = episodeUuids[0]) !== null && _a !== void 0 ? _a : null,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
if (aiMessage) {
|
|
48
|
+
sources.push({
|
|
49
|
+
content: aiMessage,
|
|
50
|
+
role: 'ai',
|
|
51
|
+
episode_kind: 'assistant_reply',
|
|
52
|
+
episode_uuid: (_b = episodeUuids[1]) !== null && _b !== void 0 ? _b : null,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
await this.processSources(sources);
|
|
56
|
+
}
|
|
57
|
+
async processSources(sources) {
|
|
58
|
+
const selectedSources = sources.filter((source) => source.content.trim().length > 0);
|
|
59
|
+
if (selectedSources.length === 0)
|
|
60
|
+
return;
|
|
61
|
+
const episodeUuids = (0, ExtractionSource_1.extractionEpisodeUuids)(selectedSources);
|
|
30
62
|
const existingEntities = await this.storage.listEntities(this.groupId);
|
|
31
63
|
const existingNames = existingEntities.map((e) => e.name);
|
|
32
|
-
const extractedEntities = await this.entityExtractor.
|
|
64
|
+
const extractedEntities = await this.entityExtractor.extractSources(selectedSources, this.entityTypes, existingNames, this.requireConfidence);
|
|
33
65
|
if (extractedEntities.length === 0)
|
|
34
66
|
return;
|
|
35
67
|
const resolvedEntities = new Map();
|
|
36
68
|
for (const extracted of extractedEntities) {
|
|
37
|
-
const resolved = await this.resolveEntity(extracted, existingEntities);
|
|
69
|
+
const resolved = await this.resolveEntity(extracted, existingEntities, episodeUuids);
|
|
38
70
|
resolvedEntities.set(extracted.name.toLowerCase(), resolved);
|
|
39
71
|
}
|
|
40
72
|
const allEntityNames = [
|
|
41
73
|
...new Set([...existingNames, ...[...resolvedEntities.values()].map((e) => e.name)]),
|
|
42
74
|
];
|
|
43
|
-
const extractedRelationships = await this.relationshipExtractor.
|
|
75
|
+
const extractedRelationships = await this.relationshipExtractor.extractSources(selectedSources, allEntityNames, this.requireConfidence);
|
|
44
76
|
for (const rel of extractedRelationships) {
|
|
45
77
|
await this.persistRelationship(rel, resolvedEntities, existingEntities, episodeUuids);
|
|
46
78
|
}
|
|
47
79
|
}
|
|
48
|
-
async resolveEntity(extracted, existingEntities) {
|
|
80
|
+
async resolveEntity(extracted, existingEntities, episodeUuids) {
|
|
81
|
+
const incomingMetadata = this.createExtractionMetadata(extracted.confidence, episodeUuids);
|
|
82
|
+
const incomingStatus = incomingMetadata.review_status;
|
|
49
83
|
for (const existing of existingEntities) {
|
|
50
84
|
const { isDuplicate, mergedSummary } = await this.deduplicator.isDuplicate(extracted, {
|
|
51
85
|
name: existing.name,
|
|
@@ -53,10 +87,19 @@ class ExtractionPipeline {
|
|
|
53
87
|
entity_type: existing.entity_type,
|
|
54
88
|
});
|
|
55
89
|
if (isDuplicate) {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
90
|
+
const existingStatus = this.reviewStatus(existing.attributes);
|
|
91
|
+
const updates = {};
|
|
92
|
+
if (mergedSummary &&
|
|
93
|
+
mergedSummary !== existing.summary &&
|
|
94
|
+
(!this.thresholdPolicy || incomingStatus === 'accepted' || existingStatus !== 'accepted')) {
|
|
95
|
+
updates.summary = mergedSummary;
|
|
96
|
+
}
|
|
97
|
+
const mergedMetadata = this.mergeExtractionMetadata((0, schemas_1.extractionMetadataFromAttributes)(existing.attributes), incomingMetadata, episodeUuids);
|
|
98
|
+
if (mergedMetadata) {
|
|
99
|
+
updates.attributes = { ...existing.attributes, engram_extraction: mergedMetadata };
|
|
100
|
+
}
|
|
101
|
+
if (Object.keys(updates).length > 0) {
|
|
102
|
+
return await this.storage.updateEntity(existing.uuid, updates);
|
|
60
103
|
}
|
|
61
104
|
return existing;
|
|
62
105
|
}
|
|
@@ -78,13 +121,7 @@ class ExtractionPipeline {
|
|
|
78
121
|
entity_type: extracted.entity_type,
|
|
79
122
|
name_embedding: nameEmbedding !== null && nameEmbedding !== void 0 ? nameEmbedding : null,
|
|
80
123
|
attributes: {
|
|
81
|
-
engram_extraction:
|
|
82
|
-
version: EXTRACTION_METADATA_VERSION,
|
|
83
|
-
source: 'llm',
|
|
84
|
-
confidence: null,
|
|
85
|
-
reviewed: false,
|
|
86
|
-
extracted_at: (0, temporal_1.nowIso)(),
|
|
87
|
-
},
|
|
124
|
+
engram_extraction: incomingMetadata,
|
|
88
125
|
},
|
|
89
126
|
});
|
|
90
127
|
}
|
|
@@ -92,6 +129,9 @@ class ExtractionPipeline {
|
|
|
92
129
|
for (const existingEdge of edges) {
|
|
93
130
|
if (existingEdge.expired_at)
|
|
94
131
|
continue;
|
|
132
|
+
if (this.thresholdPolicy && this.reviewStatus(existingEdge.attributes) !== 'accepted') {
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
95
135
|
const resolution = await this.contradictionDetector.detect(existingEdge.fact, newFact, sourceEntityName, targetEntityName, existingEdge.name, newEdgeName);
|
|
96
136
|
if (resolution.isContradiction && resolution.expiredAt) {
|
|
97
137
|
await this.storage.updateEdge(existingEdge.uuid, {
|
|
@@ -107,6 +147,8 @@ class ExtractionPipeline {
|
|
|
107
147
|
if (!sourceEntity || !targetEntity)
|
|
108
148
|
return;
|
|
109
149
|
const normalizedNewEdgeName = rel.name.toUpperCase().replace(/\s+/g, '_');
|
|
150
|
+
const incomingMetadata = this.createExtractionMetadata(rel.confidence, episodeUuids);
|
|
151
|
+
const incomingStatus = incomingMetadata.review_status;
|
|
110
152
|
let samePairEdges = [];
|
|
111
153
|
try {
|
|
112
154
|
samePairEdges = await this.storage.getEdgesBetween(sourceEntity.uuid, targetEntity.uuid);
|
|
@@ -114,52 +156,62 @@ class ExtractionPipeline {
|
|
|
114
156
|
catch (error) {
|
|
115
157
|
console.warn('Engram: Failed to fetch edges between', sourceEntity.name, 'and', targetEntity.name + ':', error.message);
|
|
116
158
|
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
159
|
+
if (incomingStatus !== 'rejected') {
|
|
160
|
+
try {
|
|
161
|
+
const existingMatchingEdge = samePairEdges.find((e) => e.name === normalizedNewEdgeName &&
|
|
162
|
+
!e.expired_at &&
|
|
163
|
+
this.reviewStatus(e.attributes) !== 'rejected');
|
|
164
|
+
if (existingMatchingEdge) {
|
|
165
|
+
const { isDuplicate, mergedFact } = await this.edgeDeduplicator.isDuplicate(existingMatchingEdge.fact, rel.fact, normalizedNewEdgeName, sourceEntity.name, targetEntity.name);
|
|
166
|
+
if (isDuplicate) {
|
|
167
|
+
const updates = await this.buildEdgeUpdates(existingMatchingEdge, mergedFact || rel.fact, episodeUuids, incomingMetadata);
|
|
168
|
+
if (Object.keys(updates).length > 0) {
|
|
169
|
+
await this.storage.updateEdge(existingMatchingEdge.uuid, updates);
|
|
170
|
+
}
|
|
171
|
+
return;
|
|
125
172
|
}
|
|
126
|
-
return;
|
|
127
173
|
}
|
|
128
174
|
}
|
|
175
|
+
catch (error) {
|
|
176
|
+
console.warn('Engram: Edge deduplication failed for', sourceEntity.name, '->', targetEntity.name + ':', error.message);
|
|
177
|
+
}
|
|
129
178
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
179
|
+
if (incomingStatus !== 'rejected') {
|
|
180
|
+
try {
|
|
181
|
+
const crossNameCandidates = samePairEdges.filter((e) => e.name !== normalizedNewEdgeName &&
|
|
182
|
+
!e.expired_at &&
|
|
183
|
+
this.reviewStatus(e.attributes) !== 'rejected');
|
|
184
|
+
if (crossNameCandidates.length > 0) {
|
|
185
|
+
const candidate = crossNameCandidates[0];
|
|
186
|
+
const { isDuplicate, mergedFact } = await this.edgeDeduplicator.isDuplicateCrossName(candidate.fact, rel.fact, candidate.name, normalizedNewEdgeName, sourceEntity.name, targetEntity.name);
|
|
187
|
+
if (isDuplicate) {
|
|
188
|
+
const updates = await this.buildEdgeUpdates(candidate, mergedFact || rel.fact, episodeUuids, incomingMetadata);
|
|
189
|
+
if (Object.keys(updates).length > 0) {
|
|
190
|
+
await this.storage.updateEdge(candidate.uuid, updates);
|
|
191
|
+
}
|
|
192
|
+
return;
|
|
142
193
|
}
|
|
143
|
-
return;
|
|
144
194
|
}
|
|
145
195
|
}
|
|
196
|
+
catch (error) {
|
|
197
|
+
console.warn('Engram: Cross-name edge deduplication failed for', sourceEntity.name, '->', targetEntity.name + ':', error.message);
|
|
198
|
+
}
|
|
146
199
|
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
console.warn('Engram: Contradiction detection failed for edge between', sourceEntity.name, 'and', targetEntity.name + ':', error.message);
|
|
200
|
+
if (!this.thresholdPolicy || incomingStatus === 'accepted') {
|
|
201
|
+
try {
|
|
202
|
+
await this.expireContradictedEdges(samePairEdges, rel.fact, sourceEntity.name, targetEntity.name, normalizedNewEdgeName);
|
|
203
|
+
const checkedUuids = new Set(samePairEdges.map((e) => e.uuid));
|
|
204
|
+
const allSourceEdges = await this.storage.getEdgesForEntity(sourceEntity.uuid);
|
|
205
|
+
const crossTargetEdges = allSourceEdges.filter((e) => e.source_node_uuid === sourceEntity.uuid &&
|
|
206
|
+
e.name === normalizedNewEdgeName &&
|
|
207
|
+
e.target_node_uuid !== targetEntity.uuid &&
|
|
208
|
+
!e.expired_at &&
|
|
209
|
+
!checkedUuids.has(e.uuid));
|
|
210
|
+
await this.expireContradictedEdges(crossTargetEdges, rel.fact, sourceEntity.name, targetEntity.name, normalizedNewEdgeName);
|
|
211
|
+
}
|
|
212
|
+
catch (error) {
|
|
213
|
+
console.warn('Engram: Contradiction detection failed for edge between', sourceEntity.name, 'and', targetEntity.name + ':', error.message);
|
|
214
|
+
}
|
|
163
215
|
}
|
|
164
216
|
let factEmbedding;
|
|
165
217
|
if (this.embeddingService) {
|
|
@@ -181,20 +233,19 @@ class ExtractionPipeline {
|
|
|
181
233
|
valid_at: (0, temporal_1.nowIso)(),
|
|
182
234
|
episodes: episodeUuids,
|
|
183
235
|
attributes: {
|
|
184
|
-
engram_extraction:
|
|
185
|
-
version: EXTRACTION_METADATA_VERSION,
|
|
186
|
-
source: 'llm',
|
|
187
|
-
confidence: null,
|
|
188
|
-
reviewed: false,
|
|
189
|
-
extracted_at: (0, temporal_1.nowIso)(),
|
|
190
|
-
episode_uuids: episodeUuids,
|
|
191
|
-
},
|
|
236
|
+
engram_extraction: incomingMetadata,
|
|
192
237
|
},
|
|
193
238
|
});
|
|
194
239
|
}
|
|
195
|
-
async buildEdgeUpdates(existingEdge, effectiveFact, episodeUuids) {
|
|
240
|
+
async buildEdgeUpdates(existingEdge, effectiveFact, episodeUuids, incomingMetadata) {
|
|
241
|
+
var _a;
|
|
196
242
|
const updates = {};
|
|
197
|
-
|
|
243
|
+
const existingMetadata = (0, schemas_1.extractionMetadataFromAttributes)(existingEdge.attributes);
|
|
244
|
+
const existingStatus = this.reviewStatus(existingEdge.attributes);
|
|
245
|
+
if (effectiveFact !== existingEdge.fact &&
|
|
246
|
+
(!this.thresholdPolicy ||
|
|
247
|
+
incomingMetadata.review_status === 'accepted' ||
|
|
248
|
+
existingStatus !== 'accepted')) {
|
|
198
249
|
updates.fact = effectiveFact;
|
|
199
250
|
if (this.embeddingService) {
|
|
200
251
|
try {
|
|
@@ -218,8 +269,46 @@ class ExtractionPipeline {
|
|
|
218
269
|
updates.episodes = mergedEpisodes;
|
|
219
270
|
}
|
|
220
271
|
}
|
|
272
|
+
const mergedEpisodeUuids = [
|
|
273
|
+
...new Set([...((_a = existingMetadata === null || existingMetadata === void 0 ? void 0 : existingMetadata.episode_uuids) !== null && _a !== void 0 ? _a : []), ...episodeUuids]),
|
|
274
|
+
];
|
|
275
|
+
const mergedMetadata = this.mergeExtractionMetadata(existingMetadata, incomingMetadata, mergedEpisodeUuids);
|
|
276
|
+
if (mergedMetadata) {
|
|
277
|
+
updates.attributes = {
|
|
278
|
+
...existingEdge.attributes,
|
|
279
|
+
engram_extraction: mergedMetadata,
|
|
280
|
+
};
|
|
281
|
+
}
|
|
221
282
|
return updates;
|
|
222
283
|
}
|
|
284
|
+
createExtractionMetadata(confidence, episodeUuids) {
|
|
285
|
+
const decision = (0, schemas_1.decideExtractionReview)(confidence, this.thresholdPolicy);
|
|
286
|
+
return schemas_1.ExtractionMetadataV2Schema.parse({
|
|
287
|
+
version: 2,
|
|
288
|
+
source: 'llm',
|
|
289
|
+
confidence,
|
|
290
|
+
...decision,
|
|
291
|
+
extracted_at: (0, temporal_1.nowIso)(),
|
|
292
|
+
episode_uuids: episodeUuids,
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
reviewStatus(attributes) {
|
|
296
|
+
var _a, _b;
|
|
297
|
+
return (_b = (_a = (0, schemas_1.extractionMetadataFromAttributes)(attributes)) === null || _a === void 0 ? void 0 : _a.review_status) !== null && _b !== void 0 ? _b : 'accepted';
|
|
298
|
+
}
|
|
299
|
+
mergeExtractionMetadata(existing, incoming, episodeUuids) {
|
|
300
|
+
var _a, _b;
|
|
301
|
+
if (!existing)
|
|
302
|
+
return null;
|
|
303
|
+
const rank = { rejected: 0, proposed: 1, accepted: 2 };
|
|
304
|
+
const winner = rank[incoming.review_status] > rank[existing.review_status] ? incoming : existing;
|
|
305
|
+
const confidence = Math.max((_a = existing.confidence) !== null && _a !== void 0 ? _a : 0, (_b = incoming.confidence) !== null && _b !== void 0 ? _b : 0);
|
|
306
|
+
return schemas_1.ExtractionMetadataV2Schema.parse({
|
|
307
|
+
...winner,
|
|
308
|
+
confidence: existing.confidence === null && incoming.confidence === null ? null : confidence,
|
|
309
|
+
episode_uuids: [...new Set(episodeUuids)],
|
|
310
|
+
});
|
|
311
|
+
}
|
|
223
312
|
findEntity(name, resolvedEntities, existingEntities) {
|
|
224
313
|
const normalized = name.toLowerCase().trim();
|
|
225
314
|
const resolved = resolvedEntities.get(normalized);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ExtractionPipeline.js","sourceRoot":"","sources":["../../src/extraction/ExtractionPipeline.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ExtractionPipeline.js","sourceRoot":"","sources":["../../src/extraction/ExtractionPipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { EpisodeKind, EpisodeReviewStatus, EpisodeRole, EpisodeTrustLevel } from '../schemas';
|
|
2
|
+
export interface ExtractionSource {
|
|
3
|
+
content: string;
|
|
4
|
+
role: EpisodeRole;
|
|
5
|
+
episode_kind: EpisodeKind;
|
|
6
|
+
episode_uuid?: string | null;
|
|
7
|
+
source_message_id?: string | null;
|
|
8
|
+
sender_id?: string | null;
|
|
9
|
+
sender_name?: string | null;
|
|
10
|
+
trust_level?: EpisodeTrustLevel;
|
|
11
|
+
review_status?: EpisodeReviewStatus;
|
|
12
|
+
reference_time?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare function formatExtractionSources(sources: ExtractionSource[]): string;
|
|
15
|
+
export declare function extractionEpisodeUuids(sources: ExtractionSource[]): string[];
|