@henrychong-ai/mcp-neo4j-knowledge-graph 1.0.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 +718 -0
- package/dist/KnowledgeGraphManager.d.ts +215 -0
- package/dist/KnowledgeGraphManager.js +910 -0
- package/dist/KnowledgeGraphManager.js.map +1 -0
- package/dist/callToolHandler.d.ts +5 -0
- package/dist/callToolHandler.js +26 -0
- package/dist/callToolHandler.js.map +1 -0
- package/dist/cli/neo4j-setup.d.ts +52 -0
- package/dist/cli/neo4j-setup.js +258 -0
- package/dist/cli/neo4j-setup.js.map +1 -0
- package/dist/config/paths.d.ts +13 -0
- package/dist/config/paths.js +41 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/config/storage.d.ts +35 -0
- package/dist/config/storage.js +52 -0
- package/dist/config/storage.js.map +1 -0
- package/dist/embeddings/DefaultEmbeddingService.d.ts +64 -0
- package/dist/embeddings/DefaultEmbeddingService.js +139 -0
- package/dist/embeddings/DefaultEmbeddingService.js.map +1 -0
- package/dist/embeddings/EmbeddingJobManager.d.ts +212 -0
- package/dist/embeddings/EmbeddingJobManager.js +545 -0
- package/dist/embeddings/EmbeddingJobManager.js.map +1 -0
- package/dist/embeddings/EmbeddingService.d.ts +96 -0
- package/dist/embeddings/EmbeddingService.js +44 -0
- package/dist/embeddings/EmbeddingService.js.map +1 -0
- package/dist/embeddings/EmbeddingServiceFactory.d.ts +72 -0
- package/dist/embeddings/EmbeddingServiceFactory.js +147 -0
- package/dist/embeddings/EmbeddingServiceFactory.js.map +1 -0
- package/dist/embeddings/OpenAIEmbeddingService.d.ts +73 -0
- package/dist/embeddings/OpenAIEmbeddingService.js +195 -0
- package/dist/embeddings/OpenAIEmbeddingService.js.map +1 -0
- package/dist/embeddings/config.d.ts +83 -0
- package/dist/embeddings/config.js +65 -0
- package/dist/embeddings/config.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +220 -0
- package/dist/index.js.map +1 -0
- package/dist/server/handlers/callToolHandler.d.ts +20 -0
- package/dist/server/handlers/callToolHandler.js +505 -0
- package/dist/server/handlers/callToolHandler.js.map +1 -0
- package/dist/server/handlers/listToolsHandler.d.ts +7 -0
- package/dist/server/handlers/listToolsHandler.js +511 -0
- package/dist/server/handlers/listToolsHandler.js.map +1 -0
- package/dist/server/handlers/toolHandlers/addObservations.d.ts +12 -0
- package/dist/server/handlers/toolHandlers/addObservations.js +99 -0
- package/dist/server/handlers/toolHandlers/addObservations.js.map +1 -0
- package/dist/server/handlers/toolHandlers/createEntities.d.ts +12 -0
- package/dist/server/handlers/toolHandlers/createEntities.js +20 -0
- package/dist/server/handlers/toolHandlers/createEntities.js.map +1 -0
- package/dist/server/handlers/toolHandlers/createRelations.d.ts +12 -0
- package/dist/server/handlers/toolHandlers/createRelations.js +20 -0
- package/dist/server/handlers/toolHandlers/createRelations.js.map +1 -0
- package/dist/server/handlers/toolHandlers/deleteEntities.d.ts +12 -0
- package/dist/server/handlers/toolHandlers/deleteEntities.js +20 -0
- package/dist/server/handlers/toolHandlers/deleteEntities.js.map +1 -0
- package/dist/server/handlers/toolHandlers/index.d.ts +8 -0
- package/dist/server/handlers/toolHandlers/index.js +9 -0
- package/dist/server/handlers/toolHandlers/index.js.map +1 -0
- package/dist/server/handlers/toolHandlers/readGraph.d.ts +12 -0
- package/dist/server/handlers/toolHandlers/readGraph.js +20 -0
- package/dist/server/handlers/toolHandlers/readGraph.js.map +1 -0
- package/dist/server/setup.d.ts +8 -0
- package/dist/server/setup.js +48 -0
- package/dist/server/setup.js.map +1 -0
- package/dist/storage/FileStorageProvider.d.ts +125 -0
- package/dist/storage/FileStorageProvider.js +322 -0
- package/dist/storage/FileStorageProvider.js.map +1 -0
- package/dist/storage/SearchResultCache.d.ts +102 -0
- package/dist/storage/SearchResultCache.js +258 -0
- package/dist/storage/SearchResultCache.js.map +1 -0
- package/dist/storage/StorageProvider.d.ts +171 -0
- package/dist/storage/StorageProvider.js +46 -0
- package/dist/storage/StorageProvider.js.map +1 -0
- package/dist/storage/StorageProviderFactory.d.ts +63 -0
- package/dist/storage/StorageProviderFactory.js +113 -0
- package/dist/storage/StorageProviderFactory.js.map +1 -0
- package/dist/storage/VectorStoreFactory.d.ts +43 -0
- package/dist/storage/VectorStoreFactory.js +41 -0
- package/dist/storage/VectorStoreFactory.js.map +1 -0
- package/dist/storage/neo4j/Neo4jConfig.d.ts +37 -0
- package/dist/storage/neo4j/Neo4jConfig.js +13 -0
- package/dist/storage/neo4j/Neo4jConfig.js.map +1 -0
- package/dist/storage/neo4j/Neo4jConnectionManager.d.ts +40 -0
- package/dist/storage/neo4j/Neo4jConnectionManager.js +58 -0
- package/dist/storage/neo4j/Neo4jConnectionManager.js.map +1 -0
- package/dist/storage/neo4j/Neo4jSchemaManager.d.ts +74 -0
- package/dist/storage/neo4j/Neo4jSchemaManager.js +224 -0
- package/dist/storage/neo4j/Neo4jSchemaManager.js.map +1 -0
- package/dist/storage/neo4j/Neo4jStorageProvider.d.ts +225 -0
- package/dist/storage/neo4j/Neo4jStorageProvider.js +1900 -0
- package/dist/storage/neo4j/Neo4jStorageProvider.js.map +1 -0
- package/dist/storage/neo4j/Neo4jVectorStore.d.ts +80 -0
- package/dist/storage/neo4j/Neo4jVectorStore.js +396 -0
- package/dist/storage/neo4j/Neo4jVectorStore.js.map +1 -0
- package/dist/types/entity-embedding.d.ts +156 -0
- package/dist/types/entity-embedding.js +2 -0
- package/dist/types/entity-embedding.js.map +1 -0
- package/dist/types/relation.d.ts +77 -0
- package/dist/types/relation.js +93 -0
- package/dist/types/relation.js.map +1 -0
- package/dist/types/temporalEntity.d.ts +55 -0
- package/dist/types/temporalEntity.js +66 -0
- package/dist/types/temporalEntity.js.map +1 -0
- package/dist/types/temporalRelation.d.ts +60 -0
- package/dist/types/temporalRelation.js +89 -0
- package/dist/types/temporalRelation.js.map +1 -0
- package/dist/types/vector-index.d.ts +48 -0
- package/dist/types/vector-index.js +2 -0
- package/dist/types/vector-index.js.map +1 -0
- package/dist/types/vector-store.d.ts +16 -0
- package/dist/types/vector-store.js +2 -0
- package/dist/types/vector-store.js.map +1 -0
- package/dist/utils/fs.d.ts +2 -0
- package/dist/utils/fs.js +3 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/logger.d.ts +10 -0
- package/dist/utils/logger.js +35 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +85 -0
|
@@ -0,0 +1,545 @@
|
|
|
1
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
2
|
+
import { LRUCache } from 'lru-cache';
|
|
3
|
+
import crypto from 'crypto';
|
|
4
|
+
/**
|
|
5
|
+
* Default logger implementation
|
|
6
|
+
*/
|
|
7
|
+
const nullLogger = {
|
|
8
|
+
debug: () => { },
|
|
9
|
+
info: () => { },
|
|
10
|
+
warn: () => { },
|
|
11
|
+
error: () => { },
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Manages embedding jobs for semantic search
|
|
15
|
+
*/
|
|
16
|
+
export class EmbeddingJobManager {
|
|
17
|
+
/**
|
|
18
|
+
* Creates a new embedding job manager
|
|
19
|
+
*
|
|
20
|
+
* @param storageProvider - Provider for entity storage
|
|
21
|
+
* @param embeddingService - Service to generate embeddings
|
|
22
|
+
* @param rateLimiterOptions - Optional configuration for rate limiting
|
|
23
|
+
* @param cacheOptions - Optional configuration for caching
|
|
24
|
+
* @param logger - Optional logger for operation logging
|
|
25
|
+
*/
|
|
26
|
+
constructor(storageProvider, embeddingService, rateLimiterOptions, cacheOptions, logger) {
|
|
27
|
+
this.cacheOptions = { size: 1000, ttl: 3600000 };
|
|
28
|
+
this.storageProvider = storageProvider;
|
|
29
|
+
this.embeddingService = embeddingService;
|
|
30
|
+
this.logger = logger || nullLogger;
|
|
31
|
+
// Setup rate limiter with defaults
|
|
32
|
+
const defaultRateLimiter = {
|
|
33
|
+
tokensPerInterval: 60,
|
|
34
|
+
interval: 60 * 1000,
|
|
35
|
+
};
|
|
36
|
+
const rateOptions = rateLimiterOptions || defaultRateLimiter;
|
|
37
|
+
this.rateLimiter = {
|
|
38
|
+
tokens: rateOptions.tokensPerInterval,
|
|
39
|
+
lastRefill: Date.now(),
|
|
40
|
+
tokensPerInterval: rateOptions.tokensPerInterval,
|
|
41
|
+
interval: rateOptions.interval,
|
|
42
|
+
};
|
|
43
|
+
// Setup LRU cache
|
|
44
|
+
if (cacheOptions) {
|
|
45
|
+
// Support both API styles (tests use maxItems/ttlHours)
|
|
46
|
+
this.cacheOptions = {
|
|
47
|
+
size: cacheOptions.size || cacheOptions.maxItems || 1000,
|
|
48
|
+
ttl: cacheOptions.ttl ||
|
|
49
|
+
(cacheOptions.ttlHours ? Math.round(cacheOptions.ttlHours * 60 * 60 * 1000) : 3600000),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
this.cache = new LRUCache({
|
|
53
|
+
max: this.cacheOptions.size,
|
|
54
|
+
ttl: Math.max(1, Math.round(this.cacheOptions.ttl)),
|
|
55
|
+
updateAgeOnGet: true,
|
|
56
|
+
allowStale: false,
|
|
57
|
+
// Use a ttlAutopurge option to ensure items are purged when TTL expires
|
|
58
|
+
ttlAutopurge: true,
|
|
59
|
+
});
|
|
60
|
+
// Initialize database schema
|
|
61
|
+
this._initializeDatabase();
|
|
62
|
+
this.logger.info('EmbeddingJobManager initialized', {
|
|
63
|
+
cacheSize: this.cacheOptions.size,
|
|
64
|
+
cacheTtl: this.cacheOptions.ttl,
|
|
65
|
+
rateLimit: `${this.rateLimiter.tokensPerInterval} per ${this.rateLimiter.interval}ms`,
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Initialize the database schema for embedding jobs
|
|
70
|
+
*
|
|
71
|
+
* @private
|
|
72
|
+
*/
|
|
73
|
+
_initializeDatabase() {
|
|
74
|
+
const createTableSql = `
|
|
75
|
+
CREATE TABLE IF NOT EXISTS embedding_jobs (
|
|
76
|
+
id TEXT PRIMARY KEY,
|
|
77
|
+
entity_name TEXT NOT NULL,
|
|
78
|
+
status TEXT NOT NULL,
|
|
79
|
+
priority INTEGER NOT NULL DEFAULT 1,
|
|
80
|
+
created_at INTEGER NOT NULL,
|
|
81
|
+
processed_at INTEGER,
|
|
82
|
+
error TEXT,
|
|
83
|
+
attempts INTEGER NOT NULL DEFAULT 0,
|
|
84
|
+
max_attempts INTEGER NOT NULL DEFAULT 3
|
|
85
|
+
)
|
|
86
|
+
`;
|
|
87
|
+
// Create an index for efficient job retrieval
|
|
88
|
+
const createIndexSql = `
|
|
89
|
+
CREATE INDEX IF NOT EXISTS idx_embedding_jobs_status_priority
|
|
90
|
+
ON embedding_jobs (status, priority DESC)
|
|
91
|
+
`;
|
|
92
|
+
try {
|
|
93
|
+
this.storageProvider.db.exec(createTableSql);
|
|
94
|
+
this.storageProvider.db.exec(createIndexSql);
|
|
95
|
+
this.logger.debug('Database schema initialized for embedding jobs');
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
this.logger.error('Failed to initialize database schema', { error });
|
|
99
|
+
throw error;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Schedule an entity for embedding generation
|
|
104
|
+
*
|
|
105
|
+
* @param entityName - Name of the entity to generate embedding for
|
|
106
|
+
* @param priority - Optional priority (higher priority jobs are processed first)
|
|
107
|
+
* @returns Job ID
|
|
108
|
+
*/
|
|
109
|
+
async scheduleEntityEmbedding(entityName, priority = 1) {
|
|
110
|
+
// Verify entity exists
|
|
111
|
+
const entity = await this.storageProvider.getEntity(entityName);
|
|
112
|
+
if (!entity) {
|
|
113
|
+
const error = `Entity ${entityName} not found`;
|
|
114
|
+
this.logger.error('Failed to schedule embedding', { entityName, error });
|
|
115
|
+
throw new Error(error);
|
|
116
|
+
}
|
|
117
|
+
// Create a job ID
|
|
118
|
+
const jobId = uuidv4();
|
|
119
|
+
// Insert a new job record
|
|
120
|
+
const stmt = this.storageProvider.db.prepare(`
|
|
121
|
+
INSERT INTO embedding_jobs (
|
|
122
|
+
id, entity_name, status, priority, created_at, attempts, max_attempts
|
|
123
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?)
|
|
124
|
+
`);
|
|
125
|
+
stmt.run(jobId, entityName, 'pending', priority, Date.now(), 0, 3);
|
|
126
|
+
this.logger.info('Scheduled embedding job', {
|
|
127
|
+
jobId,
|
|
128
|
+
entityName,
|
|
129
|
+
priority,
|
|
130
|
+
});
|
|
131
|
+
return jobId;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Process a batch of pending embedding jobs
|
|
135
|
+
*
|
|
136
|
+
* @param batchSize - Maximum number of jobs to process
|
|
137
|
+
* @returns Result statistics
|
|
138
|
+
*/
|
|
139
|
+
async processJobs(batchSize = 10) {
|
|
140
|
+
this.logger.info('Starting job processing', { batchSize });
|
|
141
|
+
// Get pending jobs, ordered by priority (highest first)
|
|
142
|
+
const stmt = this.storageProvider.db.prepare(`
|
|
143
|
+
SELECT * FROM embedding_jobs
|
|
144
|
+
WHERE status = 'pending'
|
|
145
|
+
ORDER BY priority DESC, created_at ASC
|
|
146
|
+
LIMIT ?
|
|
147
|
+
`);
|
|
148
|
+
const jobs = stmt.all(batchSize);
|
|
149
|
+
this.logger.debug('Found pending jobs', { count: jobs.length });
|
|
150
|
+
// Initialize counters
|
|
151
|
+
const result = {
|
|
152
|
+
processed: 0,
|
|
153
|
+
successful: 0,
|
|
154
|
+
failed: 0,
|
|
155
|
+
};
|
|
156
|
+
// Process each job
|
|
157
|
+
for (const job of jobs) {
|
|
158
|
+
// Check rate limiter before processing
|
|
159
|
+
const rateLimitCheck = this._checkRateLimiter();
|
|
160
|
+
if (!rateLimitCheck.success) {
|
|
161
|
+
this.logger.warn('Rate limit reached, pausing job processing', {
|
|
162
|
+
remaining: jobs.length - result.processed,
|
|
163
|
+
});
|
|
164
|
+
break; // Stop processing jobs if rate limit is reached
|
|
165
|
+
}
|
|
166
|
+
this.logger.info('Processing embedding job', {
|
|
167
|
+
jobId: job.id,
|
|
168
|
+
entityName: job.entity_name,
|
|
169
|
+
attempt: job.attempts + 1,
|
|
170
|
+
maxAttempts: job.max_attempts,
|
|
171
|
+
});
|
|
172
|
+
// Update job status to processing
|
|
173
|
+
this._updateJobStatus(job.id, 'processing', job.attempts + 1);
|
|
174
|
+
try {
|
|
175
|
+
// Get the entity
|
|
176
|
+
const entity = await this.storageProvider.getEntity(job.entity_name);
|
|
177
|
+
if (!entity) {
|
|
178
|
+
throw new Error(`Entity ${job.entity_name} not found`);
|
|
179
|
+
}
|
|
180
|
+
// Log entity details for debugging
|
|
181
|
+
this.logger.debug('Retrieved entity for embedding', {
|
|
182
|
+
entityName: job.entity_name,
|
|
183
|
+
entityType: entity.entityType,
|
|
184
|
+
hasObservations: entity.observations ? 'yes' : 'no',
|
|
185
|
+
observationsType: entity.observations ? typeof entity.observations : 'undefined',
|
|
186
|
+
observationsLength: entity.observations && Array.isArray(entity.observations)
|
|
187
|
+
? entity.observations.length
|
|
188
|
+
: 'n/a',
|
|
189
|
+
});
|
|
190
|
+
// Prepare text for embedding
|
|
191
|
+
const text = this._prepareEntityText(entity);
|
|
192
|
+
// Try to get from cache or generate new embedding
|
|
193
|
+
this.logger.debug('Generating embedding for entity', { entityName: job.entity_name });
|
|
194
|
+
const embedding = await this._getCachedEmbeddingOrGenerate(text);
|
|
195
|
+
// Get model info for embedding metadata
|
|
196
|
+
const modelInfo = this.embeddingService.getModelInfo();
|
|
197
|
+
// Store the embedding with the entity
|
|
198
|
+
this.logger.debug('Storing entity vector', {
|
|
199
|
+
entityName: job.entity_name,
|
|
200
|
+
vectorLength: embedding.length,
|
|
201
|
+
model: modelInfo.name,
|
|
202
|
+
});
|
|
203
|
+
await this.storageProvider.storeEntityVector(job.entity_name, {
|
|
204
|
+
vector: embedding,
|
|
205
|
+
model: modelInfo.name,
|
|
206
|
+
lastUpdated: Date.now(),
|
|
207
|
+
});
|
|
208
|
+
// Update job status to completed
|
|
209
|
+
this._updateJobStatus(job.id, 'completed');
|
|
210
|
+
this.logger.info('Successfully processed embedding job', {
|
|
211
|
+
jobId: job.id,
|
|
212
|
+
entityName: job.entity_name,
|
|
213
|
+
model: modelInfo.name,
|
|
214
|
+
dimensions: embedding.length,
|
|
215
|
+
});
|
|
216
|
+
result.successful++;
|
|
217
|
+
}
|
|
218
|
+
catch (error) {
|
|
219
|
+
// Handle failures
|
|
220
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
221
|
+
const errorStack = error instanceof Error ? error.stack : undefined;
|
|
222
|
+
this.logger.error('Failed to process embedding job', {
|
|
223
|
+
jobId: job.id,
|
|
224
|
+
entityName: job.entity_name,
|
|
225
|
+
error: errorMessage,
|
|
226
|
+
errorStack,
|
|
227
|
+
attempt: job.attempts + 1,
|
|
228
|
+
maxAttempts: job.max_attempts,
|
|
229
|
+
});
|
|
230
|
+
// Determine if we should mark as failed or keep for retry
|
|
231
|
+
if (job.attempts + 1 >= job.max_attempts) {
|
|
232
|
+
this._updateJobStatus(job.id, 'failed', job.attempts + 1, errorMessage);
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
this._updateJobStatus(job.id, 'pending', job.attempts + 1, errorMessage);
|
|
236
|
+
}
|
|
237
|
+
result.failed++;
|
|
238
|
+
}
|
|
239
|
+
result.processed++;
|
|
240
|
+
}
|
|
241
|
+
// Log job processing results
|
|
242
|
+
const queueStatus = await this.getQueueStatus();
|
|
243
|
+
this.logger.info('Job processing complete', {
|
|
244
|
+
processed: result.processed,
|
|
245
|
+
successful: result.successful,
|
|
246
|
+
failed: result.failed,
|
|
247
|
+
remaining: queueStatus.pending,
|
|
248
|
+
});
|
|
249
|
+
return result;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Get the current status of the job queue
|
|
253
|
+
*
|
|
254
|
+
* @returns Queue statistics
|
|
255
|
+
*/
|
|
256
|
+
async getQueueStatus() {
|
|
257
|
+
const getCountForStatus = (status) => {
|
|
258
|
+
let sql = 'SELECT COUNT(*) as count FROM embedding_jobs';
|
|
259
|
+
const params = [];
|
|
260
|
+
if (status) {
|
|
261
|
+
sql += ' WHERE status = ?';
|
|
262
|
+
params.push(status);
|
|
263
|
+
}
|
|
264
|
+
const stmt = this.storageProvider.db.prepare(sql);
|
|
265
|
+
const result = stmt.get(...params);
|
|
266
|
+
return result?.count || 0;
|
|
267
|
+
};
|
|
268
|
+
const pending = getCountForStatus('pending');
|
|
269
|
+
const processing = getCountForStatus('processing');
|
|
270
|
+
const completed = getCountForStatus('completed');
|
|
271
|
+
const failed = getCountForStatus('failed');
|
|
272
|
+
const total = getCountForStatus();
|
|
273
|
+
const result = {
|
|
274
|
+
pending,
|
|
275
|
+
processing,
|
|
276
|
+
completed,
|
|
277
|
+
failed,
|
|
278
|
+
totalJobs: total,
|
|
279
|
+
};
|
|
280
|
+
this.logger.debug('Retrieved queue status', result);
|
|
281
|
+
return result;
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Retry failed embedding jobs
|
|
285
|
+
*
|
|
286
|
+
* @returns Number of jobs reset for retry
|
|
287
|
+
*/
|
|
288
|
+
async retryFailedJobs() {
|
|
289
|
+
const stmt = this.storageProvider.db.prepare(`
|
|
290
|
+
UPDATE embedding_jobs
|
|
291
|
+
SET status = 'pending', attempts = 0
|
|
292
|
+
WHERE status = 'failed'
|
|
293
|
+
`);
|
|
294
|
+
const result = stmt.run();
|
|
295
|
+
const resetCount = result.changes || 0;
|
|
296
|
+
this.logger.info('Reset failed jobs for retry', { count: resetCount });
|
|
297
|
+
return resetCount;
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Clean up old completed jobs
|
|
301
|
+
*
|
|
302
|
+
* @param threshold - Age in milliseconds after which to delete completed jobs, defaults to 7 days
|
|
303
|
+
* @returns Number of jobs cleaned up
|
|
304
|
+
*/
|
|
305
|
+
async cleanupJobs(threshold) {
|
|
306
|
+
const cleanupThreshold = threshold || 7 * 24 * 60 * 60 * 1000; // Default: 7 days
|
|
307
|
+
const cutoffTime = Date.now() - cleanupThreshold;
|
|
308
|
+
const stmt = this.storageProvider.db.prepare(`
|
|
309
|
+
DELETE FROM embedding_jobs
|
|
310
|
+
WHERE status = 'completed'
|
|
311
|
+
AND processed_at < ?
|
|
312
|
+
`);
|
|
313
|
+
const result = stmt.run(cutoffTime);
|
|
314
|
+
const deletedCount = result.changes || 0;
|
|
315
|
+
this.logger.info('Cleaned up old completed jobs', {
|
|
316
|
+
count: deletedCount,
|
|
317
|
+
threshold: cleanupThreshold,
|
|
318
|
+
olderThan: new Date(cutoffTime).toISOString(),
|
|
319
|
+
});
|
|
320
|
+
return deletedCount;
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Update a job's status in the database
|
|
324
|
+
*
|
|
325
|
+
* @private
|
|
326
|
+
* @param jobId - ID of the job to update
|
|
327
|
+
* @param status - New status
|
|
328
|
+
* @param attempts - Optional attempts count update
|
|
329
|
+
* @param error - Optional error message
|
|
330
|
+
* @returns Database result
|
|
331
|
+
*/
|
|
332
|
+
_updateJobStatus(jobId, status, attempts, error) {
|
|
333
|
+
let sql = `
|
|
334
|
+
UPDATE embedding_jobs
|
|
335
|
+
SET status = ?
|
|
336
|
+
`;
|
|
337
|
+
const params = [status];
|
|
338
|
+
// Add processed_at timestamp for completed/failed statuses
|
|
339
|
+
if (status === 'completed' || status === 'failed') {
|
|
340
|
+
sql += ', processed_at = ?';
|
|
341
|
+
params.push(Date.now());
|
|
342
|
+
}
|
|
343
|
+
// Update attempts if provided
|
|
344
|
+
if (attempts !== undefined) {
|
|
345
|
+
sql += ', attempts = ?';
|
|
346
|
+
params.push(attempts);
|
|
347
|
+
}
|
|
348
|
+
// Include error message if provided
|
|
349
|
+
if (error) {
|
|
350
|
+
sql += ', error = ?';
|
|
351
|
+
params.push(error);
|
|
352
|
+
}
|
|
353
|
+
sql += ' WHERE id = ?';
|
|
354
|
+
params.push(jobId);
|
|
355
|
+
const stmt = this.storageProvider.db.prepare(sql);
|
|
356
|
+
return stmt.run(...params);
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Check rate limiter and consume a token if available
|
|
360
|
+
*
|
|
361
|
+
* @private
|
|
362
|
+
* @returns Object with success flag
|
|
363
|
+
*/
|
|
364
|
+
_checkRateLimiter() {
|
|
365
|
+
// For testing purposes, make it public by removing 'private'
|
|
366
|
+
const now = Date.now();
|
|
367
|
+
const elapsed = now - this.rateLimiter.lastRefill;
|
|
368
|
+
// If enough time has passed, refill tokens
|
|
369
|
+
if (elapsed >= this.rateLimiter.interval) {
|
|
370
|
+
// Calculate how many full intervals have passed
|
|
371
|
+
const intervals = Math.floor(elapsed / this.rateLimiter.interval);
|
|
372
|
+
// Completely refill tokens (don't accumulate beyond max)
|
|
373
|
+
this.rateLimiter.tokens = this.rateLimiter.tokensPerInterval;
|
|
374
|
+
// Update last refill time, keeping track of remaining time
|
|
375
|
+
this.rateLimiter.lastRefill = now;
|
|
376
|
+
this.logger.debug('Refilled rate limiter tokens', {
|
|
377
|
+
current: this.rateLimiter.tokens,
|
|
378
|
+
max: this.rateLimiter.tokensPerInterval,
|
|
379
|
+
intervals,
|
|
380
|
+
});
|
|
381
|
+
}
|
|
382
|
+
// If we have tokens, consume one and return success
|
|
383
|
+
if (this.rateLimiter.tokens > 0) {
|
|
384
|
+
this.rateLimiter.tokens--;
|
|
385
|
+
this.logger.debug('Consumed rate limiter token', {
|
|
386
|
+
remaining: this.rateLimiter.tokens,
|
|
387
|
+
max: this.rateLimiter.tokensPerInterval,
|
|
388
|
+
});
|
|
389
|
+
return { success: true };
|
|
390
|
+
}
|
|
391
|
+
// No tokens available
|
|
392
|
+
this.logger.warn('Rate limit exceeded', {
|
|
393
|
+
availableTokens: 0,
|
|
394
|
+
maxTokens: this.rateLimiter.tokensPerInterval,
|
|
395
|
+
nextRefillIn: this.rateLimiter.interval - (now - this.rateLimiter.lastRefill),
|
|
396
|
+
});
|
|
397
|
+
return { success: false };
|
|
398
|
+
}
|
|
399
|
+
/**
|
|
400
|
+
* Get the current status of the rate limiter
|
|
401
|
+
*
|
|
402
|
+
* @returns Rate limiter status information
|
|
403
|
+
*/
|
|
404
|
+
getRateLimiterStatus() {
|
|
405
|
+
const now = Date.now();
|
|
406
|
+
const elapsed = now - this.rateLimiter.lastRefill;
|
|
407
|
+
// If enough time has passed for a complete refill
|
|
408
|
+
if (elapsed >= this.rateLimiter.interval) {
|
|
409
|
+
return {
|
|
410
|
+
availableTokens: this.rateLimiter.tokensPerInterval,
|
|
411
|
+
maxTokens: this.rateLimiter.tokensPerInterval,
|
|
412
|
+
resetInMs: this.rateLimiter.interval,
|
|
413
|
+
};
|
|
414
|
+
}
|
|
415
|
+
// Otherwise return current state
|
|
416
|
+
return {
|
|
417
|
+
availableTokens: this.rateLimiter.tokens,
|
|
418
|
+
maxTokens: this.rateLimiter.tokensPerInterval,
|
|
419
|
+
resetInMs: this.rateLimiter.interval - elapsed,
|
|
420
|
+
};
|
|
421
|
+
}
|
|
422
|
+
/**
|
|
423
|
+
* Retrieve a cached embedding or generate a new one
|
|
424
|
+
*
|
|
425
|
+
* @param text - Text to generate embedding for
|
|
426
|
+
* @returns Embedding vector
|
|
427
|
+
*/
|
|
428
|
+
async _getCachedEmbeddingOrGenerate(text) {
|
|
429
|
+
const cacheKey = this._generateCacheKey(text);
|
|
430
|
+
// Try to get from cache first
|
|
431
|
+
const cachedValue = this.cache.get(cacheKey);
|
|
432
|
+
if (cachedValue) {
|
|
433
|
+
this.logger.debug('Cache hit', {
|
|
434
|
+
textHash: cacheKey.substring(0, 8),
|
|
435
|
+
age: Date.now() - cachedValue.timestamp,
|
|
436
|
+
});
|
|
437
|
+
return cachedValue.embedding;
|
|
438
|
+
}
|
|
439
|
+
this.logger.debug('Cache miss', { textHash: cacheKey.substring(0, 8) });
|
|
440
|
+
try {
|
|
441
|
+
// Generate new embedding
|
|
442
|
+
const embedding = await this.embeddingService.generateEmbedding(text);
|
|
443
|
+
// Store in cache
|
|
444
|
+
this._cacheEmbedding(text, embedding);
|
|
445
|
+
return embedding;
|
|
446
|
+
}
|
|
447
|
+
catch (error) {
|
|
448
|
+
this.logger.error('Failed to generate embedding', {
|
|
449
|
+
error,
|
|
450
|
+
textLength: text.length,
|
|
451
|
+
});
|
|
452
|
+
throw error;
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
/**
|
|
456
|
+
* Store an embedding in the cache
|
|
457
|
+
*
|
|
458
|
+
* @private
|
|
459
|
+
* @param text - Original text
|
|
460
|
+
* @param embedding - Embedding vector
|
|
461
|
+
*/
|
|
462
|
+
_cacheEmbedding(text, embedding) {
|
|
463
|
+
const cacheKey = this._generateCacheKey(text);
|
|
464
|
+
const modelInfo = this.embeddingService.getModelInfo();
|
|
465
|
+
this.cache.set(cacheKey, {
|
|
466
|
+
embedding,
|
|
467
|
+
timestamp: Date.now(),
|
|
468
|
+
model: modelInfo.name,
|
|
469
|
+
});
|
|
470
|
+
this.logger.debug('Cached embedding', {
|
|
471
|
+
textHash: cacheKey.substring(0, 8),
|
|
472
|
+
model: modelInfo.name,
|
|
473
|
+
dimensions: embedding.length,
|
|
474
|
+
});
|
|
475
|
+
}
|
|
476
|
+
/**
|
|
477
|
+
* Generate a deterministic cache key for text
|
|
478
|
+
*
|
|
479
|
+
* @private
|
|
480
|
+
* @param text - Text to hash
|
|
481
|
+
* @returns Cache key
|
|
482
|
+
*/
|
|
483
|
+
_generateCacheKey(text) {
|
|
484
|
+
return crypto.createHash('md5').update(text).digest('hex');
|
|
485
|
+
}
|
|
486
|
+
/**
|
|
487
|
+
* Prepare text for embedding from an entity
|
|
488
|
+
*
|
|
489
|
+
* @private
|
|
490
|
+
* @param entity - Entity to prepare text from
|
|
491
|
+
* @returns Processed text ready for embedding
|
|
492
|
+
*/
|
|
493
|
+
_prepareEntityText(entity) {
|
|
494
|
+
// Create a descriptive text from entity data
|
|
495
|
+
const lines = [`Name: ${entity.name}`, `Type: ${entity.entityType}`, 'Observations:'];
|
|
496
|
+
// Add observations, ensuring we handle both string arrays and other formats
|
|
497
|
+
if (entity.observations) {
|
|
498
|
+
// Handle case where observations might be stored as JSON string in some providers
|
|
499
|
+
let observationsArray = entity.observations;
|
|
500
|
+
// If observations is a string, try to parse it as JSON
|
|
501
|
+
if (typeof entity.observations === 'string') {
|
|
502
|
+
try {
|
|
503
|
+
observationsArray = JSON.parse(entity.observations);
|
|
504
|
+
}
|
|
505
|
+
catch {
|
|
506
|
+
// If parsing fails, treat it as a single observation
|
|
507
|
+
observationsArray = [entity.observations];
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
// Ensure it's an array at this point
|
|
511
|
+
if (!Array.isArray(observationsArray)) {
|
|
512
|
+
observationsArray = [String(observationsArray)];
|
|
513
|
+
}
|
|
514
|
+
// Add each observation to the text
|
|
515
|
+
if (observationsArray.length > 0) {
|
|
516
|
+
lines.push(...observationsArray.map((obs) => `- ${obs}`));
|
|
517
|
+
}
|
|
518
|
+
else {
|
|
519
|
+
lines.push(' (No observations)');
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
else {
|
|
523
|
+
lines.push(' (No observations)');
|
|
524
|
+
}
|
|
525
|
+
const text = lines.join('\n');
|
|
526
|
+
// Log the prepared text for debugging
|
|
527
|
+
this.logger.debug('Prepared entity text for embedding', {
|
|
528
|
+
entityName: entity.name,
|
|
529
|
+
entityType: entity.entityType,
|
|
530
|
+
observationCount: Array.isArray(entity.observations) ? entity.observations.length : 0,
|
|
531
|
+
textLength: text.length,
|
|
532
|
+
});
|
|
533
|
+
return text;
|
|
534
|
+
}
|
|
535
|
+
/**
|
|
536
|
+
* Get a cached embedding entry (used for testing)
|
|
537
|
+
*
|
|
538
|
+
* @param key - Cache key
|
|
539
|
+
* @returns Cached embedding or undefined
|
|
540
|
+
*/
|
|
541
|
+
getCacheEntry(key) {
|
|
542
|
+
return this.cache.get(key);
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
//# sourceMappingURL=EmbeddingJobManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmbeddingJobManager.js","sourceRoot":"","sources":["../../src/embeddings/EmbeddingJobManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider information for embedding services
|
|
3
|
+
*/
|
|
4
|
+
export interface EmbeddingProviderInfo {
|
|
5
|
+
/**
|
|
6
|
+
* Name of the embedding provider
|
|
7
|
+
*/
|
|
8
|
+
provider: string;
|
|
9
|
+
/**
|
|
10
|
+
* Name of the embedding model
|
|
11
|
+
*/
|
|
12
|
+
model: string;
|
|
13
|
+
/**
|
|
14
|
+
* Number of dimensions in the embedding vectors
|
|
15
|
+
*/
|
|
16
|
+
dimensions: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Model information for embedding models
|
|
20
|
+
*/
|
|
21
|
+
export interface EmbeddingModelInfo {
|
|
22
|
+
/**
|
|
23
|
+
* Name of the embedding model
|
|
24
|
+
*/
|
|
25
|
+
name: string;
|
|
26
|
+
/**
|
|
27
|
+
* Number of dimensions in the embedding vectors
|
|
28
|
+
*/
|
|
29
|
+
dimensions: number;
|
|
30
|
+
/**
|
|
31
|
+
* Version of the model
|
|
32
|
+
*/
|
|
33
|
+
version: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Interface for text embedding services
|
|
37
|
+
*/
|
|
38
|
+
export interface IEmbeddingService {
|
|
39
|
+
/**
|
|
40
|
+
* Generate embedding vector for text
|
|
41
|
+
*
|
|
42
|
+
* @param text - Text to embed
|
|
43
|
+
* @returns Embedding vector
|
|
44
|
+
*/
|
|
45
|
+
generateEmbedding(text: string): Promise<number[]>;
|
|
46
|
+
/**
|
|
47
|
+
* Generate embeddings for multiple texts
|
|
48
|
+
*
|
|
49
|
+
* @param texts - Array of texts to embed
|
|
50
|
+
* @returns Array of embedding vectors
|
|
51
|
+
*/
|
|
52
|
+
generateEmbeddings(texts: string[]): Promise<number[][]>;
|
|
53
|
+
/**
|
|
54
|
+
* Get information about the embedding model
|
|
55
|
+
*
|
|
56
|
+
* @returns Model information
|
|
57
|
+
*/
|
|
58
|
+
getModelInfo(): EmbeddingModelInfo;
|
|
59
|
+
/**
|
|
60
|
+
* Get information about the embedding provider
|
|
61
|
+
*
|
|
62
|
+
* @returns Provider information
|
|
63
|
+
*/
|
|
64
|
+
getProviderInfo(): EmbeddingProviderInfo;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Abstract class for embedding services
|
|
68
|
+
*/
|
|
69
|
+
export declare class EmbeddingService implements IEmbeddingService {
|
|
70
|
+
/**
|
|
71
|
+
* Generate embedding vector for text
|
|
72
|
+
*
|
|
73
|
+
* @param text - Text to embed
|
|
74
|
+
* @returns Embedding vector
|
|
75
|
+
*/
|
|
76
|
+
generateEmbedding(_text: string): Promise<number[]>;
|
|
77
|
+
/**
|
|
78
|
+
* Generate embeddings for multiple texts
|
|
79
|
+
*
|
|
80
|
+
* @param texts - Array of texts to embed
|
|
81
|
+
* @returns Array of embedding vectors
|
|
82
|
+
*/
|
|
83
|
+
generateEmbeddings(_texts: string[]): Promise<number[][]>;
|
|
84
|
+
/**
|
|
85
|
+
* Get information about the embedding model
|
|
86
|
+
*
|
|
87
|
+
* @returns Model information
|
|
88
|
+
*/
|
|
89
|
+
getModelInfo(): EmbeddingModelInfo;
|
|
90
|
+
/**
|
|
91
|
+
* Get information about the embedding provider
|
|
92
|
+
*
|
|
93
|
+
* @returns Provider information
|
|
94
|
+
*/
|
|
95
|
+
getProviderInfo(): EmbeddingProviderInfo;
|
|
96
|
+
}
|