@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,139 @@
|
|
|
1
|
+
import { logger } from '../utils/logger.js';
|
|
2
|
+
import { EmbeddingService } from './EmbeddingService.js';
|
|
3
|
+
/**
|
|
4
|
+
* Default embedding service implementation that generates random vectors.
|
|
5
|
+
* This is a fallback service for testing and development environments
|
|
6
|
+
* where an external API provider is not available.
|
|
7
|
+
*/
|
|
8
|
+
export class DefaultEmbeddingService extends EmbeddingService {
|
|
9
|
+
/**
|
|
10
|
+
* Create a new default embedding service instance
|
|
11
|
+
*
|
|
12
|
+
* @param config - Configuration options or dimensions
|
|
13
|
+
* @param modelName - Name to use for the model (legacy parameter)
|
|
14
|
+
* @param modelVersion - Version to use for the model (legacy parameter)
|
|
15
|
+
*/
|
|
16
|
+
constructor(config = 1536, // Default to OpenAI's dimensions for better test compatibility
|
|
17
|
+
modelName = 'memento-mcp-mock', modelVersion = '1.0.0') {
|
|
18
|
+
super();
|
|
19
|
+
// Handle both object config and legacy number dimensions
|
|
20
|
+
if (typeof config === 'number') {
|
|
21
|
+
this.dimensions = config;
|
|
22
|
+
this.modelName = modelName;
|
|
23
|
+
this.modelVersion = modelVersion;
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
// For mock mode, default to OpenAI-compatible dimensions if not specified
|
|
27
|
+
const isMockMode = process.env.MOCK_EMBEDDINGS === 'true';
|
|
28
|
+
const defaultDimensions = isMockMode ? 1536 : 384;
|
|
29
|
+
this.dimensions = config.dimensions || defaultDimensions;
|
|
30
|
+
this.modelName = config.model || (isMockMode ? 'text-embedding-3-small-mock' : modelName);
|
|
31
|
+
this.modelVersion = config.version?.toString() || modelVersion;
|
|
32
|
+
}
|
|
33
|
+
if (process.env.MOCK_EMBEDDINGS === 'true') {
|
|
34
|
+
logger.info(`Using DefaultEmbeddingService in mock mode with dimensions: ${this.dimensions}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Generate an embedding vector for text
|
|
39
|
+
*
|
|
40
|
+
* @param text - Text to generate embedding for
|
|
41
|
+
* @returns Promise resolving to a vector as Array
|
|
42
|
+
*/
|
|
43
|
+
async generateEmbedding(text) {
|
|
44
|
+
// Generate deterministic embedding based on text
|
|
45
|
+
// This keeps the same input text producing the same output vector
|
|
46
|
+
const seed = this._hashString(text);
|
|
47
|
+
// Create an array of the specified dimensions
|
|
48
|
+
const vector = new Array(this.dimensions);
|
|
49
|
+
// Fill with seeded random values
|
|
50
|
+
for (let i = 0; i < this.dimensions; i++) {
|
|
51
|
+
// Use a simple deterministic algorithm based on seed and position
|
|
52
|
+
vector[i] = this._seededRandom(seed + i);
|
|
53
|
+
}
|
|
54
|
+
// Normalize the vector to unit length
|
|
55
|
+
this._normalizeVector(vector);
|
|
56
|
+
return vector;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Generate embedding vectors for multiple texts
|
|
60
|
+
*
|
|
61
|
+
* @param texts - Array of texts to generate embeddings for
|
|
62
|
+
* @returns Promise resolving to array of embedding vectors
|
|
63
|
+
*/
|
|
64
|
+
async generateEmbeddings(texts) {
|
|
65
|
+
// Generate embeddings for each text in parallel
|
|
66
|
+
const embeddings = [];
|
|
67
|
+
for (const text of texts) {
|
|
68
|
+
embeddings.push(await this.generateEmbedding(text));
|
|
69
|
+
}
|
|
70
|
+
return embeddings;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Get information about the embedding model
|
|
74
|
+
*
|
|
75
|
+
* @returns Model information
|
|
76
|
+
*/
|
|
77
|
+
getModelInfo() {
|
|
78
|
+
return {
|
|
79
|
+
name: this.modelName,
|
|
80
|
+
dimensions: this.dimensions,
|
|
81
|
+
version: this.modelVersion,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Generate a simple hash from a string for deterministic random generation
|
|
86
|
+
*
|
|
87
|
+
* @private
|
|
88
|
+
* @param text - Input text to hash
|
|
89
|
+
* @returns Numeric hash value
|
|
90
|
+
*/
|
|
91
|
+
_hashString(text) {
|
|
92
|
+
let hash = 0;
|
|
93
|
+
if (text.length === 0)
|
|
94
|
+
return hash;
|
|
95
|
+
for (let i = 0; i < text.length; i++) {
|
|
96
|
+
const char = text.charCodeAt(i);
|
|
97
|
+
hash = (hash << 5) - hash + char;
|
|
98
|
+
hash = hash & hash; // Convert to 32bit integer
|
|
99
|
+
}
|
|
100
|
+
return hash;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Seeded random number generator
|
|
104
|
+
*
|
|
105
|
+
* @private
|
|
106
|
+
* @param seed - Seed value
|
|
107
|
+
* @returns Random value between 0 and 1
|
|
108
|
+
*/
|
|
109
|
+
_seededRandom(seed) {
|
|
110
|
+
const x = Math.sin(seed) * 10000;
|
|
111
|
+
return x - Math.floor(x);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Normalize a vector to unit length
|
|
115
|
+
*
|
|
116
|
+
* @private
|
|
117
|
+
* @param vector - Vector to normalize
|
|
118
|
+
*/
|
|
119
|
+
_normalizeVector(vector) {
|
|
120
|
+
// Calculate magnitude (Euclidean norm)
|
|
121
|
+
let magnitude = 0;
|
|
122
|
+
for (let i = 0; i < vector.length; i++) {
|
|
123
|
+
magnitude += vector[i] * vector[i];
|
|
124
|
+
}
|
|
125
|
+
magnitude = Math.sqrt(magnitude);
|
|
126
|
+
// Avoid division by zero
|
|
127
|
+
if (magnitude > 0) {
|
|
128
|
+
// Normalize each component
|
|
129
|
+
for (let i = 0; i < vector.length; i++) {
|
|
130
|
+
vector[i] /= magnitude;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
// If magnitude is 0, set first element to 1 for a valid unit vector
|
|
135
|
+
vector[0] = 1;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=DefaultEmbeddingService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DefaultEmbeddingService.js","sourceRoot":"","sources":["../../src/embeddings/DefaultEmbeddingService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
import { LRUCache } from 'lru-cache';
|
|
2
|
+
import type { StorageProvider } from '../storage/StorageProvider.js';
|
|
3
|
+
import type { EmbeddingService } from './EmbeddingService.js';
|
|
4
|
+
import type { Entity } from '../KnowledgeGraphManager.js';
|
|
5
|
+
import type { EntityEmbedding } from '../types/entity-embedding.js';
|
|
6
|
+
/**
|
|
7
|
+
* Interface for embedding cache options
|
|
8
|
+
*/
|
|
9
|
+
interface CacheOptions {
|
|
10
|
+
size: number;
|
|
11
|
+
ttl: number;
|
|
12
|
+
maxItems?: number;
|
|
13
|
+
ttlHours?: number;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Interface for rate limiting options
|
|
17
|
+
*/
|
|
18
|
+
interface RateLimiterOptions {
|
|
19
|
+
tokensPerInterval: number;
|
|
20
|
+
interval: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Interface for job processing results
|
|
24
|
+
*/
|
|
25
|
+
interface JobProcessResults {
|
|
26
|
+
processed: number;
|
|
27
|
+
successful: number;
|
|
28
|
+
failed: number;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Interface for the rate limiter status
|
|
32
|
+
*/
|
|
33
|
+
interface RateLimiterStatus {
|
|
34
|
+
availableTokens: number;
|
|
35
|
+
maxTokens: number;
|
|
36
|
+
resetInMs: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Interface for a cached embedding entry
|
|
40
|
+
*/
|
|
41
|
+
interface CachedEmbedding {
|
|
42
|
+
embedding: number[];
|
|
43
|
+
timestamp: number;
|
|
44
|
+
model: string;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Interface for a logger
|
|
48
|
+
*/
|
|
49
|
+
interface Logger {
|
|
50
|
+
debug: (message: string, meta?: Record<string, unknown>) => void;
|
|
51
|
+
info: (message: string, meta?: Record<string, unknown>) => void;
|
|
52
|
+
warn: (message: string, meta?: Record<string, unknown>) => void;
|
|
53
|
+
error: (message: string, meta?: Record<string, unknown>) => void;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Interface for embedding storage provider, extending the base provider
|
|
57
|
+
*/
|
|
58
|
+
interface EmbeddingStorageProvider extends StorageProvider {
|
|
59
|
+
/**
|
|
60
|
+
* Access to the underlying database
|
|
61
|
+
*/
|
|
62
|
+
db: any;
|
|
63
|
+
/**
|
|
64
|
+
* Get an entity by name
|
|
65
|
+
*/
|
|
66
|
+
getEntity(entityName: string): Promise<Entity | null>;
|
|
67
|
+
/**
|
|
68
|
+
* Store an entity vector embedding
|
|
69
|
+
*/
|
|
70
|
+
storeEntityVector(entityName: string, embedding: EntityEmbedding): Promise<void>;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Return structure for queue status
|
|
74
|
+
*/
|
|
75
|
+
interface QueueStatus {
|
|
76
|
+
pending: number;
|
|
77
|
+
processing: number;
|
|
78
|
+
completed: number;
|
|
79
|
+
failed: number;
|
|
80
|
+
totalJobs: number;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Manages embedding jobs for semantic search
|
|
84
|
+
*/
|
|
85
|
+
export declare class EmbeddingJobManager {
|
|
86
|
+
private storageProvider;
|
|
87
|
+
private embeddingService;
|
|
88
|
+
rateLimiter: {
|
|
89
|
+
tokens: number;
|
|
90
|
+
lastRefill: number;
|
|
91
|
+
tokensPerInterval: number;
|
|
92
|
+
interval: number;
|
|
93
|
+
};
|
|
94
|
+
cache: LRUCache<string, CachedEmbedding>;
|
|
95
|
+
private cacheOptions;
|
|
96
|
+
private logger;
|
|
97
|
+
/**
|
|
98
|
+
* Creates a new embedding job manager
|
|
99
|
+
*
|
|
100
|
+
* @param storageProvider - Provider for entity storage
|
|
101
|
+
* @param embeddingService - Service to generate embeddings
|
|
102
|
+
* @param rateLimiterOptions - Optional configuration for rate limiting
|
|
103
|
+
* @param cacheOptions - Optional configuration for caching
|
|
104
|
+
* @param logger - Optional logger for operation logging
|
|
105
|
+
*/
|
|
106
|
+
constructor(storageProvider: EmbeddingStorageProvider, embeddingService: EmbeddingService, rateLimiterOptions?: RateLimiterOptions | null, cacheOptions?: CacheOptions | null, logger?: Logger | null);
|
|
107
|
+
/**
|
|
108
|
+
* Initialize the database schema for embedding jobs
|
|
109
|
+
*
|
|
110
|
+
* @private
|
|
111
|
+
*/
|
|
112
|
+
private _initializeDatabase;
|
|
113
|
+
/**
|
|
114
|
+
* Schedule an entity for embedding generation
|
|
115
|
+
*
|
|
116
|
+
* @param entityName - Name of the entity to generate embedding for
|
|
117
|
+
* @param priority - Optional priority (higher priority jobs are processed first)
|
|
118
|
+
* @returns Job ID
|
|
119
|
+
*/
|
|
120
|
+
scheduleEntityEmbedding(entityName: string, priority?: number): Promise<string>;
|
|
121
|
+
/**
|
|
122
|
+
* Process a batch of pending embedding jobs
|
|
123
|
+
*
|
|
124
|
+
* @param batchSize - Maximum number of jobs to process
|
|
125
|
+
* @returns Result statistics
|
|
126
|
+
*/
|
|
127
|
+
processJobs(batchSize?: number): Promise<JobProcessResults>;
|
|
128
|
+
/**
|
|
129
|
+
* Get the current status of the job queue
|
|
130
|
+
*
|
|
131
|
+
* @returns Queue statistics
|
|
132
|
+
*/
|
|
133
|
+
getQueueStatus(): Promise<QueueStatus>;
|
|
134
|
+
/**
|
|
135
|
+
* Retry failed embedding jobs
|
|
136
|
+
*
|
|
137
|
+
* @returns Number of jobs reset for retry
|
|
138
|
+
*/
|
|
139
|
+
retryFailedJobs(): Promise<number>;
|
|
140
|
+
/**
|
|
141
|
+
* Clean up old completed jobs
|
|
142
|
+
*
|
|
143
|
+
* @param threshold - Age in milliseconds after which to delete completed jobs, defaults to 7 days
|
|
144
|
+
* @returns Number of jobs cleaned up
|
|
145
|
+
*/
|
|
146
|
+
cleanupJobs(threshold?: number): Promise<number>;
|
|
147
|
+
/**
|
|
148
|
+
* Update a job's status in the database
|
|
149
|
+
*
|
|
150
|
+
* @private
|
|
151
|
+
* @param jobId - ID of the job to update
|
|
152
|
+
* @param status - New status
|
|
153
|
+
* @param attempts - Optional attempts count update
|
|
154
|
+
* @param error - Optional error message
|
|
155
|
+
* @returns Database result
|
|
156
|
+
*/
|
|
157
|
+
private _updateJobStatus;
|
|
158
|
+
/**
|
|
159
|
+
* Check rate limiter and consume a token if available
|
|
160
|
+
*
|
|
161
|
+
* @private
|
|
162
|
+
* @returns Object with success flag
|
|
163
|
+
*/
|
|
164
|
+
_checkRateLimiter(): {
|
|
165
|
+
success: boolean;
|
|
166
|
+
};
|
|
167
|
+
/**
|
|
168
|
+
* Get the current status of the rate limiter
|
|
169
|
+
*
|
|
170
|
+
* @returns Rate limiter status information
|
|
171
|
+
*/
|
|
172
|
+
getRateLimiterStatus(): RateLimiterStatus;
|
|
173
|
+
/**
|
|
174
|
+
* Retrieve a cached embedding or generate a new one
|
|
175
|
+
*
|
|
176
|
+
* @param text - Text to generate embedding for
|
|
177
|
+
* @returns Embedding vector
|
|
178
|
+
*/
|
|
179
|
+
_getCachedEmbeddingOrGenerate(text: string): Promise<number[]>;
|
|
180
|
+
/**
|
|
181
|
+
* Store an embedding in the cache
|
|
182
|
+
*
|
|
183
|
+
* @private
|
|
184
|
+
* @param text - Original text
|
|
185
|
+
* @param embedding - Embedding vector
|
|
186
|
+
*/
|
|
187
|
+
private _cacheEmbedding;
|
|
188
|
+
/**
|
|
189
|
+
* Generate a deterministic cache key for text
|
|
190
|
+
*
|
|
191
|
+
* @private
|
|
192
|
+
* @param text - Text to hash
|
|
193
|
+
* @returns Cache key
|
|
194
|
+
*/
|
|
195
|
+
_generateCacheKey(text: string): string;
|
|
196
|
+
/**
|
|
197
|
+
* Prepare text for embedding from an entity
|
|
198
|
+
*
|
|
199
|
+
* @private
|
|
200
|
+
* @param entity - Entity to prepare text from
|
|
201
|
+
* @returns Processed text ready for embedding
|
|
202
|
+
*/
|
|
203
|
+
private _prepareEntityText;
|
|
204
|
+
/**
|
|
205
|
+
* Get a cached embedding entry (used for testing)
|
|
206
|
+
*
|
|
207
|
+
* @param key - Cache key
|
|
208
|
+
* @returns Cached embedding or undefined
|
|
209
|
+
*/
|
|
210
|
+
getCacheEntry(key: string): CachedEmbedding | undefined;
|
|
211
|
+
}
|
|
212
|
+
export {};
|