@soulcraft/brainy 0.58.0 → 0.59.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/bin/brainy.js +539 -387
- package/dist/augmentations/conduitAugmentations.js +1 -1
- package/dist/augmentations/conduitAugmentations.js.map +1 -1
- package/dist/augmentations/cortexSense.js +3 -3
- package/dist/augmentations/cortexSense.js.map +1 -1
- package/dist/brainyData.js +2 -1
- package/dist/brainyData.js.map +1 -1
- package/dist/browserFramework.minimal.d.ts +14 -0
- package/dist/browserFramework.minimal.js +31 -0
- package/dist/browserFramework.minimal.js.map +1 -0
- package/dist/cortex/backupRestore.js +2 -2
- package/dist/cortex/backupRestore.js.map +1 -1
- package/dist/cortex/cortex.d.ts +17 -2
- package/dist/cortex/cortex.js +262 -103
- package/dist/cortex/cortex.js.map +1 -1
- package/dist/cortex/neuralImport.js +2 -2
- package/dist/cortex/neuralImport.js.map +1 -1
- package/dist/cortex/serviceIntegration.js +2 -2
- package/dist/cortex/serviceIntegration.js.map +1 -1
- package/dist/distributed/configManager.js +1 -1
- package/dist/distributed/configManager.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/mcp/brainyMCPAdapter.js +1 -1
- package/dist/mcp/brainyMCPAdapter.js.map +1 -1
- package/dist/mcp/brainyMCPBroadcast.d.ts +82 -0
- package/dist/mcp/brainyMCPBroadcast.js +303 -0
- package/dist/mcp/brainyMCPBroadcast.js.map +1 -0
- package/dist/mcp/brainyMCPClient.d.ts +92 -0
- package/dist/mcp/brainyMCPClient.js +254 -0
- package/dist/mcp/brainyMCPClient.js.map +1 -0
- package/dist/mcp/brainyMCPService.js +1 -1
- package/dist/mcp/brainyMCPService.js.map +1 -1
- package/dist/mcp/mcpAugmentationToolset.js +1 -1
- package/dist/mcp/mcpAugmentationToolset.js.map +1 -1
- package/dist/universal/crypto.d.ts +64 -0
- package/dist/universal/crypto.js +215 -0
- package/dist/universal/crypto.js.map +1 -0
- package/dist/universal/events.d.ts +31 -0
- package/dist/universal/events.js +156 -0
- package/dist/universal/events.js.map +1 -0
- package/dist/universal/fs.d.ts +102 -0
- package/dist/universal/fs.js +304 -0
- package/dist/universal/fs.js.map +1 -0
- package/dist/universal/index.d.ts +16 -0
- package/dist/universal/index.js +23 -0
- package/dist/universal/index.js.map +1 -0
- package/dist/universal/path.d.ts +51 -0
- package/dist/universal/path.js +161 -0
- package/dist/universal/path.js.map +1 -0
- package/dist/universal/uuid.d.ts +10 -0
- package/dist/universal/uuid.js +21 -0
- package/dist/universal/uuid.js.map +1 -0
- package/package.json +55 -2
- package/dist/augmentationFactory.d.ts.map +0 -1
- package/dist/augmentationPipeline.d.ts.map +0 -1
- package/dist/augmentationRegistry.d.ts.map +0 -1
- package/dist/augmentationRegistryLoader.d.ts.map +0 -1
- package/dist/augmentations/conduitAugmentations.d.ts.map +0 -1
- package/dist/augmentations/memoryAugmentations.d.ts.map +0 -1
- package/dist/augmentations/serverSearchAugmentations.d.ts.map +0 -1
- package/dist/brainyData.d.ts.map +0 -1
- package/dist/browserFramework.d.ts.map +0 -1
- package/dist/coreTypes.d.ts.map +0 -1
- package/dist/cortex/cli.d.ts +0 -8
- package/dist/cortex/cli.js +0 -207
- package/dist/cortex/cli.js.map +0 -1
- package/dist/cortex/commands/index.d.ts +0 -79
- package/dist/cortex/commands/index.js +0 -614
- package/dist/cortex/commands/index.js.map +0 -1
- package/dist/cortex/config.d.ts +0 -112
- package/dist/cortex/config.js +0 -312
- package/dist/cortex/config.js.map +0 -1
- package/dist/cortex/licensingSystem.d.ts +0 -126
- package/dist/cortex/licensingSystem.js +0 -474
- package/dist/cortex/licensingSystem.js.map +0 -1
- package/dist/cortex/webhookManager.d.ts +0 -39
- package/dist/cortex/webhookManager.js +0 -326
- package/dist/cortex/webhookManager.js.map +0 -1
- package/dist/demo.d.ts.map +0 -1
- package/dist/distributed/configManager.d.ts.map +0 -1
- package/dist/distributed/domainDetector.d.ts.map +0 -1
- package/dist/distributed/hashPartitioner.d.ts.map +0 -1
- package/dist/distributed/healthMonitor.d.ts.map +0 -1
- package/dist/distributed/index.d.ts.map +0 -1
- package/dist/distributed/operationalModes.d.ts.map +0 -1
- package/dist/errors/brainyError.d.ts.map +0 -1
- package/dist/examples/basicUsage.d.ts.map +0 -1
- package/dist/hnsw/distributedSearch.d.ts.map +0 -1
- package/dist/hnsw/hnswIndex.d.ts.map +0 -1
- package/dist/hnsw/hnswIndexOptimized.d.ts.map +0 -1
- package/dist/hnsw/optimizedHNSWIndex.d.ts.map +0 -1
- package/dist/hnsw/partitionedHNSWIndex.d.ts.map +0 -1
- package/dist/hnsw/scaledHNSWSystem.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/mcp/brainyMCPAdapter.d.ts.map +0 -1
- package/dist/mcp/brainyMCPService.d.ts.map +0 -1
- package/dist/mcp/index.d.ts.map +0 -1
- package/dist/mcp/mcpAugmentationToolset.d.ts.map +0 -1
- package/dist/pipeline.d.ts.map +0 -1
- package/dist/sequentialPipeline.d.ts.map +0 -1
- package/dist/setup.d.ts.map +0 -1
- package/dist/storage/adapters/baseStorageAdapter.d.ts.map +0 -1
- package/dist/storage/adapters/batchS3Operations.d.ts.map +0 -1
- package/dist/storage/adapters/fileSystemStorage.d.ts.map +0 -1
- package/dist/storage/adapters/memoryStorage.d.ts.map +0 -1
- package/dist/storage/adapters/opfsStorage.d.ts.map +0 -1
- package/dist/storage/adapters/optimizedS3Search.d.ts.map +0 -1
- package/dist/storage/adapters/s3CompatibleStorage.d.ts.map +0 -1
- package/dist/storage/baseStorage.d.ts.map +0 -1
- package/dist/storage/cacheManager.d.ts.map +0 -1
- package/dist/storage/enhancedCacheManager.d.ts.map +0 -1
- package/dist/storage/readOnlyOptimizations.d.ts.map +0 -1
- package/dist/storage/storageFactory.d.ts.map +0 -1
- package/dist/types/augmentations.d.ts.map +0 -1
- package/dist/types/brainyDataInterface.d.ts.map +0 -1
- package/dist/types/distributedTypes.d.ts.map +0 -1
- package/dist/types/fileSystemTypes.d.ts.map +0 -1
- package/dist/types/graphTypes.d.ts.map +0 -1
- package/dist/types/mcpTypes.d.ts.map +0 -1
- package/dist/types/paginationTypes.d.ts.map +0 -1
- package/dist/types/pipelineTypes.d.ts.map +0 -1
- package/dist/types/tensorflowTypes.d.ts +0 -26
- package/dist/types/tensorflowTypes.d.ts.map +0 -1
- package/dist/types/tensorflowTypes.js +0 -6
- package/dist/types/tensorflowTypes.js.map +0 -1
- package/dist/unified.d.ts.map +0 -1
- package/dist/utils/autoConfiguration.d.ts.map +0 -1
- package/dist/utils/cacheAutoConfig.d.ts.map +0 -1
- package/dist/utils/crypto.d.ts.map +0 -1
- package/dist/utils/distance.d.ts.map +0 -1
- package/dist/utils/embedding.d.ts.map +0 -1
- package/dist/utils/environment.d.ts.map +0 -1
- package/dist/utils/fieldNameTracking.d.ts.map +0 -1
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/jsonProcessing.d.ts.map +0 -1
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/operationUtils.d.ts.map +0 -1
- package/dist/utils/robustModelLoader.d.ts +0 -112
- package/dist/utils/robustModelLoader.d.ts.map +0 -1
- package/dist/utils/robustModelLoader.js +0 -624
- package/dist/utils/robustModelLoader.js.map +0 -1
- package/dist/utils/searchCache.d.ts.map +0 -1
- package/dist/utils/statistics.d.ts.map +0 -1
- package/dist/utils/statisticsCollector.d.ts.map +0 -1
- package/dist/utils/textEncoding.d.ts.map +0 -1
- package/dist/utils/typeUtils.d.ts.map +0 -1
- package/dist/utils/version.d.ts.map +0 -1
- package/dist/utils/workerUtils.d.ts.map +0 -1
- package/dist/webhooks/webhookSystem.d.ts +0 -114
- package/dist/webhooks/webhookSystem.js +0 -321
- package/dist/webhooks/webhookSystem.js.map +0 -1
- package/dist/worker.d.ts.map +0 -1
|
@@ -1,624 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Robust Model Loader - Enhanced model loading with retry mechanisms and fallbacks
|
|
3
|
-
*
|
|
4
|
-
* This module provides a more reliable way to load TensorFlow models with:
|
|
5
|
-
* - Exponential backoff retry mechanisms
|
|
6
|
-
* - Timeout handling
|
|
7
|
-
* - Multiple fallback strategies
|
|
8
|
-
* - Better error handling and logging
|
|
9
|
-
* - Optional local model bundling support
|
|
10
|
-
*/
|
|
11
|
-
export class RobustModelLoader {
|
|
12
|
-
constructor(options = {}) {
|
|
13
|
-
this.loadAttempts = new Map();
|
|
14
|
-
// Check for environment variables
|
|
15
|
-
const envModelsPath = process.env.BRAINY_MODELS_PATH || process.env.MODELS_PATH;
|
|
16
|
-
// Auto-detect if we need to use an auto-extracted models directory
|
|
17
|
-
const autoDetectedPath = this.autoDetectModelsPath();
|
|
18
|
-
this.options = {
|
|
19
|
-
maxRetries: options.maxRetries ?? 3,
|
|
20
|
-
initialRetryDelay: options.initialRetryDelay ?? 1000,
|
|
21
|
-
maxRetryDelay: options.maxRetryDelay ?? 30000,
|
|
22
|
-
timeout: options.timeout ?? 60000, // 60 seconds
|
|
23
|
-
useExponentialBackoff: options.useExponentialBackoff ?? true,
|
|
24
|
-
fallbackUrls: options.fallbackUrls ?? [],
|
|
25
|
-
verbose: options.verbose ?? false,
|
|
26
|
-
preferLocalModel: options.preferLocalModel ?? true,
|
|
27
|
-
customModelsPath: options.customModelsPath ?? envModelsPath ?? autoDetectedPath
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
/**
|
|
31
|
-
* Auto-detect extracted models directory
|
|
32
|
-
*/
|
|
33
|
-
autoDetectModelsPath() {
|
|
34
|
-
try {
|
|
35
|
-
// Check if we're in Node.js environment
|
|
36
|
-
const isNode = typeof process !== 'undefined' &&
|
|
37
|
-
process.versions != null &&
|
|
38
|
-
process.versions.node != null;
|
|
39
|
-
if (!isNode) {
|
|
40
|
-
return undefined;
|
|
41
|
-
}
|
|
42
|
-
// Try to detect extracted models directory
|
|
43
|
-
const possiblePaths = [
|
|
44
|
-
// Standard extraction location
|
|
45
|
-
'./models',
|
|
46
|
-
'../models',
|
|
47
|
-
'/app/models',
|
|
48
|
-
// Project root relative paths
|
|
49
|
-
process.cwd() + '/models',
|
|
50
|
-
// Docker/container standard paths
|
|
51
|
-
'/usr/src/app/models',
|
|
52
|
-
'/home/app/models'
|
|
53
|
-
];
|
|
54
|
-
// Use require to access fs and path synchronously (only in Node.js)
|
|
55
|
-
let fs, path;
|
|
56
|
-
try {
|
|
57
|
-
fs = require('fs');
|
|
58
|
-
path = require('path');
|
|
59
|
-
}
|
|
60
|
-
catch (error) {
|
|
61
|
-
// If require fails, we're probably in a browser environment
|
|
62
|
-
return undefined;
|
|
63
|
-
}
|
|
64
|
-
for (const modelPath of possiblePaths) {
|
|
65
|
-
try {
|
|
66
|
-
// Check for marker file that indicates successful extraction
|
|
67
|
-
const markerFile = path.join(modelPath, '.brainy-models-extracted');
|
|
68
|
-
if (fs.existsSync(markerFile)) {
|
|
69
|
-
console.log(`🎯 Auto-detected extracted models at: ${modelPath}`);
|
|
70
|
-
return modelPath;
|
|
71
|
-
}
|
|
72
|
-
// Fallback: check for universal-sentence-encoder directory
|
|
73
|
-
const useDir = path.join(modelPath, 'universal-sentence-encoder');
|
|
74
|
-
const modelJson = path.join(useDir, 'model.json');
|
|
75
|
-
if (fs.existsSync(modelJson)) {
|
|
76
|
-
console.log(`🎯 Auto-detected models directory at: ${modelPath}`);
|
|
77
|
-
return modelPath;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
catch (error) {
|
|
81
|
-
continue;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
return undefined;
|
|
85
|
-
}
|
|
86
|
-
catch (error) {
|
|
87
|
-
return undefined;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Load model with all available fallback strategies
|
|
92
|
-
*/
|
|
93
|
-
async loadModelWithFallbacks() {
|
|
94
|
-
const startTime = Date.now();
|
|
95
|
-
this.log('Starting model loading with all fallback strategies');
|
|
96
|
-
// Try local bundled model first (from @soulcraft/brainy-models if available)
|
|
97
|
-
const localModel = await this.tryLoadLocalBundledModel();
|
|
98
|
-
if (localModel) {
|
|
99
|
-
const loadTime = Date.now() - startTime;
|
|
100
|
-
this.log(`✅ Model loaded successfully from local bundle in ${loadTime}ms`);
|
|
101
|
-
return localModel;
|
|
102
|
-
}
|
|
103
|
-
// Fallback to loading from URLs
|
|
104
|
-
console.warn('⚠️ Local model not found. Falling back to remote model loading.');
|
|
105
|
-
console.warn(' For best performance and reliability:');
|
|
106
|
-
console.warn(' 1. Install @soulcraft/brainy-models: npm install @soulcraft/brainy-models');
|
|
107
|
-
console.warn(' 2. Or set BRAINY_MODELS_PATH environment variable for Docker deployments');
|
|
108
|
-
console.warn(' 3. Or use customModelsPath option in RobustModelLoader');
|
|
109
|
-
const fallbackUrls = getUniversalSentenceEncoderFallbacks();
|
|
110
|
-
for (const url of fallbackUrls) {
|
|
111
|
-
try {
|
|
112
|
-
this.log(`Attempting to load model from: ${url}`);
|
|
113
|
-
const model = await this.withTimeout(this.loadFromUrl(url), this.options.timeout);
|
|
114
|
-
const loadTime = Date.now() - startTime;
|
|
115
|
-
// Verify it's the correct model by checking if it can embed text
|
|
116
|
-
try {
|
|
117
|
-
const testEmbedding = await model.embed('test');
|
|
118
|
-
if (!testEmbedding || (Array.isArray(testEmbedding) && testEmbedding.length !== 512)) {
|
|
119
|
-
throw new Error(`Model verification failed: incorrect embedding dimensions (expected 512, got ${Array.isArray(testEmbedding) ? testEmbedding.length : 'invalid'})`);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
catch (verifyError) {
|
|
123
|
-
console.warn(`⚠️ Model verification failed for ${url}: ${verifyError}`);
|
|
124
|
-
continue;
|
|
125
|
-
}
|
|
126
|
-
console.warn(`✅ Successfully loaded Universal Sentence Encoder from remote URL: ${url}`);
|
|
127
|
-
console.warn(` Load time: ${loadTime}ms`);
|
|
128
|
-
return model;
|
|
129
|
-
}
|
|
130
|
-
catch (error) {
|
|
131
|
-
this.log(`Failed to load from ${url}: ${error}`);
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
throw new Error('Failed to load model from all available sources');
|
|
135
|
-
}
|
|
136
|
-
/**
|
|
137
|
-
* Load a model with robust retry and fallback mechanisms
|
|
138
|
-
*/
|
|
139
|
-
async loadModel(primaryLoadFunction, modelIdentifier = 'default') {
|
|
140
|
-
const startTime = Date.now();
|
|
141
|
-
this.log(`Starting robust model loading for: ${modelIdentifier}`);
|
|
142
|
-
// Try local bundled model first if preferred
|
|
143
|
-
if (this.options.preferLocalModel) {
|
|
144
|
-
try {
|
|
145
|
-
const localModel = await this.tryLoadLocalBundledModel();
|
|
146
|
-
if (localModel) {
|
|
147
|
-
this.log(`Successfully loaded local bundled model in ${Date.now() - startTime}ms`);
|
|
148
|
-
return localModel;
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
catch (error) {
|
|
152
|
-
this.log(`Local bundled model not available: ${error}`);
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
// Try primary load function with retries
|
|
156
|
-
try {
|
|
157
|
-
const model = await this.loadWithRetries(primaryLoadFunction, `primary-${modelIdentifier}`);
|
|
158
|
-
this.log(`Successfully loaded model via primary method in ${Date.now() - startTime}ms`);
|
|
159
|
-
return model;
|
|
160
|
-
}
|
|
161
|
-
catch (primaryError) {
|
|
162
|
-
this.log(`Primary model loading failed: ${primaryError}`);
|
|
163
|
-
// Try fallback URLs if available
|
|
164
|
-
for (let i = 0; i < this.options.fallbackUrls.length; i++) {
|
|
165
|
-
const fallbackUrl = this.options.fallbackUrls[i];
|
|
166
|
-
this.log(`Trying fallback URL ${i + 1}/${this.options.fallbackUrls.length}: ${fallbackUrl}`);
|
|
167
|
-
try {
|
|
168
|
-
const fallbackModel = await this.loadWithRetries(() => this.loadFromUrl(fallbackUrl), `fallback-${i}-${modelIdentifier}`);
|
|
169
|
-
this.log(`Successfully loaded model via fallback ${i + 1} in ${Date.now() - startTime}ms`);
|
|
170
|
-
return fallbackModel;
|
|
171
|
-
}
|
|
172
|
-
catch (fallbackError) {
|
|
173
|
-
this.log(`Fallback ${i + 1} failed: ${fallbackError}`);
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
// All attempts failed
|
|
177
|
-
const totalTime = Date.now() - startTime;
|
|
178
|
-
const errorMessage = `All model loading attempts failed after ${totalTime}ms. Primary error: ${primaryError}`;
|
|
179
|
-
this.log(errorMessage);
|
|
180
|
-
throw new Error(errorMessage);
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
/**
|
|
184
|
-
* Load a model with retry logic and exponential backoff
|
|
185
|
-
*/
|
|
186
|
-
async loadWithRetries(loadFunction, identifier) {
|
|
187
|
-
let lastError;
|
|
188
|
-
const currentAttempts = this.loadAttempts.get(identifier) || 0;
|
|
189
|
-
for (let attempt = currentAttempts; attempt <= this.options.maxRetries; attempt++) {
|
|
190
|
-
this.loadAttempts.set(identifier, attempt);
|
|
191
|
-
try {
|
|
192
|
-
this.log(`Attempt ${attempt + 1}/${this.options.maxRetries + 1} for ${identifier}`);
|
|
193
|
-
// Apply timeout to the load function
|
|
194
|
-
const model = await this.withTimeout(loadFunction(), this.options.timeout);
|
|
195
|
-
// Success - clear attempt counter
|
|
196
|
-
this.loadAttempts.delete(identifier);
|
|
197
|
-
return model;
|
|
198
|
-
}
|
|
199
|
-
catch (error) {
|
|
200
|
-
lastError = error;
|
|
201
|
-
this.log(`Attempt ${attempt + 1} failed: ${lastError.message}`);
|
|
202
|
-
// Don't retry on the last attempt
|
|
203
|
-
if (attempt === this.options.maxRetries) {
|
|
204
|
-
break;
|
|
205
|
-
}
|
|
206
|
-
// Calculate delay for next attempt
|
|
207
|
-
const delay = this.calculateRetryDelay(attempt);
|
|
208
|
-
this.log(`Retrying in ${delay}ms...`);
|
|
209
|
-
// Wait before next attempt
|
|
210
|
-
await this.sleep(delay);
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
// All retries exhausted
|
|
214
|
-
this.loadAttempts.delete(identifier);
|
|
215
|
-
throw lastError;
|
|
216
|
-
}
|
|
217
|
-
/**
|
|
218
|
-
* Try to load a locally bundled model
|
|
219
|
-
*/
|
|
220
|
-
async tryLoadLocalBundledModel() {
|
|
221
|
-
try {
|
|
222
|
-
// First, try direct file loading from @soulcraft/brainy-models if available
|
|
223
|
-
try {
|
|
224
|
-
console.log('Checking for @soulcraft/brainy-models package...');
|
|
225
|
-
const brainyModelsPath = this.findBrainyModelsPath();
|
|
226
|
-
if (brainyModelsPath) {
|
|
227
|
-
console.log('✅ Found @soulcraft/brainy-models package installed');
|
|
228
|
-
console.log(' Loading model files directly with tf.loadGraphModel...');
|
|
229
|
-
const directModel = await this.tryLoadFromCustomPath(brainyModelsPath);
|
|
230
|
-
if (directModel) {
|
|
231
|
-
console.log('✅ Successfully loaded model from @soulcraft/brainy-models');
|
|
232
|
-
console.log(' Using bundled model for maximum performance and reliability');
|
|
233
|
-
return directModel;
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
catch (error) {
|
|
238
|
-
console.log(`@soulcraft/brainy-models direct loading failed: ${error}`);
|
|
239
|
-
}
|
|
240
|
-
// Second, try custom models directory if specified (for Docker deployments)
|
|
241
|
-
if (this.options.customModelsPath) {
|
|
242
|
-
console.log(`Checking custom models directory: ${this.options.customModelsPath}`);
|
|
243
|
-
const customModel = await this.tryLoadFromCustomPath(this.options.customModelsPath);
|
|
244
|
-
if (customModel) {
|
|
245
|
-
console.log('✅ Successfully loaded model from custom directory');
|
|
246
|
-
console.log(' Using custom model path for Docker/production deployment');
|
|
247
|
-
return customModel;
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
// Third, try to use @tensorflow-models/universal-sentence-encoder as fallback
|
|
251
|
-
// This package includes the tokenizer but may fail with local files
|
|
252
|
-
try {
|
|
253
|
-
console.log('Checking for @tensorflow-models/universal-sentence-encoder package...');
|
|
254
|
-
const usePackageName = '@tensorflow-models/universal-sentence-encoder';
|
|
255
|
-
const use = await import(usePackageName).catch(() => null);
|
|
256
|
-
if (use && use.load) {
|
|
257
|
-
console.log('✅ Found @tensorflow-models/universal-sentence-encoder package');
|
|
258
|
-
// Check if we have local model files from @soulcraft/brainy-models
|
|
259
|
-
let modelUrl = undefined;
|
|
260
|
-
let vocabUrl = undefined;
|
|
261
|
-
try {
|
|
262
|
-
// Try to find local model files
|
|
263
|
-
const pathModule = 'path';
|
|
264
|
-
const fsModule = 'fs';
|
|
265
|
-
const path = await import(/* @vite-ignore */ pathModule);
|
|
266
|
-
const fs = await import(/* @vite-ignore */ fsModule);
|
|
267
|
-
// Check for brainy-models package
|
|
268
|
-
try {
|
|
269
|
-
const brainyModelsPath = require.resolve('@soulcraft/brainy-models/package.json');
|
|
270
|
-
const brainyModelsDir = path.dirname(brainyModelsPath);
|
|
271
|
-
const modelDir = path.join(brainyModelsDir, 'models', 'universal-sentence-encoder');
|
|
272
|
-
const modelJsonPath = path.join(modelDir, 'model.json');
|
|
273
|
-
if (fs.existsSync(modelJsonPath)) {
|
|
274
|
-
// Use file:// URL for local model
|
|
275
|
-
modelUrl = `file://${modelJsonPath}`;
|
|
276
|
-
console.log(`📁 Using local model files from: ${modelDir}`);
|
|
277
|
-
// Check for vocab file
|
|
278
|
-
const vocabPath = path.join(brainyModelsDir, 'models', 'vocab.json');
|
|
279
|
-
if (fs.existsSync(vocabPath)) {
|
|
280
|
-
vocabUrl = `file://${vocabPath}`;
|
|
281
|
-
console.log(`📁 Using local vocab file from: ${vocabPath}`);
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
catch (e) {
|
|
286
|
-
// brainy-models not found, will use remote models
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
catch (e) {
|
|
290
|
-
// Not in Node.js environment or files not found
|
|
291
|
-
}
|
|
292
|
-
try {
|
|
293
|
-
// Load the USE model with tokenizer
|
|
294
|
-
console.log('Loading Universal Sentence Encoder with tokenizer...');
|
|
295
|
-
const model = await use.load({ modelUrl, vocabUrl });
|
|
296
|
-
console.log('✅ Universal Sentence Encoder loaded successfully with tokenizer');
|
|
297
|
-
// The loaded model already has the correct interface
|
|
298
|
-
return model;
|
|
299
|
-
}
|
|
300
|
-
catch (loadError) {
|
|
301
|
-
console.error('Failed to load USE with tokenizer:', loadError);
|
|
302
|
-
// Fall through to try other methods
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
catch (importError) {
|
|
307
|
-
this.log(`@tensorflow-models/universal-sentence-encoder not available: ${importError}`);
|
|
308
|
-
}
|
|
309
|
-
// Check if we're in Node.js environment
|
|
310
|
-
const isNode = typeof process !== 'undefined' &&
|
|
311
|
-
process.versions != null &&
|
|
312
|
-
process.versions.node != null;
|
|
313
|
-
if (isNode) {
|
|
314
|
-
try {
|
|
315
|
-
// Try to load from bundled model directory
|
|
316
|
-
// Use dynamic import with a non-literal string to prevent Rollup from bundling these
|
|
317
|
-
const pathModule = 'path';
|
|
318
|
-
const fsModule = 'fs';
|
|
319
|
-
const urlModule = 'url';
|
|
320
|
-
const path = await import(/* @vite-ignore */ pathModule);
|
|
321
|
-
const fs = await import(/* @vite-ignore */ fsModule);
|
|
322
|
-
const { fileURLToPath } = await import(/* @vite-ignore */ urlModule);
|
|
323
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
324
|
-
const __dirname = path.dirname(__filename);
|
|
325
|
-
// Look for bundled model in multiple possible locations
|
|
326
|
-
const possiblePaths = [
|
|
327
|
-
// Direct @soulcraft/brainy-models paths
|
|
328
|
-
path.join(process.cwd(), 'node_modules', '@soulcraft', 'brainy-models', 'models', 'universal-sentence-encoder'),
|
|
329
|
-
path.join(process.cwd(), 'node_modules', '@soulcraft', 'brainy-models', 'universal-sentence-encoder'),
|
|
330
|
-
path.join(__dirname, '..', '..', 'node_modules', '@soulcraft', 'brainy-models', 'models', 'universal-sentence-encoder'),
|
|
331
|
-
path.join(__dirname, '..', '..', 'node_modules', '@soulcraft', 'brainy-models', 'universal-sentence-encoder'),
|
|
332
|
-
// Alternative paths
|
|
333
|
-
path.join(__dirname, '..', '..', 'models', 'bundled', 'universal-sentence-encoder'),
|
|
334
|
-
path.join(__dirname, '..', '..', 'brainy-models-package', 'models', 'universal-sentence-encoder'),
|
|
335
|
-
path.join(process.cwd(), 'brainy-models-package', 'models', 'universal-sentence-encoder'),
|
|
336
|
-
// Check parent directories (for monorepo structures)
|
|
337
|
-
path.join(process.cwd(), '..', 'node_modules', '@soulcraft', 'brainy-models', 'models', 'universal-sentence-encoder'),
|
|
338
|
-
path.join(process.cwd(), '..', '..', 'node_modules', '@soulcraft', 'brainy-models', 'models', 'universal-sentence-encoder')
|
|
339
|
-
];
|
|
340
|
-
for (const modelPath of possiblePaths) {
|
|
341
|
-
const modelJsonPath = path.join(modelPath, 'model.json');
|
|
342
|
-
if (fs.existsSync(modelJsonPath)) {
|
|
343
|
-
this.log(`Found bundled model at: ${modelJsonPath}`);
|
|
344
|
-
// Load TensorFlow.js if not already loaded
|
|
345
|
-
const tf = await import('@tensorflow/tfjs');
|
|
346
|
-
// Read the model.json to check the format
|
|
347
|
-
const modelJsonContent = JSON.parse(fs.readFileSync(modelJsonPath, 'utf8'));
|
|
348
|
-
// Ensure the format field exists for TensorFlow.js compatibility
|
|
349
|
-
if (!modelJsonContent.format) {
|
|
350
|
-
modelJsonContent.format = 'tfjs-graph-model';
|
|
351
|
-
try {
|
|
352
|
-
fs.writeFileSync(modelJsonPath, JSON.stringify(modelJsonContent, null, 2));
|
|
353
|
-
this.log(`✅ Added missing "format" field to model.json for TensorFlow.js compatibility`);
|
|
354
|
-
}
|
|
355
|
-
catch (writeError) {
|
|
356
|
-
this.log(`⚠️ Could not write format field to model.json: ${writeError}`);
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
const modelFormat = modelJsonContent.format || 'tfjs-graph-model';
|
|
360
|
-
let model;
|
|
361
|
-
if (modelFormat === 'tfjs-graph-model') {
|
|
362
|
-
// Use loadGraphModel for graph models
|
|
363
|
-
model = await tf.loadGraphModel(`file://${modelJsonPath}`);
|
|
364
|
-
}
|
|
365
|
-
else {
|
|
366
|
-
// Use loadLayersModel for layers models (default)
|
|
367
|
-
model = await tf.loadLayersModel(`file://${modelJsonPath}`);
|
|
368
|
-
}
|
|
369
|
-
// Return a wrapper that matches the Universal Sentence Encoder interface
|
|
370
|
-
return this.createModelWrapper(model);
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
catch (nodeImportError) {
|
|
375
|
-
this.log(`Could not load Node.js modules in browser: ${nodeImportError}`);
|
|
376
|
-
}
|
|
377
|
-
}
|
|
378
|
-
return null;
|
|
379
|
-
}
|
|
380
|
-
catch (error) {
|
|
381
|
-
this.log(`Error checking for bundled model: ${error}`);
|
|
382
|
-
return null;
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
/**
|
|
386
|
-
* Find the @soulcraft/brainy-models package path if installed
|
|
387
|
-
*/
|
|
388
|
-
findBrainyModelsPath() {
|
|
389
|
-
try {
|
|
390
|
-
// Check if we're in Node.js environment
|
|
391
|
-
const isNode = typeof process !== 'undefined' &&
|
|
392
|
-
process.versions != null &&
|
|
393
|
-
process.versions.node != null;
|
|
394
|
-
if (!isNode) {
|
|
395
|
-
return null;
|
|
396
|
-
}
|
|
397
|
-
// Try to resolve @soulcraft/brainy-models package
|
|
398
|
-
try {
|
|
399
|
-
const brainyModelsPackagePath = require.resolve('@soulcraft/brainy-models/package.json');
|
|
400
|
-
const path = require('path');
|
|
401
|
-
const brainyModelsDir = path.dirname(brainyModelsPackagePath);
|
|
402
|
-
const modelsPath = path.join(brainyModelsDir, 'models');
|
|
403
|
-
// Check if models directory exists
|
|
404
|
-
const fs = require('fs');
|
|
405
|
-
if (fs.existsSync(modelsPath)) {
|
|
406
|
-
return modelsPath;
|
|
407
|
-
}
|
|
408
|
-
}
|
|
409
|
-
catch (e) {
|
|
410
|
-
// Package not found
|
|
411
|
-
}
|
|
412
|
-
return null;
|
|
413
|
-
}
|
|
414
|
-
catch (error) {
|
|
415
|
-
return null;
|
|
416
|
-
}
|
|
417
|
-
}
|
|
418
|
-
/**
|
|
419
|
-
* Try to load model from a custom directory path
|
|
420
|
-
*/
|
|
421
|
-
async tryLoadFromCustomPath(customPath) {
|
|
422
|
-
try {
|
|
423
|
-
// Check if we're in Node.js environment
|
|
424
|
-
const isNode = typeof process !== 'undefined' &&
|
|
425
|
-
process.versions != null &&
|
|
426
|
-
process.versions.node != null;
|
|
427
|
-
if (!isNode) {
|
|
428
|
-
console.log('Custom model path only supported in Node.js environment');
|
|
429
|
-
return null;
|
|
430
|
-
}
|
|
431
|
-
// Dynamic imports to avoid bundling issues
|
|
432
|
-
const pathModule = 'path';
|
|
433
|
-
const fsModule = 'fs';
|
|
434
|
-
const path = await import(/* @vite-ignore */ pathModule);
|
|
435
|
-
const fs = await import(/* @vite-ignore */ fsModule);
|
|
436
|
-
// Look for models in standard subdirectories
|
|
437
|
-
const possibleModelPaths = [
|
|
438
|
-
// Direct path to universal-sentence-encoder
|
|
439
|
-
path.join(customPath, 'universal-sentence-encoder'),
|
|
440
|
-
// Mirroring @soulcraft/brainy-models structure
|
|
441
|
-
path.join(customPath, 'models', 'universal-sentence-encoder'),
|
|
442
|
-
// TensorFlow hub model structure
|
|
443
|
-
path.join(customPath, 'tfhub', 'universal-sentence-encoder'),
|
|
444
|
-
// Simple models directory
|
|
445
|
-
path.join(customPath, 'use'),
|
|
446
|
-
// Check if customPath itself contains model.json
|
|
447
|
-
customPath
|
|
448
|
-
];
|
|
449
|
-
for (const modelPath of possibleModelPaths) {
|
|
450
|
-
const modelJsonPath = path.join(modelPath, 'model.json');
|
|
451
|
-
if (fs.existsSync(modelJsonPath)) {
|
|
452
|
-
console.log(`Found model at custom path: ${modelJsonPath}`);
|
|
453
|
-
// Load TensorFlow.js if not already loaded
|
|
454
|
-
const tf = await import('@tensorflow/tfjs');
|
|
455
|
-
// Read and validate the model.json
|
|
456
|
-
const modelJsonContent = JSON.parse(fs.readFileSync(modelJsonPath, 'utf8'));
|
|
457
|
-
// Ensure the format field exists for TensorFlow.js compatibility
|
|
458
|
-
if (!modelJsonContent.format) {
|
|
459
|
-
modelJsonContent.format = 'tfjs-graph-model';
|
|
460
|
-
try {
|
|
461
|
-
fs.writeFileSync(modelJsonPath, JSON.stringify(modelJsonContent, null, 2));
|
|
462
|
-
console.log(`✅ Added missing "format" field to model.json for TensorFlow.js compatibility`);
|
|
463
|
-
}
|
|
464
|
-
catch (writeError) {
|
|
465
|
-
console.log(`⚠️ Could not write format field to model.json: ${writeError}`);
|
|
466
|
-
}
|
|
467
|
-
}
|
|
468
|
-
const modelFormat = modelJsonContent.format || 'tfjs-graph-model';
|
|
469
|
-
let model;
|
|
470
|
-
if (modelFormat === 'tfjs-graph-model') {
|
|
471
|
-
// Use loadGraphModel with proper Node.js file path (not file:// URL)
|
|
472
|
-
model = await tf.loadGraphModel(modelJsonPath);
|
|
473
|
-
}
|
|
474
|
-
else {
|
|
475
|
-
// Use loadLayersModel with proper Node.js file path (not file:// URL)
|
|
476
|
-
model = await tf.loadLayersModel(modelJsonPath);
|
|
477
|
-
}
|
|
478
|
-
// Return a wrapper that matches the Universal Sentence Encoder interface
|
|
479
|
-
return this.createModelWrapper(model);
|
|
480
|
-
}
|
|
481
|
-
}
|
|
482
|
-
console.log(`No model found in custom path: ${customPath}`);
|
|
483
|
-
return null;
|
|
484
|
-
}
|
|
485
|
-
catch (error) {
|
|
486
|
-
console.log(`Error loading from custom path ${customPath}: ${error}`);
|
|
487
|
-
return null;
|
|
488
|
-
}
|
|
489
|
-
}
|
|
490
|
-
/**
|
|
491
|
-
* Load model from a specific URL
|
|
492
|
-
*/
|
|
493
|
-
async loadFromUrl(url) {
|
|
494
|
-
try {
|
|
495
|
-
this.log(`Loading model from URL: ${url}`);
|
|
496
|
-
// Import TensorFlow.js
|
|
497
|
-
const tf = await import('@tensorflow/tfjs');
|
|
498
|
-
// Load the model as a graph model
|
|
499
|
-
const model = await tf.loadGraphModel(url);
|
|
500
|
-
this.log(`✅ Successfully loaded model from: ${url}`);
|
|
501
|
-
// Return a wrapper that matches the Universal Sentence Encoder interface
|
|
502
|
-
return this.createModelWrapper(model);
|
|
503
|
-
}
|
|
504
|
-
catch (error) {
|
|
505
|
-
throw new Error(`Failed to load model from ${url}: ${error}`);
|
|
506
|
-
}
|
|
507
|
-
}
|
|
508
|
-
/**
|
|
509
|
-
* Create a model wrapper that matches the Universal Sentence Encoder interface
|
|
510
|
-
*/
|
|
511
|
-
createModelWrapper(tfModel) {
|
|
512
|
-
return {
|
|
513
|
-
init: async () => {
|
|
514
|
-
// Model is already loaded
|
|
515
|
-
},
|
|
516
|
-
embed: async (sentences) => {
|
|
517
|
-
const tf = await import('@tensorflow/tfjs');
|
|
518
|
-
const input = Array.isArray(sentences) ? sentences : [sentences];
|
|
519
|
-
// Universal Sentence Encoder expects tokenized input
|
|
520
|
-
// For the tfhub model, we need to handle text preprocessing
|
|
521
|
-
// The model expects a tensor of strings
|
|
522
|
-
const inputTensor = tf.tensor(input);
|
|
523
|
-
try {
|
|
524
|
-
// Run the model prediction
|
|
525
|
-
const embeddings = await tfModel.predict(inputTensor);
|
|
526
|
-
// Convert to array and clean up
|
|
527
|
-
const result = await embeddings.array();
|
|
528
|
-
embeddings.dispose();
|
|
529
|
-
inputTensor.dispose();
|
|
530
|
-
// Return first embedding if single input, otherwise return all
|
|
531
|
-
return Array.isArray(sentences) ? result : (result[0] || []);
|
|
532
|
-
}
|
|
533
|
-
catch (error) {
|
|
534
|
-
inputTensor.dispose();
|
|
535
|
-
throw new Error(`Failed to generate embeddings: ${error}`);
|
|
536
|
-
}
|
|
537
|
-
},
|
|
538
|
-
dispose: async () => {
|
|
539
|
-
if (tfModel && tfModel.dispose) {
|
|
540
|
-
tfModel.dispose();
|
|
541
|
-
}
|
|
542
|
-
}
|
|
543
|
-
};
|
|
544
|
-
}
|
|
545
|
-
/**
|
|
546
|
-
* Apply timeout to a promise
|
|
547
|
-
*/
|
|
548
|
-
async withTimeout(promise, timeoutMs) {
|
|
549
|
-
const timeoutPromise = new Promise((_, reject) => {
|
|
550
|
-
setTimeout(() => {
|
|
551
|
-
reject(new Error(`Operation timed out after ${timeoutMs}ms`));
|
|
552
|
-
}, timeoutMs);
|
|
553
|
-
});
|
|
554
|
-
return Promise.race([promise, timeoutPromise]);
|
|
555
|
-
}
|
|
556
|
-
/**
|
|
557
|
-
* Calculate retry delay with exponential backoff
|
|
558
|
-
*/
|
|
559
|
-
calculateRetryDelay(attempt) {
|
|
560
|
-
if (!this.options.useExponentialBackoff) {
|
|
561
|
-
return this.options.initialRetryDelay;
|
|
562
|
-
}
|
|
563
|
-
// Exponential backoff: delay = initialDelay * (2 ^ attempt) + jitter
|
|
564
|
-
const exponentialDelay = this.options.initialRetryDelay * Math.pow(2, attempt);
|
|
565
|
-
// Add jitter (random factor) to prevent thundering herd
|
|
566
|
-
const jitter = Math.random() * 1000;
|
|
567
|
-
// Cap at maximum delay
|
|
568
|
-
const delay = Math.min(exponentialDelay + jitter, this.options.maxRetryDelay);
|
|
569
|
-
return Math.floor(delay);
|
|
570
|
-
}
|
|
571
|
-
/**
|
|
572
|
-
* Sleep for specified milliseconds
|
|
573
|
-
*/
|
|
574
|
-
sleep(ms) {
|
|
575
|
-
return new Promise(resolve => setTimeout(resolve, ms));
|
|
576
|
-
}
|
|
577
|
-
/**
|
|
578
|
-
* Log message if verbose mode is enabled
|
|
579
|
-
*/
|
|
580
|
-
log(message) {
|
|
581
|
-
if (this.options.verbose) {
|
|
582
|
-
console.log(`[RobustModelLoader] ${message}`);
|
|
583
|
-
}
|
|
584
|
-
}
|
|
585
|
-
/**
|
|
586
|
-
* Get loading statistics
|
|
587
|
-
*/
|
|
588
|
-
getLoadingStats() {
|
|
589
|
-
const stats = {};
|
|
590
|
-
for (const [identifier, attempts] of this.loadAttempts.entries()) {
|
|
591
|
-
stats[identifier] = attempts;
|
|
592
|
-
}
|
|
593
|
-
return stats;
|
|
594
|
-
}
|
|
595
|
-
/**
|
|
596
|
-
* Reset loading statistics
|
|
597
|
-
*/
|
|
598
|
-
resetStats() {
|
|
599
|
-
this.loadAttempts.clear();
|
|
600
|
-
}
|
|
601
|
-
}
|
|
602
|
-
/**
|
|
603
|
-
* Create a robust model loader with sensible defaults
|
|
604
|
-
*/
|
|
605
|
-
export function createRobustModelLoader(options) {
|
|
606
|
-
return new RobustModelLoader(options);
|
|
607
|
-
}
|
|
608
|
-
/**
|
|
609
|
-
* Utility function to create fallback URLs for Universal Sentence Encoder
|
|
610
|
-
*/
|
|
611
|
-
export function getUniversalSentenceEncoderFallbacks() {
|
|
612
|
-
return [
|
|
613
|
-
// TensorFlow Hub model URL (correct path)
|
|
614
|
-
'https://tfhub.dev/tensorflow/tfjs-model/universal-sentence-encoder/1/default/1/model.json?tfjs-format=file',
|
|
615
|
-
// Alternative TensorFlow Hub URL
|
|
616
|
-
'https://www.kaggle.com/models/tensorflow/universal-sentence-encoder/tfJs/default/1/model.json?tfjs-format=file',
|
|
617
|
-
// Google Storage URL (updated path)
|
|
618
|
-
'https://storage.googleapis.com/tfjs-models/savedmodel/universal_sentence_encoder/model.json',
|
|
619
|
-
// Alternative Google Storage URL
|
|
620
|
-
'https://storage.googleapis.com/tfhub-tfjs-modules/tensorflow/universal-sentence-encoder/1/default/1/model.json',
|
|
621
|
-
// Add more fallback URLs as they become available
|
|
622
|
-
];
|
|
623
|
-
}
|
|
624
|
-
//# sourceMappingURL=robustModelLoader.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"robustModelLoader.js","sourceRoot":"","sources":["../../src/utils/robustModelLoader.ts"],"names":[],"mappings":"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"}
|