@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,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Abstract class for embedding services
|
|
3
|
+
*/
|
|
4
|
+
export class EmbeddingService {
|
|
5
|
+
/**
|
|
6
|
+
* Generate embedding vector for text
|
|
7
|
+
*
|
|
8
|
+
* @param text - Text to embed
|
|
9
|
+
* @returns Embedding vector
|
|
10
|
+
*/
|
|
11
|
+
async generateEmbedding(_text) {
|
|
12
|
+
throw new Error('Method not implemented');
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Generate embeddings for multiple texts
|
|
16
|
+
*
|
|
17
|
+
* @param texts - Array of texts to embed
|
|
18
|
+
* @returns Array of embedding vectors
|
|
19
|
+
*/
|
|
20
|
+
async generateEmbeddings(_texts) {
|
|
21
|
+
throw new Error('Method not implemented');
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Get information about the embedding model
|
|
25
|
+
*
|
|
26
|
+
* @returns Model information
|
|
27
|
+
*/
|
|
28
|
+
getModelInfo() {
|
|
29
|
+
throw new Error('Method not implemented');
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get information about the embedding provider
|
|
33
|
+
*
|
|
34
|
+
* @returns Provider information
|
|
35
|
+
*/
|
|
36
|
+
getProviderInfo() {
|
|
37
|
+
return {
|
|
38
|
+
provider: 'default',
|
|
39
|
+
model: this.getModelInfo().name,
|
|
40
|
+
dimensions: this.getModelInfo().dimensions,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=EmbeddingService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmbeddingService.js","sourceRoot":"","sources":["../../src/embeddings/EmbeddingService.ts"],"names":[],"mappings":"AA2EA;;GAEG;AACH,MAAM,OAAO,gBAAgB;IAC3B;;;;;OAKG;IACH,KAAK,CAAC,iBAAiB,CAAC,KAAa;QACnC,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,kBAAkB,CAAC,MAAgB;QACvC,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IAED;;;;OAIG;IACH,YAAY;QACV,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IAED;;;;OAIG;IACH,eAAe;QACb,OAAO;YACL,QAAQ,EAAE,SAAS;YACnB,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI;YAC/B,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,UAAU;SAC3C,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import type { EmbeddingService } from './EmbeddingService.js';
|
|
2
|
+
/**
|
|
3
|
+
* Configuration options for embedding services
|
|
4
|
+
*/
|
|
5
|
+
export interface EmbeddingServiceConfig {
|
|
6
|
+
provider?: string;
|
|
7
|
+
model?: string;
|
|
8
|
+
dimensions?: number;
|
|
9
|
+
apiKey?: string;
|
|
10
|
+
[key: string]: unknown;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Type definition for embedding service provider creation function
|
|
14
|
+
*/
|
|
15
|
+
type EmbeddingServiceProvider = (config?: EmbeddingServiceConfig) => EmbeddingService;
|
|
16
|
+
/**
|
|
17
|
+
* Factory for creating embedding services
|
|
18
|
+
*/
|
|
19
|
+
export declare class EmbeddingServiceFactory {
|
|
20
|
+
/**
|
|
21
|
+
* Registry of embedding service providers
|
|
22
|
+
*/
|
|
23
|
+
private static providers;
|
|
24
|
+
/**
|
|
25
|
+
* Register a new embedding service provider
|
|
26
|
+
*
|
|
27
|
+
* @param name - Provider name
|
|
28
|
+
* @param provider - Provider factory function
|
|
29
|
+
*/
|
|
30
|
+
static registerProvider(name: string, provider: EmbeddingServiceProvider): void;
|
|
31
|
+
/**
|
|
32
|
+
* Reset the provider registry - used primarily for testing
|
|
33
|
+
*/
|
|
34
|
+
static resetRegistry(): void;
|
|
35
|
+
/**
|
|
36
|
+
* Get a list of available provider names
|
|
37
|
+
*
|
|
38
|
+
* @returns Array of provider names
|
|
39
|
+
*/
|
|
40
|
+
static getAvailableProviders(): string[];
|
|
41
|
+
/**
|
|
42
|
+
* Create a service using a registered provider
|
|
43
|
+
*
|
|
44
|
+
* @param config - Configuration options including provider name and service-specific settings
|
|
45
|
+
* @returns The created embedding service
|
|
46
|
+
* @throws Error if the provider is not registered
|
|
47
|
+
*/
|
|
48
|
+
static createService(config?: EmbeddingServiceConfig): EmbeddingService;
|
|
49
|
+
/**
|
|
50
|
+
* Create an embedding service from environment variables
|
|
51
|
+
*
|
|
52
|
+
* @returns An embedding service implementation
|
|
53
|
+
*/
|
|
54
|
+
static createFromEnvironment(): EmbeddingService;
|
|
55
|
+
/**
|
|
56
|
+
* Create an OpenAI embedding service
|
|
57
|
+
*
|
|
58
|
+
* @param apiKey - OpenAI API key
|
|
59
|
+
* @param model - Optional model name
|
|
60
|
+
* @param dimensions - Optional embedding dimensions
|
|
61
|
+
* @returns OpenAI embedding service
|
|
62
|
+
*/
|
|
63
|
+
static createOpenAIService(apiKey: string, model?: string, dimensions?: number): EmbeddingService;
|
|
64
|
+
/**
|
|
65
|
+
* Create a default embedding service that generates random vectors
|
|
66
|
+
*
|
|
67
|
+
* @param dimensions - Optional embedding dimensions
|
|
68
|
+
* @returns Default embedding service
|
|
69
|
+
*/
|
|
70
|
+
static createDefaultService(dimensions?: number): EmbeddingService;
|
|
71
|
+
}
|
|
72
|
+
export {};
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { DefaultEmbeddingService } from './DefaultEmbeddingService.js';
|
|
2
|
+
import { OpenAIEmbeddingService } from './OpenAIEmbeddingService.js';
|
|
3
|
+
import { logger } from '../utils/logger.js';
|
|
4
|
+
/**
|
|
5
|
+
* Factory for creating embedding services
|
|
6
|
+
*/
|
|
7
|
+
export class EmbeddingServiceFactory {
|
|
8
|
+
/**
|
|
9
|
+
* Register a new embedding service provider
|
|
10
|
+
*
|
|
11
|
+
* @param name - Provider name
|
|
12
|
+
* @param provider - Provider factory function
|
|
13
|
+
*/
|
|
14
|
+
static registerProvider(name, provider) {
|
|
15
|
+
EmbeddingServiceFactory.providers[name.toLowerCase()] = provider;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Reset the provider registry - used primarily for testing
|
|
19
|
+
*/
|
|
20
|
+
static resetRegistry() {
|
|
21
|
+
EmbeddingServiceFactory.providers = {};
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Get a list of available provider names
|
|
25
|
+
*
|
|
26
|
+
* @returns Array of provider names
|
|
27
|
+
*/
|
|
28
|
+
static getAvailableProviders() {
|
|
29
|
+
return Object.keys(EmbeddingServiceFactory.providers);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Create a service using a registered provider
|
|
33
|
+
*
|
|
34
|
+
* @param config - Configuration options including provider name and service-specific settings
|
|
35
|
+
* @returns The created embedding service
|
|
36
|
+
* @throws Error if the provider is not registered
|
|
37
|
+
*/
|
|
38
|
+
static createService(config = {}) {
|
|
39
|
+
const providerName = (config.provider || 'default').toLowerCase();
|
|
40
|
+
logger.debug(`EmbeddingServiceFactory: Creating service with provider "${providerName}"`);
|
|
41
|
+
const providerFn = EmbeddingServiceFactory.providers[providerName];
|
|
42
|
+
if (providerFn) {
|
|
43
|
+
try {
|
|
44
|
+
const service = providerFn(config);
|
|
45
|
+
logger.debug(`EmbeddingServiceFactory: Service created successfully with provider "${providerName}"`, {
|
|
46
|
+
modelInfo: service.getModelInfo(),
|
|
47
|
+
});
|
|
48
|
+
return service;
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
logger.error(`EmbeddingServiceFactory: Failed to create service with provider "${providerName}"`, error);
|
|
52
|
+
throw error;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// If provider not found, throw an error
|
|
56
|
+
logger.error(`EmbeddingServiceFactory: Provider "${providerName}" is not registered`);
|
|
57
|
+
throw new Error(`Provider "${providerName}" is not registered`);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Create an embedding service from environment variables
|
|
61
|
+
*
|
|
62
|
+
* @returns An embedding service implementation
|
|
63
|
+
*/
|
|
64
|
+
static createFromEnvironment() {
|
|
65
|
+
// Check if we should use mock embeddings (for testing)
|
|
66
|
+
const useMockEmbeddings = process.env.MOCK_EMBEDDINGS === 'true';
|
|
67
|
+
logger.debug('EmbeddingServiceFactory: Creating service from environment variables', {
|
|
68
|
+
mockEmbeddings: useMockEmbeddings,
|
|
69
|
+
openaiKeyPresent: !!process.env.OPENAI_API_KEY,
|
|
70
|
+
embeddingModel: process.env.OPENAI_EMBEDDING_MODEL || 'default',
|
|
71
|
+
});
|
|
72
|
+
if (useMockEmbeddings) {
|
|
73
|
+
logger.info('EmbeddingServiceFactory: Using mock embeddings for testing');
|
|
74
|
+
return new DefaultEmbeddingService();
|
|
75
|
+
}
|
|
76
|
+
const openaiApiKey = process.env.OPENAI_API_KEY;
|
|
77
|
+
const embeddingModel = process.env.OPENAI_EMBEDDING_MODEL || 'text-embedding-3-small';
|
|
78
|
+
if (openaiApiKey) {
|
|
79
|
+
try {
|
|
80
|
+
logger.debug('EmbeddingServiceFactory: Creating OpenAI embedding service', {
|
|
81
|
+
model: embeddingModel,
|
|
82
|
+
});
|
|
83
|
+
const service = new OpenAIEmbeddingService({
|
|
84
|
+
apiKey: openaiApiKey,
|
|
85
|
+
model: embeddingModel,
|
|
86
|
+
});
|
|
87
|
+
logger.info('EmbeddingServiceFactory: OpenAI embedding service created successfully', {
|
|
88
|
+
model: service.getModelInfo().name,
|
|
89
|
+
dimensions: service.getModelInfo().dimensions,
|
|
90
|
+
});
|
|
91
|
+
return service;
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
logger.error('EmbeddingServiceFactory: Failed to create OpenAI service', error);
|
|
95
|
+
logger.info('EmbeddingServiceFactory: Falling back to default embedding service');
|
|
96
|
+
// Fallback to default if OpenAI service creation fails
|
|
97
|
+
return new DefaultEmbeddingService();
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// No OpenAI API key, using default embedding service
|
|
101
|
+
logger.info('EmbeddingServiceFactory: No OpenAI API key found, using default embedding service');
|
|
102
|
+
return new DefaultEmbeddingService();
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Create an OpenAI embedding service
|
|
106
|
+
*
|
|
107
|
+
* @param apiKey - OpenAI API key
|
|
108
|
+
* @param model - Optional model name
|
|
109
|
+
* @param dimensions - Optional embedding dimensions
|
|
110
|
+
* @returns OpenAI embedding service
|
|
111
|
+
*/
|
|
112
|
+
static createOpenAIService(apiKey, model, dimensions) {
|
|
113
|
+
return new OpenAIEmbeddingService({
|
|
114
|
+
apiKey,
|
|
115
|
+
model,
|
|
116
|
+
dimensions,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Create a default embedding service that generates random vectors
|
|
121
|
+
*
|
|
122
|
+
* @param dimensions - Optional embedding dimensions
|
|
123
|
+
* @returns Default embedding service
|
|
124
|
+
*/
|
|
125
|
+
static createDefaultService(dimensions) {
|
|
126
|
+
return new DefaultEmbeddingService(dimensions);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Registry of embedding service providers
|
|
131
|
+
*/
|
|
132
|
+
EmbeddingServiceFactory.providers = {};
|
|
133
|
+
// Register built-in providers
|
|
134
|
+
EmbeddingServiceFactory.registerProvider('default', (config = {}) => {
|
|
135
|
+
return new DefaultEmbeddingService(config.dimensions);
|
|
136
|
+
});
|
|
137
|
+
EmbeddingServiceFactory.registerProvider('openai', (config = {}) => {
|
|
138
|
+
if (!config.apiKey) {
|
|
139
|
+
throw new Error('API key is required for OpenAI embedding service');
|
|
140
|
+
}
|
|
141
|
+
return new OpenAIEmbeddingService({
|
|
142
|
+
apiKey: config.apiKey,
|
|
143
|
+
model: config.model,
|
|
144
|
+
dimensions: config.dimensions,
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
//# sourceMappingURL=EmbeddingServiceFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmbeddingServiceFactory.js","sourceRoot":"","sources":["../../src/embeddings/EmbeddingServiceFactory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { EmbeddingService, type EmbeddingModelInfo } from './EmbeddingService.js';
|
|
2
|
+
/**
|
|
3
|
+
* Configuration for OpenAI embedding service
|
|
4
|
+
*/
|
|
5
|
+
export interface OpenAIEmbeddingConfig {
|
|
6
|
+
/**
|
|
7
|
+
* OpenAI API key
|
|
8
|
+
*/
|
|
9
|
+
apiKey: string;
|
|
10
|
+
/**
|
|
11
|
+
* Optional model name to use
|
|
12
|
+
*/
|
|
13
|
+
model?: string;
|
|
14
|
+
/**
|
|
15
|
+
* Optional dimensions override
|
|
16
|
+
*/
|
|
17
|
+
dimensions?: number;
|
|
18
|
+
/**
|
|
19
|
+
* Optional version string
|
|
20
|
+
*/
|
|
21
|
+
version?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Service implementation that generates embeddings using OpenAI's API
|
|
25
|
+
*/
|
|
26
|
+
export declare class OpenAIEmbeddingService extends EmbeddingService {
|
|
27
|
+
private apiKey;
|
|
28
|
+
private model;
|
|
29
|
+
private dimensions;
|
|
30
|
+
private version;
|
|
31
|
+
private apiEndpoint;
|
|
32
|
+
/**
|
|
33
|
+
* Create a new OpenAI embedding service
|
|
34
|
+
*
|
|
35
|
+
* @param config - Configuration for the service
|
|
36
|
+
*/
|
|
37
|
+
constructor(config: OpenAIEmbeddingConfig);
|
|
38
|
+
/**
|
|
39
|
+
* Generate an embedding for a single text
|
|
40
|
+
*
|
|
41
|
+
* @param text - Text to generate embedding for
|
|
42
|
+
* @returns Promise resolving to embedding vector
|
|
43
|
+
*/
|
|
44
|
+
generateEmbedding(text: string): Promise<number[]>;
|
|
45
|
+
/**
|
|
46
|
+
* Generate embeddings for multiple texts
|
|
47
|
+
*
|
|
48
|
+
* @param texts - Array of texts to generate embeddings for
|
|
49
|
+
* @returns Promise resolving to array of embedding vectors
|
|
50
|
+
*/
|
|
51
|
+
generateEmbeddings(texts: string[]): Promise<number[][]>;
|
|
52
|
+
/**
|
|
53
|
+
* Get information about the embedding model
|
|
54
|
+
*
|
|
55
|
+
* @returns Model information
|
|
56
|
+
*/
|
|
57
|
+
getModelInfo(): EmbeddingModelInfo;
|
|
58
|
+
/**
|
|
59
|
+
* Extract error message from error object
|
|
60
|
+
*
|
|
61
|
+
* @private
|
|
62
|
+
* @param error - Error object
|
|
63
|
+
* @returns Error message string
|
|
64
|
+
*/
|
|
65
|
+
private _getErrorMessage;
|
|
66
|
+
/**
|
|
67
|
+
* Normalize a vector to unit length (L2 norm)
|
|
68
|
+
*
|
|
69
|
+
* @private
|
|
70
|
+
* @param vector - Vector to normalize in-place
|
|
71
|
+
*/
|
|
72
|
+
private _normalizeVector;
|
|
73
|
+
}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import axios from 'axios';
|
|
2
|
+
import { EmbeddingService } from './EmbeddingService.js';
|
|
3
|
+
import { logger } from '../utils/logger.js';
|
|
4
|
+
/**
|
|
5
|
+
* Service implementation that generates embeddings using OpenAI's API
|
|
6
|
+
*/
|
|
7
|
+
export class OpenAIEmbeddingService extends EmbeddingService {
|
|
8
|
+
/**
|
|
9
|
+
* Create a new OpenAI embedding service
|
|
10
|
+
*
|
|
11
|
+
* @param config - Configuration for the service
|
|
12
|
+
*/
|
|
13
|
+
constructor(config) {
|
|
14
|
+
super();
|
|
15
|
+
if (!config) {
|
|
16
|
+
throw new Error('Configuration is required for OpenAI embedding service');
|
|
17
|
+
}
|
|
18
|
+
// Only require API key in non-test environments and when it's not provided in env
|
|
19
|
+
if (!config.apiKey && !process.env.OPENAI_API_KEY) {
|
|
20
|
+
throw new Error('API key is required for OpenAI embedding service');
|
|
21
|
+
}
|
|
22
|
+
this.apiKey = config.apiKey || process.env.OPENAI_API_KEY || '';
|
|
23
|
+
this.model = config.model || 'text-embedding-3-small';
|
|
24
|
+
this.dimensions = config.dimensions || 1536; // text-embedding-3-small has 1536 dimensions
|
|
25
|
+
this.version = config.version || '3.0.0';
|
|
26
|
+
this.apiEndpoint = 'https://api.openai.com/v1/embeddings';
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Generate an embedding for a single text
|
|
30
|
+
*
|
|
31
|
+
* @param text - Text to generate embedding for
|
|
32
|
+
* @returns Promise resolving to embedding vector
|
|
33
|
+
*/
|
|
34
|
+
async generateEmbedding(text) {
|
|
35
|
+
if (!this.apiKey) {
|
|
36
|
+
throw new Error('No OpenAI API key available');
|
|
37
|
+
}
|
|
38
|
+
logger.debug('Generating embedding', {
|
|
39
|
+
text: text.substring(0, 50) + '...',
|
|
40
|
+
model: this.model,
|
|
41
|
+
apiEndpoint: this.apiEndpoint,
|
|
42
|
+
});
|
|
43
|
+
try {
|
|
44
|
+
const response = await axios.post(this.apiEndpoint, {
|
|
45
|
+
input: text,
|
|
46
|
+
model: this.model,
|
|
47
|
+
}, {
|
|
48
|
+
headers: {
|
|
49
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
50
|
+
'Content-Type': 'application/json',
|
|
51
|
+
},
|
|
52
|
+
timeout: 10000, // 10 second timeout
|
|
53
|
+
});
|
|
54
|
+
logger.debug('Received response from OpenAI API');
|
|
55
|
+
if (!response.data || !response.data.data || !response.data.data[0]) {
|
|
56
|
+
logger.error('Invalid response from OpenAI API', { response: response.data });
|
|
57
|
+
throw new Error('Invalid response from OpenAI API - missing embedding data');
|
|
58
|
+
}
|
|
59
|
+
const embedding = response.data.data[0].embedding;
|
|
60
|
+
if (!embedding || !Array.isArray(embedding) || embedding.length === 0) {
|
|
61
|
+
logger.error('Invalid embedding returned', { embedding });
|
|
62
|
+
throw new Error('Invalid embedding returned from OpenAI API');
|
|
63
|
+
}
|
|
64
|
+
logger.debug('Generated embedding', {
|
|
65
|
+
length: embedding.length,
|
|
66
|
+
sample: embedding.slice(0, 5),
|
|
67
|
+
isArray: Array.isArray(embedding),
|
|
68
|
+
});
|
|
69
|
+
// Log token usage if in debug mode
|
|
70
|
+
if (process.env.DEBUG === 'true') {
|
|
71
|
+
const tokens = response.data.usage?.prompt_tokens || 'unknown';
|
|
72
|
+
logger.debug('OpenAI embedding token usage', { tokens });
|
|
73
|
+
}
|
|
74
|
+
// Normalize the embedding vector
|
|
75
|
+
this._normalizeVector(embedding);
|
|
76
|
+
logger.debug('Normalized embedding', {
|
|
77
|
+
length: embedding.length,
|
|
78
|
+
sample: embedding.slice(0, 5),
|
|
79
|
+
});
|
|
80
|
+
return embedding;
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
// Handle axios errors specifically
|
|
84
|
+
const axiosError = error;
|
|
85
|
+
if (axiosError.isAxiosError) {
|
|
86
|
+
const statusCode = axiosError.response?.status;
|
|
87
|
+
const responseData = axiosError.response?.data;
|
|
88
|
+
logger.error('OpenAI API error', {
|
|
89
|
+
status: statusCode,
|
|
90
|
+
data: responseData,
|
|
91
|
+
message: axiosError.message,
|
|
92
|
+
});
|
|
93
|
+
// Handle specific error types
|
|
94
|
+
if (statusCode === 401) {
|
|
95
|
+
throw new Error('OpenAI API authentication failed - invalid API key');
|
|
96
|
+
}
|
|
97
|
+
else if (statusCode === 429) {
|
|
98
|
+
throw new Error('OpenAI API rate limit exceeded - try again later');
|
|
99
|
+
}
|
|
100
|
+
else if (statusCode && statusCode >= 500) {
|
|
101
|
+
throw new Error(`OpenAI API server error (${statusCode}) - try again later`);
|
|
102
|
+
}
|
|
103
|
+
// Include response data in error if available
|
|
104
|
+
const errorDetails = responseData
|
|
105
|
+
? `: ${JSON.stringify(responseData).substring(0, 200)}`
|
|
106
|
+
: '';
|
|
107
|
+
throw new Error(`OpenAI API error (${statusCode || 'unknown'})${errorDetails}`);
|
|
108
|
+
}
|
|
109
|
+
// Handle other errors
|
|
110
|
+
const errorMessage = this._getErrorMessage(error);
|
|
111
|
+
logger.error('Failed to generate embedding', { error: errorMessage });
|
|
112
|
+
throw new Error(`Error generating embedding: ${errorMessage}`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Generate embeddings for multiple texts
|
|
117
|
+
*
|
|
118
|
+
* @param texts - Array of texts to generate embeddings for
|
|
119
|
+
* @returns Promise resolving to array of embedding vectors
|
|
120
|
+
*/
|
|
121
|
+
async generateEmbeddings(texts) {
|
|
122
|
+
try {
|
|
123
|
+
const response = await axios.post(this.apiEndpoint, {
|
|
124
|
+
input: texts,
|
|
125
|
+
model: this.model,
|
|
126
|
+
}, {
|
|
127
|
+
headers: {
|
|
128
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
129
|
+
'Content-Type': 'application/json',
|
|
130
|
+
},
|
|
131
|
+
});
|
|
132
|
+
const embeddings = response.data.data.map((item) => item.embedding);
|
|
133
|
+
// Normalize each embedding vector
|
|
134
|
+
embeddings.forEach((embedding) => {
|
|
135
|
+
this._normalizeVector(embedding);
|
|
136
|
+
});
|
|
137
|
+
return embeddings;
|
|
138
|
+
}
|
|
139
|
+
catch (error) {
|
|
140
|
+
const errorMessage = this._getErrorMessage(error);
|
|
141
|
+
throw new Error(`Failed to generate embeddings: ${errorMessage}`);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Get information about the embedding model
|
|
146
|
+
*
|
|
147
|
+
* @returns Model information
|
|
148
|
+
*/
|
|
149
|
+
getModelInfo() {
|
|
150
|
+
return {
|
|
151
|
+
name: this.model,
|
|
152
|
+
dimensions: this.dimensions,
|
|
153
|
+
version: this.version,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Extract error message from error object
|
|
158
|
+
*
|
|
159
|
+
* @private
|
|
160
|
+
* @param error - Error object
|
|
161
|
+
* @returns Error message string
|
|
162
|
+
*/
|
|
163
|
+
_getErrorMessage(error) {
|
|
164
|
+
if (error instanceof Error) {
|
|
165
|
+
return error.message;
|
|
166
|
+
}
|
|
167
|
+
return String(error);
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Normalize a vector to unit length (L2 norm)
|
|
171
|
+
*
|
|
172
|
+
* @private
|
|
173
|
+
* @param vector - Vector to normalize in-place
|
|
174
|
+
*/
|
|
175
|
+
_normalizeVector(vector) {
|
|
176
|
+
// Calculate magnitude (Euclidean norm / L2 norm)
|
|
177
|
+
let magnitude = 0;
|
|
178
|
+
for (let i = 0; i < vector.length; i++) {
|
|
179
|
+
magnitude += vector[i] * vector[i];
|
|
180
|
+
}
|
|
181
|
+
magnitude = Math.sqrt(magnitude);
|
|
182
|
+
// Avoid division by zero
|
|
183
|
+
if (magnitude > 0) {
|
|
184
|
+
// Normalize each component
|
|
185
|
+
for (let i = 0; i < vector.length; i++) {
|
|
186
|
+
vector[i] /= magnitude;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
// If magnitude is 0, set first element to 1 for a valid unit vector
|
|
191
|
+
vector[0] = 1;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=OpenAIEmbeddingService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OpenAIEmbeddingService.js","sourceRoot":"","sources":["../../src/embeddings/OpenAIEmbeddingService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration for the embedding subsystem
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Default settings for embedding job processing
|
|
6
|
+
*/
|
|
7
|
+
export declare const DEFAULT_EMBEDDING_SETTINGS: {
|
|
8
|
+
/**
|
|
9
|
+
* Maximum batch size for processing embedding jobs
|
|
10
|
+
* Larger batches may be more efficient but use more memory
|
|
11
|
+
*/
|
|
12
|
+
BATCH_SIZE: number;
|
|
13
|
+
/**
|
|
14
|
+
* Minimum time in milliseconds between API calls (rate limiting)
|
|
15
|
+
*/
|
|
16
|
+
API_RATE_LIMIT_MS: number;
|
|
17
|
+
/**
|
|
18
|
+
* Time-to-live in milliseconds for cached embeddings (default: 30 days)
|
|
19
|
+
*/
|
|
20
|
+
CACHE_TTL_MS: number;
|
|
21
|
+
/**
|
|
22
|
+
* Maximum number of entries to keep in the embedding cache
|
|
23
|
+
*/
|
|
24
|
+
CACHE_MAX_SIZE: number;
|
|
25
|
+
/**
|
|
26
|
+
* Minimum age in milliseconds for jobs to be eligible for cleanup
|
|
27
|
+
* Default: 30 days
|
|
28
|
+
*/
|
|
29
|
+
JOB_CLEANUP_AGE_MS: number;
|
|
30
|
+
/**
|
|
31
|
+
* Status options for embedding jobs
|
|
32
|
+
*/
|
|
33
|
+
JOB_STATUS: {
|
|
34
|
+
PENDING: string;
|
|
35
|
+
PROCESSING: string;
|
|
36
|
+
COMPLETED: string;
|
|
37
|
+
FAILED: string;
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Configuration for the LRU cache used for embeddings
|
|
42
|
+
*/
|
|
43
|
+
export interface EmbeddingCacheOptions {
|
|
44
|
+
/**
|
|
45
|
+
* Maximum number of items to keep in the cache
|
|
46
|
+
*/
|
|
47
|
+
max: number;
|
|
48
|
+
/**
|
|
49
|
+
* Time-to-live in milliseconds for cache entries
|
|
50
|
+
*/
|
|
51
|
+
ttl: number;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Configuration for embedding job processing
|
|
55
|
+
*/
|
|
56
|
+
export interface EmbeddingJobProcessingOptions {
|
|
57
|
+
/**
|
|
58
|
+
* Maximum number of jobs to process in a single batch
|
|
59
|
+
*/
|
|
60
|
+
batchSize: number;
|
|
61
|
+
/**
|
|
62
|
+
* Minimum time in milliseconds between API calls
|
|
63
|
+
*/
|
|
64
|
+
apiRateLimitMs: number;
|
|
65
|
+
/**
|
|
66
|
+
* Maximum age in milliseconds for jobs to be eligible for cleanup
|
|
67
|
+
*/
|
|
68
|
+
jobCleanupAgeMs: number;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Get configuration for the LRU cache for embeddings
|
|
72
|
+
*
|
|
73
|
+
* @param options - Optional overrides for cache settings
|
|
74
|
+
* @returns Configuration object for the LRU cache
|
|
75
|
+
*/
|
|
76
|
+
export declare function getEmbeddingCacheConfig(options?: Partial<EmbeddingCacheOptions>): EmbeddingCacheOptions;
|
|
77
|
+
/**
|
|
78
|
+
* Get configuration for embedding job processing
|
|
79
|
+
*
|
|
80
|
+
* @param options - Optional overrides for job processing settings
|
|
81
|
+
* @returns Configuration object for job processing
|
|
82
|
+
*/
|
|
83
|
+
export declare function getJobProcessingConfig(options?: Partial<EmbeddingJobProcessingOptions>): EmbeddingJobProcessingOptions;
|