@easynet/agent-memory 0.0.2
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 +260 -0
- package/bin/chat +11 -0
- package/dist/adapters/index.d.ts +8 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +29 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/mem0/mem0-store.d.ts +29 -0
- package/dist/adapters/mem0/mem0-store.d.ts.map +1 -0
- package/dist/adapters/mem0/mem0-store.js +174 -0
- package/dist/adapters/mem0/mem0-store.js.map +1 -0
- package/dist/adapters/rag-http/rag-http-retriever.d.ts +18 -0
- package/dist/adapters/rag-http/rag-http-retriever.d.ts.map +1 -0
- package/dist/adapters/rag-http/rag-http-retriever.js +71 -0
- package/dist/adapters/rag-http/rag-http-retriever.js.map +1 -0
- package/dist/adapters/types.d.ts +25 -0
- package/dist/adapters/types.d.ts.map +1 -0
- package/dist/adapters/types.js +6 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/boot/boot-rebuilder.d.ts +26 -0
- package/dist/boot/boot-rebuilder.d.ts.map +1 -0
- package/dist/boot/boot-rebuilder.js +112 -0
- package/dist/boot/boot-rebuilder.js.map +1 -0
- package/dist/boot/index.d.ts +3 -0
- package/dist/boot/index.d.ts.map +1 -0
- package/dist/boot/index.js +6 -0
- package/dist/boot/index.js.map +1 -0
- package/dist/cli/chat-split.d.ts +22 -0
- package/dist/cli/chat-split.d.ts.map +1 -0
- package/dist/cli/chat-split.js +187 -0
- package/dist/cli/chat-split.js.map +1 -0
- package/dist/cli/chat.d.ts +19 -0
- package/dist/cli/chat.d.ts.map +1 -0
- package/dist/cli/chat.js +266 -0
- package/dist/cli/chat.js.map +1 -0
- package/dist/cli/commands/command-handler.d.ts +32 -0
- package/dist/cli/commands/command-handler.d.ts.map +1 -0
- package/dist/cli/commands/command-handler.js +143 -0
- package/dist/cli/commands/command-handler.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +8 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/ui/display-manager.d.ts +18 -0
- package/dist/cli/ui/display-manager.d.ts.map +1 -0
- package/dist/cli/ui/display-manager.js +69 -0
- package/dist/cli/ui/display-manager.js.map +1 -0
- package/dist/cli/ui/screen-layout.d.ts +12 -0
- package/dist/cli/ui/screen-layout.d.ts.map +1 -0
- package/dist/cli/ui/screen-layout.js +125 -0
- package/dist/cli/ui/screen-layout.js.map +1 -0
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +6 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +9 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +107 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/context/context-builder.d.ts +18 -0
- package/dist/context/context-builder.d.ts.map +1 -0
- package/dist/context/context-builder.js +91 -0
- package/dist/context/context-builder.js.map +1 -0
- package/dist/core/agent-memory.d.ts +50 -0
- package/dist/core/agent-memory.d.ts.map +1 -0
- package/dist/core/agent-memory.js +297 -0
- package/dist/core/agent-memory.js.map +1 -0
- package/dist/embedding/embedder.d.ts +49 -0
- package/dist/embedding/embedder.d.ts.map +1 -0
- package/dist/embedding/embedder.js +146 -0
- package/dist/embedding/embedder.js.map +1 -0
- package/dist/embedding/index.d.ts +3 -0
- package/dist/embedding/index.d.ts.map +1 -0
- package/dist/embedding/index.js +8 -0
- package/dist/embedding/index.js.map +1 -0
- package/dist/gate/deduplicator.d.ts +22 -0
- package/dist/gate/deduplicator.d.ts.map +1 -0
- package/dist/gate/deduplicator.js +74 -0
- package/dist/gate/deduplicator.js.map +1 -0
- package/dist/gate/extractor.d.ts +33 -0
- package/dist/gate/extractor.d.ts.map +1 -0
- package/dist/gate/extractor.js +122 -0
- package/dist/gate/extractor.js.map +1 -0
- package/dist/gate/index.d.ts +3 -0
- package/dist/gate/index.d.ts.map +1 -0
- package/dist/gate/index.js +6 -0
- package/dist/gate/index.js.map +1 -0
- package/dist/gate/memory-gate.d.ts +27 -0
- package/dist/gate/memory-gate.d.ts.map +1 -0
- package/dist/gate/memory-gate.js +86 -0
- package/dist/gate/memory-gate.js.map +1 -0
- package/dist/gate/redactor.d.ts +14 -0
- package/dist/gate/redactor.d.ts.map +1 -0
- package/dist/gate/redactor.js +24 -0
- package/dist/gate/redactor.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/indexing/in-memory-index.d.ts +67 -0
- package/dist/indexing/in-memory-index.d.ts.map +1 -0
- package/dist/indexing/in-memory-index.js +135 -0
- package/dist/indexing/in-memory-index.js.map +1 -0
- package/dist/indexing/index.d.ts +3 -0
- package/dist/indexing/index.d.ts.map +1 -0
- package/dist/indexing/index.js +6 -0
- package/dist/indexing/index.js.map +1 -0
- package/dist/persistence/database/schema.d.ts +6 -0
- package/dist/persistence/database/schema.d.ts.map +1 -0
- package/dist/persistence/database/schema.js +75 -0
- package/dist/persistence/database/schema.js.map +1 -0
- package/dist/persistence/index.d.ts +3 -0
- package/dist/persistence/index.d.ts.map +1 -0
- package/dist/persistence/index.js +6 -0
- package/dist/persistence/index.js.map +1 -0
- package/dist/persistence/repository/embedding-operations.d.ts +17 -0
- package/dist/persistence/repository/embedding-operations.d.ts.map +1 -0
- package/dist/persistence/repository/embedding-operations.js +58 -0
- package/dist/persistence/repository/embedding-operations.js.map +1 -0
- package/dist/persistence/repository/memory-operations.d.ts +28 -0
- package/dist/persistence/repository/memory-operations.d.ts.map +1 -0
- package/dist/persistence/repository/memory-operations.js +87 -0
- package/dist/persistence/repository/memory-operations.js.map +1 -0
- package/dist/persistence/repository/meta-operations.d.ts +15 -0
- package/dist/persistence/repository/meta-operations.d.ts.map +1 -0
- package/dist/persistence/repository/meta-operations.js +20 -0
- package/dist/persistence/repository/meta-operations.js.map +1 -0
- package/dist/persistence/sqlite-repo.d.ts +58 -0
- package/dist/persistence/sqlite-repo.d.ts.map +1 -0
- package/dist/persistence/sqlite-repo.js +81 -0
- package/dist/persistence/sqlite-repo.js.map +1 -0
- package/dist/persistence/utils/hash.d.ts +8 -0
- package/dist/persistence/utils/hash.d.ts.map +1 -0
- package/dist/persistence/utils/hash.js +48 -0
- package/dist/persistence/utils/hash.js.map +1 -0
- package/dist/persistence/utils/serialization.d.ts +33 -0
- package/dist/persistence/utils/serialization.d.ts.map +1 -0
- package/dist/persistence/utils/serialization.js +85 -0
- package/dist/persistence/utils/serialization.js.map +1 -0
- package/dist/processing/document/document-processor.d.ts +30 -0
- package/dist/processing/document/document-processor.d.ts.map +1 -0
- package/dist/processing/document/document-processor.js +158 -0
- package/dist/processing/document/document-processor.js.map +1 -0
- package/dist/processing/document/index.d.ts +3 -0
- package/dist/processing/document/index.d.ts.map +1 -0
- package/dist/processing/document/index.js +6 -0
- package/dist/processing/document/index.js.map +1 -0
- package/dist/ranker/ranker.d.ts +26 -0
- package/dist/ranker/ranker.d.ts.map +1 -0
- package/dist/ranker/ranker.js +40 -0
- package/dist/ranker/ranker.js.map +1 -0
- package/dist/recall/recall-engine.d.ts +19 -0
- package/dist/recall/recall-engine.d.ts.map +1 -0
- package/dist/recall/recall-engine.js +79 -0
- package/dist/recall/recall-engine.js.map +1 -0
- package/dist/types/config.d.ts +821 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +128 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/document.d.ts +37 -0
- package/dist/types/document.d.ts.map +1 -0
- package/dist/types/document.js +6 -0
- package/dist/types/document.js.map +1 -0
- package/dist/types/index.d.ts +86 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* AgentMemory - Main class for agent memory management
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.AgentMemory = void 0;
|
|
7
|
+
const config_1 = require("../config");
|
|
8
|
+
const adapters_1 = require("../adapters");
|
|
9
|
+
const gate_1 = require("../gate");
|
|
10
|
+
const recall_engine_1 = require("../recall/recall-engine");
|
|
11
|
+
const context_builder_1 = require("../context/context-builder");
|
|
12
|
+
const document_processor_1 = require("../processing/document/document-processor");
|
|
13
|
+
const persistence_1 = require("../persistence");
|
|
14
|
+
const indexing_1 = require("../indexing");
|
|
15
|
+
const embedding_1 = require("../embedding");
|
|
16
|
+
const boot_1 = require("../boot");
|
|
17
|
+
class AgentMemory {
|
|
18
|
+
constructor(config) {
|
|
19
|
+
this.store = null;
|
|
20
|
+
this.retriever = null;
|
|
21
|
+
this.recallEngine = null;
|
|
22
|
+
// Route A (in-memory) components
|
|
23
|
+
this.repo = null;
|
|
24
|
+
this.index = null;
|
|
25
|
+
this.embedder = null;
|
|
26
|
+
this.rebuilder = null;
|
|
27
|
+
this.isInMemoryMode = false;
|
|
28
|
+
this.config = config;
|
|
29
|
+
this.gate = new gate_1.MemoryGate(config);
|
|
30
|
+
this.documentProcessor = new document_processor_1.DocumentProcessor();
|
|
31
|
+
const mem0Mode = config.store.mem0.mode || "platform";
|
|
32
|
+
this.isInMemoryMode = mem0Mode === "in_memory";
|
|
33
|
+
if (this.isInMemoryMode) {
|
|
34
|
+
// Route A: Initialize SQLite + InMemoryIndex
|
|
35
|
+
this.initInMemoryMode();
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
// Original: Platform API mode
|
|
39
|
+
this.store = (0, adapters_1.createMemoryStore)(config);
|
|
40
|
+
this.retriever = (0, adapters_1.createDocRetriever)(config);
|
|
41
|
+
this.recallEngine = new recall_engine_1.RecallEngine(this.store, this.retriever, config);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
initInMemoryMode() {
|
|
45
|
+
if (!this.config.persistence?.sqlite) {
|
|
46
|
+
throw new Error("persistence.sqlite is required for in_memory mode");
|
|
47
|
+
}
|
|
48
|
+
if (!this.config.embedding) {
|
|
49
|
+
throw new Error("embedding configuration is required for in_memory mode");
|
|
50
|
+
}
|
|
51
|
+
// Initialize SQLite repository
|
|
52
|
+
this.repo = new persistence_1.SqliteMemoryRepo({
|
|
53
|
+
path: this.config.persistence.sqlite.path,
|
|
54
|
+
wal: this.config.persistence.sqlite.wal !== false,
|
|
55
|
+
});
|
|
56
|
+
// Initialize in-memory index
|
|
57
|
+
this.index = new indexing_1.InMemoryIndex();
|
|
58
|
+
// Initialize embedder
|
|
59
|
+
this.embedder = (0, embedding_1.createEmbedder)(this.config.embedding);
|
|
60
|
+
// Initialize boot rebuilder
|
|
61
|
+
if (this.config.boot?.rebuild?.enabled !== false) {
|
|
62
|
+
this.rebuilder = new boot_1.BootRebuilder(this.repo, this.index, this.embedder, {
|
|
63
|
+
batchSize: this.config.boot?.rebuild?.batch_size,
|
|
64
|
+
onModelMismatch: this.config.boot?.rebuild?.on_model_mismatch,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Create AgentMemory instance from YAML configuration file
|
|
70
|
+
*/
|
|
71
|
+
static async fromYaml(configPath) {
|
|
72
|
+
const config = await (0, config_1.loadConfig)(configPath);
|
|
73
|
+
const instance = new AgentMemory(config);
|
|
74
|
+
// If in-memory mode, rebuild index on startup
|
|
75
|
+
if (instance.isInMemoryMode && instance.rebuilder) {
|
|
76
|
+
await instance.rebuilder.rebuild();
|
|
77
|
+
}
|
|
78
|
+
return instance;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Remember - Store memories from messages or text
|
|
82
|
+
*/
|
|
83
|
+
async remember(options) {
|
|
84
|
+
// Process through MemoryGate
|
|
85
|
+
const items = await this.gate.process({
|
|
86
|
+
messages: options.messages,
|
|
87
|
+
text: options.text,
|
|
88
|
+
actor: options.actor,
|
|
89
|
+
scope: options.scope,
|
|
90
|
+
hint: options.hint,
|
|
91
|
+
});
|
|
92
|
+
if (items.length === 0) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
if (this.isInMemoryMode) {
|
|
96
|
+
// Route A: Write to SQLite first, then index
|
|
97
|
+
await this.rememberInMemory(items, options);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
// Original: Write to platform API
|
|
101
|
+
if (!this.store) {
|
|
102
|
+
throw new Error("Store not initialized");
|
|
103
|
+
}
|
|
104
|
+
await this.store.add(items, {
|
|
105
|
+
actor: options.actor,
|
|
106
|
+
scope: options.scope,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
async rememberInMemory(items, options) {
|
|
111
|
+
if (!this.repo || !this.index || !this.embedder) {
|
|
112
|
+
throw new Error("In-memory components not initialized");
|
|
113
|
+
}
|
|
114
|
+
// 1. Write to SQLite (source of truth)
|
|
115
|
+
const toIndex = [];
|
|
116
|
+
for (const item of items) {
|
|
117
|
+
const { inserted } = await this.repo.upsertMemory(item);
|
|
118
|
+
if (inserted) {
|
|
119
|
+
toIndex.push(item);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
if (toIndex.length === 0) {
|
|
123
|
+
return; // All items were duplicates
|
|
124
|
+
}
|
|
125
|
+
// 2. Compute embeddings asynchronously (don't block)
|
|
126
|
+
this.persistEmbeddingsAsync(toIndex).catch((error) => {
|
|
127
|
+
console.error("Failed to persist embeddings:", error);
|
|
128
|
+
});
|
|
129
|
+
// 3. Add to in-memory index (for immediate recall)
|
|
130
|
+
await this.index.add(toIndex);
|
|
131
|
+
}
|
|
132
|
+
async persistEmbeddingsAsync(items) {
|
|
133
|
+
if (!this.repo || !this.index || !this.embedder || items.length === 0) {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
try {
|
|
137
|
+
const texts = items.map((item) => item.content);
|
|
138
|
+
const embeddings = await this.embedder.embed(texts);
|
|
139
|
+
for (let i = 0; i < items.length; i++) {
|
|
140
|
+
const item = items[i];
|
|
141
|
+
const embedding = embeddings[i];
|
|
142
|
+
// Save to SQLite
|
|
143
|
+
await this.repo.saveEmbedding(item.id, this.embedder.model, this.embedder.dim, embedding);
|
|
144
|
+
// Add to index
|
|
145
|
+
await this.index.addEmbedding(item.id, embedding);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
console.error("Failed to persist embeddings:", error);
|
|
150
|
+
// Mark as failed in SQLite (optional)
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Recall - Retrieve memories and documents
|
|
155
|
+
*/
|
|
156
|
+
async recall(options) {
|
|
157
|
+
if (this.isInMemoryMode) {
|
|
158
|
+
return this.recallInMemory(options);
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
if (!this.recallEngine) {
|
|
162
|
+
throw new Error("Recall engine not initialized");
|
|
163
|
+
}
|
|
164
|
+
return this.recallEngine.recall(options);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
async recallInMemory(options) {
|
|
168
|
+
if (!this.repo || !this.index || !this.embedder) {
|
|
169
|
+
throw new Error("In-memory components not initialized");
|
|
170
|
+
}
|
|
171
|
+
const topK = options.topK || 10;
|
|
172
|
+
// 1. Embed query
|
|
173
|
+
const queryEmbedding = (await this.embedder.embed([options.query]))[0];
|
|
174
|
+
// 2. Search in-memory index
|
|
175
|
+
const { ids } = await this.index.search(queryEmbedding, topK, {
|
|
176
|
+
actor: options.actor,
|
|
177
|
+
scope: options.scope,
|
|
178
|
+
});
|
|
179
|
+
// 3. Load full items from SQLite (source of truth)
|
|
180
|
+
const memory = await this.repo.loadByIds(ids);
|
|
181
|
+
// 4. Build context
|
|
182
|
+
const contextBuilder = new context_builder_1.ContextBuilder(this.config.recall?.context || {
|
|
183
|
+
enabled: true,
|
|
184
|
+
template: "default",
|
|
185
|
+
max_tokens: 1400,
|
|
186
|
+
});
|
|
187
|
+
// Get docs if enabled
|
|
188
|
+
let docs = [];
|
|
189
|
+
if (options.includeDocs !== false && this.retriever) {
|
|
190
|
+
try {
|
|
191
|
+
docs = await this.retriever.search(options.query, {
|
|
192
|
+
scope: options.scope,
|
|
193
|
+
topK,
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
catch (error) {
|
|
197
|
+
console.error("Failed to retrieve documents:", error);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
const context = contextBuilder.build(memory, docs);
|
|
201
|
+
return {
|
|
202
|
+
memory,
|
|
203
|
+
docs,
|
|
204
|
+
context,
|
|
205
|
+
traceId: this.generateTraceId(),
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
generateTraceId() {
|
|
209
|
+
return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function (c) {
|
|
210
|
+
const r = (Math.random() * 16) | 0;
|
|
211
|
+
const v = c === "x" ? r : (r & 0x3) | 0x8;
|
|
212
|
+
return v.toString(16);
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Remember documents - Store document content as memories
|
|
217
|
+
* Supports multi-modal documents (text, PDF, images, etc.)
|
|
218
|
+
*/
|
|
219
|
+
async rememberDocument(options) {
|
|
220
|
+
const { document, actor, scope, autoChunk = true, chunkSize, chunkOverlap, extractMetadata = false, tags = [], } = options;
|
|
221
|
+
// Process documents into chunks
|
|
222
|
+
const chunks = autoChunk
|
|
223
|
+
? this.documentProcessor.processDocument(document, {
|
|
224
|
+
chunkSize,
|
|
225
|
+
chunkOverlap,
|
|
226
|
+
})
|
|
227
|
+
: Array.isArray(document)
|
|
228
|
+
? document
|
|
229
|
+
: [document];
|
|
230
|
+
// Convert chunks to memory items
|
|
231
|
+
const memoryItems = [];
|
|
232
|
+
for (const chunk of chunks) {
|
|
233
|
+
// Convert chunk to memory items
|
|
234
|
+
const items = this.documentProcessor.chunksToMemoryItems([chunk], actor, scope, tags);
|
|
235
|
+
memoryItems.push(...items);
|
|
236
|
+
// Extract metadata if requested
|
|
237
|
+
if (extractMetadata) {
|
|
238
|
+
const metaItems = this.documentProcessor.extractMetadataAsMemories(chunk, actor, scope);
|
|
239
|
+
memoryItems.push(...metaItems);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
if (memoryItems.length === 0) {
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
// Process through MemoryGate for redaction and deduplication
|
|
246
|
+
// Documents already have structure, so we apply light processing
|
|
247
|
+
// Use gate's internal components for redaction and deduplication only
|
|
248
|
+
const gateInternal = this.gate;
|
|
249
|
+
const redactor = gateInternal.redactor;
|
|
250
|
+
const deduplicator = gateInternal.deduplicator;
|
|
251
|
+
// Apply redaction to content
|
|
252
|
+
const redactedItems = memoryItems.map((item) => ({
|
|
253
|
+
...item,
|
|
254
|
+
content: redactor.redact(item.content),
|
|
255
|
+
}));
|
|
256
|
+
// Filter out items with too little content after redaction
|
|
257
|
+
const validItems = redactedItems.filter((item) => item.content.trim().length >= 10);
|
|
258
|
+
// Apply deduplication
|
|
259
|
+
const finalItems = deduplicator.dedupe(validItems);
|
|
260
|
+
if (finalItems.length === 0) {
|
|
261
|
+
return;
|
|
262
|
+
}
|
|
263
|
+
// Store memories
|
|
264
|
+
if (this.isInMemoryMode) {
|
|
265
|
+
await this.rememberInMemory(finalItems, {
|
|
266
|
+
actor,
|
|
267
|
+
scope,
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
else {
|
|
271
|
+
if (!this.store) {
|
|
272
|
+
throw new Error("Store not initialized");
|
|
273
|
+
}
|
|
274
|
+
await this.store.add(finalItems, {
|
|
275
|
+
actor,
|
|
276
|
+
scope,
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Feedback - Provide feedback for memory utility learning (reserved for v0.2+)
|
|
282
|
+
*/
|
|
283
|
+
async feedback(options) {
|
|
284
|
+
// Placeholder for future implementation
|
|
285
|
+
console.warn("feedback() is not yet implemented in v0.1");
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Close resources (SQLite connection, etc.)
|
|
289
|
+
*/
|
|
290
|
+
close() {
|
|
291
|
+
if (this.repo) {
|
|
292
|
+
this.repo.close();
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
exports.AgentMemory = AgentMemory;
|
|
297
|
+
//# sourceMappingURL=agent-memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-memory.js","sourceRoot":"","sources":["../../src/core/agent-memory.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,sCAAuC;AAEvC,0CAAoE;AAEpE,kCAAqC;AACrC,2DAAuD;AACvD,gEAA4D;AAS5D,kFAA8E;AAC9E,gDAAkD;AAClD,0CAA4C;AAC5C,4CAAwD;AACxD,kCAAwC;AAExC,MAAa,WAAW;IAiBtB,YAAoB,MAAc;QAf1B,UAAK,GAAuB,IAAI,CAAC;QACjC,cAAS,GAAwB,IAAI,CAAC;QAEtC,iBAAY,GAAwB,IAAI,CAAC;QAEjD,iCAAiC;QACzB,SAAI,GAA4B,IAAI,CAAC;QACrC,UAAK,GAAyB,IAAI,CAAC;QACnC,aAAQ,GAAoB,IAAI,CAAC;QACjC,cAAS,GAAyB,IAAI,CAAC;QACvC,mBAAc,GAAY,KAAK,CAAC;QAMtC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,iBAAU,CAAC,MAAM,CAAC,CAAC;QACnC,IAAI,CAAC,iBAAiB,GAAG,IAAI,sCAAiB,EAAE,CAAC;QAEjD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,UAAU,CAAC;QACtD,IAAI,CAAC,cAAc,GAAG,QAAQ,KAAK,WAAW,CAAC;QAE/C,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,6CAA6C;YAC7C,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,8BAA8B;YAC9B,IAAI,CAAC,KAAK,GAAG,IAAA,4BAAiB,EAAC,MAAM,CAAC,CAAC;YACvC,IAAI,CAAC,SAAS,GAAG,IAAA,6BAAkB,EAAC,MAAM,CAAC,CAAC;YAC5C,IAAI,CAAC,YAAY,GAAG,IAAI,4BAAY,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IAEO,gBAAgB;QACtB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;QAC5E,CAAC;QAED,+BAA+B;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,8BAAgB,CAAC;YAC/B,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI;YACzC,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,KAAK,KAAK;SAClD,CAAC,CAAC;QAEH,6BAA6B;QAC7B,IAAI,CAAC,KAAK,GAAG,IAAI,wBAAa,EAAE,CAAC;QAEjC,sBAAsB;QACtB,IAAI,CAAC,QAAQ,GAAG,IAAA,0BAAc,EAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAEtD,4BAA4B;QAC5B,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,KAAK,KAAK,EAAE,CAAC;YACjD,IAAI,CAAC,SAAS,GAAG,IAAI,oBAAa,CAChC,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,QAAQ,EACb;gBACE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU;gBAChD,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,iBAAiB;aAC9D,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAkB;QACtC,MAAM,MAAM,GAAG,MAAM,IAAA,mBAAU,EAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC;QAEzC,8CAA8C;QAC9C,IAAI,QAAQ,CAAC,cAAc,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;YAClD,MAAM,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QACrC,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,OAAwB;QACrC,6BAA6B;QAC7B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;YACpC,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC,CAAC;QAEH,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,6CAA6C;YAC7C,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,kCAAkC;YAClC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBAChB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;YAC3C,CAAC;YACD,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE;gBAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,KAAK,EAAE,OAAO,CAAC,KAAK;aACrB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,KAAmB,EAAE,OAAwB;QAC1E,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QAED,uCAAuC;QACvC,MAAM,OAAO,GAAiB,EAAE,CAAC;QACjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YACxD,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,4BAA4B;QACtC,CAAC;QAED,qDAAqD;QACrD,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YACnD,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,mDAAmD;QACnD,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAAC,KAAmB;QACtD,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtE,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAChD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAEpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACtB,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gBAEhC,iBAAiB;gBACjB,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;gBAE1F,eAAe;gBACf,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;YACtD,sCAAsC;QACxC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,OAAsB;QACjC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;gBACvB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;YACnD,CAAC;YACD,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,OAAsB;QACjD,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;QAEhC,iBAAiB;QACjB,MAAM,cAAc,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAEvE,4BAA4B;QAC5B,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,EAAE,IAAI,EAAE;YAC5D,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC,CAAC;QAEH,mDAAmD;QACnD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAE9C,mBAAmB;QACnB,MAAM,cAAc,GAAG,IAAI,gCAAc,CACvC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,IAAI;YAC7B,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,SAAS;YACnB,UAAU,EAAE,IAAI;SACjB,CACF,CAAC;QAEF,sBAAsB;QACtB,IAAI,IAAI,GAAU,EAAE,CAAC;QACrB,IAAI,OAAO,CAAC,WAAW,KAAK,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACpD,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE;oBAChD,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,IAAI;iBACL,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAEnD,OAAO;YACL,MAAM;YACN,IAAI;YACJ,OAAO;YACP,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE;SAChC,CAAC;IACJ,CAAC;IAEO,eAAe;QACrB,OAAO,sCAAsC,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC;YACxE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;YACnC,MAAM,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;YAC1C,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,gBAAgB,CAAC,OAA8B;QACnD,MAAM,EACJ,QAAQ,EACR,KAAK,EACL,KAAK,EACL,SAAS,GAAG,IAAI,EAChB,SAAS,EACT,YAAY,EACZ,eAAe,GAAG,KAAK,EACvB,IAAI,GAAG,EAAE,GACV,GAAG,OAAO,CAAC;QAEZ,gCAAgC;QAChC,MAAM,MAAM,GAAG,SAAS;YACtB,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,QAAQ,EAAE;gBAC/C,SAAS;gBACT,YAAY;aACb,CAAC;YACJ,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;gBACzB,CAAC,CAAC,QAAQ;gBACV,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAEf,iCAAiC;QACjC,MAAM,WAAW,GAAiB,EAAE,CAAC;QAErC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,gCAAgC;YAChC,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,mBAAmB,CACtD,CAAC,KAAK,CAAC,EACP,KAAK,EACL,KAAK,EACL,IAAI,CACL,CAAC;YACF,WAAW,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;YAE3B,gCAAgC;YAChC,IAAI,eAAe,EAAE,CAAC;gBACpB,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,CAAC,yBAAyB,CAChE,KAAK,EACL,KAAK,EACL,KAAK,CACN,CAAC;gBACF,WAAW,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAED,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,6DAA6D;QAC7D,iEAAiE;QACjE,sEAAsE;QACtE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAW,CAAC;QACtC,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC;QACvC,MAAM,YAAY,GAAG,YAAY,CAAC,YAAY,CAAC;QAE/C,6BAA6B;QAC7B,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC/C,GAAG,IAAI;YACP,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;SACvC,CAAC,CAAC,CAAC;QAEJ,2DAA2D;QAC3D,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CACrC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAC3C,CAAC;QAEF,sBAAsB;QACtB,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAEnD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO;QACT,CAAC;QAED,iBAAiB;QACjB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE;gBACtC,KAAK;gBACL,KAAK;aACN,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBAChB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;YAC3C,CAAC;YACD,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE;gBAC/B,KAAK;gBACL,KAAK;aACN,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,OAAwB;QACrC,wCAAwC;QACxC,OAAO,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;IAC5D,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;CACF;AAlWD,kCAkWC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Embedding provider interface and implementations
|
|
3
|
+
*/
|
|
4
|
+
export interface Embedder {
|
|
5
|
+
model: string;
|
|
6
|
+
dim: number;
|
|
7
|
+
embed(texts: string[]): Promise<Float32Array[]>;
|
|
8
|
+
}
|
|
9
|
+
export interface EmbedderConfig {
|
|
10
|
+
provider: "ollama" | "openai";
|
|
11
|
+
model: string;
|
|
12
|
+
dim: number;
|
|
13
|
+
base_url?: string;
|
|
14
|
+
api_key?: string;
|
|
15
|
+
concurrency?: number;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Ollama Embedder
|
|
19
|
+
*/
|
|
20
|
+
export declare class OllamaEmbedder implements Embedder {
|
|
21
|
+
readonly model: string;
|
|
22
|
+
readonly dim: number;
|
|
23
|
+
private baseUrl;
|
|
24
|
+
private concurrency;
|
|
25
|
+
private queue;
|
|
26
|
+
private running;
|
|
27
|
+
constructor(config: EmbedderConfig);
|
|
28
|
+
embed(texts: string[]): Promise<Float32Array[]>;
|
|
29
|
+
private embedOne;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* OpenAI Embedder
|
|
33
|
+
*/
|
|
34
|
+
export declare class OpenAIEmbedder implements Embedder {
|
|
35
|
+
readonly model: string;
|
|
36
|
+
readonly dim: number;
|
|
37
|
+
private apiKey;
|
|
38
|
+
private baseUrl;
|
|
39
|
+
private concurrency;
|
|
40
|
+
private running;
|
|
41
|
+
constructor(config: EmbedderConfig);
|
|
42
|
+
embed(texts: string[]): Promise<Float32Array[]>;
|
|
43
|
+
private embedBatch;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Create embedder from config
|
|
47
|
+
*/
|
|
48
|
+
export declare function createEmbedder(config: EmbedderConfig): Embedder;
|
|
49
|
+
//# sourceMappingURL=embedder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedder.d.ts","sourceRoot":"","sources":["../../src/embedding/embedder.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,qBAAa,cAAe,YAAW,QAAQ;IAC7C,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,SAAgB,GAAG,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,KAAK,CAAkC;IAC/C,OAAO,CAAC,OAAO,CAAK;gBAER,MAAM,EAAE,cAAc;IAO5B,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;YAevC,QAAQ;CAoCvB;AAED;;GAEG;AACH,qBAAa,cAAe,YAAW,QAAQ;IAC7C,SAAgB,KAAK,EAAE,MAAM,CAAC;IAC9B,SAAgB,GAAG,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAK;gBAER,MAAM,EAAE,cAAc;IAW5B,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;YA4BvC,UAAU;CA6BzB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,QAAQ,CAS/D"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Embedding provider interface and implementations
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.OpenAIEmbedder = exports.OllamaEmbedder = void 0;
|
|
7
|
+
exports.createEmbedder = createEmbedder;
|
|
8
|
+
/**
|
|
9
|
+
* Ollama Embedder
|
|
10
|
+
*/
|
|
11
|
+
class OllamaEmbedder {
|
|
12
|
+
constructor(config) {
|
|
13
|
+
this.queue = [];
|
|
14
|
+
this.running = 0;
|
|
15
|
+
this.model = config.model;
|
|
16
|
+
this.dim = config.dim;
|
|
17
|
+
this.baseUrl = config.base_url || "http://localhost:11434";
|
|
18
|
+
this.concurrency = config.concurrency || 4;
|
|
19
|
+
}
|
|
20
|
+
async embed(texts) {
|
|
21
|
+
const results = [];
|
|
22
|
+
const promises = [];
|
|
23
|
+
for (const text of texts) {
|
|
24
|
+
const promise = this.embedOne(text).then((vector) => {
|
|
25
|
+
results.push(vector);
|
|
26
|
+
});
|
|
27
|
+
promises.push(promise);
|
|
28
|
+
}
|
|
29
|
+
await Promise.all(promises);
|
|
30
|
+
return results;
|
|
31
|
+
}
|
|
32
|
+
async embedOne(text) {
|
|
33
|
+
// Wait for available slot
|
|
34
|
+
while (this.running >= this.concurrency) {
|
|
35
|
+
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
36
|
+
}
|
|
37
|
+
this.running++;
|
|
38
|
+
try {
|
|
39
|
+
const response = await fetch(`${this.baseUrl}/api/embeddings`, {
|
|
40
|
+
method: "POST",
|
|
41
|
+
headers: {
|
|
42
|
+
"Content-Type": "application/json",
|
|
43
|
+
},
|
|
44
|
+
body: JSON.stringify({
|
|
45
|
+
model: this.model,
|
|
46
|
+
prompt: text,
|
|
47
|
+
}),
|
|
48
|
+
});
|
|
49
|
+
if (!response.ok) {
|
|
50
|
+
const error = await response.text();
|
|
51
|
+
throw new Error(`Ollama embedding error: ${response.status} ${error}`);
|
|
52
|
+
}
|
|
53
|
+
const result = await response.json();
|
|
54
|
+
const embedding = result.embedding || result.embedding || [];
|
|
55
|
+
if (!Array.isArray(embedding) || embedding.length !== this.dim) {
|
|
56
|
+
throw new Error(`Invalid embedding dimension: expected ${this.dim}, got ${embedding.length}`);
|
|
57
|
+
}
|
|
58
|
+
return new Float32Array(embedding);
|
|
59
|
+
}
|
|
60
|
+
finally {
|
|
61
|
+
this.running--;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
exports.OllamaEmbedder = OllamaEmbedder;
|
|
66
|
+
/**
|
|
67
|
+
* OpenAI Embedder
|
|
68
|
+
*/
|
|
69
|
+
class OpenAIEmbedder {
|
|
70
|
+
constructor(config) {
|
|
71
|
+
this.running = 0;
|
|
72
|
+
if (!config.api_key) {
|
|
73
|
+
throw new Error("OpenAI API key is required");
|
|
74
|
+
}
|
|
75
|
+
this.model = config.model;
|
|
76
|
+
this.dim = config.dim;
|
|
77
|
+
this.apiKey = config.api_key;
|
|
78
|
+
this.baseUrl = config.base_url || "https://api.openai.com/v1";
|
|
79
|
+
this.concurrency = config.concurrency || 4;
|
|
80
|
+
}
|
|
81
|
+
async embed(texts) {
|
|
82
|
+
const results = [];
|
|
83
|
+
const batches = [];
|
|
84
|
+
const batchSize = 100; // OpenAI allows up to 2048 inputs per request
|
|
85
|
+
// Batch texts
|
|
86
|
+
for (let i = 0; i < texts.length; i += batchSize) {
|
|
87
|
+
batches.push(texts.slice(i, i + batchSize));
|
|
88
|
+
}
|
|
89
|
+
// Process batches with concurrency control
|
|
90
|
+
for (const batch of batches) {
|
|
91
|
+
while (this.running >= this.concurrency) {
|
|
92
|
+
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
93
|
+
}
|
|
94
|
+
this.running++;
|
|
95
|
+
try {
|
|
96
|
+
const vectors = await this.embedBatch(batch);
|
|
97
|
+
results.push(...vectors);
|
|
98
|
+
}
|
|
99
|
+
finally {
|
|
100
|
+
this.running--;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return results;
|
|
104
|
+
}
|
|
105
|
+
async embedBatch(texts) {
|
|
106
|
+
const response = await fetch(`${this.baseUrl}/embeddings`, {
|
|
107
|
+
method: "POST",
|
|
108
|
+
headers: {
|
|
109
|
+
"Content-Type": "application/json",
|
|
110
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
111
|
+
},
|
|
112
|
+
body: JSON.stringify({
|
|
113
|
+
model: this.model,
|
|
114
|
+
input: texts,
|
|
115
|
+
}),
|
|
116
|
+
});
|
|
117
|
+
if (!response.ok) {
|
|
118
|
+
const error = await response.text();
|
|
119
|
+
throw new Error(`OpenAI embedding error: ${response.status} ${error}`);
|
|
120
|
+
}
|
|
121
|
+
const result = await response.json();
|
|
122
|
+
const embeddings = result.data || [];
|
|
123
|
+
return embeddings.map((item) => {
|
|
124
|
+
const embedding = item.embedding || [];
|
|
125
|
+
if (!Array.isArray(embedding) || embedding.length !== this.dim) {
|
|
126
|
+
throw new Error(`Invalid embedding dimension: expected ${this.dim}, got ${embedding.length}`);
|
|
127
|
+
}
|
|
128
|
+
return new Float32Array(embedding);
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
exports.OpenAIEmbedder = OpenAIEmbedder;
|
|
133
|
+
/**
|
|
134
|
+
* Create embedder from config
|
|
135
|
+
*/
|
|
136
|
+
function createEmbedder(config) {
|
|
137
|
+
switch (config.provider) {
|
|
138
|
+
case "ollama":
|
|
139
|
+
return new OllamaEmbedder(config);
|
|
140
|
+
case "openai":
|
|
141
|
+
return new OpenAIEmbedder(config);
|
|
142
|
+
default:
|
|
143
|
+
throw new Error(`Unsupported embedding provider: ${config.provider}`);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=embedder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embedder.js","sourceRoot":"","sources":["../../src/embedding/embedder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/embedding/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACtF,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createEmbedder = exports.OpenAIEmbedder = exports.OllamaEmbedder = void 0;
|
|
4
|
+
var embedder_1 = require("./embedder");
|
|
5
|
+
Object.defineProperty(exports, "OllamaEmbedder", { enumerable: true, get: function () { return embedder_1.OllamaEmbedder; } });
|
|
6
|
+
Object.defineProperty(exports, "OpenAIEmbedder", { enumerable: true, get: function () { return embedder_1.OpenAIEmbedder; } });
|
|
7
|
+
Object.defineProperty(exports, "createEmbedder", { enumerable: true, get: function () { return embedder_1.createEmbedder; } });
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/embedding/index.ts"],"names":[],"mappings":";;;AAAA,uCAAsF;AAAnE,0GAAA,cAAc,OAAA;AAAE,0GAAA,cAAc,OAAA;AAAE,0GAAA,cAAc,OAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deduplication - Remove similar/duplicate memories
|
|
3
|
+
*/
|
|
4
|
+
import { MemoryItem } from "../types";
|
|
5
|
+
export interface DeduplicationConfig {
|
|
6
|
+
enabled: boolean;
|
|
7
|
+
similarity_threshold: number;
|
|
8
|
+
}
|
|
9
|
+
export declare class Deduplicator {
|
|
10
|
+
private config;
|
|
11
|
+
constructor(config: DeduplicationConfig);
|
|
12
|
+
/**
|
|
13
|
+
* Simple text similarity using Jaccard similarity on words
|
|
14
|
+
* For production, consider using embeddings
|
|
15
|
+
*/
|
|
16
|
+
private similarity;
|
|
17
|
+
/**
|
|
18
|
+
* Remove duplicates from a list of memory items
|
|
19
|
+
*/
|
|
20
|
+
dedupe(items: MemoryItem[]): MemoryItem[];
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=deduplicator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deduplicator.d.ts","sourceRoot":"","sources":["../../src/gate/deduplicator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAsB;gBAExB,MAAM,EAAE,mBAAmB;IAIvC;;;OAGG;IACH,OAAO,CAAC,UAAU;IAUlB;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE;CAuD1C"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Deduplication - Remove similar/duplicate memories
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Deduplicator = void 0;
|
|
7
|
+
class Deduplicator {
|
|
8
|
+
constructor(config) {
|
|
9
|
+
this.config = config;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Simple text similarity using Jaccard similarity on words
|
|
13
|
+
* For production, consider using embeddings
|
|
14
|
+
*/
|
|
15
|
+
similarity(text1, text2) {
|
|
16
|
+
const words1 = new Set(text1.toLowerCase().split(/\s+/));
|
|
17
|
+
const words2 = new Set(text2.toLowerCase().split(/\s+/));
|
|
18
|
+
const intersection = new Set([...words1].filter(x => words2.has(x)));
|
|
19
|
+
const union = new Set([...words1, ...words2]);
|
|
20
|
+
return intersection.size / union.size;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Remove duplicates from a list of memory items
|
|
24
|
+
*/
|
|
25
|
+
dedupe(items) {
|
|
26
|
+
if (!this.config.enabled || items.length <= 1) {
|
|
27
|
+
return items;
|
|
28
|
+
}
|
|
29
|
+
const result = [];
|
|
30
|
+
const seen = new Set();
|
|
31
|
+
for (let i = 0; i < items.length; i++) {
|
|
32
|
+
if (seen.has(i)) {
|
|
33
|
+
continue;
|
|
34
|
+
}
|
|
35
|
+
const item = items[i];
|
|
36
|
+
const duplicates = [];
|
|
37
|
+
// Find similar items
|
|
38
|
+
for (let j = i + 1; j < items.length; j++) {
|
|
39
|
+
if (seen.has(j)) {
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
const other = items[j];
|
|
43
|
+
// Only dedupe items of the same type
|
|
44
|
+
if (item.type === other.type) {
|
|
45
|
+
const sim = this.similarity(item.content, other.content);
|
|
46
|
+
if (sim >= this.config.similarity_threshold) {
|
|
47
|
+
duplicates.push(j);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// Keep the item with higher confidence, or the first one
|
|
52
|
+
if (duplicates.length > 0) {
|
|
53
|
+
const allSimilar = [i, ...duplicates];
|
|
54
|
+
allSimilar.sort((a, b) => {
|
|
55
|
+
const confA = items[a].confidence || 0;
|
|
56
|
+
const confB = items[b].confidence || 0;
|
|
57
|
+
return confB - confA;
|
|
58
|
+
});
|
|
59
|
+
// Keep the best one
|
|
60
|
+
result.push(items[allSimilar[0]]);
|
|
61
|
+
// Mark others as seen
|
|
62
|
+
for (let idx of allSimilar.slice(1)) {
|
|
63
|
+
seen.add(idx);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
result.push(item);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return result;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
exports.Deduplicator = Deduplicator;
|
|
74
|
+
//# sourceMappingURL=deduplicator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deduplicator.js","sourceRoot":"","sources":["../../src/gate/deduplicator.ts"],"names":[],"mappings":"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"}
|