@cogitator-ai/memory 0.1.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/LICENSE +21 -0
- package/README.md +89 -0
- package/dist/__tests__/context-builder.test.d.ts +2 -0
- package/dist/__tests__/context-builder.test.d.ts.map +1 -0
- package/dist/__tests__/context-builder.test.js +139 -0
- package/dist/__tests__/context-builder.test.js.map +1 -0
- package/dist/__tests__/memory-adapter.test.d.ts +2 -0
- package/dist/__tests__/memory-adapter.test.d.ts.map +1 -0
- package/dist/__tests__/memory-adapter.test.js +236 -0
- package/dist/__tests__/memory-adapter.test.js.map +1 -0
- package/dist/__tests__/token-counter.test.d.ts +2 -0
- package/dist/__tests__/token-counter.test.d.ts.map +1 -0
- package/dist/__tests__/token-counter.test.js +56 -0
- package/dist/__tests__/token-counter.test.js.map +1 -0
- package/dist/adapters/base.d.ts +22 -0
- package/dist/adapters/base.d.ts.map +1 -0
- package/dist/adapters/base.js +16 -0
- package/dist/adapters/base.js.map +1 -0
- package/dist/adapters/index.d.ts +9 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +25 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/memory.d.ts +29 -0
- package/dist/adapters/memory.d.ts.map +1 -0
- package/dist/adapters/memory.js +130 -0
- package/dist/adapters/memory.js.map +1 -0
- package/dist/adapters/postgres.d.ts +43 -0
- package/dist/adapters/postgres.d.ts.map +1 -0
- package/dist/adapters/postgres.js +450 -0
- package/dist/adapters/postgres.js.map +1 -0
- package/dist/adapters/redis.d.ts +30 -0
- package/dist/adapters/redis.d.ts.map +1 -0
- package/dist/adapters/redis.js +186 -0
- package/dist/adapters/redis.js.map +1 -0
- package/dist/context-builder.d.ts +26 -0
- package/dist/context-builder.d.ts.map +1 -0
- package/dist/context-builder.js +154 -0
- package/dist/context-builder.js.map +1 -0
- package/dist/embedding/factory.d.ts +6 -0
- package/dist/embedding/factory.d.ts.map +1 -0
- package/dist/embedding/factory.js +18 -0
- package/dist/embedding/factory.js.map +1 -0
- package/dist/embedding/index.d.ts +7 -0
- package/dist/embedding/index.d.ts.map +1 -0
- package/dist/embedding/index.js +7 -0
- package/dist/embedding/index.js.map +1 -0
- package/dist/embedding/ollama.d.ts +19 -0
- package/dist/embedding/ollama.d.ts.map +1 -0
- package/dist/embedding/ollama.js +63 -0
- package/dist/embedding/ollama.js.map +1 -0
- package/dist/embedding/openai.d.ts +14 -0
- package/dist/embedding/openai.d.ts.map +1 -0
- package/dist/embedding/openai.js +56 -0
- package/dist/embedding/openai.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/schema.d.ts +169 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +52 -0
- package/dist/schema.js.map +1 -0
- package/dist/token-counter.d.ts +24 -0
- package/dist/token-counter.d.ts.map +1 -0
- package/dist/token-counter.js +40 -0
- package/dist/token-counter.js.map +1 -0
- package/package.json +62 -0
|
@@ -0,0 +1,450 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Postgres adapter for long-term memory
|
|
3
|
+
*
|
|
4
|
+
* Supports:
|
|
5
|
+
* - Threads and entries (MemoryAdapter)
|
|
6
|
+
* - Facts (FactAdapter)
|
|
7
|
+
* - Embeddings with pgvector (EmbeddingAdapter)
|
|
8
|
+
*/
|
|
9
|
+
import { BaseMemoryAdapter } from './base';
|
|
10
|
+
export class PostgresAdapter extends BaseMemoryAdapter {
|
|
11
|
+
provider = 'postgres';
|
|
12
|
+
pool = null;
|
|
13
|
+
config;
|
|
14
|
+
schema;
|
|
15
|
+
vectorDimensions = 768;
|
|
16
|
+
constructor(config) {
|
|
17
|
+
super();
|
|
18
|
+
this.config = config;
|
|
19
|
+
this.schema = config.schema ?? 'cogitator';
|
|
20
|
+
}
|
|
21
|
+
async connect() {
|
|
22
|
+
try {
|
|
23
|
+
const pg = await import('pg');
|
|
24
|
+
const { Pool } = pg.default ?? pg;
|
|
25
|
+
this.pool = new Pool({
|
|
26
|
+
connectionString: this.config.connectionString,
|
|
27
|
+
max: this.config.poolSize ?? 10,
|
|
28
|
+
});
|
|
29
|
+
const client = await this.pool.connect();
|
|
30
|
+
client.release();
|
|
31
|
+
await this.initSchema();
|
|
32
|
+
return this.success(undefined);
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
return this.failure(`Postgres connection failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
async initSchema() {
|
|
39
|
+
if (!this.pool)
|
|
40
|
+
return;
|
|
41
|
+
await this.pool.query(`CREATE SCHEMA IF NOT EXISTS ${this.schema}`);
|
|
42
|
+
try {
|
|
43
|
+
await this.pool.query('CREATE EXTENSION IF NOT EXISTS vector');
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
}
|
|
47
|
+
await this.pool.query(`
|
|
48
|
+
CREATE TABLE IF NOT EXISTS ${this.schema}.threads (
|
|
49
|
+
id TEXT PRIMARY KEY,
|
|
50
|
+
agent_id TEXT NOT NULL,
|
|
51
|
+
metadata JSONB DEFAULT '{}',
|
|
52
|
+
created_at TIMESTAMPTZ DEFAULT NOW(),
|
|
53
|
+
updated_at TIMESTAMPTZ DEFAULT NOW()
|
|
54
|
+
)
|
|
55
|
+
`);
|
|
56
|
+
await this.pool.query(`
|
|
57
|
+
CREATE TABLE IF NOT EXISTS ${this.schema}.entries (
|
|
58
|
+
id TEXT PRIMARY KEY,
|
|
59
|
+
thread_id TEXT NOT NULL REFERENCES ${this.schema}.threads(id) ON DELETE CASCADE,
|
|
60
|
+
message JSONB NOT NULL,
|
|
61
|
+
tool_calls JSONB,
|
|
62
|
+
tool_results JSONB,
|
|
63
|
+
token_count INTEGER NOT NULL,
|
|
64
|
+
metadata JSONB DEFAULT '{}',
|
|
65
|
+
created_at TIMESTAMPTZ DEFAULT NOW()
|
|
66
|
+
)
|
|
67
|
+
`);
|
|
68
|
+
await this.pool.query(`
|
|
69
|
+
CREATE TABLE IF NOT EXISTS ${this.schema}.facts (
|
|
70
|
+
id TEXT PRIMARY KEY,
|
|
71
|
+
agent_id TEXT NOT NULL,
|
|
72
|
+
content TEXT NOT NULL,
|
|
73
|
+
category TEXT NOT NULL,
|
|
74
|
+
confidence REAL DEFAULT 1.0,
|
|
75
|
+
source TEXT NOT NULL,
|
|
76
|
+
metadata JSONB DEFAULT '{}',
|
|
77
|
+
created_at TIMESTAMPTZ DEFAULT NOW(),
|
|
78
|
+
updated_at TIMESTAMPTZ DEFAULT NOW(),
|
|
79
|
+
expires_at TIMESTAMPTZ
|
|
80
|
+
)
|
|
81
|
+
`);
|
|
82
|
+
await this.pool.query(`
|
|
83
|
+
CREATE TABLE IF NOT EXISTS ${this.schema}.embeddings (
|
|
84
|
+
id TEXT PRIMARY KEY,
|
|
85
|
+
source_id TEXT NOT NULL,
|
|
86
|
+
source_type TEXT NOT NULL,
|
|
87
|
+
vector vector(${this.vectorDimensions}),
|
|
88
|
+
content TEXT NOT NULL,
|
|
89
|
+
metadata JSONB DEFAULT '{}',
|
|
90
|
+
created_at TIMESTAMPTZ DEFAULT NOW()
|
|
91
|
+
)
|
|
92
|
+
`);
|
|
93
|
+
await this.pool.query(`
|
|
94
|
+
CREATE INDEX IF NOT EXISTS idx_entries_thread_id
|
|
95
|
+
ON ${this.schema}.entries(thread_id, created_at)
|
|
96
|
+
`);
|
|
97
|
+
await this.pool.query(`
|
|
98
|
+
CREATE INDEX IF NOT EXISTS idx_facts_agent_id
|
|
99
|
+
ON ${this.schema}.facts(agent_id, category)
|
|
100
|
+
`);
|
|
101
|
+
try {
|
|
102
|
+
await this.pool.query(`
|
|
103
|
+
CREATE INDEX IF NOT EXISTS idx_embeddings_vector
|
|
104
|
+
ON ${this.schema}.embeddings
|
|
105
|
+
USING ivfflat (vector vector_cosine_ops) WITH (lists = 100)
|
|
106
|
+
`);
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
async disconnect() {
|
|
112
|
+
if (this.pool) {
|
|
113
|
+
await this.pool.end();
|
|
114
|
+
this.pool = null;
|
|
115
|
+
}
|
|
116
|
+
return this.success(undefined);
|
|
117
|
+
}
|
|
118
|
+
async createThread(agentId, metadata = {}) {
|
|
119
|
+
if (!this.pool)
|
|
120
|
+
return this.failure('Not connected');
|
|
121
|
+
const id = this.generateId('thread');
|
|
122
|
+
const now = new Date();
|
|
123
|
+
await this.pool.query(`INSERT INTO ${this.schema}.threads (id, agent_id, metadata, created_at, updated_at)
|
|
124
|
+
VALUES ($1, $2, $3, $4, $4)`, [id, agentId, metadata, now]);
|
|
125
|
+
return this.success({ id, agentId, metadata, createdAt: now, updatedAt: now });
|
|
126
|
+
}
|
|
127
|
+
async getThread(threadId) {
|
|
128
|
+
if (!this.pool)
|
|
129
|
+
return this.failure('Not connected');
|
|
130
|
+
const result = await this.pool.query(`SELECT * FROM ${this.schema}.threads WHERE id = $1`, [threadId]);
|
|
131
|
+
if (result.rows.length === 0)
|
|
132
|
+
return this.success(null);
|
|
133
|
+
const row = result.rows[0];
|
|
134
|
+
return this.success({
|
|
135
|
+
id: row.id,
|
|
136
|
+
agentId: row.agent_id,
|
|
137
|
+
metadata: row.metadata,
|
|
138
|
+
createdAt: new Date(row.created_at),
|
|
139
|
+
updatedAt: new Date(row.updated_at),
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
async updateThread(threadId, metadata) {
|
|
143
|
+
if (!this.pool)
|
|
144
|
+
return this.failure('Not connected');
|
|
145
|
+
const result = await this.pool.query(`UPDATE ${this.schema}.threads
|
|
146
|
+
SET metadata = metadata || $2, updated_at = NOW()
|
|
147
|
+
WHERE id = $1
|
|
148
|
+
RETURNING *`, [threadId, metadata]);
|
|
149
|
+
if (result.rows.length === 0) {
|
|
150
|
+
return this.failure(`Thread not found: ${threadId}`);
|
|
151
|
+
}
|
|
152
|
+
const row = result.rows[0];
|
|
153
|
+
return this.success({
|
|
154
|
+
id: row.id,
|
|
155
|
+
agentId: row.agent_id,
|
|
156
|
+
metadata: row.metadata,
|
|
157
|
+
createdAt: new Date(row.created_at),
|
|
158
|
+
updatedAt: new Date(row.updated_at),
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
async deleteThread(threadId) {
|
|
162
|
+
if (!this.pool)
|
|
163
|
+
return this.failure('Not connected');
|
|
164
|
+
await this.pool.query(`DELETE FROM ${this.schema}.threads WHERE id = $1`, [
|
|
165
|
+
threadId,
|
|
166
|
+
]);
|
|
167
|
+
return this.success(undefined);
|
|
168
|
+
}
|
|
169
|
+
async addEntry(entry) {
|
|
170
|
+
if (!this.pool)
|
|
171
|
+
return this.failure('Not connected');
|
|
172
|
+
const id = this.generateId('entry');
|
|
173
|
+
const now = new Date();
|
|
174
|
+
await this.pool.query(`INSERT INTO ${this.schema}.entries
|
|
175
|
+
(id, thread_id, message, tool_calls, tool_results, token_count, metadata, created_at)
|
|
176
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7, $8)`, [
|
|
177
|
+
id,
|
|
178
|
+
entry.threadId,
|
|
179
|
+
entry.message,
|
|
180
|
+
entry.toolCalls ?? null,
|
|
181
|
+
entry.toolResults ?? null,
|
|
182
|
+
entry.tokenCount,
|
|
183
|
+
entry.metadata ?? {},
|
|
184
|
+
now,
|
|
185
|
+
]);
|
|
186
|
+
return this.success({ ...entry, id, createdAt: now });
|
|
187
|
+
}
|
|
188
|
+
async getEntries(options) {
|
|
189
|
+
if (!this.pool)
|
|
190
|
+
return this.failure('Not connected');
|
|
191
|
+
let query = `SELECT * FROM ${this.schema}.entries WHERE thread_id = $1`;
|
|
192
|
+
const params = [options.threadId];
|
|
193
|
+
let paramIndex = 2;
|
|
194
|
+
if (options.before) {
|
|
195
|
+
query += ` AND created_at < $${paramIndex++}`;
|
|
196
|
+
params.push(options.before);
|
|
197
|
+
}
|
|
198
|
+
if (options.after) {
|
|
199
|
+
query += ` AND created_at > $${paramIndex++}`;
|
|
200
|
+
params.push(options.after);
|
|
201
|
+
}
|
|
202
|
+
query += ' ORDER BY created_at ASC';
|
|
203
|
+
if (options.limit) {
|
|
204
|
+
query = `
|
|
205
|
+
SELECT * FROM (
|
|
206
|
+
SELECT * FROM ${this.schema}.entries WHERE thread_id = $1
|
|
207
|
+
${options.before ? `AND created_at < $2` : ''}
|
|
208
|
+
${options.after ? `AND created_at > $${options.before ? 3 : 2}` : ''}
|
|
209
|
+
ORDER BY created_at DESC
|
|
210
|
+
LIMIT $${paramIndex}
|
|
211
|
+
) sub ORDER BY created_at ASC
|
|
212
|
+
`;
|
|
213
|
+
params.push(options.limit);
|
|
214
|
+
}
|
|
215
|
+
const result = await this.pool.query(query, params);
|
|
216
|
+
return this.success(result.rows.map((row) => ({
|
|
217
|
+
id: row.id,
|
|
218
|
+
threadId: row.thread_id,
|
|
219
|
+
message: row.message,
|
|
220
|
+
toolCalls: options.includeToolCalls
|
|
221
|
+
? row.tool_calls
|
|
222
|
+
: undefined,
|
|
223
|
+
toolResults: options.includeToolCalls
|
|
224
|
+
? row.tool_results
|
|
225
|
+
: undefined,
|
|
226
|
+
tokenCount: row.token_count,
|
|
227
|
+
metadata: row.metadata,
|
|
228
|
+
createdAt: new Date(row.created_at),
|
|
229
|
+
})));
|
|
230
|
+
}
|
|
231
|
+
async getEntry(entryId) {
|
|
232
|
+
if (!this.pool)
|
|
233
|
+
return this.failure('Not connected');
|
|
234
|
+
const result = await this.pool.query(`SELECT * FROM ${this.schema}.entries WHERE id = $1`, [entryId]);
|
|
235
|
+
if (result.rows.length === 0)
|
|
236
|
+
return this.success(null);
|
|
237
|
+
const row = result.rows[0];
|
|
238
|
+
return this.success({
|
|
239
|
+
id: row.id,
|
|
240
|
+
threadId: row.thread_id,
|
|
241
|
+
message: row.message,
|
|
242
|
+
toolCalls: row.tool_calls,
|
|
243
|
+
toolResults: row.tool_results,
|
|
244
|
+
tokenCount: row.token_count,
|
|
245
|
+
metadata: row.metadata,
|
|
246
|
+
createdAt: new Date(row.created_at),
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
async deleteEntry(entryId) {
|
|
250
|
+
if (!this.pool)
|
|
251
|
+
return this.failure('Not connected');
|
|
252
|
+
await this.pool.query(`DELETE FROM ${this.schema}.entries WHERE id = $1`, [
|
|
253
|
+
entryId,
|
|
254
|
+
]);
|
|
255
|
+
return this.success(undefined);
|
|
256
|
+
}
|
|
257
|
+
async clearThread(threadId) {
|
|
258
|
+
if (!this.pool)
|
|
259
|
+
return this.failure('Not connected');
|
|
260
|
+
await this.pool.query(`DELETE FROM ${this.schema}.entries WHERE thread_id = $1`, [threadId]);
|
|
261
|
+
return this.success(undefined);
|
|
262
|
+
}
|
|
263
|
+
async addFact(fact) {
|
|
264
|
+
if (!this.pool)
|
|
265
|
+
return this.failure('Not connected');
|
|
266
|
+
const id = this.generateId('fact');
|
|
267
|
+
const now = new Date();
|
|
268
|
+
await this.pool.query(`INSERT INTO ${this.schema}.facts
|
|
269
|
+
(id, agent_id, content, category, confidence, source, metadata, expires_at, created_at, updated_at)
|
|
270
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $9)`, [
|
|
271
|
+
id,
|
|
272
|
+
fact.agentId,
|
|
273
|
+
fact.content,
|
|
274
|
+
fact.category,
|
|
275
|
+
fact.confidence,
|
|
276
|
+
fact.source,
|
|
277
|
+
fact.metadata ?? {},
|
|
278
|
+
fact.expiresAt ?? null,
|
|
279
|
+
now,
|
|
280
|
+
]);
|
|
281
|
+
return this.success({ ...fact, id, createdAt: now, updatedAt: now });
|
|
282
|
+
}
|
|
283
|
+
async getFacts(agentId, category) {
|
|
284
|
+
if (!this.pool)
|
|
285
|
+
return this.failure('Not connected');
|
|
286
|
+
let query = `SELECT * FROM ${this.schema}.facts WHERE agent_id = $1`;
|
|
287
|
+
const params = [agentId];
|
|
288
|
+
if (category) {
|
|
289
|
+
query += ' AND category = $2';
|
|
290
|
+
params.push(category);
|
|
291
|
+
}
|
|
292
|
+
query += ' AND (expires_at IS NULL OR expires_at > NOW())';
|
|
293
|
+
query += ' ORDER BY confidence DESC, updated_at DESC';
|
|
294
|
+
const result = await this.pool.query(query, params);
|
|
295
|
+
return this.success(result.rows.map((row) => ({
|
|
296
|
+
id: row.id,
|
|
297
|
+
agentId: row.agent_id,
|
|
298
|
+
content: row.content,
|
|
299
|
+
category: row.category,
|
|
300
|
+
confidence: row.confidence,
|
|
301
|
+
source: row.source,
|
|
302
|
+
metadata: row.metadata,
|
|
303
|
+
createdAt: new Date(row.created_at),
|
|
304
|
+
updatedAt: new Date(row.updated_at),
|
|
305
|
+
expiresAt: row.expires_at ? new Date(row.expires_at) : undefined,
|
|
306
|
+
})));
|
|
307
|
+
}
|
|
308
|
+
async updateFact(factId, updates) {
|
|
309
|
+
if (!this.pool)
|
|
310
|
+
return this.failure('Not connected');
|
|
311
|
+
const setClauses = ['updated_at = NOW()'];
|
|
312
|
+
const params = [];
|
|
313
|
+
let paramIndex = 1;
|
|
314
|
+
if (updates.content !== undefined) {
|
|
315
|
+
setClauses.push(`content = $${paramIndex++}`);
|
|
316
|
+
params.push(updates.content);
|
|
317
|
+
}
|
|
318
|
+
if (updates.category !== undefined) {
|
|
319
|
+
setClauses.push(`category = $${paramIndex++}`);
|
|
320
|
+
params.push(updates.category);
|
|
321
|
+
}
|
|
322
|
+
if (updates.confidence !== undefined) {
|
|
323
|
+
setClauses.push(`confidence = $${paramIndex++}`);
|
|
324
|
+
params.push(updates.confidence);
|
|
325
|
+
}
|
|
326
|
+
if (updates.metadata !== undefined) {
|
|
327
|
+
setClauses.push(`metadata = $${paramIndex++}`);
|
|
328
|
+
params.push(updates.metadata);
|
|
329
|
+
}
|
|
330
|
+
if (updates.expiresAt !== undefined) {
|
|
331
|
+
setClauses.push(`expires_at = $${paramIndex++}`);
|
|
332
|
+
params.push(updates.expiresAt);
|
|
333
|
+
}
|
|
334
|
+
params.push(factId);
|
|
335
|
+
const result = await this.pool.query(`UPDATE ${this.schema}.facts SET ${setClauses.join(', ')} WHERE id = $${paramIndex} RETURNING *`, params);
|
|
336
|
+
if (result.rows.length === 0) {
|
|
337
|
+
return this.failure(`Fact not found: ${factId}`);
|
|
338
|
+
}
|
|
339
|
+
const row = result.rows[0];
|
|
340
|
+
return this.success({
|
|
341
|
+
id: row.id,
|
|
342
|
+
agentId: row.agent_id,
|
|
343
|
+
content: row.content,
|
|
344
|
+
category: row.category,
|
|
345
|
+
confidence: row.confidence,
|
|
346
|
+
source: row.source,
|
|
347
|
+
metadata: row.metadata,
|
|
348
|
+
createdAt: new Date(row.created_at),
|
|
349
|
+
updatedAt: new Date(row.updated_at),
|
|
350
|
+
expiresAt: row.expires_at ? new Date(row.expires_at) : undefined,
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
async deleteFact(factId) {
|
|
354
|
+
if (!this.pool)
|
|
355
|
+
return this.failure('Not connected');
|
|
356
|
+
await this.pool.query(`DELETE FROM ${this.schema}.facts WHERE id = $1`, [
|
|
357
|
+
factId,
|
|
358
|
+
]);
|
|
359
|
+
return this.success(undefined);
|
|
360
|
+
}
|
|
361
|
+
async searchFacts(agentId, query) {
|
|
362
|
+
if (!this.pool)
|
|
363
|
+
return this.failure('Not connected');
|
|
364
|
+
const result = await this.pool.query(`SELECT * FROM ${this.schema}.facts
|
|
365
|
+
WHERE agent_id = $1 AND content ILIKE $2
|
|
366
|
+
AND (expires_at IS NULL OR expires_at > NOW())
|
|
367
|
+
ORDER BY confidence DESC`, [agentId, `%${query}%`]);
|
|
368
|
+
return this.success(result.rows.map((row) => ({
|
|
369
|
+
id: row.id,
|
|
370
|
+
agentId: row.agent_id,
|
|
371
|
+
content: row.content,
|
|
372
|
+
category: row.category,
|
|
373
|
+
confidence: row.confidence,
|
|
374
|
+
source: row.source,
|
|
375
|
+
metadata: row.metadata,
|
|
376
|
+
createdAt: new Date(row.created_at),
|
|
377
|
+
updatedAt: new Date(row.updated_at),
|
|
378
|
+
expiresAt: row.expires_at ? new Date(row.expires_at) : undefined,
|
|
379
|
+
})));
|
|
380
|
+
}
|
|
381
|
+
async addEmbedding(embedding) {
|
|
382
|
+
if (!this.pool)
|
|
383
|
+
return this.failure('Not connected');
|
|
384
|
+
const id = this.generateId('emb');
|
|
385
|
+
const now = new Date();
|
|
386
|
+
const vectorStr = `[${embedding.vector.join(',')}]`;
|
|
387
|
+
await this.pool.query(`INSERT INTO ${this.schema}.embeddings
|
|
388
|
+
(id, source_id, source_type, vector, content, metadata, created_at)
|
|
389
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7)`, [
|
|
390
|
+
id,
|
|
391
|
+
embedding.sourceId,
|
|
392
|
+
embedding.sourceType,
|
|
393
|
+
vectorStr,
|
|
394
|
+
embedding.content,
|
|
395
|
+
embedding.metadata ?? {},
|
|
396
|
+
now,
|
|
397
|
+
]);
|
|
398
|
+
return this.success({ ...embedding, id, createdAt: now });
|
|
399
|
+
}
|
|
400
|
+
async search(options) {
|
|
401
|
+
if (!this.pool)
|
|
402
|
+
return this.failure('Not connected');
|
|
403
|
+
if (!options.vector) {
|
|
404
|
+
return this.failure('search() requires vector. Use EmbeddingService to convert query to vector first.');
|
|
405
|
+
}
|
|
406
|
+
const vectorStr = `[${options.vector.join(',')}]`;
|
|
407
|
+
const limit = options.limit ?? 10;
|
|
408
|
+
const threshold = options.threshold ?? 0.7;
|
|
409
|
+
let query = `
|
|
410
|
+
SELECT *, 1 - (vector <=> $1) as score
|
|
411
|
+
FROM ${this.schema}.embeddings
|
|
412
|
+
WHERE 1 - (vector <=> $1) >= $2
|
|
413
|
+
`;
|
|
414
|
+
const params = [vectorStr, threshold];
|
|
415
|
+
let paramIndex = 3;
|
|
416
|
+
if (options.filter?.sourceType) {
|
|
417
|
+
query += ` AND source_type = $${paramIndex++}`;
|
|
418
|
+
params.push(options.filter.sourceType);
|
|
419
|
+
}
|
|
420
|
+
query += ` ORDER BY vector <=> $1 LIMIT $${paramIndex}`;
|
|
421
|
+
params.push(limit);
|
|
422
|
+
const result = await this.pool.query(query, params);
|
|
423
|
+
return this.success(result.rows.map((row) => ({
|
|
424
|
+
id: row.id,
|
|
425
|
+
sourceId: row.source_id,
|
|
426
|
+
sourceType: row.source_type,
|
|
427
|
+
vector: row.vector,
|
|
428
|
+
content: row.content,
|
|
429
|
+
metadata: row.metadata,
|
|
430
|
+
createdAt: new Date(row.created_at),
|
|
431
|
+
score: row.score,
|
|
432
|
+
})));
|
|
433
|
+
}
|
|
434
|
+
async deleteEmbedding(embeddingId) {
|
|
435
|
+
if (!this.pool)
|
|
436
|
+
return this.failure('Not connected');
|
|
437
|
+
await this.pool.query(`DELETE FROM ${this.schema}.embeddings WHERE id = $1`, [embeddingId]);
|
|
438
|
+
return this.success(undefined);
|
|
439
|
+
}
|
|
440
|
+
async deleteBySource(sourceId) {
|
|
441
|
+
if (!this.pool)
|
|
442
|
+
return this.failure('Not connected');
|
|
443
|
+
await this.pool.query(`DELETE FROM ${this.schema}.embeddings WHERE source_id = $1`, [sourceId]);
|
|
444
|
+
return this.success(undefined);
|
|
445
|
+
}
|
|
446
|
+
setVectorDimensions(dimensions) {
|
|
447
|
+
this.vectorDimensions = dimensions;
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
//# sourceMappingURL=postgres.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../src/adapters/postgres.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Redis adapter for short-term memory
|
|
3
|
+
*
|
|
4
|
+
* Uses Redis sorted sets for ordered message retrieval.
|
|
5
|
+
* Supports TTL for automatic expiration.
|
|
6
|
+
* Supports both standalone Redis and Redis Cluster modes via @cogitator-ai/redis.
|
|
7
|
+
*/
|
|
8
|
+
import type { Thread, MemoryEntry, MemoryQueryOptions, MemoryResult, RedisAdapterConfig, MemoryProvider } from '@cogitator-ai/types';
|
|
9
|
+
import { BaseMemoryAdapter } from './base';
|
|
10
|
+
export declare class RedisAdapter extends BaseMemoryAdapter {
|
|
11
|
+
readonly provider: MemoryProvider;
|
|
12
|
+
private client;
|
|
13
|
+
private config;
|
|
14
|
+
private prefix;
|
|
15
|
+
private ttl;
|
|
16
|
+
constructor(config: RedisAdapterConfig);
|
|
17
|
+
connect(): Promise<MemoryResult<void>>;
|
|
18
|
+
disconnect(): Promise<MemoryResult<void>>;
|
|
19
|
+
private key;
|
|
20
|
+
createThread(agentId: string, metadata?: Record<string, unknown>): Promise<MemoryResult<Thread>>;
|
|
21
|
+
getThread(threadId: string): Promise<MemoryResult<Thread | null>>;
|
|
22
|
+
updateThread(threadId: string, metadata: Record<string, unknown>): Promise<MemoryResult<Thread>>;
|
|
23
|
+
deleteThread(threadId: string): Promise<MemoryResult<void>>;
|
|
24
|
+
addEntry(entry: Omit<MemoryEntry, 'id' | 'createdAt'>): Promise<MemoryResult<MemoryEntry>>;
|
|
25
|
+
getEntries(options: MemoryQueryOptions): Promise<MemoryResult<MemoryEntry[]>>;
|
|
26
|
+
getEntry(entryId: string): Promise<MemoryResult<MemoryEntry | null>>;
|
|
27
|
+
deleteEntry(entryId: string): Promise<MemoryResult<void>>;
|
|
28
|
+
clearThread(threadId: string): Promise<MemoryResult<void>>;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=redis.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../src/adapters/redis.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,MAAM,EACN,WAAW,EACX,kBAAkB,EAClB,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACf,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAE3C,qBAAa,YAAa,SAAQ,iBAAiB;IACjD,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAW;IAE5C,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,GAAG,CAAS;gBAER,MAAM,EAAE,kBAAkB;IAOhC,OAAO,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IA4BtC,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAQ/C,OAAO,CAAC,GAAG;IAIL,YAAY,CAChB,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACrC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAoB1B,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAYjE,YAAY,CAChB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAkB1B,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAe3D,QAAQ,CACZ,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,WAAW,CAAC,GAC3C,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;IAoB/B,UAAU,CACd,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,CAAC;IAoCjC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAWpE,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IAgBzD,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;CAajE"}
|