@cogitator-ai/memory 0.6.22 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +58 -5
- package/dist/adapters/base.d.ts +6 -0
- package/dist/adapters/base.d.ts.map +1 -1
- package/dist/adapters/base.js +19 -0
- package/dist/adapters/base.js.map +1 -1
- package/dist/adapters/memory-embedding.d.ts.map +1 -1
- package/dist/adapters/memory-embedding.js +16 -2
- package/dist/adapters/memory-embedding.js.map +1 -1
- package/dist/adapters/memory.js +10 -11
- package/dist/adapters/memory.js.map +1 -1
- package/dist/adapters/mongodb.d.ts.map +1 -1
- package/dist/adapters/mongodb.js +12 -20
- package/dist/adapters/mongodb.js.map +1 -1
- package/dist/adapters/postgres.d.ts +5 -0
- package/dist/adapters/postgres.d.ts.map +1 -1
- package/dist/adapters/postgres.js +42 -12
- package/dist/adapters/postgres.js.map +1 -1
- package/dist/adapters/qdrant.js +2 -2
- package/dist/adapters/qdrant.js.map +1 -1
- package/dist/adapters/redis.d.ts +7 -0
- package/dist/adapters/redis.d.ts.map +1 -1
- package/dist/adapters/redis.js +132 -107
- package/dist/adapters/redis.js.map +1 -1
- package/dist/adapters/sqlite.d.ts.map +1 -1
- package/dist/adapters/sqlite.js +9 -4
- package/dist/adapters/sqlite.js.map +1 -1
- package/dist/compaction.d.ts +5 -1
- package/dist/compaction.d.ts.map +1 -1
- package/dist/compaction.js +29 -4
- package/dist/compaction.js.map +1 -1
- package/dist/context-builder.d.ts +10 -0
- package/dist/context-builder.d.ts.map +1 -1
- package/dist/context-builder.js +96 -42
- package/dist/context-builder.js.map +1 -1
- package/dist/core-facts.d.ts.map +1 -1
- package/dist/core-facts.js +18 -5
- package/dist/core-facts.js.map +1 -1
- package/dist/embedding/retry.d.ts +4 -0
- package/dist/embedding/retry.d.ts.map +1 -1
- package/dist/embedding/retry.js +40 -7
- package/dist/embedding/retry.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/knowledge-graph/sqlite-graph-adapter.js +1 -1
- package/dist/knowledge-graph/sqlite-graph-adapter.js.map +1 -1
- package/dist/session-manager.d.ts +22 -2
- package/dist/session-manager.d.ts.map +1 -1
- package/dist/session-manager.js +69 -27
- package/dist/session-manager.js.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @cogitator-ai/memory
|
|
2
2
|
|
|
3
|
-
Memory adapters for Cogitator AI agents. Supports in-memory, Redis (short-term),
|
|
3
|
+
Memory adapters for Cogitator AI agents. Supports in-memory, Redis (short-term), PostgreSQL with pgvector, SQLite and MongoDB (persistent), plus in-memory/pgvector/Qdrant embedding stores for semantic memory.
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
@@ -10,14 +10,20 @@ pnpm add @cogitator-ai/memory
|
|
|
10
10
|
# Optional peer dependencies
|
|
11
11
|
pnpm add ioredis # For Redis adapter
|
|
12
12
|
pnpm add pg # For PostgreSQL adapter
|
|
13
|
+
pnpm add better-sqlite3 # For SQLite adapter and CoreFactsStore
|
|
14
|
+
pnpm add mongodb # For MongoDB adapter
|
|
15
|
+
pnpm add @qdrant/js-client-rest # For Qdrant embedding adapter
|
|
13
16
|
```
|
|
14
17
|
|
|
15
18
|
## Features
|
|
16
19
|
|
|
17
|
-
- **Multiple Adapters** - In-memory, Redis, PostgreSQL with pgvector
|
|
18
|
-
- **Thread Management** - Create, update, delete conversation threads
|
|
20
|
+
- **Multiple Adapters** - In-memory, Redis (standalone + cluster), PostgreSQL with pgvector, SQLite, MongoDB, Qdrant
|
|
21
|
+
- **Thread Management** - Create (idempotent upsert), update, delete conversation threads
|
|
22
|
+
- **Stable Ordering** - Entries keep insertion order even when saved within the same millisecond
|
|
19
23
|
- **Token Counting** - Estimate token usage without tiktoken dependency
|
|
20
|
-
- **Context Builder** -
|
|
24
|
+
- **Context Builder** - Token-aware context with `recent`, `relevant` (embedding-ranked) and `hybrid` strategies
|
|
25
|
+
- **Scoped Semantic Memory** - Embeddings tagged with `metadata.agentId` / `metadata.threadId` never leak to other agents
|
|
26
|
+
- **Sessions & Compaction** - `SessionManager` for channel sessions, `CompactionService` for summarizing long histories
|
|
21
27
|
- **Embedding Services** - OpenAI and Ollama embedding integration
|
|
22
28
|
- **Semantic Search** - Vector similarity search with pgvector
|
|
23
29
|
- **Hybrid Search** - BM25 + Vector with Reciprocal Rank Fusion
|
|
@@ -74,6 +80,7 @@ Fast, non-persistent storage for development and testing.
|
|
|
74
80
|
import { InMemoryAdapter } from '@cogitator-ai/memory';
|
|
75
81
|
|
|
76
82
|
const memory = new InMemoryAdapter({
|
|
83
|
+
provider: 'memory',
|
|
77
84
|
maxEntries: 1000,
|
|
78
85
|
});
|
|
79
86
|
|
|
@@ -82,12 +89,13 @@ await memory.connect();
|
|
|
82
89
|
|
|
83
90
|
### Redis Adapter
|
|
84
91
|
|
|
85
|
-
Persistent short-term memory with TTL support.
|
|
92
|
+
Persistent short-term memory with TTL support. Every write refreshes the TTL of the thread and its entry index, so active conversations do not expire mid-way; expired entries are pruned from the index on read.
|
|
86
93
|
|
|
87
94
|
```typescript
|
|
88
95
|
import { RedisAdapter } from '@cogitator-ai/memory';
|
|
89
96
|
|
|
90
97
|
const memory = new RedisAdapter({
|
|
98
|
+
provider: 'redis',
|
|
91
99
|
url: 'redis://localhost:6379',
|
|
92
100
|
keyPrefix: 'cogitator:',
|
|
93
101
|
ttl: 3600,
|
|
@@ -96,6 +104,8 @@ const memory = new RedisAdapter({
|
|
|
96
104
|
await memory.connect();
|
|
97
105
|
```
|
|
98
106
|
|
|
107
|
+
Redis Cluster is supported via `cluster: { nodes: [{ host, port }] }`. In cluster mode the key prefix is wrapped in a hash tag (`'{cogitator}:'` by default, `'myapp:'` becomes `'{myapp}:'`) so all keys of the adapter live in one slot.
|
|
108
|
+
|
|
99
109
|
### PostgreSQL Adapter
|
|
100
110
|
|
|
101
111
|
Long-term storage with vector search via pgvector.
|
|
@@ -104,6 +114,7 @@ Long-term storage with vector search via pgvector.
|
|
|
104
114
|
import { PostgresAdapter } from '@cogitator-ai/memory';
|
|
105
115
|
|
|
106
116
|
const memory = new PostgresAdapter({
|
|
117
|
+
provider: 'postgres',
|
|
107
118
|
connectionString: 'postgresql://localhost:5432/cogitator',
|
|
108
119
|
schema: 'public',
|
|
109
120
|
poolSize: 10,
|
|
@@ -205,6 +216,8 @@ interface MemoryAdapter {
|
|
|
205
216
|
|
|
206
217
|
### Thread Operations
|
|
207
218
|
|
|
219
|
+
`createThread(agentId, metadata, threadId)` with an existing `threadId` is an upsert: entries and `createdAt` are kept and only the metadata is updated, so it is safe to call on every run.
|
|
220
|
+
|
|
208
221
|
```typescript
|
|
209
222
|
const result = await memory.createThread('agent-1', {
|
|
210
223
|
topic: 'support',
|
|
@@ -262,6 +275,12 @@ interface ContextBuilderConfig {
|
|
|
262
275
|
}
|
|
263
276
|
```
|
|
264
277
|
|
|
278
|
+
Strategies:
|
|
279
|
+
|
|
280
|
+
- `recent` - newest messages that fit into the token budget
|
|
281
|
+
- `relevant` - messages ranked by embedding similarity to `currentInput` (requires `embeddingService`; falls back to `recent` without input), returned in chronological order
|
|
282
|
+
- `hybrid` - always keeps the latest messages and fills the remaining budget with the most relevant older ones
|
|
283
|
+
|
|
265
284
|
### Basic Usage
|
|
266
285
|
|
|
267
286
|
```typescript
|
|
@@ -317,6 +336,8 @@ console.log(context.facts);
|
|
|
317
336
|
console.log(context.semanticResults);
|
|
318
337
|
```
|
|
319
338
|
|
|
339
|
+
Semantic context is scoped by embedding metadata: entries with `metadata.agentId` set are only visible to that agent, entries without an `agentId` (shared documents, knowledge bases) are visible to everyone. Adapters filter `search`/`keywordSearch` by `filter.agentId` and `filter.threadId` through the same metadata fields.
|
|
340
|
+
|
|
320
341
|
### Built Context
|
|
321
342
|
|
|
322
343
|
```typescript
|
|
@@ -337,6 +358,37 @@ interface BuiltContext {
|
|
|
337
358
|
|
|
338
359
|
---
|
|
339
360
|
|
|
361
|
+
## Sessions and Compaction
|
|
362
|
+
|
|
363
|
+
`SessionManager` maps channel conversations (user + channel + agent) onto memory threads. `CompactionService` replaces old history with an LLM summary placed before the most recent messages.
|
|
364
|
+
|
|
365
|
+
```typescript
|
|
366
|
+
import { InMemoryAdapter, SessionManager, CompactionService } from '@cogitator-ai/memory';
|
|
367
|
+
|
|
368
|
+
const memory = new InMemoryAdapter();
|
|
369
|
+
const compaction = new CompactionService({
|
|
370
|
+
adapter: memory,
|
|
371
|
+
summarize: async (messages) => `Summary of ${messages.length} messages`,
|
|
372
|
+
});
|
|
373
|
+
const sessions = new SessionManager(memory, { compaction });
|
|
374
|
+
|
|
375
|
+
const session = await sessions.getOrCreate({
|
|
376
|
+
userId: 'user-1',
|
|
377
|
+
channelType: 'telegram',
|
|
378
|
+
channelId: 'chat-42',
|
|
379
|
+
agentId: 'assistant',
|
|
380
|
+
});
|
|
381
|
+
|
|
382
|
+
const all = await sessions.list();
|
|
383
|
+
const mine = await sessions.list({ userId: 'user-1', status: 'active', limit: 20 });
|
|
384
|
+
|
|
385
|
+
await sessions.compact(session.id, { strategy: 'summary', threshold: 8000, keepRecent: 10 });
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
`list()` works with or without a `userId` filter (sessions are tracked in an index thread). `compact()` requires the `compaction` option; without it use `CompactionService` directly.
|
|
389
|
+
|
|
390
|
+
---
|
|
391
|
+
|
|
340
392
|
## Token Counting
|
|
341
393
|
|
|
342
394
|
Simple token estimation without tiktoken dependency.
|
|
@@ -658,6 +710,7 @@ console.log(
|
|
|
658
710
|
import { PostgresAdapter, OpenAIEmbeddingService } from '@cogitator-ai/memory';
|
|
659
711
|
|
|
660
712
|
const memory = new PostgresAdapter({
|
|
713
|
+
provider: 'postgres',
|
|
661
714
|
connectionString: process.env.DATABASE_URL!,
|
|
662
715
|
});
|
|
663
716
|
|
package/dist/adapters/base.d.ts
CHANGED
|
@@ -15,7 +15,13 @@ export declare abstract class BaseMemoryAdapter implements MemoryAdapter {
|
|
|
15
15
|
abstract clearThread(threadId: string): Promise<MemoryResult<void>>;
|
|
16
16
|
abstract connect(): Promise<MemoryResult<void>>;
|
|
17
17
|
abstract disconnect(): Promise<MemoryResult<void>>;
|
|
18
|
+
private lastEntryTimes;
|
|
18
19
|
protected generateId(prefix: string): string;
|
|
20
|
+
/**
|
|
21
|
+
* Creation time for a new entry, strictly increasing per thread within this process so
|
|
22
|
+
* entries saved in the same millisecond (e.g. a user message and its reply) keep their order.
|
|
23
|
+
*/
|
|
24
|
+
protected nextEntryTimestamp(threadId: string): Date;
|
|
19
25
|
protected success<T>(data: T): MemoryResult<T>;
|
|
20
26
|
protected failure(error: string): MemoryResult<never>;
|
|
21
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/adapters/base.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,YAAY,EACZ,MAAM,EACN,WAAW,EACX,kBAAkB,EACnB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/adapters/base.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,YAAY,EACZ,MAAM,EACN,WAAW,EACX,kBAAkB,EACnB,MAAM,qBAAqB,CAAC;AAI7B,8BAAsB,iBAAkB,YAAW,aAAa;IAC9D,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAE3C,QAAQ,CAAC,YAAY,CACnB,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAEhC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAE1E,QAAQ,CAAC,YAAY,CACnB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAEhC,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAEpE,QAAQ,CAAC,QAAQ,CACf,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,WAAW,CAAC,GAC3C,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;IAErC,QAAQ,CAAC,UAAU,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC;IAEtF,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAE7E,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAElE,QAAQ,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAEnE,QAAQ,CAAC,OAAO,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAE/C,QAAQ,CAAC,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAElD,OAAO,CAAC,cAAc,CAA6B;IAEnD,SAAS,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAI5C;;;OAGG;IACH,SAAS,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAepD,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;IAI9C,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC;CAGtD"}
|
package/dist/adapters/base.js
CHANGED
|
@@ -2,10 +2,29 @@
|
|
|
2
2
|
* Base memory adapter - abstract class for all adapters
|
|
3
3
|
*/
|
|
4
4
|
import { nanoid } from 'nanoid';
|
|
5
|
+
const MAX_TRACKED_THREADS = 10_000;
|
|
5
6
|
export class BaseMemoryAdapter {
|
|
7
|
+
lastEntryTimes = new Map();
|
|
6
8
|
generateId(prefix) {
|
|
7
9
|
return `${prefix}_${nanoid(12)}`;
|
|
8
10
|
}
|
|
11
|
+
/**
|
|
12
|
+
* Creation time for a new entry, strictly increasing per thread within this process so
|
|
13
|
+
* entries saved in the same millisecond (e.g. a user message and its reply) keep their order.
|
|
14
|
+
*/
|
|
15
|
+
nextEntryTimestamp(threadId) {
|
|
16
|
+
const now = Date.now();
|
|
17
|
+
const last = this.lastEntryTimes.get(threadId) ?? 0;
|
|
18
|
+
const timestamp = now > last ? now : last + 1;
|
|
19
|
+
this.lastEntryTimes.delete(threadId);
|
|
20
|
+
this.lastEntryTimes.set(threadId, timestamp);
|
|
21
|
+
if (this.lastEntryTimes.size > MAX_TRACKED_THREADS) {
|
|
22
|
+
const oldest = this.lastEntryTimes.keys().next().value;
|
|
23
|
+
if (oldest !== undefined)
|
|
24
|
+
this.lastEntryTimes.delete(oldest);
|
|
25
|
+
}
|
|
26
|
+
return new Date(timestamp);
|
|
27
|
+
}
|
|
9
28
|
success(data) {
|
|
10
29
|
return { success: true, data };
|
|
11
30
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/adapters/base.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAUhC,MAAM,OAAgB,iBAAiB;
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/adapters/base.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAUhC,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAEnC,MAAM,OAAgB,iBAAiB;IAkC7B,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEzC,UAAU,CAAC,MAAc;QACjC,OAAO,GAAG,MAAM,IAAI,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;IACnC,CAAC;IAED;;;OAGG;IACO,kBAAkB,CAAC,QAAgB;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;QAE9C,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACrC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAC7C,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,mBAAmB,EAAE,CAAC;YACnD,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;YACvD,IAAI,MAAM,KAAK,SAAS;gBAAE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/D,CAAC;QAED,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7B,CAAC;IAES,OAAO,CAAI,IAAO;QAC1B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACjC,CAAC;IAES,OAAO,CAAC,KAAa;QAC7B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IACnC,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-embedding.d.ts","sourceRoot":"","sources":["../../src/adapters/memory-embedding.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,YAAY,
|
|
1
|
+
{"version":3,"file":"memory-embedding.d.ts","sourceRoot":"","sources":["../../src/adapters/memory-embedding.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,YAAY,EAEZ,YAAY,EACZ,qBAAqB,EACtB,MAAM,qBAAqB,CAAC;AAgC7B,qBAAa,wBAAyB,YAAW,gBAAgB,EAAE,oBAAoB;IACrF,OAAO,CAAC,UAAU,CAAgC;IAClD,OAAO,CAAC,SAAS,CAAmB;IAE9B,YAAY,CAChB,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,GAAG,WAAW,CAAC,GAC7C,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAW7B,MAAM,CACV,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,YAAY,CAAC,CAAC,SAAS,GAAG;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,CAAC,CAAC;IA0BrD,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC,CAAC;IA2BnF,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAMjE,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAUnE,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,KAAK,IAAI,IAAI;CAId"}
|
|
@@ -14,6 +14,20 @@ function cosineSimilarity(a, b) {
|
|
|
14
14
|
const magnitude = Math.sqrt(normA) * Math.sqrt(normB);
|
|
15
15
|
return magnitude === 0 ? 0 : dotProduct / magnitude;
|
|
16
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Embeddings are scoped by `metadata.agentId` / `metadata.threadId`.
|
|
19
|
+
*/
|
|
20
|
+
function matchesFilter(embedding, filter) {
|
|
21
|
+
if (!filter)
|
|
22
|
+
return true;
|
|
23
|
+
if (filter.sourceType && embedding.sourceType !== filter.sourceType)
|
|
24
|
+
return false;
|
|
25
|
+
if (filter.agentId && embedding.metadata?.agentId !== filter.agentId)
|
|
26
|
+
return false;
|
|
27
|
+
if (filter.threadId && embedding.metadata?.threadId !== filter.threadId)
|
|
28
|
+
return false;
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
17
31
|
export class InMemoryEmbeddingAdapter {
|
|
18
32
|
embeddings = new Map();
|
|
19
33
|
bm25Index = new BM25Index();
|
|
@@ -33,7 +47,7 @@ export class InMemoryEmbeddingAdapter {
|
|
|
33
47
|
const limit = options.limit ?? 10;
|
|
34
48
|
const results = [];
|
|
35
49
|
for (const emb of this.embeddings.values()) {
|
|
36
|
-
if (
|
|
50
|
+
if (!matchesFilter(emb, options.filter)) {
|
|
37
51
|
continue;
|
|
38
52
|
}
|
|
39
53
|
const score = cosineSimilarity(options.vector, emb.vector);
|
|
@@ -54,7 +68,7 @@ export class InMemoryEmbeddingAdapter {
|
|
|
54
68
|
const emb = this.embeddings.get(r.id);
|
|
55
69
|
if (!emb)
|
|
56
70
|
continue;
|
|
57
|
-
if (
|
|
71
|
+
if (!matchesFilter(emb, options.filter)) {
|
|
58
72
|
continue;
|
|
59
73
|
}
|
|
60
74
|
results.push({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-embedding.js","sourceRoot":"","sources":["../../src/adapters/memory-embedding.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"memory-embedding.js","sourceRoot":"","sources":["../../src/adapters/memory-embedding.ts"],"names":[],"mappings":"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"}
|
package/dist/adapters/memory.js
CHANGED
|
@@ -22,21 +22,20 @@ export class InMemoryAdapter extends BaseMemoryAdapter {
|
|
|
22
22
|
return this.success(undefined);
|
|
23
23
|
}
|
|
24
24
|
async createThread(agentId, metadata = {}, threadId) {
|
|
25
|
+
const id = threadId ?? this.generateId('thread');
|
|
26
|
+
const now = new Date();
|
|
27
|
+
const existing = this.threads.get(id);
|
|
25
28
|
const thread = {
|
|
26
|
-
id
|
|
29
|
+
id,
|
|
27
30
|
agentId,
|
|
28
31
|
metadata,
|
|
29
|
-
createdAt:
|
|
30
|
-
updatedAt:
|
|
32
|
+
createdAt: existing?.createdAt ?? now,
|
|
33
|
+
updatedAt: now,
|
|
31
34
|
};
|
|
32
|
-
|
|
33
|
-
if (
|
|
34
|
-
|
|
35
|
-
this.entries.delete(entryId);
|
|
36
|
-
}
|
|
35
|
+
this.threads.set(id, thread);
|
|
36
|
+
if (!this.threadEntries.has(id)) {
|
|
37
|
+
this.threadEntries.set(id, []);
|
|
37
38
|
}
|
|
38
|
-
this.threads.set(thread.id, thread);
|
|
39
|
-
this.threadEntries.set(thread.id, []);
|
|
40
39
|
return this.success(thread);
|
|
41
40
|
}
|
|
42
41
|
async getThread(threadId) {
|
|
@@ -70,7 +69,7 @@ export class InMemoryAdapter extends BaseMemoryAdapter {
|
|
|
70
69
|
const full = {
|
|
71
70
|
...entry,
|
|
72
71
|
id: this.generateId('entry'),
|
|
73
|
-
createdAt:
|
|
72
|
+
createdAt: this.nextEntryTimestamp(entry.threadId),
|
|
74
73
|
};
|
|
75
74
|
this.entries.set(full.id, full);
|
|
76
75
|
const threadList = this.threadEntries.get(entry.threadId) ?? [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/adapters/memory.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,OAAO,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAE3C,MAAM,OAAO,eAAgB,SAAQ,iBAAiB;IAC3C,QAAQ,GAAmB,QAAQ,CAAC;IAErC,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IACpC,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAC;IACzC,aAAa,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC5C,UAAU,CAAS;IAE3B,YAAY,SAAgC,EAAE,QAAQ,EAAE,QAAQ,EAAE;QAChE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,KAAK,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,OAAO;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,OAAe,EACf,WAAoC,EAAE,EACtC,QAAiB;QAEjB,MAAM,
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/adapters/memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mongodb.d.ts","sourceRoot":"","sources":["../../src/adapters/mongodb.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EACN,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,oBAAoB,EACpB,cAAc,EACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"mongodb.d.ts","sourceRoot":"","sources":["../../src/adapters/mongodb.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,MAAM,EACN,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,oBAAoB,EACpB,cAAc,EACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAuD3C,qBAAa,cAAe,SAAQ,iBAAiB;IACnD,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAa;IAE9C,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,EAAE,CAAmB;IAC7B,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,oBAAoB;IAOxC,OAAO,KAAK,OAAO,GAGlB;IAED,OAAO,KAAK,OAAO,GAGlB;IAEK,OAAO,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAyBtC,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAezC,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;IAmBjE,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;IAY3D,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;IA0B1F,UAAU,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC;IAuC7E,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAsBpE,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;CAUjE"}
|
package/dist/adapters/mongodb.js
CHANGED
|
@@ -38,8 +38,7 @@ export class MongoDBAdapter extends BaseMemoryAdapter {
|
|
|
38
38
|
await this.client.connect();
|
|
39
39
|
this.db = this.client.db(this.database);
|
|
40
40
|
await this.threads.createIndex({ agentId: 1 });
|
|
41
|
-
await this.entries.createIndex({ threadId: 1 });
|
|
42
|
-
await this.entries.createIndex({ createdAt: 1 });
|
|
41
|
+
await this.entries.createIndex({ threadId: 1, createdAt: 1 });
|
|
43
42
|
return this.success(undefined);
|
|
44
43
|
}
|
|
45
44
|
catch (err) {
|
|
@@ -65,27 +64,20 @@ export class MongoDBAdapter extends BaseMemoryAdapter {
|
|
|
65
64
|
async createThread(agentId, metadata = {}, threadId) {
|
|
66
65
|
if (!this.db)
|
|
67
66
|
return this.failure('Not connected');
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
-
agentId,
|
|
71
|
-
metadata,
|
|
72
|
-
createdAt: new Date(),
|
|
73
|
-
updatedAt: new Date(),
|
|
74
|
-
};
|
|
67
|
+
const id = threadId ?? this.generateId('thread');
|
|
68
|
+
const now = new Date();
|
|
75
69
|
try {
|
|
76
|
-
await this.threads.
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
70
|
+
await this.threads.updateOne({ _id: id }, { $set: { agentId, metadata, updatedAt: now }, $setOnInsert: { createdAt: now } }, { upsert: true });
|
|
71
|
+
const stored = await this.threads.findOne({ _id: id });
|
|
72
|
+
return this.success({
|
|
73
|
+
id,
|
|
74
|
+
agentId,
|
|
75
|
+
metadata,
|
|
76
|
+
createdAt: stored?.createdAt ?? now,
|
|
77
|
+
updatedAt: now,
|
|
82
78
|
});
|
|
83
|
-
return this.success(thread);
|
|
84
79
|
}
|
|
85
80
|
catch (err) {
|
|
86
|
-
if (err.code === 11000) {
|
|
87
|
-
return this.failure(`Thread already exists: ${thread.id}`);
|
|
88
|
-
}
|
|
89
81
|
return this.failure(err.message);
|
|
90
82
|
}
|
|
91
83
|
}
|
|
@@ -147,7 +139,7 @@ export class MongoDBAdapter extends BaseMemoryAdapter {
|
|
|
147
139
|
const full = {
|
|
148
140
|
...entry,
|
|
149
141
|
id: this.generateId('entry'),
|
|
150
|
-
createdAt:
|
|
142
|
+
createdAt: this.nextEntryTimestamp(entry.threadId),
|
|
151
143
|
};
|
|
152
144
|
try {
|
|
153
145
|
await this.entries.insertOne({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mongodb.js","sourceRoot":"","sources":["../../src/adapters/mongodb.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"mongodb.js","sourceRoot":"","sources":["../../src/adapters/mongodb.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,6 +39,11 @@ export declare class PostgresAdapter extends BaseMemoryAdapter implements FactAd
|
|
|
39
39
|
deleteEmbedding(embeddingId: string): Promise<MemoryResult<void>>;
|
|
40
40
|
deleteBySource(sourceId: string): Promise<MemoryResult<void>>;
|
|
41
41
|
keywordSearch(options: KeywordSearchOptions): Promise<MemoryResult<SearchResult[]>>;
|
|
42
|
+
/**
|
|
43
|
+
* SQL conditions for a search filter; agent and thread scoping use `metadata.agentId` /
|
|
44
|
+
* `metadata.threadId`.
|
|
45
|
+
*/
|
|
46
|
+
private embeddingFilterClause;
|
|
42
47
|
setVectorDimensions(dimensions: number): void;
|
|
43
48
|
}
|
|
44
49
|
//# sourceMappingURL=postgres.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/adapters/postgres.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,MAAM,EACN,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,qBAAqB,EACrB,cAAc,EACd,IAAI,EACJ,SAAS,EACT,qBAAqB,EACrB,WAAW,EACX,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,
|
|
1
|
+
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/adapters/postgres.ts"],"names":[],"mappings":"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"}
|
|
@@ -201,7 +201,7 @@ export class PostgresAdapter extends BaseMemoryAdapter {
|
|
|
201
201
|
if (!this.pool)
|
|
202
202
|
return this.failure('Not connected');
|
|
203
203
|
const id = this.generateId('entry');
|
|
204
|
-
const now =
|
|
204
|
+
const now = this.nextEntryTimestamp(entry.threadId);
|
|
205
205
|
try {
|
|
206
206
|
await this.pool.query(`INSERT INTO ${this.schema}.entries
|
|
207
207
|
(id, thread_id, message, tool_calls, tool_results, token_count, metadata, created_at)
|
|
@@ -472,13 +472,18 @@ export class PostgresAdapter extends BaseMemoryAdapter {
|
|
|
472
472
|
`;
|
|
473
473
|
const params = [vectorStr, threshold];
|
|
474
474
|
let paramIndex = 3;
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
}
|
|
475
|
+
const filterClause = this.embeddingFilterClause(options.filter, params, paramIndex);
|
|
476
|
+
query += filterClause.sql;
|
|
477
|
+
paramIndex = filterClause.nextIndex;
|
|
479
478
|
query += ` ORDER BY vector <=> $1 LIMIT $${paramIndex}`;
|
|
480
479
|
params.push(limit);
|
|
481
|
-
|
|
480
|
+
let result;
|
|
481
|
+
try {
|
|
482
|
+
result = await this.pool.query(query, params);
|
|
483
|
+
}
|
|
484
|
+
catch (err) {
|
|
485
|
+
return this.failure(err.message);
|
|
486
|
+
}
|
|
482
487
|
return this.success(result.rows.map((row) => ({
|
|
483
488
|
id: row.id,
|
|
484
489
|
sourceId: row.source_id,
|
|
@@ -525,19 +530,23 @@ export class PostgresAdapter extends BaseMemoryAdapter {
|
|
|
525
530
|
const limit = options.limit ?? 10;
|
|
526
531
|
const params = [options.query];
|
|
527
532
|
let paramIndex = 2;
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
params.push(options.filter.sourceType);
|
|
532
|
-
}
|
|
533
|
+
const filter = this.embeddingFilterClause(options.filter, params, paramIndex);
|
|
534
|
+
const filterClause = filter.sql;
|
|
535
|
+
paramIndex = filter.nextIndex;
|
|
533
536
|
const limitParam = `$${paramIndex}`;
|
|
534
537
|
params.push(limit);
|
|
535
|
-
|
|
538
|
+
let result;
|
|
539
|
+
try {
|
|
540
|
+
result = await this.pool.query(`SELECT id, source_id, source_type, content, metadata, created_at,
|
|
536
541
|
ts_rank(content_tsv, plainto_tsquery('english', $1)) as keyword_score
|
|
537
542
|
FROM ${this.schema}.embeddings
|
|
538
543
|
WHERE content_tsv @@ plainto_tsquery('english', $1)${filterClause}
|
|
539
544
|
ORDER BY keyword_score DESC
|
|
540
545
|
LIMIT ${limitParam}`, params);
|
|
546
|
+
}
|
|
547
|
+
catch (err) {
|
|
548
|
+
return this.failure(err.message);
|
|
549
|
+
}
|
|
541
550
|
return this.success(result.rows.map((row) => ({
|
|
542
551
|
id: row.id,
|
|
543
552
|
sourceId: row.source_id,
|
|
@@ -548,6 +557,27 @@ export class PostgresAdapter extends BaseMemoryAdapter {
|
|
|
548
557
|
metadata: row.metadata,
|
|
549
558
|
})));
|
|
550
559
|
}
|
|
560
|
+
/**
|
|
561
|
+
* SQL conditions for a search filter; agent and thread scoping use `metadata.agentId` /
|
|
562
|
+
* `metadata.threadId`.
|
|
563
|
+
*/
|
|
564
|
+
embeddingFilterClause(filter, params, startIndex) {
|
|
565
|
+
let sql = '';
|
|
566
|
+
let index = startIndex;
|
|
567
|
+
if (filter?.sourceType) {
|
|
568
|
+
sql += ` AND source_type = $${index++}`;
|
|
569
|
+
params.push(filter.sourceType);
|
|
570
|
+
}
|
|
571
|
+
if (filter?.agentId) {
|
|
572
|
+
sql += ` AND metadata->>'agentId' = $${index++}`;
|
|
573
|
+
params.push(filter.agentId);
|
|
574
|
+
}
|
|
575
|
+
if (filter?.threadId) {
|
|
576
|
+
sql += ` AND metadata->>'threadId' = $${index++}`;
|
|
577
|
+
params.push(filter.threadId);
|
|
578
|
+
}
|
|
579
|
+
return { sql, nextIndex: index };
|
|
580
|
+
}
|
|
551
581
|
setVectorDimensions(dimensions) {
|
|
552
582
|
if (this.pool) {
|
|
553
583
|
throw new Error('Cannot change vector dimensions after connecting');
|