@centerseedwu/naru-agent 0.2.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 +392 -0
- package/dist/agent.d.ts +39 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +578 -0
- package/dist/agent.js.map +1 -0
- package/dist/compression/base.d.ts +12 -0
- package/dist/compression/base.d.ts.map +1 -0
- package/dist/compression/base.js +2 -0
- package/dist/compression/base.js.map +1 -0
- package/dist/compression/compressor.d.ts +20 -0
- package/dist/compression/compressor.d.ts.map +1 -0
- package/dist/compression/compressor.js +52 -0
- package/dist/compression/compressor.js.map +1 -0
- package/dist/compression/in-memory-store.d.ts +8 -0
- package/dist/compression/in-memory-store.d.ts.map +1 -0
- package/dist/compression/in-memory-store.js +13 -0
- package/dist/compression/in-memory-store.js.map +1 -0
- package/dist/decision/index.d.ts +7 -0
- package/dist/decision/index.d.ts.map +1 -0
- package/dist/decision/index.js +4 -0
- package/dist/decision/index.js.map +1 -0
- package/dist/decision/llm-structured-classifier.d.ts +18 -0
- package/dist/decision/llm-structured-classifier.d.ts.map +1 -0
- package/dist/decision/llm-structured-classifier.js +44 -0
- package/dist/decision/llm-structured-classifier.js.map +1 -0
- package/dist/decision/tool-planner.d.ts +14 -0
- package/dist/decision/tool-planner.d.ts.map +1 -0
- package/dist/decision/tool-planner.js +35 -0
- package/dist/decision/tool-planner.js.map +1 -0
- package/dist/decision/types.d.ts +53 -0
- package/dist/decision/types.d.ts.map +1 -0
- package/dist/decision/types.js +12 -0
- package/dist/decision/types.js.map +1 -0
- package/dist/event-bus.d.ts +10 -0
- package/dist/event-bus.d.ts.map +1 -0
- package/dist/event-bus.js +34 -0
- package/dist/event-bus.js.map +1 -0
- package/dist/guardrails/base.d.ts +10 -0
- package/dist/guardrails/base.d.ts.map +1 -0
- package/dist/guardrails/base.js +2 -0
- package/dist/guardrails/base.js.map +1 -0
- package/dist/guardrails/keyword.d.ts +15 -0
- package/dist/guardrails/keyword.d.ts.map +1 -0
- package/dist/guardrails/keyword.js +37 -0
- package/dist/guardrails/keyword.js.map +1 -0
- package/dist/index.d.ts +51 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/intent/base.d.ts +19 -0
- package/dist/intent/base.d.ts.map +1 -0
- package/dist/intent/base.js +2 -0
- package/dist/intent/base.js.map +1 -0
- package/dist/intent/llm-classifier.d.ts +22 -0
- package/dist/intent/llm-classifier.d.ts.map +1 -0
- package/dist/intent/llm-classifier.js +49 -0
- package/dist/intent/llm-classifier.js.map +1 -0
- package/dist/intent/tool-calling-classifier.d.ts +16 -0
- package/dist/intent/tool-calling-classifier.d.ts.map +1 -0
- package/dist/intent/tool-calling-classifier.js +56 -0
- package/dist/intent/tool-calling-classifier.js.map +1 -0
- package/dist/knowledge/base.d.ts +14 -0
- package/dist/knowledge/base.d.ts.map +1 -0
- package/dist/knowledge/base.js +10 -0
- package/dist/knowledge/base.js.map +1 -0
- package/dist/knowledge/chroma-store.d.ts +25 -0
- package/dist/knowledge/chroma-store.d.ts.map +1 -0
- package/dist/knowledge/chroma-store.js +70 -0
- package/dist/knowledge/chroma-store.js.map +1 -0
- package/dist/knowledge/contextualizer.d.ts +17 -0
- package/dist/knowledge/contextualizer.d.ts.map +1 -0
- package/dist/knowledge/contextualizer.js +47 -0
- package/dist/knowledge/contextualizer.js.map +1 -0
- package/dist/knowledge/graph-store.d.ts +22 -0
- package/dist/knowledge/graph-store.d.ts.map +1 -0
- package/dist/knowledge/graph-store.js +116 -0
- package/dist/knowledge/graph-store.js.map +1 -0
- package/dist/knowledge/hybrid-store.d.ts +16 -0
- package/dist/knowledge/hybrid-store.d.ts.map +1 -0
- package/dist/knowledge/hybrid-store.js +39 -0
- package/dist/knowledge/hybrid-store.js.map +1 -0
- package/dist/knowledge/in-memory-store.d.ts +27 -0
- package/dist/knowledge/in-memory-store.d.ts.map +1 -0
- package/dist/knowledge/in-memory-store.js +54 -0
- package/dist/knowledge/in-memory-store.js.map +1 -0
- package/dist/knowledge/pgvector-store.d.ts +27 -0
- package/dist/knowledge/pgvector-store.d.ts.map +1 -0
- package/dist/knowledge/pgvector-store.js +68 -0
- package/dist/knowledge/pgvector-store.js.map +1 -0
- package/dist/memory/base.d.ts +21 -0
- package/dist/memory/base.d.ts.map +1 -0
- package/dist/memory/base.js +9 -0
- package/dist/memory/base.js.map +1 -0
- package/dist/memory/in-memory-store.d.ts +10 -0
- package/dist/memory/in-memory-store.d.ts.map +1 -0
- package/dist/memory/in-memory-store.js +35 -0
- package/dist/memory/in-memory-store.js.map +1 -0
- package/dist/memory/manager.d.ts +29 -0
- package/dist/memory/manager.d.ts.map +1 -0
- package/dist/memory/manager.js +121 -0
- package/dist/memory/manager.js.map +1 -0
- package/dist/memory/mem0-manager.d.ts +32 -0
- package/dist/memory/mem0-manager.d.ts.map +1 -0
- package/dist/memory/mem0-manager.js +77 -0
- package/dist/memory/mem0-manager.js.map +1 -0
- package/dist/memory/pgvector-store.d.ts +22 -0
- package/dist/memory/pgvector-store.d.ts.map +1 -0
- package/dist/memory/pgvector-store.js +89 -0
- package/dist/memory/pgvector-store.js.map +1 -0
- package/dist/orchestration/channel.d.ts +18 -0
- package/dist/orchestration/channel.d.ts.map +1 -0
- package/dist/orchestration/channel.js +2 -0
- package/dist/orchestration/channel.js.map +1 -0
- package/dist/orchestration/executor.d.ts +19 -0
- package/dist/orchestration/executor.d.ts.map +1 -0
- package/dist/orchestration/executor.js +2 -0
- package/dist/orchestration/executor.js.map +1 -0
- package/dist/orchestration/index.d.ts +13 -0
- package/dist/orchestration/index.d.ts.map +1 -0
- package/dist/orchestration/index.js +9 -0
- package/dist/orchestration/index.js.map +1 -0
- package/dist/orchestration/intent.d.ts +49 -0
- package/dist/orchestration/intent.d.ts.map +1 -0
- package/dist/orchestration/intent.js +57 -0
- package/dist/orchestration/intent.js.map +1 -0
- package/dist/orchestration/orchestrator.d.ts +59 -0
- package/dist/orchestration/orchestrator.d.ts.map +1 -0
- package/dist/orchestration/orchestrator.js +216 -0
- package/dist/orchestration/orchestrator.js.map +1 -0
- package/dist/orchestration/pending.d.ts +28 -0
- package/dist/orchestration/pending.d.ts.map +1 -0
- package/dist/orchestration/pending.js +32 -0
- package/dist/orchestration/pending.js.map +1 -0
- package/dist/orchestration/result.d.ts +24 -0
- package/dist/orchestration/result.d.ts.map +1 -0
- package/dist/orchestration/result.js +2 -0
- package/dist/orchestration/result.js.map +1 -0
- package/dist/orchestration/session-state.d.ts +24 -0
- package/dist/orchestration/session-state.d.ts.map +1 -0
- package/dist/orchestration/session-state.js +19 -0
- package/dist/orchestration/session-state.js.map +1 -0
- package/dist/orchestration/trace.d.ts +20 -0
- package/dist/orchestration/trace.d.ts.map +1 -0
- package/dist/orchestration/trace.js +2 -0
- package/dist/orchestration/trace.js.map +1 -0
- package/dist/session/base.d.ts +7 -0
- package/dist/session/base.d.ts.map +1 -0
- package/dist/session/base.js +2 -0
- package/dist/session/base.js.map +1 -0
- package/dist/session/in-memory-store.d.ts +9 -0
- package/dist/session/in-memory-store.d.ts.map +1 -0
- package/dist/session/in-memory-store.js +13 -0
- package/dist/session/in-memory-store.js.map +1 -0
- package/dist/session/redis-store.d.ts +16 -0
- package/dist/session/redis-store.d.ts.map +1 -0
- package/dist/session/redis-store.js +29 -0
- package/dist/session/redis-store.js.map +1 -0
- package/dist/skills/base.d.ts +38 -0
- package/dist/skills/base.d.ts.map +1 -0
- package/dist/skills/base.js +24 -0
- package/dist/skills/base.js.map +1 -0
- package/dist/skills/registry.d.ts +11 -0
- package/dist/skills/registry.d.ts.map +1 -0
- package/dist/skills/registry.js +37 -0
- package/dist/skills/registry.js.map +1 -0
- package/dist/skills/selectors.d.ts +23 -0
- package/dist/skills/selectors.d.ts.map +1 -0
- package/dist/skills/selectors.js +52 -0
- package/dist/skills/selectors.js.map +1 -0
- package/dist/tools/base.d.ts +34 -0
- package/dist/tools/base.d.ts.map +1 -0
- package/dist/tools/base.js +22 -0
- package/dist/tools/base.js.map +1 -0
- package/dist/tools/vercel-adapter.d.ts +17 -0
- package/dist/tools/vercel-adapter.d.ts.map +1 -0
- package/dist/tools/vercel-adapter.js +66 -0
- package/dist/tools/vercel-adapter.js.map +1 -0
- package/dist/tracing/collector.d.ts +16 -0
- package/dist/tracing/collector.d.ts.map +1 -0
- package/dist/tracing/collector.js +92 -0
- package/dist/tracing/collector.js.map +1 -0
- package/dist/tracing/exporters/jsonl.d.ts +13 -0
- package/dist/tracing/exporters/jsonl.d.ts.map +1 -0
- package/dist/tracing/exporters/jsonl.js +14 -0
- package/dist/tracing/exporters/jsonl.js.map +1 -0
- package/dist/tracing/trace.d.ts +34 -0
- package/dist/tracing/trace.d.ts.map +1 -0
- package/dist/tracing/trace.js +28 -0
- package/dist/tracing/trace.js.map +1 -0
- package/dist/types.d.ts +77 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/math.d.ts +3 -0
- package/dist/utils/math.d.ts.map +1 -0
- package/dist/utils/math.js +14 -0
- package/dist/utils/math.js.map +1 -0
- package/dist-cjs/agent.js +581 -0
- package/dist-cjs/compression/base.js +2 -0
- package/dist-cjs/compression/compressor.js +55 -0
- package/dist-cjs/compression/in-memory-store.js +16 -0
- package/dist-cjs/decision/index.js +9 -0
- package/dist-cjs/decision/llm-structured-classifier.js +47 -0
- package/dist-cjs/decision/tool-planner.js +38 -0
- package/dist-cjs/decision/types.js +15 -0
- package/dist-cjs/event-bus.js +37 -0
- package/dist-cjs/guardrails/base.js +2 -0
- package/dist-cjs/guardrails/keyword.js +40 -0
- package/dist-cjs/index.js +84 -0
- package/dist-cjs/intent/base.js +2 -0
- package/dist-cjs/intent/llm-classifier.js +52 -0
- package/dist-cjs/intent/tool-calling-classifier.js +59 -0
- package/dist-cjs/knowledge/base.js +12 -0
- package/dist-cjs/knowledge/chroma-store.js +106 -0
- package/dist-cjs/knowledge/contextualizer.js +50 -0
- package/dist-cjs/knowledge/graph-store.js +152 -0
- package/dist-cjs/knowledge/hybrid-store.js +42 -0
- package/dist-cjs/knowledge/in-memory-store.js +57 -0
- package/dist-cjs/knowledge/pgvector-store.js +71 -0
- package/dist-cjs/memory/base.js +11 -0
- package/dist-cjs/memory/in-memory-store.js +38 -0
- package/dist-cjs/memory/manager.js +124 -0
- package/dist-cjs/memory/mem0-manager.js +113 -0
- package/dist-cjs/memory/pgvector-store.js +92 -0
- package/dist-cjs/orchestration/channel.js +2 -0
- package/dist-cjs/orchestration/executor.js +2 -0
- package/dist-cjs/orchestration/index.js +17 -0
- package/dist-cjs/orchestration/intent.js +61 -0
- package/dist-cjs/orchestration/orchestrator.js +219 -0
- package/dist-cjs/orchestration/pending.js +36 -0
- package/dist-cjs/orchestration/result.js +2 -0
- package/dist-cjs/orchestration/session-state.js +22 -0
- package/dist-cjs/orchestration/trace.js +2 -0
- package/dist-cjs/session/base.js +2 -0
- package/dist-cjs/session/in-memory-store.js +16 -0
- package/dist-cjs/session/redis-store.js +32 -0
- package/dist-cjs/skills/base.js +27 -0
- package/dist-cjs/skills/registry.js +40 -0
- package/dist-cjs/skills/selectors.js +56 -0
- package/dist-cjs/tools/base.js +24 -0
- package/dist-cjs/tools/vercel-adapter.js +69 -0
- package/dist-cjs/tracing/collector.js +95 -0
- package/dist-cjs/tracing/exporters/jsonl.js +17 -0
- package/dist-cjs/tracing/trace.js +31 -0
- package/dist-cjs/types.js +9 -0
- package/dist-cjs/utils/math.js +17 -0
- package/package.json +70 -0
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { formatKnowledgeContext } from "./base.js";
|
|
2
|
+
import { cosineSimilarity } from "../utils/math.js";
|
|
3
|
+
/**
|
|
4
|
+
* In-memory vector knowledge store for development and testing.
|
|
5
|
+
* Uses cosine similarity for search — no external dependencies.
|
|
6
|
+
*
|
|
7
|
+
* @deprecated Use {@link ChromaKnowledgeStore} for production workloads.
|
|
8
|
+
*/
|
|
9
|
+
export class InMemoryKnowledgeStore {
|
|
10
|
+
docs = [];
|
|
11
|
+
embedFn;
|
|
12
|
+
constructor(config) {
|
|
13
|
+
this.embedFn = config.embedFn;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Ingest a list of text documents. Computes embeddings in batch.
|
|
17
|
+
*/
|
|
18
|
+
async batchIngest(texts, metadataList) {
|
|
19
|
+
const embeddings = await this.embedFn(texts);
|
|
20
|
+
for (let i = 0; i < texts.length; i++) {
|
|
21
|
+
this.docs.push({
|
|
22
|
+
text: texts[i],
|
|
23
|
+
embedding: embeddings[i],
|
|
24
|
+
metadata: metadataList?.[i] ?? {},
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Ingest a single document.
|
|
30
|
+
*/
|
|
31
|
+
async ingest(text, metadata) {
|
|
32
|
+
await this.batchIngest([text], metadata ? [metadata] : undefined);
|
|
33
|
+
}
|
|
34
|
+
async search(query, topK = 3) {
|
|
35
|
+
if (this.docs.length === 0)
|
|
36
|
+
return [];
|
|
37
|
+
const [queryEmbedding] = await this.embedFn([query]);
|
|
38
|
+
return this.docs
|
|
39
|
+
.map((doc) => ({
|
|
40
|
+
text: doc.text,
|
|
41
|
+
score: cosineSimilarity(queryEmbedding, doc.embedding),
|
|
42
|
+
metadata: doc.metadata,
|
|
43
|
+
}))
|
|
44
|
+
.sort((a, b) => b.score - a.score)
|
|
45
|
+
.slice(0, topK);
|
|
46
|
+
}
|
|
47
|
+
formatContext(results, minScore = 0.3) {
|
|
48
|
+
return formatKnowledgeContext(results, minScore);
|
|
49
|
+
}
|
|
50
|
+
get size() {
|
|
51
|
+
return this.docs.length;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=in-memory-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-memory-store.js","sourceRoot":"","sources":["../../src/knowledge/in-memory-store.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AASpD;;;;;GAKG;AACH,MAAM,OAAO,sBAAsB;IACzB,IAAI,GAAgB,EAAE,CAAC;IACvB,OAAO,CAAU;IAEzB,YAAY,MAA4B;QACtC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CACf,KAAe,EACf,YAA6C;QAE7C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;gBACb,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;gBACd,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;gBACxB,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE;aAClC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,IAAY,EAAE,QAAkC;QAC3D,MAAM,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa,EAAE,IAAI,GAAG,CAAC;QAClC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAEtC,MAAM,CAAC,cAAc,CAAC,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAErD,OAAO,IAAI,CAAC,IAAI;aACb,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACb,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,KAAK,EAAE,gBAAgB,CAAC,cAAc,EAAE,GAAG,CAAC,SAAS,CAAC;YACtD,QAAQ,EAAE,GAAG,CAAC,QAAQ;SACvB,CAAC,CAAC;aACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;aACjC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IACpB,CAAC;IAED,aAAa,CAAC,OAA0B,EAAE,QAAQ,GAAG,GAAG;QACtD,OAAO,sBAAsB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACnD,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;IAC1B,CAAC;CACF"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { BaseKnowledgeStore, KnowledgeResult } from "./base.js";
|
|
2
|
+
import type { EmbedFn } from "../types.js";
|
|
3
|
+
/**
|
|
4
|
+
* pgvector-backed knowledge store for vector retrieval.
|
|
5
|
+
*/
|
|
6
|
+
export declare class PgVectorKnowledgeStore implements BaseKnowledgeStore {
|
|
7
|
+
private pool;
|
|
8
|
+
private embedFn;
|
|
9
|
+
private tableName;
|
|
10
|
+
private dimensions;
|
|
11
|
+
private initialized;
|
|
12
|
+
constructor(config: {
|
|
13
|
+
pool: import("pg").Pool;
|
|
14
|
+
embedFn: EmbedFn;
|
|
15
|
+
tableName?: string;
|
|
16
|
+
dimensions?: number;
|
|
17
|
+
});
|
|
18
|
+
private ensureTable;
|
|
19
|
+
search(query: string, topK?: number): Promise<KnowledgeResult[]>;
|
|
20
|
+
formatContext(results: KnowledgeResult[], minScore?: number): string;
|
|
21
|
+
ingest(chunks: Array<{
|
|
22
|
+
id: string;
|
|
23
|
+
content: string;
|
|
24
|
+
metadata?: Record<string, unknown>;
|
|
25
|
+
}>, batchSize?: number): Promise<number>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=pgvector-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pgvector-store.d.ts","sourceRoot":"","sources":["../../src/knowledge/pgvector-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAErE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAG3C;;GAEG;AACH,qBAAa,sBAAuB,YAAW,kBAAkB;IAC/D,OAAO,CAAC,IAAI,CAAoB;IAChC,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,WAAW,CAAS;gBAEhB,MAAM,EAAE;QAClB,IAAI,EAAE,OAAO,IAAI,EAAE,IAAI,CAAC;QACxB,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB;YAOa,WAAW;IAcnB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,SAAI,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAkBjE,aAAa,CAAC,OAAO,EAAE,eAAe,EAAE,EAAE,QAAQ,SAAM,GAAG,MAAM;IAI3D,MAAM,CACV,MAAM,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,EAClF,SAAS,SAAK,GACb,OAAO,CAAC,MAAM,CAAC;CAyBnB"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { formatKnowledgeContext } from "./base.js";
|
|
2
|
+
import { toVectorLiteral } from "../utils/math.js";
|
|
3
|
+
/**
|
|
4
|
+
* pgvector-backed knowledge store for vector retrieval.
|
|
5
|
+
*/
|
|
6
|
+
export class PgVectorKnowledgeStore {
|
|
7
|
+
pool;
|
|
8
|
+
embedFn;
|
|
9
|
+
tableName;
|
|
10
|
+
dimensions;
|
|
11
|
+
initialized = false;
|
|
12
|
+
constructor(config) {
|
|
13
|
+
this.pool = config.pool;
|
|
14
|
+
this.embedFn = config.embedFn;
|
|
15
|
+
this.tableName = config.tableName ?? "naru_knowledge";
|
|
16
|
+
this.dimensions = config.dimensions ?? 1536;
|
|
17
|
+
}
|
|
18
|
+
async ensureTable() {
|
|
19
|
+
if (this.initialized)
|
|
20
|
+
return;
|
|
21
|
+
await this.pool.query(`
|
|
22
|
+
CREATE TABLE IF NOT EXISTS ${this.tableName} (
|
|
23
|
+
id TEXT PRIMARY KEY,
|
|
24
|
+
content TEXT NOT NULL,
|
|
25
|
+
metadata JSONB DEFAULT '{}',
|
|
26
|
+
embedding vector(${this.dimensions}),
|
|
27
|
+
created_at TIMESTAMPTZ DEFAULT NOW()
|
|
28
|
+
)
|
|
29
|
+
`);
|
|
30
|
+
this.initialized = true;
|
|
31
|
+
}
|
|
32
|
+
async search(query, topK = 3) {
|
|
33
|
+
await this.ensureTable();
|
|
34
|
+
const [queryEmbedding] = await this.embedFn([query]);
|
|
35
|
+
const result = await this.pool.query(`SELECT content, metadata,
|
|
36
|
+
1 - (embedding <=> $1::vector) AS score
|
|
37
|
+
FROM ${this.tableName}
|
|
38
|
+
ORDER BY embedding <=> $1::vector
|
|
39
|
+
LIMIT $2`, [toVectorLiteral(queryEmbedding), topK]);
|
|
40
|
+
return result.rows.map((r) => ({
|
|
41
|
+
text: r.content,
|
|
42
|
+
score: r.score,
|
|
43
|
+
metadata: (r.metadata ?? {}),
|
|
44
|
+
}));
|
|
45
|
+
}
|
|
46
|
+
formatContext(results, minScore = 0.3) {
|
|
47
|
+
return formatKnowledgeContext(results, minScore);
|
|
48
|
+
}
|
|
49
|
+
async ingest(chunks, batchSize = 20) {
|
|
50
|
+
await this.ensureTable();
|
|
51
|
+
let count = 0;
|
|
52
|
+
for (let i = 0; i < chunks.length; i += batchSize) {
|
|
53
|
+
const batch = chunks.slice(i, i + batchSize);
|
|
54
|
+
const embeddings = await this.embedFn(batch.map((c) => c.content));
|
|
55
|
+
await Promise.all(batch.map((chunk, j) => this.pool.query(`INSERT INTO ${this.tableName} (id, content, metadata, embedding)
|
|
56
|
+
VALUES ($1, $2, $3, $4)
|
|
57
|
+
ON CONFLICT (id) DO UPDATE SET content = $2, metadata = $3, embedding = $4`, [
|
|
58
|
+
chunk.id,
|
|
59
|
+
chunk.content,
|
|
60
|
+
JSON.stringify(chunk.metadata ?? {}),
|
|
61
|
+
toVectorLiteral(embeddings[j]),
|
|
62
|
+
])));
|
|
63
|
+
count += batch.length;
|
|
64
|
+
}
|
|
65
|
+
return count;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=pgvector-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pgvector-store.js","sourceRoot":"","sources":["../../src/knowledge/pgvector-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface MemoryItem {
|
|
2
|
+
id: string;
|
|
3
|
+
userId: string;
|
|
4
|
+
content: string;
|
|
5
|
+
metadata: Record<string, unknown>;
|
|
6
|
+
score?: number;
|
|
7
|
+
createdAt: Date;
|
|
8
|
+
updatedAt: Date;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Format memory items into a context string for LLM injection.
|
|
12
|
+
*/
|
|
13
|
+
export declare function formatMemoryContext(memories: MemoryItem[]): string;
|
|
14
|
+
export interface MemoryStore {
|
|
15
|
+
add(item: MemoryItem, embedding: number[]): Promise<void>;
|
|
16
|
+
search(userId: string, embedding: number[], topK?: number): Promise<MemoryItem[]>;
|
|
17
|
+
update(itemId: string, content: string, embedding: number[]): Promise<void>;
|
|
18
|
+
delete(itemId: string): Promise<void>;
|
|
19
|
+
getAll(userId: string): Promise<MemoryItem[]>;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/memory/base.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,MAAM,CAGlE;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAClF,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5E,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;CAC/C"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Format memory items into a context string for LLM injection.
|
|
3
|
+
*/
|
|
4
|
+
export function formatMemoryContext(memories) {
|
|
5
|
+
if (memories.length === 0)
|
|
6
|
+
return "";
|
|
7
|
+
return "User memories:\n" + memories.map((m) => `- ${m.content}`).join("\n");
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/memory/base.ts"],"names":[],"mappings":"AAUA;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAsB;IACxD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACrC,OAAO,kBAAkB,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/E,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { MemoryItem, MemoryStore } from "./base.js";
|
|
2
|
+
export declare class InMemoryMemoryStore implements MemoryStore {
|
|
3
|
+
private items;
|
|
4
|
+
add(item: MemoryItem, embedding: number[]): Promise<void>;
|
|
5
|
+
search(userId: string, embedding: number[], topK?: number): Promise<MemoryItem[]>;
|
|
6
|
+
update(itemId: string, content: string, embedding: number[]): Promise<void>;
|
|
7
|
+
delete(itemId: string): Promise<void>;
|
|
8
|
+
getAll(userId: string): Promise<MemoryItem[]>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=in-memory-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-memory-store.d.ts","sourceRoot":"","sources":["../../src/memory/in-memory-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAGzD,qBAAa,mBAAoB,YAAW,WAAW;IACrD,OAAO,CAAC,KAAK,CAAgE;IAEvE,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzD,MAAM,CACV,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EAAE,EACnB,IAAI,SAAI,GACP,OAAO,CAAC,UAAU,EAAE,CAAC;IAelB,MAAM,CACV,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EAAE,GAClB,OAAO,CAAC,IAAI,CAAC;IASV,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;CAKpD"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { cosineSimilarity } from "../utils/math.js";
|
|
2
|
+
export class InMemoryMemoryStore {
|
|
3
|
+
items = new Map();
|
|
4
|
+
async add(item, embedding) {
|
|
5
|
+
this.items.set(item.id, { item, embedding });
|
|
6
|
+
}
|
|
7
|
+
async search(userId, embedding, topK = 5) {
|
|
8
|
+
const userItems = [...this.items.values()].filter((x) => x.item.userId === userId);
|
|
9
|
+
return userItems
|
|
10
|
+
.map((x) => ({
|
|
11
|
+
item: x.item,
|
|
12
|
+
score: cosineSimilarity(embedding, x.embedding),
|
|
13
|
+
}))
|
|
14
|
+
.sort((a, b) => b.score - a.score)
|
|
15
|
+
.slice(0, topK)
|
|
16
|
+
.map((x) => ({ ...x.item, score: x.score }));
|
|
17
|
+
}
|
|
18
|
+
async update(itemId, content, embedding) {
|
|
19
|
+
const existing = this.items.get(itemId);
|
|
20
|
+
if (existing) {
|
|
21
|
+
existing.item.content = content;
|
|
22
|
+
existing.item.updatedAt = new Date();
|
|
23
|
+
existing.embedding = embedding;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
async delete(itemId) {
|
|
27
|
+
this.items.delete(itemId);
|
|
28
|
+
}
|
|
29
|
+
async getAll(userId) {
|
|
30
|
+
return [...this.items.values()]
|
|
31
|
+
.filter((x) => x.item.userId === userId)
|
|
32
|
+
.map((x) => x.item);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=in-memory-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-memory-store.js","sourceRoot":"","sources":["../../src/memory/in-memory-store.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,OAAO,mBAAmB;IACtB,KAAK,GAAG,IAAI,GAAG,EAAqD,CAAC;IAE7E,KAAK,CAAC,GAAG,CAAC,IAAgB,EAAE,SAAmB;QAC7C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,MAAM,CACV,MAAc,EACd,SAAmB,EACnB,IAAI,GAAG,CAAC;QAER,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAC/C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,CAChC,CAAC;QAEF,OAAO,SAAS;aACb,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACX,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,KAAK,EAAE,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,SAAS,CAAC;SAChD,CAAC,CAAC;aACF,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;aACjC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;aACd,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,MAAM,CACV,MAAc,EACd,OAAe,EACf,SAAmB;QAEnB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;YAChC,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;YACrC,QAAQ,CAAC,SAAS,GAAG,SAAS,CAAC;QACjC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAc;QACzB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,MAAc;QACzB,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;aAC5B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC;aACvC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;CACF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type LanguageModel } from "ai";
|
|
2
|
+
import { type MemoryItem, type MemoryStore } from "./base.js";
|
|
3
|
+
import type { EmbedFn } from "../types.js";
|
|
4
|
+
/**
|
|
5
|
+
* @deprecated Use Mem0MemoryManager for production.
|
|
6
|
+
*/
|
|
7
|
+
export declare class MemoryManager {
|
|
8
|
+
private model;
|
|
9
|
+
private store;
|
|
10
|
+
private embedFn;
|
|
11
|
+
private reconciliationTopK;
|
|
12
|
+
constructor(config: {
|
|
13
|
+
model: LanguageModel;
|
|
14
|
+
store: MemoryStore;
|
|
15
|
+
embedFn: EmbedFn;
|
|
16
|
+
reconciliationTopK?: number;
|
|
17
|
+
});
|
|
18
|
+
/**
|
|
19
|
+
* Extract facts from messages and reconcile with existing memories.
|
|
20
|
+
*/
|
|
21
|
+
add(userId: string, messages: Array<{
|
|
22
|
+
role: string;
|
|
23
|
+
content: string;
|
|
24
|
+
}>): Promise<MemoryItem[]>;
|
|
25
|
+
search(userId: string, query: string, topK?: number): Promise<MemoryItem[]>;
|
|
26
|
+
getContextString(userId: string, query: string, topK?: number): Promise<string>;
|
|
27
|
+
}
|
|
28
|
+
export { MemoryManager as LLMMemoryManager };
|
|
29
|
+
//# sourceMappingURL=manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/memory/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,IAAI,CAAC;AAGxD,OAAO,EAAuB,KAAK,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AACnF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAiB3C;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,kBAAkB,CAAS;gBAEvB,MAAM,EAAE;QAClB,KAAK,EAAE,aAAa,CAAC;QACrB,KAAK,EAAE,WAAW,CAAC;QACnB,OAAO,EAAE,OAAO,CAAC;QACjB,kBAAkB,CAAC,EAAE,MAAM,CAAC;KAC7B;IAOD;;OAEG;IACG,GAAG,CACP,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,GACjD,OAAO,CAAC,UAAU,EAAE,CAAC;IA6FlB,MAAM,CACV,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,IAAI,SAAI,GACP,OAAO,CAAC,UAAU,EAAE,CAAC;IAKlB,gBAAgB,CACpB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,IAAI,SAAI,GACP,OAAO,CAAC,MAAM,CAAC;CAInB;AAED,OAAO,EAAE,aAAa,IAAI,gBAAgB,EAAE,CAAC"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { generateObject } from "ai";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { v4 as uuidv4 } from "uuid";
|
|
4
|
+
import { formatMemoryContext } from "./base.js";
|
|
5
|
+
const FactExtractionSchema = z.object({
|
|
6
|
+
facts: z.array(z.string()).describe("Extracted factual statements"),
|
|
7
|
+
});
|
|
8
|
+
const ReconciliationActionSchema = z.object({
|
|
9
|
+
actions: z.array(z.object({
|
|
10
|
+
fact: z.string(),
|
|
11
|
+
action: z.enum(["ADD", "UPDATE", "DELETE", "NONE"]),
|
|
12
|
+
targetId: z.string().nullable().optional(),
|
|
13
|
+
updatedText: z.string().nullable().optional(),
|
|
14
|
+
})),
|
|
15
|
+
});
|
|
16
|
+
/**
|
|
17
|
+
* @deprecated Use Mem0MemoryManager for production.
|
|
18
|
+
*/
|
|
19
|
+
export class MemoryManager {
|
|
20
|
+
model;
|
|
21
|
+
store;
|
|
22
|
+
embedFn;
|
|
23
|
+
reconciliationTopK;
|
|
24
|
+
constructor(config) {
|
|
25
|
+
this.model = config.model;
|
|
26
|
+
this.store = config.store;
|
|
27
|
+
this.embedFn = config.embedFn;
|
|
28
|
+
this.reconciliationTopK = config.reconciliationTopK ?? 3;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Extract facts from messages and reconcile with existing memories.
|
|
32
|
+
*/
|
|
33
|
+
async add(userId, messages) {
|
|
34
|
+
// Step 1: Extract facts
|
|
35
|
+
const conversationText = messages
|
|
36
|
+
.map((m) => `${m.role}: ${m.content}`)
|
|
37
|
+
.join("\n");
|
|
38
|
+
const { object: extracted } = await generateObject({
|
|
39
|
+
model: this.model,
|
|
40
|
+
schema: FactExtractionSchema,
|
|
41
|
+
prompt: `Extract factual statements about the user from this conversation. Only extract concrete facts, preferences, or personal information.\n\n${conversationText}`,
|
|
42
|
+
});
|
|
43
|
+
if (extracted.facts.length === 0)
|
|
44
|
+
return [];
|
|
45
|
+
// Step 2: Find similar existing memories for reconciliation (parallel)
|
|
46
|
+
const factEmbeddings = await this.embedFn(extracted.facts);
|
|
47
|
+
const searchResults = await Promise.all(factEmbeddings.map((embedding) => this.store.search(userId, embedding, this.reconciliationTopK)));
|
|
48
|
+
const seenIds = new Set();
|
|
49
|
+
const existingMemories = [];
|
|
50
|
+
for (const results of searchResults) {
|
|
51
|
+
for (const r of results) {
|
|
52
|
+
if (!seenIds.has(r.id)) {
|
|
53
|
+
seenIds.add(r.id);
|
|
54
|
+
existingMemories.push(r);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// Step 3: Reconcile
|
|
59
|
+
const existingStr = existingMemories
|
|
60
|
+
.map((m) => `[${m.id}] ${m.content}`)
|
|
61
|
+
.join("\n");
|
|
62
|
+
const { object: reconciliation } = await generateObject({
|
|
63
|
+
model: this.model,
|
|
64
|
+
schema: ReconciliationActionSchema,
|
|
65
|
+
prompt: [
|
|
66
|
+
"Given new facts and existing memories, decide what to do with each fact.",
|
|
67
|
+
"Actions: ADD (new fact), UPDATE (modify existing, provide targetId + updatedText), DELETE (remove outdated, provide targetId), NONE (already exists).",
|
|
68
|
+
"",
|
|
69
|
+
`New facts:\n${extracted.facts.map((f, i) => `${i + 1}. ${f}`).join("\n")}`,
|
|
70
|
+
"",
|
|
71
|
+
existingStr
|
|
72
|
+
? `Existing memories:\n${existingStr}`
|
|
73
|
+
: "No existing memories.",
|
|
74
|
+
].join("\n"),
|
|
75
|
+
});
|
|
76
|
+
// Step 4: Execute actions (parallel)
|
|
77
|
+
const added = [];
|
|
78
|
+
await Promise.all(reconciliation.actions.map(async (action) => {
|
|
79
|
+
switch (action.action) {
|
|
80
|
+
case "ADD": {
|
|
81
|
+
const [embedding] = await this.embedFn([action.fact]);
|
|
82
|
+
const item = {
|
|
83
|
+
id: uuidv4(),
|
|
84
|
+
userId,
|
|
85
|
+
content: action.fact,
|
|
86
|
+
metadata: {},
|
|
87
|
+
createdAt: new Date(),
|
|
88
|
+
updatedAt: new Date(),
|
|
89
|
+
};
|
|
90
|
+
await this.store.add(item, embedding);
|
|
91
|
+
added.push(item);
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
case "UPDATE": {
|
|
95
|
+
if (action.targetId && action.updatedText) {
|
|
96
|
+
const [embedding] = await this.embedFn([action.updatedText]);
|
|
97
|
+
await this.store.update(action.targetId, action.updatedText, embedding);
|
|
98
|
+
}
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
101
|
+
case "DELETE": {
|
|
102
|
+
if (action.targetId) {
|
|
103
|
+
await this.store.delete(action.targetId);
|
|
104
|
+
}
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}));
|
|
109
|
+
return added;
|
|
110
|
+
}
|
|
111
|
+
async search(userId, query, topK = 5) {
|
|
112
|
+
const [embedding] = await this.embedFn([query]);
|
|
113
|
+
return this.store.search(userId, embedding, topK);
|
|
114
|
+
}
|
|
115
|
+
async getContextString(userId, query, topK = 5) {
|
|
116
|
+
const memories = await this.search(userId, query, topK);
|
|
117
|
+
return formatMemoryContext(memories);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
export { MemoryManager as LLMMemoryManager };
|
|
121
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/memory/manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type MemoryItem } from "./base.js";
|
|
2
|
+
interface Mem0Config {
|
|
3
|
+
apiKey: string;
|
|
4
|
+
organizationId?: string;
|
|
5
|
+
projectId?: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Production memory manager backed by Mem0 (mem0ai).
|
|
9
|
+
* Same public API as MemoryManager but delegates to Mem0's hosted service.
|
|
10
|
+
* Requires `mem0ai` as a peer dependency.
|
|
11
|
+
*/
|
|
12
|
+
export declare class Mem0MemoryManager {
|
|
13
|
+
private clientPromise;
|
|
14
|
+
private apiKey;
|
|
15
|
+
private organizationId?;
|
|
16
|
+
private projectId?;
|
|
17
|
+
constructor(config: Mem0Config);
|
|
18
|
+
private getClient;
|
|
19
|
+
private baseParams;
|
|
20
|
+
/**
|
|
21
|
+
* Add messages to Mem0. Mem0 handles fact extraction and reconciliation internally.
|
|
22
|
+
*/
|
|
23
|
+
add(userId: string, messages: Array<{
|
|
24
|
+
role: string;
|
|
25
|
+
content: string;
|
|
26
|
+
}>): Promise<MemoryItem[]>;
|
|
27
|
+
search(userId: string, query: string, topK?: number): Promise<MemoryItem[]>;
|
|
28
|
+
getContextString(userId: string, query: string, topK?: number): Promise<string>;
|
|
29
|
+
private toMemoryItem;
|
|
30
|
+
}
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=mem0-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mem0-manager.d.ts","sourceRoot":"","sources":["../../src/memory/mem0-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAEjE,UAAU,UAAU;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,qBAAa,iBAAiB;IAE5B,OAAO,CAAC,aAAa,CAA6B;IAClD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,cAAc,CAAC,CAAS;IAChC,OAAO,CAAC,SAAS,CAAC,CAAS;gBAEf,MAAM,EAAE,UAAU;IAO9B,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,UAAU;IAQlB;;OAEG;IACG,GAAG,CACP,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,GACjD,OAAO,CAAC,UAAU,EAAE,CAAC;IAYlB,MAAM,CACV,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,IAAI,SAAI,GACP,OAAO,CAAC,UAAU,EAAE,CAAC;IAalB,gBAAgB,CACpB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,IAAI,SAAI,GACP,OAAO,CAAC,MAAM,CAAC;IAMlB,OAAO,CAAC,YAAY;CAWrB"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { formatMemoryContext } from "./base.js";
|
|
2
|
+
/**
|
|
3
|
+
* Production memory manager backed by Mem0 (mem0ai).
|
|
4
|
+
* Same public API as MemoryManager but delegates to Mem0's hosted service.
|
|
5
|
+
* Requires `mem0ai` as a peer dependency.
|
|
6
|
+
*/
|
|
7
|
+
export class Mem0MemoryManager {
|
|
8
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
9
|
+
clientPromise = null;
|
|
10
|
+
apiKey;
|
|
11
|
+
organizationId;
|
|
12
|
+
projectId;
|
|
13
|
+
constructor(config) {
|
|
14
|
+
this.apiKey = config.apiKey;
|
|
15
|
+
this.organizationId = config.organizationId;
|
|
16
|
+
this.projectId = config.projectId;
|
|
17
|
+
}
|
|
18
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
19
|
+
getClient() {
|
|
20
|
+
if (!this.clientPromise) {
|
|
21
|
+
this.clientPromise = (async () => {
|
|
22
|
+
const mod = await import("mem0ai");
|
|
23
|
+
const MemoryClient = mod.MemoryClient ?? mod.default;
|
|
24
|
+
return new MemoryClient({ apiKey: this.apiKey });
|
|
25
|
+
})();
|
|
26
|
+
}
|
|
27
|
+
return this.clientPromise;
|
|
28
|
+
}
|
|
29
|
+
baseParams(userId) {
|
|
30
|
+
return {
|
|
31
|
+
user_id: userId,
|
|
32
|
+
...(this.organizationId && { org_id: this.organizationId }),
|
|
33
|
+
...(this.projectId && { project_id: this.projectId }),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Add messages to Mem0. Mem0 handles fact extraction and reconciliation internally.
|
|
38
|
+
*/
|
|
39
|
+
async add(userId, messages) {
|
|
40
|
+
const client = await this.getClient();
|
|
41
|
+
const result = await client.add(messages, {
|
|
42
|
+
...this.baseParams(userId),
|
|
43
|
+
});
|
|
44
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
45
|
+
const results = Array.isArray(result) ? result : result?.results ?? [];
|
|
46
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
47
|
+
return results.map((r) => this.toMemoryItem(r, userId));
|
|
48
|
+
}
|
|
49
|
+
async search(userId, query, topK = 5) {
|
|
50
|
+
const client = await this.getClient();
|
|
51
|
+
const result = await client.search(query, {
|
|
52
|
+
...this.baseParams(userId),
|
|
53
|
+
limit: topK,
|
|
54
|
+
});
|
|
55
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
56
|
+
const results = Array.isArray(result) ? result : result?.results ?? [];
|
|
57
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
58
|
+
return results.map((r) => this.toMemoryItem(r, userId));
|
|
59
|
+
}
|
|
60
|
+
async getContextString(userId, query, topK = 5) {
|
|
61
|
+
const memories = await this.search(userId, query, topK);
|
|
62
|
+
return formatMemoryContext(memories);
|
|
63
|
+
}
|
|
64
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
65
|
+
toMemoryItem(raw, userId) {
|
|
66
|
+
return {
|
|
67
|
+
id: raw.id ?? raw.memory_id ?? "",
|
|
68
|
+
userId,
|
|
69
|
+
content: raw.memory ?? raw.text ?? raw.content ?? "",
|
|
70
|
+
metadata: raw.metadata ?? {},
|
|
71
|
+
score: raw.score,
|
|
72
|
+
createdAt: raw.created_at ? new Date(raw.created_at) : new Date(),
|
|
73
|
+
updatedAt: raw.updated_at ? new Date(raw.updated_at) : new Date(),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=mem0-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mem0-manager.js","sourceRoot":"","sources":["../../src/memory/mem0-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { MemoryItem, MemoryStore } from "./base.js";
|
|
2
|
+
/**
|
|
3
|
+
* PostgreSQL + pgvector backed memory store. Requires `pg` as optional dependency.
|
|
4
|
+
*/
|
|
5
|
+
export declare class PgVectorMemoryStore implements MemoryStore {
|
|
6
|
+
private pool;
|
|
7
|
+
private tableName;
|
|
8
|
+
private dimensions;
|
|
9
|
+
private initialized;
|
|
10
|
+
constructor(config: {
|
|
11
|
+
pool: import("pg").Pool;
|
|
12
|
+
tableName?: string;
|
|
13
|
+
dimensions?: number;
|
|
14
|
+
});
|
|
15
|
+
private ensureTable;
|
|
16
|
+
add(item: MemoryItem, embedding: number[]): Promise<void>;
|
|
17
|
+
search(userId: string, embedding: number[], topK?: number): Promise<MemoryItem[]>;
|
|
18
|
+
update(itemId: string, content: string, embedding: number[]): Promise<void>;
|
|
19
|
+
delete(itemId: string): Promise<void>;
|
|
20
|
+
getAll(userId: string): Promise<MemoryItem[]>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=pgvector-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pgvector-store.d.ts","sourceRoot":"","sources":["../../src/memory/pgvector-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAGzD;;GAEG;AACH,qBAAa,mBAAoB,YAAW,WAAW;IACrD,OAAO,CAAC,IAAI,CAAoB;IAChC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,WAAW,CAAS;gBAEhB,MAAM,EAAE;QAClB,IAAI,EAAE,OAAO,IAAI,EAAE,IAAI,CAAC;QACxB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB;YAMa,WAAW;IAoBnB,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBzD,MAAM,CACV,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EAAE,EACnB,IAAI,SAAI,GACP,OAAO,CAAC,UAAU,EAAE,CAAC;IAsBlB,MAAM,CACV,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EAAE,GAClB,OAAO,CAAC,IAAI,CAAC;IAQV,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQrC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;CAgBpD"}
|