@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.
Files changed (120) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +718 -0
  3. package/dist/KnowledgeGraphManager.d.ts +215 -0
  4. package/dist/KnowledgeGraphManager.js +910 -0
  5. package/dist/KnowledgeGraphManager.js.map +1 -0
  6. package/dist/callToolHandler.d.ts +5 -0
  7. package/dist/callToolHandler.js +26 -0
  8. package/dist/callToolHandler.js.map +1 -0
  9. package/dist/cli/neo4j-setup.d.ts +52 -0
  10. package/dist/cli/neo4j-setup.js +258 -0
  11. package/dist/cli/neo4j-setup.js.map +1 -0
  12. package/dist/config/paths.d.ts +13 -0
  13. package/dist/config/paths.js +41 -0
  14. package/dist/config/paths.js.map +1 -0
  15. package/dist/config/storage.d.ts +35 -0
  16. package/dist/config/storage.js +52 -0
  17. package/dist/config/storage.js.map +1 -0
  18. package/dist/embeddings/DefaultEmbeddingService.d.ts +64 -0
  19. package/dist/embeddings/DefaultEmbeddingService.js +139 -0
  20. package/dist/embeddings/DefaultEmbeddingService.js.map +1 -0
  21. package/dist/embeddings/EmbeddingJobManager.d.ts +212 -0
  22. package/dist/embeddings/EmbeddingJobManager.js +545 -0
  23. package/dist/embeddings/EmbeddingJobManager.js.map +1 -0
  24. package/dist/embeddings/EmbeddingService.d.ts +96 -0
  25. package/dist/embeddings/EmbeddingService.js +44 -0
  26. package/dist/embeddings/EmbeddingService.js.map +1 -0
  27. package/dist/embeddings/EmbeddingServiceFactory.d.ts +72 -0
  28. package/dist/embeddings/EmbeddingServiceFactory.js +147 -0
  29. package/dist/embeddings/EmbeddingServiceFactory.js.map +1 -0
  30. package/dist/embeddings/OpenAIEmbeddingService.d.ts +73 -0
  31. package/dist/embeddings/OpenAIEmbeddingService.js +195 -0
  32. package/dist/embeddings/OpenAIEmbeddingService.js.map +1 -0
  33. package/dist/embeddings/config.d.ts +83 -0
  34. package/dist/embeddings/config.js +65 -0
  35. package/dist/embeddings/config.js.map +1 -0
  36. package/dist/index.d.ts +4 -0
  37. package/dist/index.js +220 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/server/handlers/callToolHandler.d.ts +20 -0
  40. package/dist/server/handlers/callToolHandler.js +505 -0
  41. package/dist/server/handlers/callToolHandler.js.map +1 -0
  42. package/dist/server/handlers/listToolsHandler.d.ts +7 -0
  43. package/dist/server/handlers/listToolsHandler.js +511 -0
  44. package/dist/server/handlers/listToolsHandler.js.map +1 -0
  45. package/dist/server/handlers/toolHandlers/addObservations.d.ts +12 -0
  46. package/dist/server/handlers/toolHandlers/addObservations.js +99 -0
  47. package/dist/server/handlers/toolHandlers/addObservations.js.map +1 -0
  48. package/dist/server/handlers/toolHandlers/createEntities.d.ts +12 -0
  49. package/dist/server/handlers/toolHandlers/createEntities.js +20 -0
  50. package/dist/server/handlers/toolHandlers/createEntities.js.map +1 -0
  51. package/dist/server/handlers/toolHandlers/createRelations.d.ts +12 -0
  52. package/dist/server/handlers/toolHandlers/createRelations.js +20 -0
  53. package/dist/server/handlers/toolHandlers/createRelations.js.map +1 -0
  54. package/dist/server/handlers/toolHandlers/deleteEntities.d.ts +12 -0
  55. package/dist/server/handlers/toolHandlers/deleteEntities.js +20 -0
  56. package/dist/server/handlers/toolHandlers/deleteEntities.js.map +1 -0
  57. package/dist/server/handlers/toolHandlers/index.d.ts +8 -0
  58. package/dist/server/handlers/toolHandlers/index.js +9 -0
  59. package/dist/server/handlers/toolHandlers/index.js.map +1 -0
  60. package/dist/server/handlers/toolHandlers/readGraph.d.ts +12 -0
  61. package/dist/server/handlers/toolHandlers/readGraph.js +20 -0
  62. package/dist/server/handlers/toolHandlers/readGraph.js.map +1 -0
  63. package/dist/server/setup.d.ts +8 -0
  64. package/dist/server/setup.js +48 -0
  65. package/dist/server/setup.js.map +1 -0
  66. package/dist/storage/FileStorageProvider.d.ts +125 -0
  67. package/dist/storage/FileStorageProvider.js +322 -0
  68. package/dist/storage/FileStorageProvider.js.map +1 -0
  69. package/dist/storage/SearchResultCache.d.ts +102 -0
  70. package/dist/storage/SearchResultCache.js +258 -0
  71. package/dist/storage/SearchResultCache.js.map +1 -0
  72. package/dist/storage/StorageProvider.d.ts +171 -0
  73. package/dist/storage/StorageProvider.js +46 -0
  74. package/dist/storage/StorageProvider.js.map +1 -0
  75. package/dist/storage/StorageProviderFactory.d.ts +63 -0
  76. package/dist/storage/StorageProviderFactory.js +113 -0
  77. package/dist/storage/StorageProviderFactory.js.map +1 -0
  78. package/dist/storage/VectorStoreFactory.d.ts +43 -0
  79. package/dist/storage/VectorStoreFactory.js +41 -0
  80. package/dist/storage/VectorStoreFactory.js.map +1 -0
  81. package/dist/storage/neo4j/Neo4jConfig.d.ts +37 -0
  82. package/dist/storage/neo4j/Neo4jConfig.js +13 -0
  83. package/dist/storage/neo4j/Neo4jConfig.js.map +1 -0
  84. package/dist/storage/neo4j/Neo4jConnectionManager.d.ts +40 -0
  85. package/dist/storage/neo4j/Neo4jConnectionManager.js +58 -0
  86. package/dist/storage/neo4j/Neo4jConnectionManager.js.map +1 -0
  87. package/dist/storage/neo4j/Neo4jSchemaManager.d.ts +74 -0
  88. package/dist/storage/neo4j/Neo4jSchemaManager.js +224 -0
  89. package/dist/storage/neo4j/Neo4jSchemaManager.js.map +1 -0
  90. package/dist/storage/neo4j/Neo4jStorageProvider.d.ts +225 -0
  91. package/dist/storage/neo4j/Neo4jStorageProvider.js +1900 -0
  92. package/dist/storage/neo4j/Neo4jStorageProvider.js.map +1 -0
  93. package/dist/storage/neo4j/Neo4jVectorStore.d.ts +80 -0
  94. package/dist/storage/neo4j/Neo4jVectorStore.js +396 -0
  95. package/dist/storage/neo4j/Neo4jVectorStore.js.map +1 -0
  96. package/dist/types/entity-embedding.d.ts +156 -0
  97. package/dist/types/entity-embedding.js +2 -0
  98. package/dist/types/entity-embedding.js.map +1 -0
  99. package/dist/types/relation.d.ts +77 -0
  100. package/dist/types/relation.js +93 -0
  101. package/dist/types/relation.js.map +1 -0
  102. package/dist/types/temporalEntity.d.ts +55 -0
  103. package/dist/types/temporalEntity.js +66 -0
  104. package/dist/types/temporalEntity.js.map +1 -0
  105. package/dist/types/temporalRelation.d.ts +60 -0
  106. package/dist/types/temporalRelation.js +89 -0
  107. package/dist/types/temporalRelation.js.map +1 -0
  108. package/dist/types/vector-index.d.ts +48 -0
  109. package/dist/types/vector-index.js +2 -0
  110. package/dist/types/vector-index.js.map +1 -0
  111. package/dist/types/vector-store.d.ts +16 -0
  112. package/dist/types/vector-store.js +2 -0
  113. package/dist/types/vector-store.js.map +1 -0
  114. package/dist/utils/fs.d.ts +2 -0
  115. package/dist/utils/fs.js +3 -0
  116. package/dist/utils/fs.js.map +1 -0
  117. package/dist/utils/logger.d.ts +10 -0
  118. package/dist/utils/logger.js +35 -0
  119. package/dist/utils/logger.js.map +1 -0
  120. 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;