mcp-rag-memory 2.4.1 → 2.6.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/.env.example +3 -1
- package/LICENSE +21 -0
- package/README.md +41 -7
- package/dist/cli.js +85 -32
- package/dist/db/database.d.ts +2 -2
- package/dist/db/database.d.ts.map +1 -1
- package/dist/db/database.js +90 -18
- package/dist/db/database.js.map +1 -1
- package/dist/env.js +32 -12
- package/dist/mcp/rag-server.js +20 -12
- package/dist/mcp/rag-server.js.map +1 -1
- package/dist/memory/memory.d.ts +5 -1
- package/dist/memory/memory.d.ts.map +1 -1
- package/dist/memory/memory.js +234 -102
- package/dist/memory/memory.js.map +1 -1
- package/dist/rag/chunker.d.ts +7 -0
- package/dist/rag/chunker.d.ts.map +1 -1
- package/dist/rag/chunker.js +119 -11
- package/dist/rag/chunker.js.map +1 -1
- package/dist/rag/embeddings.d.ts.map +1 -1
- package/dist/rag/embeddings.js +14 -0
- package/dist/rag/embeddings.js.map +1 -1
- package/dist/rag/pipeline.d.ts +18 -1
- package/dist/rag/pipeline.d.ts.map +1 -1
- package/dist/rag/pipeline.js +210 -37
- package/dist/rag/pipeline.js.map +1 -1
- package/dist/rag/vector-search.d.ts +8 -1
- package/dist/rag/vector-search.d.ts.map +1 -1
- package/dist/rag/vector-search.js +126 -51
- package/dist/rag/vector-search.js.map +1 -1
- package/dist/session/transcript.d.ts +8 -5
- package/dist/session/transcript.d.ts.map +1 -1
- package/dist/session/transcript.js +118 -25
- package/dist/session/transcript.js.map +1 -1
- package/package.json +6 -3
package/dist/memory/memory.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { getDB, newId, nowMs, packVector, unpackVector } from "../db/database.js";
|
|
2
2
|
import { dotProduct } from "../rag/embedder.js";
|
|
3
|
-
import {
|
|
3
|
+
import { estimateTokensFromChars } from "../rag/chunker.js";
|
|
4
4
|
import { embedText } from "../rag/embeddings.js";
|
|
5
5
|
import { vectorSearch, invalidateVectorCache } from "../rag/vector-search.js";
|
|
6
6
|
export const MEMORY_TYPES = [
|
|
@@ -12,45 +12,93 @@ export const MEMORY_TYPES = [
|
|
|
12
12
|
"insight",
|
|
13
13
|
"conversation",
|
|
14
14
|
];
|
|
15
|
-
/** Half-life in days for the recall decay curve. */
|
|
16
|
-
const DECAY_HALF_LIFE_DAYS =
|
|
15
|
+
/** Half-life in days for the recall decay curve (invalid values fall back to 14). */
|
|
16
|
+
const DECAY_HALF_LIFE_DAYS = numEnv("RAG_MEMORY_HALF_LIFE_DAYS", 14, (n) => n > 0);
|
|
17
|
+
function numEnv(name, fallback, valid) {
|
|
18
|
+
const raw = process.env[name];
|
|
19
|
+
if (raw === undefined || raw === "")
|
|
20
|
+
return fallback;
|
|
21
|
+
const n = Number(raw);
|
|
22
|
+
return Number.isFinite(n) && valid(n) ? n : fallback;
|
|
23
|
+
}
|
|
17
24
|
export async function remember(input) {
|
|
18
|
-
const db = getDB();
|
|
19
25
|
const id = newId();
|
|
20
26
|
const ts = nowMs();
|
|
21
27
|
const type = input.type ?? "fact";
|
|
22
28
|
const importance = clampImportance(input.importance ?? 0.5);
|
|
23
29
|
const tags = JSON.stringify(input.tags ?? []);
|
|
24
30
|
const vec = await embedText(input.content);
|
|
31
|
+
// Re-acquire after the await: nothing below should use a handle captured
|
|
32
|
+
// before a yield point, where closeDB() could have invalidated it.
|
|
33
|
+
const db = getDB();
|
|
25
34
|
db.prepare(`INSERT INTO memories (id, type, content, importance, embedding, tags, recall_count, last_recalled, created_at, updated_at)
|
|
26
35
|
VALUES (?, ?, ?, ?, ?, ?, 0, NULL, ?, ?)`).run(id, type, input.content, importance, packVector(vec), tags, ts, ts);
|
|
27
36
|
invalidateVectorCache();
|
|
28
|
-
|
|
37
|
+
const rec = getMemory(id);
|
|
38
|
+
if (!rec)
|
|
39
|
+
throw new Error("Memory insert failed: row disappeared immediately after write");
|
|
40
|
+
return rec;
|
|
41
|
+
}
|
|
42
|
+
const MEMORY_TYPE_SET = new Set(MEMORY_TYPES);
|
|
43
|
+
/** One query for the whole page — getMemory() per row used to be an N+1. */
|
|
44
|
+
function toRecords(rows) {
|
|
45
|
+
return rows.map((row) => ({
|
|
46
|
+
id: row.id,
|
|
47
|
+
type: MEMORY_TYPE_SET.has(row.type) ? row.type : "fact",
|
|
48
|
+
content: row.content,
|
|
49
|
+
importance: typeof row.importance === "number" && Number.isFinite(row.importance) ? row.importance : 0.5,
|
|
50
|
+
tags: parseTags(row.tags),
|
|
51
|
+
recallCount: row.recall_count,
|
|
52
|
+
lastRecalled: row.last_recalled,
|
|
53
|
+
createdAt: row.created_at,
|
|
54
|
+
updatedAt: row.updated_at,
|
|
55
|
+
}));
|
|
56
|
+
}
|
|
57
|
+
const MEMORY_COLUMNS = "id, type, content, importance, tags, recall_count, last_recalled, created_at, updated_at";
|
|
58
|
+
/** Never let a malformed row break every read path. */
|
|
59
|
+
function parseTags(raw) {
|
|
60
|
+
try {
|
|
61
|
+
const parsed = JSON.parse(raw);
|
|
62
|
+
return Array.isArray(parsed) ? parsed.map((t) => String(t)) : [];
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
return [];
|
|
66
|
+
}
|
|
29
67
|
}
|
|
30
68
|
export async function recall(query, topK = 8, minScore = 0.1) {
|
|
31
69
|
const db = getDB();
|
|
32
70
|
const q = await embedText(query);
|
|
33
71
|
const hits = vectorSearch(q, { topK: topK * 2, minScore, collection: "memories" });
|
|
72
|
+
if (hits.length === 0)
|
|
73
|
+
return [];
|
|
34
74
|
const ts = nowMs();
|
|
35
|
-
const
|
|
36
|
-
|
|
75
|
+
const rows = db
|
|
76
|
+
.prepare(`SELECT ${MEMORY_COLUMNS} FROM memories WHERE id IN (${hits.map(() => "?").join(", ")})`)
|
|
77
|
+
.all(...hits.map((h) => h.key));
|
|
78
|
+
const byId = new Map(toRecords(rows).map((r) => [r.id, r]));
|
|
79
|
+
const scored = [];
|
|
37
80
|
for (const h of hits) {
|
|
38
|
-
const rec =
|
|
81
|
+
const rec = byId.get(h.key);
|
|
39
82
|
if (!rec)
|
|
40
83
|
continue;
|
|
41
|
-
bump.run(ts, rec.id);
|
|
42
84
|
const ageMs = ts - (rec.lastRecalled ?? rec.createdAt);
|
|
43
85
|
const decay = Math.pow(0.5, ageMs / (DECAY_HALF_LIFE_DAYS * 86_400_000));
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
|
|
86
|
+
// min_score gates the raw cosine inside vectorSearch; decay shrinks the
|
|
87
|
+
// score afterwards, so a stale-but-perfect match could come back at ~0.
|
|
88
|
+
// Re-apply the floor to the score the caller actually receives.
|
|
89
|
+
const score = h.score * decay;
|
|
90
|
+
if (score < minScore)
|
|
91
|
+
continue;
|
|
92
|
+
scored.push({ ...rec, score, decay });
|
|
93
|
+
}
|
|
94
|
+
scored.sort((a, b) => b.score - a.score);
|
|
95
|
+
const results = scored.slice(0, topK);
|
|
96
|
+
// Bump only what is actually returned: a memory nobody saw is not "recalled",
|
|
97
|
+
// and phantom bumps used to feed decay and the promotion threshold.
|
|
98
|
+
const bump = db.prepare("UPDATE memories SET recall_count = recall_count + 1, last_recalled = ? WHERE id = ?");
|
|
99
|
+
for (const r of results)
|
|
100
|
+
bump.run(ts, r.id);
|
|
101
|
+
return results.map((r) => ({ ...r, recallCount: r.recallCount + 1, lastRecalled: ts }));
|
|
54
102
|
}
|
|
55
103
|
export function listMemories(opts = {}) {
|
|
56
104
|
const db = getDB();
|
|
@@ -61,7 +109,9 @@ export function listMemories(opts = {}) {
|
|
|
61
109
|
params.push(opts.type);
|
|
62
110
|
}
|
|
63
111
|
if (opts.tag) {
|
|
64
|
-
|
|
112
|
+
// json_each() raises "malformed JSON" on a corrupted column, which would
|
|
113
|
+
// break the whole listing. Feed it a guaranteed-valid array instead.
|
|
114
|
+
clauses.push("EXISTS (SELECT 1 FROM json_each(CASE WHEN json_valid(memories.tags) THEN memories.tags ELSE '[]' END) AS _tg WHERE _tg.value = ?)");
|
|
65
115
|
params.push(opts.tag);
|
|
66
116
|
}
|
|
67
117
|
if (opts.minImportance !== undefined) {
|
|
@@ -69,133 +119,208 @@ export function listMemories(opts = {}) {
|
|
|
69
119
|
params.push(opts.minImportance);
|
|
70
120
|
}
|
|
71
121
|
const where = clauses.length ? ` WHERE ${clauses.join(" AND ")}` : "";
|
|
72
|
-
const
|
|
122
|
+
const rawLimit = opts.limit;
|
|
123
|
+
const limit = rawLimit === undefined || !Number.isFinite(rawLimit)
|
|
124
|
+
? 100
|
|
125
|
+
: Math.min(Math.max(Math.trunc(rawLimit), 1), 500);
|
|
126
|
+
// id as tiebreaker: updated_at is millisecond-resolution, so a bulk write
|
|
127
|
+
// leaves large tie groups and LIMIT would pick an arbitrary subset.
|
|
73
128
|
const rows = db
|
|
74
|
-
.prepare(`SELECT
|
|
129
|
+
.prepare(`SELECT ${MEMORY_COLUMNS} FROM memories${where} ORDER BY updated_at DESC, id DESC LIMIT ${limit}`)
|
|
75
130
|
.all(...params);
|
|
76
|
-
return rows
|
|
131
|
+
return toRecords(rows);
|
|
77
132
|
}
|
|
78
133
|
export function getMemory(id) {
|
|
79
134
|
const db = getDB();
|
|
80
135
|
const row = db
|
|
81
|
-
.prepare(
|
|
136
|
+
.prepare(`SELECT ${MEMORY_COLUMNS} FROM memories WHERE id = ?`)
|
|
82
137
|
.get(id);
|
|
83
138
|
if (!row)
|
|
84
139
|
return null;
|
|
85
|
-
return
|
|
86
|
-
id: row.id,
|
|
87
|
-
type: row.type,
|
|
88
|
-
content: row.content,
|
|
89
|
-
importance: row.importance,
|
|
90
|
-
tags: JSON.parse(row.tags),
|
|
91
|
-
recallCount: row.recall_count,
|
|
92
|
-
lastRecalled: row.last_recalled,
|
|
93
|
-
createdAt: row.created_at,
|
|
94
|
-
updatedAt: row.updated_at,
|
|
95
|
-
};
|
|
140
|
+
return toRecords([row])[0];
|
|
96
141
|
}
|
|
97
142
|
export async function updateMemory(id, patch) {
|
|
98
|
-
const db = getDB();
|
|
99
143
|
const existing = getMemory(id);
|
|
100
144
|
if (!existing)
|
|
101
145
|
return null;
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
const
|
|
106
|
-
const
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
146
|
+
// Build the SET list from the patch only. Rewriting every column from a
|
|
147
|
+
// pre-read snapshot made this a lost-update: two concurrent patches (CLI +
|
|
148
|
+
// server, or two sessions) each wrote back the other's stale values.
|
|
149
|
+
const sets = [];
|
|
150
|
+
const params = [];
|
|
151
|
+
if (patch.content !== undefined) {
|
|
152
|
+
sets.push("content = ?");
|
|
153
|
+
params.push(patch.content);
|
|
154
|
+
}
|
|
155
|
+
if (patch.type !== undefined) {
|
|
156
|
+
sets.push("type = ?");
|
|
157
|
+
params.push(patch.type);
|
|
158
|
+
}
|
|
159
|
+
if (patch.importance !== undefined) {
|
|
160
|
+
sets.push("importance = ?");
|
|
161
|
+
params.push(clampImportance(patch.importance));
|
|
162
|
+
}
|
|
163
|
+
if (patch.tags !== undefined) {
|
|
164
|
+
sets.push("tags = ?");
|
|
165
|
+
params.push(JSON.stringify(patch.tags));
|
|
166
|
+
}
|
|
167
|
+
// An all-undefined patch must not touch the row (or re-embed) at all.
|
|
168
|
+
if (sets.length === 0)
|
|
169
|
+
return existing;
|
|
170
|
+
// Only a real text edit needs the model; metadata-only patches stay cheap.
|
|
171
|
+
if (patch.content !== undefined && patch.content !== existing.content) {
|
|
172
|
+
const vec = await embedText(patch.content);
|
|
173
|
+
sets.push("embedding = ?");
|
|
174
|
+
params.push(packVector(vec));
|
|
175
|
+
invalidateVectorCache();
|
|
176
|
+
}
|
|
177
|
+
sets.push("updated_at = ?");
|
|
178
|
+
params.push(nowMs());
|
|
179
|
+
// Re-acquire after the await above: the handle could have been closed.
|
|
180
|
+
const db = getDB();
|
|
181
|
+
const res = db
|
|
182
|
+
.prepare(`UPDATE memories SET ${sets.join(", ")} WHERE id = ?`)
|
|
183
|
+
.run(...params, id);
|
|
184
|
+
return Number(res.changes) > 0 ? getMemory(id) : null;
|
|
111
185
|
}
|
|
112
186
|
export function forget(id) {
|
|
113
187
|
const db = getDB();
|
|
114
188
|
const res = db.prepare("DELETE FROM memories WHERE id = ?").run(id);
|
|
115
|
-
|
|
116
|
-
|
|
189
|
+
const deleted = Number(res.changes) > 0;
|
|
190
|
+
// A mistyped id used to force a full vector re-read on the next search.
|
|
191
|
+
if (deleted)
|
|
192
|
+
invalidateVectorCache();
|
|
193
|
+
return { deleted };
|
|
194
|
+
}
|
|
195
|
+
/** Above this many vectors the O(n^2) dedup pass is skipped (event-loop budget). */
|
|
196
|
+
const DEDUP_MAX_VECTORS = 500;
|
|
197
|
+
const DEDUP_SIMILARITY = 0.92;
|
|
198
|
+
const DEDUP_TOKEN_OVERLAP = 0.8;
|
|
199
|
+
function tokenSet(text) {
|
|
200
|
+
return new Set((text.toLowerCase().match(/[\p{L}\p{N}]+/gu) ?? []).filter((t) => t.length > 1));
|
|
201
|
+
}
|
|
202
|
+
/** Jaccard overlap of word sets — the second gate before anything is deleted. */
|
|
203
|
+
function tokenOverlap(a, b) {
|
|
204
|
+
const ta = tokenSet(a);
|
|
205
|
+
const tb = tokenSet(b);
|
|
206
|
+
if (ta.size === 0 || tb.size === 0)
|
|
207
|
+
return 0;
|
|
208
|
+
let shared = 0;
|
|
209
|
+
for (const t of ta)
|
|
210
|
+
if (tb.has(t))
|
|
211
|
+
shared++;
|
|
212
|
+
return shared / (ta.size + tb.size - shared);
|
|
117
213
|
}
|
|
118
214
|
/**
|
|
119
|
-
* - Removes near-duplicate memories (
|
|
215
|
+
* - Removes near-duplicate memories (cosine >= 0.92 AND >= 80% word overlap)
|
|
216
|
+
* keeping the highest-importance one. The text gate matters: templated agent
|
|
217
|
+
* memories ("The user's X is Y") sit at ~0.95 cosine while being distinct, and
|
|
218
|
+
* deleting those is unrecoverable.
|
|
120
219
|
* - Promotes importance of frequently-needed memories (recall_count >= 5) by +0.1.
|
|
121
220
|
* - Optionally prunes stale, low-importance, never-recalled memories (RAG_PRUNE=1,
|
|
122
221
|
* RAG_PRUNE_IMPORTANCE=0.2, RAG_PRUNE_AGE_DAYS=90). Off by default — deletes are irreversible.
|
|
123
222
|
*/
|
|
124
223
|
export async function consolidate() {
|
|
125
224
|
const db = getDB();
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
.
|
|
130
|
-
|
|
225
|
+
// ORDER BY so the dedup anchor (and therefore the survivor) is deterministic:
|
|
226
|
+
// scan order can change with the query plan and flip which memory survives.
|
|
227
|
+
const rows = db
|
|
228
|
+
.prepare(`SELECT ${MEMORY_COLUMNS}, embedding FROM memories ORDER BY importance DESC, created_at, id`)
|
|
229
|
+
.all();
|
|
131
230
|
const vectors = [];
|
|
132
231
|
for (const r of rows) {
|
|
133
|
-
if (!recordsById.has(r.id))
|
|
134
|
-
continue;
|
|
135
232
|
const vec = unpackVector(r.embedding);
|
|
136
233
|
if (vec)
|
|
137
234
|
vectors.push({ id: r.id, vec });
|
|
138
235
|
}
|
|
236
|
+
const records = new Map(toRecords(rows).map((r) => [r.id, r]));
|
|
139
237
|
let removedDuplicates = 0;
|
|
238
|
+
const skippedDedup = vectors.length > DEDUP_MAX_VECTORS;
|
|
140
239
|
const toDelete = new Set();
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
for (let j = i + 1; j < vectors.length; j++) {
|
|
145
|
-
if (toDelete.has(vectors[j].id))
|
|
240
|
+
if (!skippedDedup) {
|
|
241
|
+
for (let i = 0; i < vectors.length; i++) {
|
|
242
|
+
if (toDelete.has(vectors[i].id))
|
|
146
243
|
continue;
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
244
|
+
for (let j = i + 1; j < vectors.length; j++) {
|
|
245
|
+
if (toDelete.has(vectors[j].id))
|
|
246
|
+
continue;
|
|
247
|
+
if (dotProduct(vectors[i].vec, vectors[j].vec) < DEDUP_SIMILARITY)
|
|
248
|
+
continue;
|
|
249
|
+
const a = records.get(vectors[i].id);
|
|
250
|
+
const b = records.get(vectors[j].id);
|
|
251
|
+
if (!a || !b || tokenOverlap(a.content, b.content) < DEDUP_TOKEN_OVERLAP)
|
|
252
|
+
continue;
|
|
151
253
|
if (a.importance >= b.importance) {
|
|
152
|
-
toDelete.add(
|
|
254
|
+
toDelete.add(b.id);
|
|
153
255
|
}
|
|
154
256
|
else {
|
|
155
|
-
toDelete.add(
|
|
156
|
-
|
|
157
|
-
vectors[i]
|
|
158
|
-
|
|
257
|
+
toDelete.add(a.id);
|
|
258
|
+
// Swap the WHOLE entry, not just the id: swapping ids alone leaves
|
|
259
|
+
// vectors[i] holding the survivor's id with the *deleted* memory's
|
|
260
|
+
// embedding, so a later comparison gates one memory's cosine on
|
|
261
|
+
// another's vector and deletes distinct memories.
|
|
262
|
+
const tmp = vectors[i];
|
|
263
|
+
vectors[i] = vectors[j];
|
|
264
|
+
vectors[j] = tmp;
|
|
159
265
|
}
|
|
160
266
|
removedDuplicates++;
|
|
161
267
|
}
|
|
162
268
|
}
|
|
163
269
|
}
|
|
164
270
|
const delStmt = db.prepare("DELETE FROM memories WHERE id = ?");
|
|
165
|
-
for
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
271
|
+
// One transaction for the whole destructive pass. In autocommit each delete
|
|
272
|
+
// committed on its own, so a SQLITE_BUSY or crash midway left duplicates
|
|
273
|
+
// deleted but promotion (or the prune half) unapplied — unrecoverable and
|
|
274
|
+
// unreported, because the throw propagated instead of the counts.
|
|
275
|
+
db.exec("BEGIN IMMEDIATE;");
|
|
276
|
+
try {
|
|
277
|
+
for (const id of toDelete)
|
|
278
|
+
delStmt.run(id);
|
|
279
|
+
// One UPDATE for the whole store: the old per-row updateMemory() re-embedded
|
|
280
|
+
// every candidate (a full model inference each) and only saw the newest 100.
|
|
281
|
+
const promoted = Number(db
|
|
282
|
+
.prepare("UPDATE memories SET importance = min(1, importance + 0.1) WHERE recall_count >= 5 AND importance < 1")
|
|
283
|
+
.run().changes);
|
|
284
|
+
let pruned = 0;
|
|
285
|
+
const pruneEnabled = process.env.RAG_PRUNE === "1" || process.env.RAG_PRUNE === "true";
|
|
286
|
+
if (pruneEnabled) {
|
|
287
|
+
const minImp = numEnv("RAG_PRUNE_IMPORTANCE", 0.2, (n) => n >= 0 && n <= 1);
|
|
288
|
+
const maxAgeDays = numEnv("RAG_PRUNE_AGE_DAYS", 90, (n) => n >= 0);
|
|
289
|
+
const cutoff = nowMs() - maxAgeDays * 86_400_000;
|
|
290
|
+
const stale = db
|
|
291
|
+
// <= so RAG_PRUNE_AGE_DAYS=0 means "everything is stale"; a strict <
|
|
292
|
+
// skipped rows created in the same millisecond as the cutoff, which made
|
|
293
|
+
// the prune silently no-op on a fast machine.
|
|
294
|
+
.prepare("SELECT id FROM memories WHERE importance < ? AND recall_count = 0 AND created_at <= ?")
|
|
295
|
+
.all(minImp, cutoff);
|
|
296
|
+
for (const s of stale) {
|
|
297
|
+
delStmt.run(s.id);
|
|
298
|
+
pruned++;
|
|
173
299
|
}
|
|
174
300
|
}
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
const
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
301
|
+
db.exec("COMMIT;");
|
|
302
|
+
// Deleted rows must leave the vector cache, or the next search still scores
|
|
303
|
+
// them and can return a memory that no longer exists.
|
|
304
|
+
if (removedDuplicates > 0 || pruned > 0)
|
|
305
|
+
invalidateVectorCache();
|
|
306
|
+
const stats = memoryStats();
|
|
307
|
+
return {
|
|
308
|
+
removedDuplicates,
|
|
309
|
+
promoted,
|
|
310
|
+
pruned,
|
|
311
|
+
skippedDedup,
|
|
312
|
+
totals: { memories: stats.memories, tokens: stats.tokens },
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
catch (e) {
|
|
316
|
+
try {
|
|
317
|
+
db.exec("ROLLBACK;");
|
|
188
318
|
}
|
|
319
|
+
catch {
|
|
320
|
+
/* transaction already closed */
|
|
321
|
+
}
|
|
322
|
+
throw e;
|
|
189
323
|
}
|
|
190
|
-
await bumpPromotion();
|
|
191
|
-
invalidateVectorCache();
|
|
192
|
-
const stats = memoryStats();
|
|
193
|
-
return {
|
|
194
|
-
removedDuplicates,
|
|
195
|
-
promoted,
|
|
196
|
-
pruned,
|
|
197
|
-
totals: { memories: stats.memories, tokens: stats.tokens },
|
|
198
|
-
};
|
|
199
324
|
}
|
|
200
325
|
export function memoryStats() {
|
|
201
326
|
const db = getDB();
|
|
@@ -205,10 +330,15 @@ export function memoryStats() {
|
|
|
205
330
|
const byType = {};
|
|
206
331
|
for (const r of byTypeRows)
|
|
207
332
|
byType[r.type] = r.c;
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
333
|
+
// LENGTH() in SQL: loading every content blob just to count tokens was a full
|
|
334
|
+
// table pull on each system_stats / memory_stats call. Keep the char count in
|
|
335
|
+
// SQL and estimate here — materialising "x".repeat(n) per row re-allocated the
|
|
336
|
+
// very blobs this was meant to avoid.
|
|
337
|
+
let chars = 0;
|
|
338
|
+
for (const r of db.prepare("SELECT LENGTH(content) AS n FROM memories").all()) {
|
|
339
|
+
chars += Math.max(0, r.n ?? 0);
|
|
211
340
|
}
|
|
341
|
+
const totalTokens = estimateTokensFromChars(chars);
|
|
212
342
|
return { memories: count.c, tokens: totalTokens, avgImportance: avg.a, byType };
|
|
213
343
|
}
|
|
214
344
|
export async function contextPrompt(query, topK = 6) {
|
|
@@ -219,6 +349,8 @@ export async function contextPrompt(query, topK = 6) {
|
|
|
219
349
|
return { context: lines.join("\n"), sources: hits };
|
|
220
350
|
}
|
|
221
351
|
function clampImportance(v) {
|
|
352
|
+
if (!Number.isFinite(v))
|
|
353
|
+
return 0.5;
|
|
222
354
|
return Math.min(1, Math.max(0, v));
|
|
223
355
|
}
|
|
224
356
|
//# sourceMappingURL=memory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/memory/memory.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/memory/memory.ts"],"names":[],"mappings":"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"}
|
package/dist/rag/chunker.d.ts
CHANGED
|
@@ -13,4 +13,11 @@ export interface ChunkOptions {
|
|
|
13
13
|
export declare function chunkText(text: string, options?: ChunkOptions): Chunk[];
|
|
14
14
|
/** Rough token estimate: ~4 chars per token for latin, ~1.5 for CJK. */
|
|
15
15
|
export declare function estimateTokens(text: string): number;
|
|
16
|
+
/**
|
|
17
|
+
* Same estimate for an already-known character count. Lets a caller total
|
|
18
|
+
* LENGTH() across many rows in SQL instead of materialising each content
|
|
19
|
+
* blob just to re-count its characters. Assumes no CJK in the total, which
|
|
20
|
+
* under-counts CJK-heavy stores — the same tradeoff the SQL path already made.
|
|
21
|
+
*/
|
|
22
|
+
export declare function estimateTokensFromChars(chars: number): number;
|
|
16
23
|
//# sourceMappingURL=chunker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chunker.d.ts","sourceRoot":"","sources":["../../src/rag/chunker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;
|
|
1
|
+
{"version":3,"file":"chunker.d.ts","sourceRoot":"","sources":["../../src/rag/chunker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAwHD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,KAAK,EAAE,CAiF3E;AAED,wEAAwE;AACxE,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAInD;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAG7D"}
|