@steno-ai/engine 0.1.4 → 0.1.6
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/dist/extraction/cross-linker.d.ts +23 -0
- package/dist/extraction/cross-linker.d.ts.map +1 -0
- package/dist/extraction/cross-linker.js +146 -0
- package/dist/extraction/cross-linker.js.map +1 -0
- package/dist/extraction/pipeline.d.ts.map +1 -1
- package/dist/extraction/pipeline.js +14 -5
- package/dist/extraction/pipeline.js.map +1 -1
- package/dist/scratchpad/scratchpad.d.ts.map +1 -1
- package/dist/scratchpad/scratchpad.js +35 -5
- package/dist/scratchpad/scratchpad.js.map +1 -1
- package/package.json +1 -1
- package/src/adapters/storage.d.ts +1 -0
- package/src/adapters/storage.d.ts.map +1 -1
- package/src/extraction/cross-linker.d.ts +23 -0
- package/src/extraction/cross-linker.d.ts.map +1 -0
- package/src/extraction/cross-linker.js +146 -0
- package/src/extraction/cross-linker.js.map +1 -0
- package/src/extraction/cross-linker.ts +166 -0
- package/src/extraction/llm-extractor.d.ts.map +1 -1
- package/src/extraction/llm-extractor.js +5 -3
- package/src/extraction/llm-extractor.js.map +1 -1
- package/src/extraction/pipeline.d.ts.map +1 -1
- package/src/extraction/pipeline.js +22 -7
- package/src/extraction/pipeline.js.map +1 -1
- package/src/extraction/pipeline.ts +15 -5
- package/src/extraction/prompts.d.ts +2 -2
- package/src/extraction/prompts.d.ts.map +1 -1
- package/src/extraction/prompts.js +12 -3
- package/src/extraction/prompts.js.map +1 -1
- package/src/scratchpad/scratchpad.d.ts.map +1 -1
- package/src/scratchpad/scratchpad.js +35 -5
- package/src/scratchpad/scratchpad.js.map +1 -1
- package/src/scratchpad/scratchpad.ts +36 -6
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cross-linker.js","sourceRoot":"","sources":["cross-linker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-Fact Edge Linker — Intelligent Relationship Detection
|
|
3
|
+
*
|
|
4
|
+
* After extraction, finds existing facts that share entities with new facts
|
|
5
|
+
* AND are semantically similar (not just any shared entity). Creates
|
|
6
|
+
* 'relates_to' edges only when facts are actually about the same topic.
|
|
7
|
+
*
|
|
8
|
+
* Heuristics:
|
|
9
|
+
* 1. Shared entity (required) — both facts mention the same entity
|
|
10
|
+
* 2. Content similarity (required) — facts have overlapping keywords (>30% overlap)
|
|
11
|
+
* 3. Temporal proximity (bonus) — facts created within 7 days get priority
|
|
12
|
+
* 4. Skip generic entities — "user" entity is too broad to link on
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import type { StorageAdapter } from '../adapters/storage.js';
|
|
16
|
+
import type { Fact } from '../models/fact.js';
|
|
17
|
+
|
|
18
|
+
const GENERIC_ENTITIES = new Set(['user', 'assistant', 'navia', 'steno']);
|
|
19
|
+
const MIN_KEYWORD_OVERLAP = 0.25; // 25% of keywords must overlap
|
|
20
|
+
const MAX_LINKS_PER_FACT = 3; // Don't create too many edges per new fact
|
|
21
|
+
const TEMPORAL_WINDOW_DAYS = 14; // Prefer facts within 2 weeks
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Extract meaningful keywords from fact content for similarity comparison.
|
|
25
|
+
* Strips stop words, lowercases, returns unique tokens.
|
|
26
|
+
*/
|
|
27
|
+
function extractKeywords(content: string): Set<string> {
|
|
28
|
+
const stopWords = new Set([
|
|
29
|
+
'the', 'a', 'an', 'is', 'are', 'was', 'were', 'be', 'been', 'being',
|
|
30
|
+
'have', 'has', 'had', 'do', 'does', 'did', 'will', 'would', 'could',
|
|
31
|
+
'should', 'may', 'might', 'can', 'shall', 'to', 'of', 'in', 'for',
|
|
32
|
+
'on', 'with', 'at', 'by', 'from', 'as', 'into', 'through', 'during',
|
|
33
|
+
'before', 'after', 'above', 'below', 'between', 'and', 'but', 'or',
|
|
34
|
+
'not', 'no', 'nor', 'so', 'yet', 'both', 'each', 'few', 'more',
|
|
35
|
+
'most', 'other', 'some', 'such', 'than', 'too', 'very', 'just',
|
|
36
|
+
'about', 'up', 'out', 'if', 'then', 'that', 'this', 'these', 'those',
|
|
37
|
+
'it', 'its', 'user', 'users', 'they', 'them', 'their', 'he', 'she',
|
|
38
|
+
]);
|
|
39
|
+
|
|
40
|
+
return new Set(
|
|
41
|
+
content.toLowerCase()
|
|
42
|
+
.replace(/[^a-z0-9\s-]/g, ' ')
|
|
43
|
+
.split(/\s+/)
|
|
44
|
+
.filter(w => w.length >= 3 && !stopWords.has(w))
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Calculate keyword overlap ratio between two facts.
|
|
50
|
+
* Returns 0-1 where 1 = identical keywords.
|
|
51
|
+
*/
|
|
52
|
+
function keywordOverlap(a: Set<string>, b: Set<string>): number {
|
|
53
|
+
if (a.size === 0 || b.size === 0) return 0;
|
|
54
|
+
let shared = 0;
|
|
55
|
+
for (const word of a) {
|
|
56
|
+
if (b.has(word)) shared++;
|
|
57
|
+
}
|
|
58
|
+
const minSize = Math.min(a.size, b.size);
|
|
59
|
+
return shared / minSize;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Check if two facts are temporally close (within TEMPORAL_WINDOW_DAYS).
|
|
64
|
+
*/
|
|
65
|
+
function isTemporallyClose(a: Fact, b: Fact): boolean {
|
|
66
|
+
const aDate = new Date(a.createdAt).getTime();
|
|
67
|
+
const bDate = new Date(b.createdAt).getTime();
|
|
68
|
+
const diffDays = Math.abs(aDate - bDate) / (1000 * 60 * 60 * 24);
|
|
69
|
+
return diffDays <= TEMPORAL_WINDOW_DAYS;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Link newly created facts to existing related facts through shared entities.
|
|
74
|
+
* Uses keyword overlap + temporal proximity to determine relevance.
|
|
75
|
+
*
|
|
76
|
+
* Only creates edges when facts are genuinely related — not just because
|
|
77
|
+
* they both mention "Steno" or "user".
|
|
78
|
+
*/
|
|
79
|
+
export async function linkRelatedFacts(
|
|
80
|
+
storage: StorageAdapter,
|
|
81
|
+
tenantId: string,
|
|
82
|
+
newFactIds: string[],
|
|
83
|
+
entityIdMap: Map<string, string>,
|
|
84
|
+
): Promise<number> {
|
|
85
|
+
if (newFactIds.length === 0 || entityIdMap.size === 0) return 0;
|
|
86
|
+
|
|
87
|
+
let edgesCreated = 0;
|
|
88
|
+
|
|
89
|
+
// Get the new facts' content for keyword extraction
|
|
90
|
+
const newFacts = await storage.getFactsByIds(tenantId, newFactIds);
|
|
91
|
+
if (newFacts.length === 0) return 0;
|
|
92
|
+
|
|
93
|
+
const newFactKeywords = new Map<string, Set<string>>();
|
|
94
|
+
for (const f of newFacts) {
|
|
95
|
+
newFactKeywords.set(f.id, extractKeywords(f.content));
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// For each NON-GENERIC entity, find existing facts that also mention it
|
|
99
|
+
for (const [canonicalName, entityId] of entityIdMap) {
|
|
100
|
+
if (GENERIC_ENTITIES.has(canonicalName)) continue; // Skip "user", "navia", etc.
|
|
101
|
+
|
|
102
|
+
try {
|
|
103
|
+
const linkedFacts = await storage.getFactsForEntity(tenantId, entityId, { limit: 20 });
|
|
104
|
+
if (linkedFacts.data.length < 2) continue;
|
|
105
|
+
|
|
106
|
+
const newFactSet = new Set(newFactIds);
|
|
107
|
+
const existingFacts = linkedFacts.data.filter(f =>
|
|
108
|
+
!newFactSet.has(f.id) &&
|
|
109
|
+
!f.tags?.includes('scratchpad') // Skip scratchpad blobs
|
|
110
|
+
);
|
|
111
|
+
|
|
112
|
+
for (const newFact of newFacts) {
|
|
113
|
+
const newKw = newFactKeywords.get(newFact.id);
|
|
114
|
+
if (!newKw || newKw.size < 2) continue; // Too short to compare
|
|
115
|
+
|
|
116
|
+
let linksForThisFact = 0;
|
|
117
|
+
|
|
118
|
+
for (const existingFact of existingFacts) {
|
|
119
|
+
if (linksForThisFact >= MAX_LINKS_PER_FACT) break;
|
|
120
|
+
|
|
121
|
+
const existingKw = extractKeywords(existingFact.content);
|
|
122
|
+
const overlap = keywordOverlap(newKw, existingKw);
|
|
123
|
+
|
|
124
|
+
// Must have meaningful keyword overlap
|
|
125
|
+
if (overlap < MIN_KEYWORD_OVERLAP) continue;
|
|
126
|
+
|
|
127
|
+
// Boost score for temporal proximity
|
|
128
|
+
const temporalBoost = isTemporallyClose(newFact, existingFact) ? 0.1 : 0;
|
|
129
|
+
const relevanceScore = overlap + temporalBoost;
|
|
130
|
+
|
|
131
|
+
try {
|
|
132
|
+
await storage.createEdge({
|
|
133
|
+
id: crypto.randomUUID(),
|
|
134
|
+
tenantId,
|
|
135
|
+
sourceId: entityId,
|
|
136
|
+
targetId: entityId,
|
|
137
|
+
relation: 'relates_to',
|
|
138
|
+
edgeType: 'associative',
|
|
139
|
+
weight: Math.min(relevanceScore, 1.0),
|
|
140
|
+
factId: newFact.id,
|
|
141
|
+
confidence: overlap,
|
|
142
|
+
metadata: {
|
|
143
|
+
linkedFactId: existingFact.id,
|
|
144
|
+
reason: 'shared_entity_and_content',
|
|
145
|
+
entity: canonicalName,
|
|
146
|
+
keywordOverlap: overlap.toFixed(2),
|
|
147
|
+
},
|
|
148
|
+
});
|
|
149
|
+
edgesCreated++;
|
|
150
|
+
linksForThisFact++;
|
|
151
|
+
} catch {
|
|
152
|
+
// Duplicate or constraint — skip
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
} catch {
|
|
157
|
+
// Entity lookup failed — continue
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
if (edgesCreated > 0) {
|
|
162
|
+
console.error(`[steno] Cross-linked ${edgesCreated} related facts via shared entities`);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
return edgesCreated;
|
|
166
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-extractor.d.ts","sourceRoot":"","sources":["llm-extractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAiD,MAAM,YAAY,CAAC;AAClG,OAAO,KAAK,EAAE,cAAc,EAAY,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAI/E,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,UAAU,CAAC;IAChB,IAAI,EAAE,cAAc,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACxC;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,kBAAkB,EAC1B,KAAK,EAAE,MAAM,EACb,aAAa,CAAC,EAAE,KAAK,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GAC5D,OAAO,CAAC,gBAAgB,CAAC,
|
|
1
|
+
{"version":3,"file":"llm-extractor.d.ts","sourceRoot":"","sources":["llm-extractor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAiD,MAAM,YAAY,CAAC;AAClG,OAAO,KAAK,EAAE,cAAc,EAAY,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAI/E,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,UAAU,CAAC;IAChB,IAAI,EAAE,cAAc,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACxC;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,kBAAkB,EAC1B,KAAK,EAAE,MAAM,EACb,aAAa,CAAC,EAAE,KAAK,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GAC5D,OAAO,CAAC,gBAAgB,CAAC,CAgN3B;AAsBD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAavD"}
|
|
@@ -45,7 +45,7 @@ export async function extractWithLLM(config, input, existingFacts) {
|
|
|
45
45
|
if (typeof f === 'string') {
|
|
46
46
|
const trimmed = f.trim();
|
|
47
47
|
if (trimmed.length > 0)
|
|
48
|
-
entries.push({ text: trimmed, importance: 0.5, sourceChunk: seg.contextWindow });
|
|
48
|
+
entries.push({ text: trimmed, importance: 0.5, sourceChunk: seg.contextWindow, isPattern: false });
|
|
49
49
|
}
|
|
50
50
|
else if (f && typeof f === 'object') {
|
|
51
51
|
const obj = f;
|
|
@@ -53,6 +53,7 @@ export async function extractWithLLM(config, input, existingFacts) {
|
|
|
53
53
|
const importance = typeof obj.i === 'number' ? obj.i : typeof obj.importance === 'number' ? obj.importance : 0.5;
|
|
54
54
|
const eventDate = obj.ed ? new Date(obj.ed) : undefined;
|
|
55
55
|
const documentDate = obj.dd ? new Date(obj.dd) : undefined;
|
|
56
|
+
const isPattern = obj.p === true;
|
|
56
57
|
if (text.length > 0)
|
|
57
58
|
entries.push({
|
|
58
59
|
text,
|
|
@@ -60,6 +61,7 @@ export async function extractWithLLM(config, input, existingFacts) {
|
|
|
60
61
|
sourceChunk: seg.contextWindow,
|
|
61
62
|
eventDate: eventDate && !isNaN(eventDate.getTime()) ? eventDate : undefined,
|
|
62
63
|
documentDate: documentDate && !isNaN(documentDate.getTime()) ? documentDate : undefined,
|
|
64
|
+
isPattern,
|
|
63
65
|
});
|
|
64
66
|
}
|
|
65
67
|
}
|
|
@@ -91,13 +93,13 @@ export async function extractWithLLM(config, input, existingFacts) {
|
|
|
91
93
|
return emptyResult(config.tier, config.llm.model);
|
|
92
94
|
}
|
|
93
95
|
// Build ExtractedFact objects from parsed entries with LLM-scored importance
|
|
94
|
-
const facts = factEntries.map(({ text, importance, sourceChunk, eventDate, documentDate }) => ({
|
|
96
|
+
const facts = factEntries.map(({ text, importance, sourceChunk, eventDate, documentDate, isPattern }) => ({
|
|
95
97
|
content: text,
|
|
96
98
|
importance,
|
|
97
99
|
confidence: 0.8,
|
|
98
100
|
sourceType: 'conversation',
|
|
99
101
|
modality: 'text',
|
|
100
|
-
tags: [],
|
|
102
|
+
tags: isPattern ? ['pattern'] : [],
|
|
101
103
|
originalContent: input,
|
|
102
104
|
entityCanonicalNames: [],
|
|
103
105
|
sourceChunk,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-extractor.js","sourceRoot":"","sources":["llm-extractor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,yBAAyB,EAAE,0BAA0B,EAAyB,MAAM,cAAc,CAAC;AAC5G,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAS7D;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAA0B,EAC1B,KAAa,EACb,aAA6D;IAE7D,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,IAAI,cAAc,GAAG,CAAC,CAAC;IAEvB,8DAA8D;IAC9D,0EAA0E;IAC1E,qEAAqE;IACrE,MAAM,QAAQ,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAE/C,IAAI,WAAW,GAAa,EAAE,CAAC;IAC/B,IAAI,WAAW,
|
|
1
|
+
{"version":3,"file":"llm-extractor.js","sourceRoot":"","sources":["llm-extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAc,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,aAAa,EACb,eAAe,EAEhB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAc,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,KAAK,EACV,eAAe,EACf,cAAc,EACd,aAAa,EACb,eAAe,EAEhB,MAAM,YAAY,CAAC;AAUpB,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,cAAc,CAAC;IACxB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,QAAQ,EAAE,UAAU,CAAC;IACrB,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,cAAc,CAAC,EAAE,gBAAgB,GAAG,YAAY,GAAG,MAAM,GAAG,YAAY,CAAC;IACzE,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACxC;AAMD,wBAAgB,WAAW,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAiB1D;AAED,wBAAgB,UAAU,CACxB,SAAS,EAAE,aAAa,EAAE,EAC1B,GAAG,EAAE,aAAa,EAAE,GACnB,aAAa,EAAE,CAIjB;AAED,wBAAgB,aAAa,CAC3B,SAAS,EAAE,eAAe,EAAE,EAC5B,GAAG,EAAE,eAAe,EAAE,GACrB,eAAe,EAAE,CAQnB;AAiVD,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,cAAc,CAAC,CAiFzB;AAMD;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,cAAc,EACtB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,cAAc,CAAC,CAiBzB"}
|
|
@@ -3,6 +3,7 @@ import { extractWithLLM, normalizeEntityName } from './llm-extractor.js';
|
|
|
3
3
|
import { deduplicateFacts } from './dedup.js';
|
|
4
4
|
import { processContradictions } from './contradiction.js';
|
|
5
5
|
import { buildEntityIdMap, persistEdges } from './entity-extractor.js';
|
|
6
|
+
import { linkRelatedFacts } from './cross-linker.js';
|
|
6
7
|
import { hashInput } from './hasher.js';
|
|
7
8
|
import { updateScratchpad } from '../scratchpad/scratchpad.js';
|
|
8
9
|
// ---------------------------------------------------------------------------
|
|
@@ -142,6 +143,8 @@ async function executeExtraction(config, extractionId, input, startTime) {
|
|
|
142
143
|
entitiesCreated = newEntitiesCreated;
|
|
143
144
|
// Collect the first persisted factId to anchor edges (edges reference a fact).
|
|
144
145
|
let firstFactId;
|
|
146
|
+
// Track all created fact IDs for cross-linking
|
|
147
|
+
const createdFactIds = [];
|
|
145
148
|
// ── BATCH EMBED all extracted facts at once (1 API call instead of N) ──
|
|
146
149
|
const factsToEmbed = contradictionResults.filter(r => r.fact.operation !== 'noop');
|
|
147
150
|
const factTexts = factsToEmbed.map(r => r.fact.contextualContent ?? r.fact.content);
|
|
@@ -197,21 +200,20 @@ async function executeExtraction(config, extractionId, input, startTime) {
|
|
|
197
200
|
},
|
|
198
201
|
sourceChunk: fact.sourceChunk,
|
|
199
202
|
eventDate: fact.eventDate,
|
|
200
|
-
documentDate: fact.documentDate,
|
|
203
|
+
documentDate: fact.documentDate ?? new Date(), // Always set — when the conversation happened
|
|
201
204
|
});
|
|
202
205
|
// Track counts — Git-style append-only: NEVER invalidate old facts.
|
|
203
206
|
// Updates create new versions with same lineageId. Recency scoring
|
|
204
207
|
// naturally prefers newer versions. Old versions remain searchable
|
|
205
208
|
// for temporal reasoning ("what was my old X?").
|
|
209
|
+
createdFactIds.push(factId);
|
|
206
210
|
if (fact.operation === 'update') {
|
|
207
211
|
factsUpdated++;
|
|
208
|
-
// No invalidation — old fact stays visible with valid_until = NULL
|
|
209
212
|
}
|
|
210
213
|
else if (fact.operation === 'invalidate') {
|
|
211
214
|
factsInvalidated++;
|
|
212
215
|
}
|
|
213
216
|
else {
|
|
214
|
-
// 'add', 'contradict', undefined → new fact created
|
|
215
217
|
factsCreated++;
|
|
216
218
|
}
|
|
217
219
|
// Link only the entities that THIS fact mentions.
|
|
@@ -240,9 +242,16 @@ async function executeExtraction(config, extractionId, input, startTime) {
|
|
|
240
242
|
}
|
|
241
243
|
}
|
|
242
244
|
}
|
|
243
|
-
//
|
|
244
|
-
|
|
245
|
-
|
|
245
|
+
// Cross-link new facts to existing related facts via shared entities + keyword overlap
|
|
246
|
+
if (createdFactIds.length > 0) {
|
|
247
|
+
try {
|
|
248
|
+
const crossLinked = await linkRelatedFacts(config.storage, input.tenantId, createdFactIds, entityIdMap);
|
|
249
|
+
edgesCreated += crossLinked;
|
|
250
|
+
}
|
|
251
|
+
catch (err) {
|
|
252
|
+
console.error('[steno] Cross-linking failed:', err instanceof Error ? err.message : err);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
246
255
|
// Create edges ONCE after all facts are persisted.
|
|
247
256
|
console.error(`[steno] Edge creation: ${mergedEdges.length} edges to persist, firstFactId=${firstFactId ? 'set' : 'MISSING'}`);
|
|
248
257
|
if (mergedEdges.length > 0) {
|
|
@@ -318,6 +327,10 @@ export async function runExtractionPipeline(config, input) {
|
|
|
318
327
|
durationMs: existing.durationMs ?? 0,
|
|
319
328
|
};
|
|
320
329
|
}
|
|
330
|
+
// If a previous extraction with the same hash failed, delete it so we can retry
|
|
331
|
+
if (existing && existing.status === 'failed') {
|
|
332
|
+
await config.storage.deleteExtraction(input.tenantId, existing.id);
|
|
333
|
+
}
|
|
321
334
|
// 3. Create extraction record with status='queued'
|
|
322
335
|
// Handle race condition: concurrent workers may try to create the same hash simultaneously
|
|
323
336
|
const extractionId = crypto.randomUUID();
|
|
@@ -335,7 +348,9 @@ export async function runExtractionPipeline(config, input) {
|
|
|
335
348
|
sessionId: input.sessionId,
|
|
336
349
|
});
|
|
337
350
|
}
|
|
338
|
-
catch {
|
|
351
|
+
catch (createErr) {
|
|
352
|
+
// Log the actual error so it's not silently swallowed
|
|
353
|
+
console.error(`[steno] createExtraction failed:`, createErr instanceof Error ? createErr.message : createErr);
|
|
339
354
|
// Duplicate hash — another worker beat us. Return their result.
|
|
340
355
|
const raceWinner = await config.storage.getExtractionByHash(input.tenantId, inputHash);
|
|
341
356
|
if (raceWinner) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["pipeline.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,7 @@ import { extractWithLLM, normalizeEntityName } from './llm-extractor.js';
|
|
|
14
14
|
import { deduplicateFacts } from './dedup.js';
|
|
15
15
|
import { processContradictions } from './contradiction.js';
|
|
16
16
|
import { buildEntityIdMap, persistEdges } from './entity-extractor.js';
|
|
17
|
+
import { linkRelatedFacts } from './cross-linker.js';
|
|
17
18
|
import { hashInput } from './hasher.js';
|
|
18
19
|
import { updateScratchpad } from '../scratchpad/scratchpad.js';
|
|
19
20
|
|
|
@@ -223,6 +224,9 @@ async function executeExtraction(
|
|
|
223
224
|
// Collect the first persisted factId to anchor edges (edges reference a fact).
|
|
224
225
|
let firstFactId: string | undefined;
|
|
225
226
|
|
|
227
|
+
// Track all created fact IDs for cross-linking
|
|
228
|
+
const createdFactIds: string[] = [];
|
|
229
|
+
|
|
226
230
|
// ── BATCH EMBED all extracted facts at once (1 API call instead of N) ──
|
|
227
231
|
const factsToEmbed = contradictionResults.filter(r => r.fact.operation !== 'noop');
|
|
228
232
|
const factTexts = factsToEmbed.map(r => r.fact.contextualContent ?? r.fact.content);
|
|
@@ -288,13 +292,13 @@ async function executeExtraction(
|
|
|
288
292
|
// Updates create new versions with same lineageId. Recency scoring
|
|
289
293
|
// naturally prefers newer versions. Old versions remain searchable
|
|
290
294
|
// for temporal reasoning ("what was my old X?").
|
|
295
|
+
createdFactIds.push(factId);
|
|
296
|
+
|
|
291
297
|
if (fact.operation === 'update') {
|
|
292
298
|
factsUpdated++;
|
|
293
|
-
// No invalidation — old fact stays visible with valid_until = NULL
|
|
294
299
|
} else if (fact.operation === 'invalidate') {
|
|
295
300
|
factsInvalidated++;
|
|
296
301
|
} else {
|
|
297
|
-
// 'add', 'contradict', undefined → new fact created
|
|
298
302
|
factsCreated++;
|
|
299
303
|
}
|
|
300
304
|
|
|
@@ -324,9 +328,15 @@ async function executeExtraction(
|
|
|
324
328
|
}
|
|
325
329
|
}
|
|
326
330
|
|
|
327
|
-
//
|
|
328
|
-
|
|
329
|
-
|
|
331
|
+
// Cross-link new facts to existing related facts via shared entities + keyword overlap
|
|
332
|
+
if (createdFactIds.length > 0) {
|
|
333
|
+
try {
|
|
334
|
+
const crossLinked = await linkRelatedFacts(config.storage, input.tenantId, createdFactIds, entityIdMap);
|
|
335
|
+
edgesCreated += crossLinked;
|
|
336
|
+
} catch (err) {
|
|
337
|
+
console.error('[steno] Cross-linking failed:', err instanceof Error ? err.message : err);
|
|
338
|
+
}
|
|
339
|
+
}
|
|
330
340
|
|
|
331
341
|
// Create edges ONCE after all facts are persisted.
|
|
332
342
|
console.error(`[steno] Edge creation: ${mergedEdges.length} edges to persist, firstFactId=${firstFactId ? 'set' : 'MISSING'}`);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { LLMMessage } from '../adapters/llm.js';
|
|
2
2
|
import type { DomainEntityType } from '../config.js';
|
|
3
|
-
export declare const FACT_EXTRACTION_PROMPT = "You are a memory extraction engine. Extract facts from text for a personal AI memory system.\n\n## WHO IS \"USER\"?\n\nMessages labeled \"user\" are from THE PERSON whose memories we are storing.\nMessages labeled \"assistant\" or any other role are from OTHER people.\n\nCRITICAL: Focus on facts FROM \"user\" messages, but ALSO extract notable facts about other people mentioned in the conversation. If the assistant/conversation partner shares personal information (e.g., \"I painted a sunrise last year\", \"I realized self-care is important\"), store it as \"User's conversation partner [Name] painted a sunrise in [year]\".\n\nFor identity/trait facts, state them DIRECTLY:\n- \"User is a transgender woman\" (not just \"User went to a transgender conference\")\n- \"User works at Brightwell Capital\" (not just \"User had a busy day at work\")\n- \"User is researching adoption agencies\" (not just \"User attended a meeting about adoption\")\n\n## RULES\n\n1. Extract SELF-CONTAINED atomic facts. Each fact must be understandable on its own, without the original conversation.\n\n2. **DATES ARE CRITICAL** \u2014 Resolve ALL temporal references to exact dates:\n - \"yesterday\" \u2192 \"on 7 May 2023\"\n - \"last week\" \u2192 \"around 1 May 2023\"\n - \"recently\" \u2192 \"in early May 2023\"\n - Look for date context like \"[This conversation took place on 8 May, 2023]\" and resolve ALL relative dates from it.\n - EVERY event/activity fact MUST include WHEN it happened if the date can be inferred.\n - BAD: \"User went to an LGBTQ support group\"\n - GOOD: \"User went to an LGBTQ support group on 7 May 2023\"\n\n3. Resolve ALL other references:\n - Pronouns \u2192 names: \"she said\" \u2192 \"Casey said\"\n - Places \u2192 full names: \"there\" \u2192 \"at Brightwell Capital\"\n\n4. Be SPECIFIC, not vague:\n BAD: \"User had issues at work\"\n GOOD: \"User's team at Brightwell Capital rambles too much in meetings\"\n\n5. Extract ALL facts, even minor ones. You cannot predict what will be asked later.\n\n6. Write all facts in third person using \"User\" (e.g., \"User prefers dark mode\").\n\n7. For conversation partners: ALSO extract their facts with their name.\n - If Melanie says \"I painted a sunrise last year\" \u2192 \"Melanie painted a sunrise in 2022\"\n - If Melanie says \"I ran a charity race\" \u2192 \"Melanie ran a charity race\"\n\n8. For EVERY fact, include \"ed\" (event date) if the fact describes something that happened at a specific time.\n - \"User went to the gym on May 7\" \u2192 ed: \"2023-05-07\"\n - \"User prefers dark mode\" \u2192 ed: null (timeless preference)\n If the
|
|
3
|
+
export declare const FACT_EXTRACTION_PROMPT = "You are a memory extraction engine. Extract facts from text for a personal AI memory system.\n\n## WHO IS \"USER\"?\n\nMessages labeled \"user\" are from THE PERSON whose memories we are storing.\nMessages labeled \"assistant\" or any other role are from OTHER people.\n\nCRITICAL: Focus on facts FROM \"user\" messages, but ALSO extract notable facts about other people mentioned in the conversation. If the assistant/conversation partner shares personal information (e.g., \"I painted a sunrise last year\", \"I realized self-care is important\"), store it as \"User's conversation partner [Name] painted a sunrise in [year]\".\n\nFor identity/trait facts, state them DIRECTLY:\n- \"User is a transgender woman\" (not just \"User went to a transgender conference\")\n- \"User works at Brightwell Capital\" (not just \"User had a busy day at work\")\n- \"User is researching adoption agencies\" (not just \"User attended a meeting about adoption\")\n\n## RULES\n\n1. Extract SELF-CONTAINED atomic facts. Each fact must be understandable on its own, without the original conversation.\n\n2. **DATES ARE CRITICAL** \u2014 Resolve ALL temporal references to exact dates:\n - \"yesterday\" \u2192 \"on 7 May 2023\"\n - \"last week\" \u2192 \"around 1 May 2023\"\n - \"recently\" \u2192 \"in early May 2023\"\n - Look for date context like \"[This conversation took place on 8 May, 2023]\" and resolve ALL relative dates from it.\n - EVERY event/activity fact MUST include WHEN it happened if the date can be inferred.\n - BAD: \"User went to an LGBTQ support group\"\n - GOOD: \"User went to an LGBTQ support group on 7 May 2023\"\n\n3. Resolve ALL other references:\n - Pronouns \u2192 names: \"she said\" \u2192 \"Casey said\"\n - Places \u2192 full names: \"there\" \u2192 \"at Brightwell Capital\"\n\n4. Be SPECIFIC, not vague:\n BAD: \"User had issues at work\"\n GOOD: \"User's team at Brightwell Capital rambles too much in meetings\"\n\n5. Extract ALL facts, even minor ones. You cannot predict what will be asked later.\n\n6. Write all facts in third person using \"User\" (e.g., \"User prefers dark mode\").\n\n7. For conversation partners: ALSO extract their facts with their name.\n - If Melanie says \"I painted a sunrise last year\" \u2192 \"Melanie painted a sunrise in 2022\"\n - If Melanie says \"I ran a charity race\" \u2192 \"Melanie ran a charity race\"\n\n8. For EVERY fact, include \"ed\" (event date) if the fact describes something that happened at a specific time.\n - \"User went to the gym on May 7\" \u2192 ed: \"2023-05-07\"\n - \"User prefers dark mode\" \u2192 ed: null (timeless preference)\n - If only a month is mentioned (e.g., \"in March 2026\") and today IS in that month, use TODAY's date from the header.\n - If only a month is mentioned and it's a PAST month, use the 15th as midpoint.\n Set \"dd\" (document date) to today's date from the header for ALL facts \u2014 this is when the conversation happened.\n\n9. PATTERN DETECTION: If the text reveals a recurring behavior, preference, routine, or coping strategy, extract it as a pattern fact with higher importance (0.7-0.9).\n - \"I always procrastinate on Mondays\" \u2192 {\"t\": \"User tends to procrastinate on Mondays\", \"i\": 0.8, \"ed\": null, \"dd\": \"...\", \"p\": true}\n - \"Coffee helps me focus\" \u2192 {\"t\": \"User finds that coffee helps with focus\", \"i\": 0.7, \"ed\": null, \"dd\": \"...\", \"p\": true}\n Patterns are behavioral insights \u2014 routines, coping strategies, energy patterns, recurring struggles.\n Mark patterns with \"p\": true in the output. Regular facts use \"p\": false.\n\n## OUTPUT\n\nReturn ONLY a JSON object:\n{\"facts\": [{\"t\": \"fact text here\", \"i\": 0.7, \"ed\": \"2023-05-07\", \"dd\": \"2023-05-08\", \"p\": false}, {\"t\": \"another fact\", \"i\": 0.3, \"ed\": null, \"dd\": \"2023-05-08\", \"p\": false}]}\n\n- ed (eventDate): ISO date string of WHEN the event occurred, or null if not temporal\n- dd (documentDate): ISO date string of when the conversation took place, from context header\n\nScore importance (i) from 0.0 to 1.0:\n- 0.9-1.0: Identity, health conditions, allergies, life events (birth, marriage, death)\n- 0.7-0.8: Relationships, employment, education, strong preferences, plans\n- 0.4-0.6: Activities, opinions, moderate preferences, daily events\n- 0.1-0.3: Casual mentions, weather, trivial observations\n\nNothing else. No explanation, no markdown.";
|
|
4
4
|
export declare const GRAPH_EXTRACTION_PROMPT = "You are a knowledge graph builder. Given a list of facts about a person, extract entities and relationships.\n\n## ENTITIES\n\nExtract only IMPORTANT named entities \u2014 proper nouns and specific things worth remembering. Aim for 3-8 entities total, not 40.\n\nDO extract: People (Casey, Jamie), Organizations (Brightwell Capital), Places (Harbor Point), Products/Projects (LifePath, AirPods Max), Named activities (Catan, D&D)\nDO NOT extract: Generic nouns (team, boss, meeting, work, food, gym), abstract concepts (motivation, stress), common objects (pizza, chair, phone)\n\n## RELATIONSHIPS\n\nExtract relationships between entities. Be SMART \u2014 infer from context:\n- \"User works at Google\" \u2192 user works_at google\n- \"User loves Casey, plans to propose\" \u2192 user partner_of casey\n- \"User's friend Jamie came over\" \u2192 user friend_of jamie\n\nUse snake_case relation names: works_at, partner_of, friend_of, lives_in, uses, studies, prefers, etc.\n\n## OUTPUT\n\nReturn ONLY a JSON object:\n{\n \"entities\": [\n {\"name\": \"Casey\", \"entity_type\": \"person\"},\n {\"name\": \"Brightwell Capital\", \"entity_type\": \"organization\"}\n ],\n \"edges\": [\n {\"source\": \"user\", \"target\": \"casey\", \"relation\": \"partner_of\"},\n {\"source\": \"user\", \"target\": \"brightwell capital\", \"relation\": \"works_at\"}\n ]\n}\n\nentity_type must be one of: {ENTITY_TYPES}.\nEntity names must be clean: no punctuation, no articles, no sentence fragments.\nReturn ONLY valid JSON.";
|
|
5
5
|
export declare const DEFAULT_ENTITY_TYPES: string[];
|
|
6
6
|
export declare const DEDUP_PROMPT = "You are a memory deduplication engine. Given NEW facts and EXISTING facts in a memory store, classify each new fact.\n\nFor each new fact, decide:\n- ADD: entirely new information, not covered by existing facts\n- UPDATE: replaces or refines an existing fact (provide the index). The new fact SUPERSEDES the old one.\n- EXTEND: adds new detail to an existing fact WITHOUT contradicting it (provide the index)\n- NOOP: already covered by an existing fact \u2014 skip it\n- CONTRADICT: conflicts with an existing fact (provide the index)\n\nReturn a JSON array:\n[\n {\"fact\": \"...\", \"operation\": \"ADD\"},\n {\"fact\": \"...\", \"operation\": \"UPDATE\", \"existing_index\": 3},\n {\"fact\": \"...\", \"operation\": \"EXTEND\", \"existing_index\": 5},\n {\"fact\": \"...\", \"operation\": \"NOOP\"},\n {\"fact\": \"...\", \"operation\": \"CONTRADICT\", \"existing_index\": 7}\n]\n\nBe conservative: prefer NOOP over ADD if the information is substantially similar.\nPrefer EXTEND over UPDATE when the new fact adds detail without changing the core meaning.";
|
|
@@ -23,6 +23,6 @@ export declare function buildGraphExtractionPrompt(facts: string[], entityTypes?
|
|
|
23
23
|
* Compares new facts against existing facts.
|
|
24
24
|
*/
|
|
25
25
|
export declare function buildDedupPrompt(newFacts: string[], existingFacts: ExistingFact[]): LLMMessage[];
|
|
26
|
-
export declare const EXTRACTION_SYSTEM_PROMPT = "You are a memory extraction engine. Extract facts from text for a personal AI memory system.\n\n## WHO IS \"USER\"?\n\nMessages labeled \"user\" are from THE PERSON whose memories we are storing.\nMessages labeled \"assistant\" or any other role are from OTHER people.\n\nCRITICAL: Focus on facts FROM \"user\" messages, but ALSO extract notable facts about other people mentioned in the conversation. If the assistant/conversation partner shares personal information (e.g., \"I painted a sunrise last year\", \"I realized self-care is important\"), store it as \"User's conversation partner [Name] painted a sunrise in [year]\".\n\nFor identity/trait facts, state them DIRECTLY:\n- \"User is a transgender woman\" (not just \"User went to a transgender conference\")\n- \"User works at Brightwell Capital\" (not just \"User had a busy day at work\")\n- \"User is researching adoption agencies\" (not just \"User attended a meeting about adoption\")\n\n## RULES\n\n1. Extract SELF-CONTAINED atomic facts. Each fact must be understandable on its own, without the original conversation.\n\n2. **DATES ARE CRITICAL** \u2014 Resolve ALL temporal references to exact dates:\n - \"yesterday\" \u2192 \"on 7 May 2023\"\n - \"last week\" \u2192 \"around 1 May 2023\"\n - \"recently\" \u2192 \"in early May 2023\"\n - Look for date context like \"[This conversation took place on 8 May, 2023]\" and resolve ALL relative dates from it.\n - EVERY event/activity fact MUST include WHEN it happened if the date can be inferred.\n - BAD: \"User went to an LGBTQ support group\"\n - GOOD: \"User went to an LGBTQ support group on 7 May 2023\"\n\n3. Resolve ALL other references:\n - Pronouns \u2192 names: \"she said\" \u2192 \"Casey said\"\n - Places \u2192 full names: \"there\" \u2192 \"at Brightwell Capital\"\n\n4. Be SPECIFIC, not vague:\n BAD: \"User had issues at work\"\n GOOD: \"User's team at Brightwell Capital rambles too much in meetings\"\n\n5. Extract ALL facts, even minor ones. You cannot predict what will be asked later.\n\n6. Write all facts in third person using \"User\" (e.g., \"User prefers dark mode\").\n\n7. For conversation partners: ALSO extract their facts with their name.\n - If Melanie says \"I painted a sunrise last year\" \u2192 \"Melanie painted a sunrise in 2022\"\n - If Melanie says \"I ran a charity race\" \u2192 \"Melanie ran a charity race\"\n\n8. For EVERY fact, include \"ed\" (event date) if the fact describes something that happened at a specific time.\n - \"User went to the gym on May 7\" \u2192 ed: \"2023-05-07\"\n - \"User prefers dark mode\" \u2192 ed: null (timeless preference)\n If the
|
|
26
|
+
export declare const EXTRACTION_SYSTEM_PROMPT = "You are a memory extraction engine. Extract facts from text for a personal AI memory system.\n\n## WHO IS \"USER\"?\n\nMessages labeled \"user\" are from THE PERSON whose memories we are storing.\nMessages labeled \"assistant\" or any other role are from OTHER people.\n\nCRITICAL: Focus on facts FROM \"user\" messages, but ALSO extract notable facts about other people mentioned in the conversation. If the assistant/conversation partner shares personal information (e.g., \"I painted a sunrise last year\", \"I realized self-care is important\"), store it as \"User's conversation partner [Name] painted a sunrise in [year]\".\n\nFor identity/trait facts, state them DIRECTLY:\n- \"User is a transgender woman\" (not just \"User went to a transgender conference\")\n- \"User works at Brightwell Capital\" (not just \"User had a busy day at work\")\n- \"User is researching adoption agencies\" (not just \"User attended a meeting about adoption\")\n\n## RULES\n\n1. Extract SELF-CONTAINED atomic facts. Each fact must be understandable on its own, without the original conversation.\n\n2. **DATES ARE CRITICAL** \u2014 Resolve ALL temporal references to exact dates:\n - \"yesterday\" \u2192 \"on 7 May 2023\"\n - \"last week\" \u2192 \"around 1 May 2023\"\n - \"recently\" \u2192 \"in early May 2023\"\n - Look for date context like \"[This conversation took place on 8 May, 2023]\" and resolve ALL relative dates from it.\n - EVERY event/activity fact MUST include WHEN it happened if the date can be inferred.\n - BAD: \"User went to an LGBTQ support group\"\n - GOOD: \"User went to an LGBTQ support group on 7 May 2023\"\n\n3. Resolve ALL other references:\n - Pronouns \u2192 names: \"she said\" \u2192 \"Casey said\"\n - Places \u2192 full names: \"there\" \u2192 \"at Brightwell Capital\"\n\n4. Be SPECIFIC, not vague:\n BAD: \"User had issues at work\"\n GOOD: \"User's team at Brightwell Capital rambles too much in meetings\"\n\n5. Extract ALL facts, even minor ones. You cannot predict what will be asked later.\n\n6. Write all facts in third person using \"User\" (e.g., \"User prefers dark mode\").\n\n7. For conversation partners: ALSO extract their facts with their name.\n - If Melanie says \"I painted a sunrise last year\" \u2192 \"Melanie painted a sunrise in 2022\"\n - If Melanie says \"I ran a charity race\" \u2192 \"Melanie ran a charity race\"\n\n8. For EVERY fact, include \"ed\" (event date) if the fact describes something that happened at a specific time.\n - \"User went to the gym on May 7\" \u2192 ed: \"2023-05-07\"\n - \"User prefers dark mode\" \u2192 ed: null (timeless preference)\n - If only a month is mentioned (e.g., \"in March 2026\") and today IS in that month, use TODAY's date from the header.\n - If only a month is mentioned and it's a PAST month, use the 15th as midpoint.\n Set \"dd\" (document date) to today's date from the header for ALL facts \u2014 this is when the conversation happened.\n\n9. PATTERN DETECTION: If the text reveals a recurring behavior, preference, routine, or coping strategy, extract it as a pattern fact with higher importance (0.7-0.9).\n - \"I always procrastinate on Mondays\" \u2192 {\"t\": \"User tends to procrastinate on Mondays\", \"i\": 0.8, \"ed\": null, \"dd\": \"...\", \"p\": true}\n - \"Coffee helps me focus\" \u2192 {\"t\": \"User finds that coffee helps with focus\", \"i\": 0.7, \"ed\": null, \"dd\": \"...\", \"p\": true}\n Patterns are behavioral insights \u2014 routines, coping strategies, energy patterns, recurring struggles.\n Mark patterns with \"p\": true in the output. Regular facts use \"p\": false.\n\n## OUTPUT\n\nReturn ONLY a JSON object:\n{\"facts\": [{\"t\": \"fact text here\", \"i\": 0.7, \"ed\": \"2023-05-07\", \"dd\": \"2023-05-08\", \"p\": false}, {\"t\": \"another fact\", \"i\": 0.3, \"ed\": null, \"dd\": \"2023-05-08\", \"p\": false}]}\n\n- ed (eventDate): ISO date string of WHEN the event occurred, or null if not temporal\n- dd (documentDate): ISO date string of when the conversation took place, from context header\n\nScore importance (i) from 0.0 to 1.0:\n- 0.9-1.0: Identity, health conditions, allergies, life events (birth, marriage, death)\n- 0.7-0.8: Relationships, employment, education, strong preferences, plans\n- 0.4-0.6: Activities, opinions, moderate preferences, daily events\n- 0.1-0.3: Casual mentions, weather, trivial observations\n\nNothing else. No explanation, no markdown.";
|
|
27
27
|
export declare function buildExtractionPrompt(input: string, existingFacts?: ExistingFact[]): LLMMessage[];
|
|
28
28
|
//# sourceMappingURL=prompts.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAMrD,eAAO,MAAM,sBAAsB,
|
|
1
|
+
{"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAMrD,eAAO,MAAM,sBAAsB,y3IAsEQ,CAAC;AAM5C,eAAO,MAAM,uBAAuB,6/CAkCZ,CAAC;AAEzB,eAAO,MAAM,oBAAoB,UAA2E,CAAC;AAM7G,eAAO,MAAM,YAAY,8iCAmBkE,CAAC;AAM5F,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE,CAMrE;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,MAAM,EAAE,EACf,WAAW,CAAC,EAAE,MAAM,EAAE,EACtB,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,GACrC,UAAU,EAAE,CA4Bd;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,UAAU,EAAE,CAOhG;AAMD,eAAO,MAAM,wBAAwB,y3IAAyB,CAAC;AAE/D,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,aAAa,CAAC,EAAE,YAAY,EAAE,GAC7B,UAAU,EAAE,CAcd"}
|
|
@@ -47,12 +47,20 @@ For identity/trait facts, state them DIRECTLY:
|
|
|
47
47
|
8. For EVERY fact, include "ed" (event date) if the fact describes something that happened at a specific time.
|
|
48
48
|
- "User went to the gym on May 7" → ed: "2023-05-07"
|
|
49
49
|
- "User prefers dark mode" → ed: null (timeless preference)
|
|
50
|
-
If
|
|
50
|
+
- If only a month is mentioned (e.g., "in March 2026") and today IS in that month, use TODAY's date from the header.
|
|
51
|
+
- If only a month is mentioned and it's a PAST month, use the 15th as midpoint.
|
|
52
|
+
Set "dd" (document date) to today's date from the header for ALL facts — this is when the conversation happened.
|
|
53
|
+
|
|
54
|
+
9. PATTERN DETECTION: If the text reveals a recurring behavior, preference, routine, or coping strategy, extract it as a pattern fact with higher importance (0.7-0.9).
|
|
55
|
+
- "I always procrastinate on Mondays" → {"t": "User tends to procrastinate on Mondays", "i": 0.8, "ed": null, "dd": "...", "p": true}
|
|
56
|
+
- "Coffee helps me focus" → {"t": "User finds that coffee helps with focus", "i": 0.7, "ed": null, "dd": "...", "p": true}
|
|
57
|
+
Patterns are behavioral insights — routines, coping strategies, energy patterns, recurring struggles.
|
|
58
|
+
Mark patterns with "p": true in the output. Regular facts use "p": false.
|
|
51
59
|
|
|
52
60
|
## OUTPUT
|
|
53
61
|
|
|
54
62
|
Return ONLY a JSON object:
|
|
55
|
-
{"facts": [{"t": "fact text here", "i": 0.7, "ed": "2023-05-07", "dd": "2023-05-08"}, {"t": "another fact", "i": 0.3, "ed": null, "dd": "2023-05-08"}]}
|
|
63
|
+
{"facts": [{"t": "fact text here", "i": 0.7, "ed": "2023-05-07", "dd": "2023-05-08", "p": false}, {"t": "another fact", "i": 0.3, "ed": null, "dd": "2023-05-08", "p": false}]}
|
|
56
64
|
|
|
57
65
|
- ed (eventDate): ISO date string of WHEN the event occurred, or null if not temporal
|
|
58
66
|
- dd (documentDate): ISO date string of when the conversation took place, from context header
|
|
@@ -131,9 +139,10 @@ Prefer EXTEND over UPDATE when the new fact adds detail without changing the cor
|
|
|
131
139
|
* Simple: extract facts as strings.
|
|
132
140
|
*/
|
|
133
141
|
export function buildFactExtractionPrompt(input) {
|
|
142
|
+
const today = new Date().toISOString().slice(0, 10); // YYYY-MM-DD
|
|
134
143
|
return [
|
|
135
144
|
{ role: 'system', content: FACT_EXTRACTION_PROMPT },
|
|
136
|
-
{ role: 'user', content: `
|
|
145
|
+
{ role: 'user', content: `[Today's date: ${today}]\n\nExtract facts from this text:\n\n${input}` },
|
|
137
146
|
];
|
|
138
147
|
}
|
|
139
148
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["prompts.ts"],"names":[],"mappings":"AAGA,gFAAgF;AAChF,qDAAqD;AACrD,gFAAgF;AAEhF,MAAM,CAAC,MAAM,sBAAsB,GAAG
|
|
1
|
+
{"version":3,"file":"prompts.js","sourceRoot":"","sources":["prompts.ts"],"names":[],"mappings":"AAGA,gFAAgF;AAChF,qDAAqD;AACrD,gFAAgF;AAEhF,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2CAsEK,CAAC;AAE5C,gFAAgF;AAChF,2EAA2E;AAC3E,gFAAgF;AAEhF,MAAM,CAAC,MAAM,uBAAuB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAkCf,CAAC;AAEzB,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AAE7G,gFAAgF;AAChF,0DAA0D;AAC1D,gFAAgF;AAEhF,MAAM,CAAC,MAAM,YAAY,GAAG;;;;;;;;;;;;;;;;;;;2FAmB+D,CAAC;AAW5F;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,KAAa;IACrD,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa;IAClE,OAAO;QACL,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,sBAAsB,EAAE;QACnD,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,KAAK,yCAAyC,KAAK,EAAE,EAAE;KACnG,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CACxC,KAAe,EACf,WAAsB,EACtB,iBAAsC;IAEtC,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEnE,0EAA0E;IAC1E,MAAM,YAAY,GAAG,WAAW,IAAI,oBAAoB,CAAC;IACzD,MAAM,eAAe,GAAG,iBAAiB,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IAChF,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,YAAY,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;IAEzE,IAAI,MAAM,GAAG,uBAAuB,CAAC,OAAO,CAAC,gBAAgB,EAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAExF,wEAAwE;IACxE,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,MAAM,eAAe,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YAChD,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;gBACnC,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAChC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,WAAW,GAAG,CAC3E,CAAC,IAAI,CAAC,IAAI,CAAC;gBACd,CAAC,CAAC,EAAE,CAAC;YACP,OAAO,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,WAAW,IAAI,SAAS,EAAE,CAAC;QACvD,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,MAAM,IAAI,wCAAwC,eAAe,+NAA+N,CAAC;IACnS,CAAC;IAED,OAAO;QACL,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE;QACnC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,2DAA2D,SAAS,EAAE,EAAE;KAClG,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAkB,EAAE,aAA6B;IAChF,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrE,MAAM,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,UAAU,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvH,OAAO;QACL,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE;QACzC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,OAAO,+BAA+B,YAAY,EAAE,EAAE;KACtG,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,4EAA4E;AAC5E,gFAAgF;AAEhF,MAAM,CAAC,MAAM,wBAAwB,GAAG,sBAAsB,CAAC;AAE/D,MAAM,UAAU,qBAAqB,CACnC,KAAa,EACb,aAA8B;IAE9B,6CAA6C;IAC7C,6EAA6E;IAC7E,IAAI,WAAW,GAAG,oCAAoC,KAAK,EAAE,CAAC;IAC9D,IAAI,aAAa,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,MAAM,UAAU,GAAG,aAAa;aAC7B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;aAC1D,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,WAAW,IAAI,mDAAmD,UAAU,EAAE,CAAC;IACjF,CAAC;IACD,OAAO;QACL,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,sBAAsB,EAAE;QACnD,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE;KACvC,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scratchpad.d.ts","sourceRoot":"","sources":["scratchpad.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAK1C;;;GAGG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CAIjB;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,cAAc,EACvB,GAAG,EAAE,UAAU,EACf,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAAE,GACjB,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"scratchpad.d.ts","sourceRoot":"","sources":["scratchpad.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAK1C;;;GAGG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CAIjB;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,cAAc,EACvB,GAAG,EAAE,UAAU,EACf,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAAE,GACjB,OAAO,CAAC,IAAI,CAAC,CAiDf;AA0BD;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAyB1F;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,cAAc,EACvB,GAAG,EAAE,UAAU,EACf,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC,CAoBjB"}
|