@cogitator-ai/memory 0.11.8 → 0.12.1
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 +32 -5
- package/dist/adapters/base.d.ts +4 -2
- package/dist/adapters/base.d.ts.map +1 -1
- package/dist/adapters/base.js +4 -0
- package/dist/adapters/base.js.map +1 -1
- package/dist/adapters/memory-embedding.d.ts +2 -1
- package/dist/adapters/memory-embedding.d.ts.map +1 -1
- package/dist/adapters/memory-embedding.js +14 -22
- package/dist/adapters/memory-embedding.js.map +1 -1
- package/dist/adapters/memory.d.ts +2 -2
- package/dist/adapters/memory.d.ts.map +1 -1
- package/dist/adapters/memory.js +1 -1
- package/dist/adapters/memory.js.map +1 -1
- package/dist/adapters/mongodb.d.ts +2 -2
- package/dist/adapters/mongodb.d.ts.map +1 -1
- package/dist/adapters/mongodb.js +1 -1
- package/dist/adapters/mongodb.js.map +1 -1
- package/dist/adapters/postgres.d.ts +47 -3
- package/dist/adapters/postgres.d.ts.map +1 -1
- package/dist/adapters/postgres.js +167 -33
- package/dist/adapters/postgres.js.map +1 -1
- package/dist/adapters/qdrant.d.ts +2 -1
- package/dist/adapters/qdrant.d.ts.map +1 -1
- package/dist/adapters/qdrant.js +43 -21
- package/dist/adapters/qdrant.js.map +1 -1
- package/dist/adapters/redis.d.ts +2 -2
- package/dist/adapters/redis.d.ts.map +1 -1
- package/dist/adapters/redis.js +42 -29
- package/dist/adapters/redis.js.map +1 -1
- package/dist/adapters/sqlite.d.ts +2 -2
- package/dist/adapters/sqlite.d.ts.map +1 -1
- package/dist/adapters/sqlite.js +18 -5
- package/dist/adapters/sqlite.js.map +1 -1
- package/dist/compaction.d.ts +9 -2
- package/dist/compaction.d.ts.map +1 -1
- package/dist/compaction.js +85 -31
- package/dist/compaction.js.map +1 -1
- package/dist/context-builder.d.ts +18 -3
- package/dist/context-builder.d.ts.map +1 -1
- package/dist/context-builder.js +204 -185
- package/dist/context-builder.js.map +1 -1
- package/dist/core-facts.d.ts.map +1 -1
- package/dist/core-facts.js +4 -0
- package/dist/core-facts.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/knowledge-graph/sqlite-graph-adapter.d.ts.map +1 -1
- package/dist/knowledge-graph/sqlite-graph-adapter.js +7 -1
- package/dist/knowledge-graph/sqlite-graph-adapter.js.map +1 -1
- package/dist/schema.d.ts +2 -0
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +1 -0
- package/dist/schema.js.map +1 -1
- package/dist/search/filter.d.ts +11 -0
- package/dist/search/filter.d.ts.map +1 -0
- package/dist/search/filter.js +37 -0
- package/dist/search/filter.js.map +1 -0
- package/dist/search/hybrid-search.d.ts +7 -1
- package/dist/search/hybrid-search.d.ts.map +1 -1
- package/dist/search/hybrid-search.js +29 -13
- package/dist/search/hybrid-search.js.map +1 -1
- package/dist/session-manager.d.ts +14 -0
- package/dist/session-manager.d.ts.map +1 -1
- package/dist/session-manager.js +18 -0
- package/dist/session-manager.js.map +1 -1
- package/dist/token-counter.d.ts +13 -2
- package/dist/token-counter.d.ts.map +1 -1
- package/dist/token-counter.js +51 -11
- package/dist/token-counter.js.map +1 -1
- package/package.json +14 -11
package/dist/adapters/redis.js
CHANGED
|
@@ -40,29 +40,36 @@ export class RedisAdapter extends BaseMemoryAdapter {
|
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
async connect() {
|
|
43
|
+
if (this.client)
|
|
44
|
+
return this.success(undefined);
|
|
45
|
+
let client;
|
|
46
|
+
let connectionError;
|
|
43
47
|
try {
|
|
44
|
-
|
|
45
|
-
|
|
48
|
+
client = this.config.cluster
|
|
49
|
+
? await createRedisClient({
|
|
46
50
|
mode: 'cluster',
|
|
47
51
|
nodes: this.config.cluster.nodes,
|
|
48
52
|
scaleReads: this.config.cluster.scaleReads,
|
|
49
53
|
password: this.config.password,
|
|
50
|
-
})
|
|
51
|
-
|
|
52
|
-
else {
|
|
53
|
-
this.client = await createRedisClient({
|
|
54
|
+
})
|
|
55
|
+
: await createRedisClient({
|
|
54
56
|
mode: 'standalone',
|
|
55
57
|
url: this.config.url,
|
|
56
58
|
host: this.config.host,
|
|
57
59
|
port: this.config.port,
|
|
58
60
|
password: this.config.password,
|
|
59
61
|
});
|
|
60
|
-
|
|
61
|
-
|
|
62
|
+
client.on('error', (error) => {
|
|
63
|
+
connectionError ??= error;
|
|
64
|
+
});
|
|
65
|
+
await client.ping();
|
|
66
|
+
this.client = client;
|
|
62
67
|
return this.success(undefined);
|
|
63
68
|
}
|
|
64
69
|
catch (error) {
|
|
65
|
-
|
|
70
|
+
await client?.quit().catch(() => undefined);
|
|
71
|
+
const reason = connectionError ?? error;
|
|
72
|
+
return this.failure(`Redis connection failed: ${reason instanceof Error ? reason.message : String(reason)}`);
|
|
66
73
|
}
|
|
67
74
|
}
|
|
68
75
|
async disconnect() {
|
|
@@ -138,7 +145,7 @@ export class RedisAdapter extends BaseMemoryAdapter {
|
|
|
138
145
|
const full = {
|
|
139
146
|
...entry,
|
|
140
147
|
id: this.generateId('entry'),
|
|
141
|
-
createdAt: this.
|
|
148
|
+
createdAt: this.entryTimestamp(entry),
|
|
142
149
|
};
|
|
143
150
|
const key = this.key('entry', full.id);
|
|
144
151
|
const setKey = this.key('thread:entries', entry.threadId);
|
|
@@ -152,25 +159,31 @@ export class RedisAdapter extends BaseMemoryAdapter {
|
|
|
152
159
|
async getEntries(options) {
|
|
153
160
|
return this.run(async (client) => {
|
|
154
161
|
const setKey = this.key('thread:entries', options.threadId);
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
162
|
+
const limit = options.limit && options.limit > 0 ? options.limit : undefined;
|
|
163
|
+
const ranged = Boolean(options.before || options.after);
|
|
164
|
+
const read = async () => {
|
|
165
|
+
if (ranged) {
|
|
166
|
+
const min = options.after ? `(${options.after.getTime()}` : '-inf';
|
|
167
|
+
const max = options.before ? `(${options.before.getTime()}` : '+inf';
|
|
168
|
+
return client.zrangebyscore(setKey, min, max);
|
|
169
|
+
}
|
|
170
|
+
return limit ? client.zrange(setKey, -limit, -1) : client.zrange(setKey, 0, -1);
|
|
171
|
+
};
|
|
172
|
+
let values = [];
|
|
173
|
+
for (;;) {
|
|
174
|
+
const keys = await read();
|
|
175
|
+
if (keys.length === 0)
|
|
176
|
+
break;
|
|
177
|
+
const found = await client.mget(...keys);
|
|
178
|
+
const expired = keys.filter((_key, index) => found[index] === null);
|
|
179
|
+
values = found.filter((v) => v !== null);
|
|
180
|
+
if (expired.length === 0)
|
|
181
|
+
break;
|
|
169
182
|
await client.zrem(setKey, ...expired);
|
|
183
|
+
if (ranged || !limit)
|
|
184
|
+
break;
|
|
170
185
|
}
|
|
171
|
-
let entries = values
|
|
172
|
-
.filter((v) => v !== null)
|
|
173
|
-
.map((v) => {
|
|
186
|
+
let entries = values.map((v) => {
|
|
174
187
|
const entry = JSON.parse(v);
|
|
175
188
|
entry.createdAt = new Date(entry.createdAt);
|
|
176
189
|
if (!options.includeToolCalls) {
|
|
@@ -179,8 +192,8 @@ export class RedisAdapter extends BaseMemoryAdapter {
|
|
|
179
192
|
}
|
|
180
193
|
return entry;
|
|
181
194
|
});
|
|
182
|
-
if (
|
|
183
|
-
entries = entries.slice(-
|
|
195
|
+
if (limit && entries.length > limit) {
|
|
196
|
+
entries = entries.slice(-limit);
|
|
184
197
|
}
|
|
185
198
|
return this.success(entries);
|
|
186
199
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redis.js","sourceRoot":"","sources":["../../src/adapters/redis.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"redis.js","sourceRoot":"","sources":["../../src/adapters/redis.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Thread, MemoryEntry, MemoryQueryOptions, MemoryResult, SQLiteAdapterConfig, MemoryProvider } from '@cogitator-ai/types';
|
|
1
|
+
import type { Thread, MemoryEntry, MemoryQueryOptions, MemoryResult, SQLiteAdapterConfig, MemoryProvider, NewMemoryEntry } from '@cogitator-ai/types';
|
|
2
2
|
import { BaseMemoryAdapter } from './base.js';
|
|
3
3
|
export declare class SQLiteAdapter extends BaseMemoryAdapter {
|
|
4
4
|
readonly provider: MemoryProvider;
|
|
@@ -12,7 +12,7 @@ export declare class SQLiteAdapter extends BaseMemoryAdapter {
|
|
|
12
12
|
getThread(threadId: string): Promise<MemoryResult<Thread | null>>;
|
|
13
13
|
updateThread(threadId: string, metadata: Record<string, unknown>): Promise<MemoryResult<Thread>>;
|
|
14
14
|
deleteThread(threadId: string): Promise<MemoryResult<void>>;
|
|
15
|
-
addEntry(entry:
|
|
15
|
+
addEntry(entry: NewMemoryEntry): Promise<MemoryResult<MemoryEntry>>;
|
|
16
16
|
getEntries(options: MemoryQueryOptions): Promise<MemoryResult<MemoryEntry[]>>;
|
|
17
17
|
getEntry(entryId: string): Promise<MemoryResult<MemoryEntry | null>>;
|
|
18
18
|
deleteEntry(entryId: string): Promise<MemoryResult<void>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/adapters/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EACN,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACf,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/adapters/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EACN,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACd,cAAc,EACf,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAgB3C,qBAAa,aAAc,SAAQ,iBAAiB;IAClD,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAY;IAE7C,OAAO,CAAC,EAAE,CAA+B;IACzC,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,OAAO,CAAU;gBAEb,MAAM,EAAE,mBAAmB;IAMjC,OAAO,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IA0DtC,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAczC,YAAY,CAChB,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACtC,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAyB1B,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAcjE,YAAY,CAChB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAwB1B,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAW3D,QAAQ,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;IA8BnE,UAAU,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC;IAwD7E,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAmCpE,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAWzD,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAWhE,OAAO,CAAC,WAAW;CASpB"}
|
package/dist/adapters/sqlite.js
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
|
+
import { mkdir } from 'node:fs/promises';
|
|
2
|
+
import { dirname } from 'node:path';
|
|
1
3
|
import { BaseMemoryAdapter } from './base.js';
|
|
4
|
+
/** Whether `path` names a database file on disk rather than an in-memory or temporary database. */
|
|
5
|
+
function isFileDatabase(path) {
|
|
6
|
+
return path !== '' && path !== ':memory:' && !path.startsWith('file::memory:');
|
|
7
|
+
}
|
|
2
8
|
export class SQLiteAdapter extends BaseMemoryAdapter {
|
|
3
9
|
provider = 'sqlite';
|
|
4
10
|
db = null;
|
|
@@ -20,13 +26,17 @@ export class SQLiteAdapter extends BaseMemoryAdapter {
|
|
|
20
26
|
catch {
|
|
21
27
|
return this.failure('better-sqlite3 not installed. Run: pnpm add better-sqlite3');
|
|
22
28
|
}
|
|
29
|
+
let db;
|
|
23
30
|
try {
|
|
24
|
-
|
|
25
|
-
|
|
31
|
+
if (isFileDatabase(this.path)) {
|
|
32
|
+
await mkdir(dirname(this.path), { recursive: true });
|
|
33
|
+
}
|
|
34
|
+
db = new Database(this.path);
|
|
35
|
+
db.pragma('foreign_keys = ON');
|
|
26
36
|
if (this.walMode && this.path !== ':memory:') {
|
|
27
|
-
|
|
37
|
+
db.pragma('journal_mode = WAL');
|
|
28
38
|
}
|
|
29
|
-
|
|
39
|
+
db.exec(`
|
|
30
40
|
CREATE TABLE IF NOT EXISTS threads (
|
|
31
41
|
id TEXT PRIMARY KEY,
|
|
32
42
|
agent_id TEXT NOT NULL,
|
|
@@ -51,9 +61,12 @@ export class SQLiteAdapter extends BaseMemoryAdapter {
|
|
|
51
61
|
CREATE INDEX IF NOT EXISTS idx_entries_created ON entries(created_at);
|
|
52
62
|
CREATE INDEX IF NOT EXISTS idx_threads_agent ON threads(agent_id);
|
|
53
63
|
`);
|
|
64
|
+
this.db = db;
|
|
54
65
|
return this.success(undefined);
|
|
55
66
|
}
|
|
56
67
|
catch (err) {
|
|
68
|
+
if (db?.open)
|
|
69
|
+
db.close();
|
|
57
70
|
return this.failure(err.message);
|
|
58
71
|
}
|
|
59
72
|
}
|
|
@@ -151,7 +164,7 @@ export class SQLiteAdapter extends BaseMemoryAdapter {
|
|
|
151
164
|
const full = {
|
|
152
165
|
...entry,
|
|
153
166
|
id: this.generateId('entry'),
|
|
154
|
-
createdAt: this.
|
|
167
|
+
createdAt: this.entryTimestamp(entry),
|
|
155
168
|
};
|
|
156
169
|
try {
|
|
157
170
|
const stmt = this.db.prepare(`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/adapters/sqlite.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/adapters/sqlite.ts"],"names":[],"mappings":"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"}
|
package/dist/compaction.d.ts
CHANGED
|
@@ -21,10 +21,17 @@ export declare class CompactionService {
|
|
|
21
21
|
private readonly adapter;
|
|
22
22
|
private readonly summarize;
|
|
23
23
|
constructor(config: CompactionServiceConfig);
|
|
24
|
+
/**
|
|
25
|
+
* Compacts thread `sessionId` once it holds `config.threshold` tokens or
|
|
26
|
+
* `config.messageThreshold` entries, keeping the newest `config.keepRecent` entries.
|
|
27
|
+
*/
|
|
24
28
|
compact(sessionId: string, config: CompactionConfig): Promise<CompactionResult>;
|
|
29
|
+
private compactNow;
|
|
25
30
|
/**
|
|
26
|
-
*
|
|
27
|
-
*
|
|
31
|
+
* Replaces `entriesToRemove` with a summary entry dated just before the first of
|
|
32
|
+
* `entriesToKeep`, so the thread reads summary, kept entries, then whatever was saved while the
|
|
33
|
+
* summary was written. Kept entries are left untouched. An adapter that ignores the requested
|
|
34
|
+
* `createdAt` gets the kept entries re-added after the summary instead.
|
|
28
35
|
*/
|
|
29
36
|
applySummary(sessionId: string, entriesToRemove: MemoryEntry[], summary: string, entriesToKeep?: MemoryEntry[]): Promise<number>;
|
|
30
37
|
getSummarizeFn(): SummarizeFn;
|
package/dist/compaction.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compaction.d.ts","sourceRoot":"","sources":["../src/compaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAEhB,OAAO,EACR,MAAM,qBAAqB,CAAC;AAG7B;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE,gBAAgB,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAE/F,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,aAAa,CAAC;IACvB,SAAS,EAAE,WAAW,CAAC;CACxB;
|
|
1
|
+
{"version":3,"file":"compaction.d.ts","sourceRoot":"","sources":["../src/compaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAEhB,OAAO,EACR,MAAM,qBAAqB,CAAC;AAG7B;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE,gBAAgB,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAE/F,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,aAAa,CAAC;IACvB,SAAS,EAAE,WAAW,CAAC;CACxB;AASD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;gBAE5B,MAAM,EAAE,uBAAuB;IAK3C;;;OAGG;IACG,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;YAsBvE,UAAU;IA6BxB;;;;;OAKG;IACG,YAAY,CAChB,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,WAAW,EAAE,EAC9B,OAAO,EAAE,MAAM,EACf,aAAa,GAAE,WAAW,EAAO,GAChC,OAAO,CAAC,MAAM,CAAC;IA6ClB,cAAc,IAAI,WAAW;IAI7B,UAAU,IAAI,aAAa;CAG5B"}
|
package/dist/compaction.js
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
import { countMessagesTokens } from './token-counter.js';
|
|
1
|
+
import { countEntryTokens, countMessagesTokens } from './token-counter.js';
|
|
2
|
+
/**
|
|
3
|
+
* Compactions in progress, per adapter and thread: a second compaction of the same thread in this
|
|
4
|
+
* process waits for the first and then looks at what is left, instead of summarizing the same
|
|
5
|
+
* entries twice.
|
|
6
|
+
*/
|
|
7
|
+
const running = new WeakMap();
|
|
2
8
|
export class CompactionService {
|
|
3
9
|
adapter;
|
|
4
10
|
summarize;
|
|
@@ -6,7 +12,31 @@ export class CompactionService {
|
|
|
6
12
|
this.adapter = config.adapter;
|
|
7
13
|
this.summarize = config.summarize;
|
|
8
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* Compacts thread `sessionId` once it holds `config.threshold` tokens or
|
|
17
|
+
* `config.messageThreshold` entries, keeping the newest `config.keepRecent` entries.
|
|
18
|
+
*/
|
|
9
19
|
async compact(sessionId, config) {
|
|
20
|
+
if (config.threshold === undefined && config.messageThreshold === undefined) {
|
|
21
|
+
throw new Error('CompactionConfig needs threshold (tokens) or messageThreshold (entries) to know when to compact');
|
|
22
|
+
}
|
|
23
|
+
let threads = running.get(this.adapter);
|
|
24
|
+
if (!threads) {
|
|
25
|
+
threads = new Map();
|
|
26
|
+
running.set(this.adapter, threads);
|
|
27
|
+
}
|
|
28
|
+
const previous = threads.get(sessionId) ?? Promise.resolve();
|
|
29
|
+
const current = previous.catch(() => undefined).then(() => this.compactNow(sessionId, config));
|
|
30
|
+
threads.set(sessionId, current);
|
|
31
|
+
try {
|
|
32
|
+
return await current;
|
|
33
|
+
}
|
|
34
|
+
finally {
|
|
35
|
+
if (threads.get(sessionId) === current)
|
|
36
|
+
threads.delete(sessionId);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
async compactNow(sessionId, config) {
|
|
10
40
|
const entriesResult = await this.adapter.getEntries({
|
|
11
41
|
threadId: sessionId,
|
|
12
42
|
includeToolCalls: true,
|
|
@@ -15,30 +45,24 @@ export class CompactionService {
|
|
|
15
45
|
throw new Error(`Failed to load entries: ${entriesResult.error}`);
|
|
16
46
|
}
|
|
17
47
|
const entries = entriesResult.data;
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}
|
|
27
|
-
if (entries.length <= config.keepRecent) {
|
|
28
|
-
return {
|
|
29
|
-
sessionId,
|
|
30
|
-
originalMessages: entries.length,
|
|
31
|
-
compactedMessages: entries.length,
|
|
32
|
-
summaryTokens: 0,
|
|
33
|
-
};
|
|
48
|
+
const unchanged = {
|
|
49
|
+
sessionId,
|
|
50
|
+
originalMessages: entries.length,
|
|
51
|
+
compactedMessages: entries.length,
|
|
52
|
+
summaryTokens: 0,
|
|
53
|
+
};
|
|
54
|
+
if (!reachedThreshold(entries, config) || entries.length <= config.keepRecent) {
|
|
55
|
+
return unchanged;
|
|
34
56
|
}
|
|
35
57
|
const sorted = [...entries].sort((a, b) => new Date(a.createdAt).getTime() - new Date(b.createdAt).getTime());
|
|
36
58
|
const strategy = strategies[config.strategy];
|
|
37
59
|
return strategy(this, sessionId, sorted, config);
|
|
38
60
|
}
|
|
39
61
|
/**
|
|
40
|
-
*
|
|
41
|
-
*
|
|
62
|
+
* Replaces `entriesToRemove` with a summary entry dated just before the first of
|
|
63
|
+
* `entriesToKeep`, so the thread reads summary, kept entries, then whatever was saved while the
|
|
64
|
+
* summary was written. Kept entries are left untouched. An adapter that ignores the requested
|
|
65
|
+
* `createdAt` gets the kept entries re-added after the summary instead.
|
|
42
66
|
*/
|
|
43
67
|
async applySummary(sessionId, entriesToRemove, summary, entriesToKeep = []) {
|
|
44
68
|
const summaryMessage = {
|
|
@@ -46,28 +70,33 @@ export class CompactionService {
|
|
|
46
70
|
content: `[Conversation summary]\n${summary}`,
|
|
47
71
|
};
|
|
48
72
|
const summaryTokens = countMessagesTokens([summaryMessage]);
|
|
73
|
+
const placeAt = summaryTimestamp(entriesToRemove, entriesToKeep);
|
|
49
74
|
const added = await this.adapter.addEntry({
|
|
50
75
|
threadId: sessionId,
|
|
51
76
|
message: summaryMessage,
|
|
52
77
|
tokenCount: summaryTokens,
|
|
53
78
|
metadata: { compactionSummary: true, compactedAt: new Date().toISOString() },
|
|
79
|
+
...(placeAt && { createdAt: placeAt }),
|
|
54
80
|
});
|
|
55
81
|
if (!added.success) {
|
|
56
82
|
throw new Error(`Failed to store compaction summary: ${added.error}`);
|
|
57
83
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
84
|
+
const placed = timeOf(added.data.createdAt) === placeAt?.getTime();
|
|
85
|
+
if (!placed) {
|
|
86
|
+
for (const entry of entriesToKeep) {
|
|
87
|
+
const readded = await this.adapter.addEntry({
|
|
88
|
+
threadId: entry.threadId,
|
|
89
|
+
message: entry.message,
|
|
90
|
+
toolCalls: entry.toolCalls,
|
|
91
|
+
toolResults: entry.toolResults,
|
|
92
|
+
tokenCount: entry.tokenCount,
|
|
93
|
+
metadata: entry.metadata,
|
|
94
|
+
});
|
|
95
|
+
if (!readded.success) {
|
|
96
|
+
throw new Error(`Failed to reorder entries after compaction: ${readded.error}`);
|
|
97
|
+
}
|
|
98
|
+
await this.adapter.deleteEntry(entry.id);
|
|
69
99
|
}
|
|
70
|
-
await this.adapter.deleteEntry(entry.id);
|
|
71
100
|
}
|
|
72
101
|
for (const entry of entriesToRemove) {
|
|
73
102
|
await this.adapter.deleteEntry(entry.id);
|
|
@@ -81,6 +110,31 @@ export class CompactionService {
|
|
|
81
110
|
return this.adapter;
|
|
82
111
|
}
|
|
83
112
|
}
|
|
113
|
+
function timeOf(value) {
|
|
114
|
+
return new Date(value).getTime();
|
|
115
|
+
}
|
|
116
|
+
/** Whether the thread holds enough tokens or entries to be compacted. */
|
|
117
|
+
function reachedThreshold(entries, config) {
|
|
118
|
+
if (config.messageThreshold !== undefined && entries.length >= config.messageThreshold) {
|
|
119
|
+
return true;
|
|
120
|
+
}
|
|
121
|
+
if (config.threshold === undefined)
|
|
122
|
+
return false;
|
|
123
|
+
const totalTokens = entries.reduce((sum, e) => sum + countEntryTokens(e), 0);
|
|
124
|
+
return totalTokens >= config.threshold;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* When the summary goes: a millisecond before the first kept entry, or at the time of the last
|
|
128
|
+
* removed entry when nothing is kept. Entries saved while the summary was written are newer and
|
|
129
|
+
* stay after it.
|
|
130
|
+
*/
|
|
131
|
+
function summaryTimestamp(removed, kept) {
|
|
132
|
+
const firstKept = kept[0];
|
|
133
|
+
if (firstKept)
|
|
134
|
+
return new Date(new Date(firstKept.createdAt).getTime() - 1);
|
|
135
|
+
const lastRemoved = removed.at(-1);
|
|
136
|
+
return lastRemoved ? new Date(lastRemoved.createdAt) : undefined;
|
|
137
|
+
}
|
|
84
138
|
const summaryStrategy = async (service, sessionId, entries, config) => {
|
|
85
139
|
const splitAt = entries.length - config.keepRecent;
|
|
86
140
|
const oldEntries = entries.slice(0, splitAt);
|
package/dist/compaction.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compaction.js","sourceRoot":"","sources":["../src/compaction.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"compaction.js","sourceRoot":"","sources":["../src/compaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,8 +23,18 @@ export interface BuildContextOptions {
|
|
|
23
23
|
export declare class ContextBuilder {
|
|
24
24
|
private config;
|
|
25
25
|
private deps;
|
|
26
|
+
private readonly entryVectors;
|
|
26
27
|
constructor(config: ContextBuilderConfig, deps: ContextBuilderDeps);
|
|
27
28
|
build(options: BuildContextOptions): Promise<BuiltContext>;
|
|
29
|
+
/** Runs `work`, recording a failure as an error of `source` instead of failing the build. */
|
|
30
|
+
private attempt;
|
|
31
|
+
/** Facts of the agent visible to the user, as many as fit `budget`. */
|
|
32
|
+
private loadFacts;
|
|
33
|
+
/** The embeddings closest to the current input visible to the user, as many as fit `budget`. */
|
|
34
|
+
private loadSemanticResults;
|
|
35
|
+
/** Knowledge graph context for the current input, cut down to `budget` when it is larger. */
|
|
36
|
+
private loadGraphContext;
|
|
37
|
+
private selectEntries;
|
|
28
38
|
/**
|
|
29
39
|
* The longest run of newest entries that fits the budget. The window stops at the first entry
|
|
30
40
|
* that does not fit instead of skipping it, so the model never sees a reply without the message
|
|
@@ -33,14 +43,19 @@ export declare class ContextBuilder {
|
|
|
33
43
|
private selectRecentEntries;
|
|
34
44
|
/**
|
|
35
45
|
* Entries most similar to the current input that fit the budget, in conversation order.
|
|
36
|
-
* Falls back to the most recent entries when there is no input or embedding service
|
|
46
|
+
* Falls back to the most recent entries when there is no input or embedding service, or when
|
|
47
|
+
* scoring fails.
|
|
37
48
|
*/
|
|
38
49
|
private selectRelevantEntries;
|
|
39
50
|
/**
|
|
40
|
-
* Similarity of user/assistant text entries to the
|
|
41
|
-
*
|
|
51
|
+
* Similarity of the newest {@link MAX_SCORED_ENTRIES} user/assistant text entries to the
|
|
52
|
+
* input, best first. Each entry is embedded once: its vector is kept by entry id, so a turn
|
|
53
|
+
* only embeds the input and the entries added since the last build. Returns null, recording a
|
|
54
|
+
* `relevance` error, when embedding fails.
|
|
42
55
|
*/
|
|
43
56
|
private scoreEntries;
|
|
57
|
+
private rememberVector;
|
|
58
|
+
private recallVector;
|
|
44
59
|
private selectHybridEntries;
|
|
45
60
|
private cosineSimilarity;
|
|
46
61
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-builder.d.ts","sourceRoot":"","sources":["../src/context-builder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAMV,oBAAoB,
|
|
1
|
+
{"version":3,"file":"context-builder.d.ts","sourceRoot":"","sources":["../src/context-builder.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAMV,oBAAoB,EAEpB,YAAY,EACZ,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,gBAAgB,EAEjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAuCnF,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,aAAa,CAAC;IAC7B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;CAC3C;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,0FAA0F;IAC1F,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAiC;IAC/C,OAAO,CAAC,IAAI,CAAqB;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmC;gBAEpD,MAAM,EAAE,oBAAoB,EAAE,IAAI,EAAE,kBAAkB;IAe5D,KAAK,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,YAAY,CAAC;IAuGhE,6FAA6F;YAC/E,OAAO;IAarB,uEAAuE;YACzD,SAAS;IAgBvB,gGAAgG;YAClF,mBAAmB;IAgCjC,6FAA6F;YAC/E,gBAAgB;IA0B9B,OAAO,CAAC,aAAa;IAiBrB;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAY3B;;;;OAIG;YACW,qBAAqB;IA4BnC;;;;;OAKG;YACW,YAAY;IAmD1B,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,YAAY;YASN,mBAAmB;IAoCjC,OAAO,CAAC,gBAAgB;CAgBzB"}
|