fix: improve model loading reliability with better error handling and updated fallback URLs
- Add better error handling for @soulcraft/brainy-models package loading - Log model metadata when available for debugging - Try alternative loading methods if primary method fails - Update fallback URLs to working endpoints - Add more comprehensive path checking for bundled models - Improve error messages to help diagnose loading issues
This commit is contained in:
parent
3b1716fcdf
commit
4ae9cd2119
1 changed files with 61 additions and 27 deletions
|
|
@ -314,28 +314,50 @@ export class RobustModelLoader {
|
||||||
console.log('✅ Found @soulcraft/brainy-models package installed')
|
console.log('✅ Found @soulcraft/brainy-models package installed')
|
||||||
console.log(' Using local bundled model for maximum performance and reliability')
|
console.log(' Using local bundled model for maximum performance and reliability')
|
||||||
|
|
||||||
const encoder = new brainyModels.BundledUniversalSentenceEncoder({
|
try {
|
||||||
verbose: this.options.verbose,
|
const encoder = new brainyModels.BundledUniversalSentenceEncoder({
|
||||||
preferCompressed: false
|
verbose: this.options.verbose,
|
||||||
})
|
preferCompressed: false
|
||||||
|
})
|
||||||
await encoder.load()
|
|
||||||
console.log('✅ Local Universal Sentence Encoder model loaded successfully')
|
// Log metadata if available
|
||||||
|
if (encoder.metadata) {
|
||||||
// Return a wrapper that matches the Universal Sentence Encoder interface
|
console.log('📋 Model metadata:', encoder.metadata)
|
||||||
return {
|
}
|
||||||
init: async () => {
|
|
||||||
// Already initialized
|
await encoder.load()
|
||||||
},
|
console.log('✅ Local Universal Sentence Encoder model loaded successfully')
|
||||||
embed: async (sentences: string | string[]) => {
|
|
||||||
const input = Array.isArray(sentences) ? sentences : [sentences]
|
// Return a wrapper that matches the Universal Sentence Encoder interface
|
||||||
const embeddings = await encoder.embedToArrays(input)
|
return {
|
||||||
|
init: async () => {
|
||||||
// Return the first embedding as a Vector (number[])
|
// Already initialized
|
||||||
return embeddings[0] || []
|
},
|
||||||
},
|
embed: async (sentences: string | string[]) => {
|
||||||
dispose: async () => {
|
const input = Array.isArray(sentences) ? sentences : [sentences]
|
||||||
encoder.dispose()
|
const embeddings = await encoder.embedToArrays(input)
|
||||||
|
|
||||||
|
// Return the first embedding as a Vector (number[])
|
||||||
|
return embeddings[0] || []
|
||||||
|
},
|
||||||
|
dispose: async () => {
|
||||||
|
encoder.dispose()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (loadError) {
|
||||||
|
console.error('Failed to load bundled model:', loadError)
|
||||||
|
// Try alternative loading method if available
|
||||||
|
if (brainyModels.loadUniversalSentenceEncoder) {
|
||||||
|
console.log('Trying alternative loading method...')
|
||||||
|
try {
|
||||||
|
const model = await brainyModels.loadUniversalSentenceEncoder({
|
||||||
|
verbose: this.options.verbose
|
||||||
|
})
|
||||||
|
console.log('✅ Loaded via alternative method')
|
||||||
|
return model
|
||||||
|
} catch (altError) {
|
||||||
|
console.error('Alternative loading failed:', altError)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -365,12 +387,18 @@ export class RobustModelLoader {
|
||||||
|
|
||||||
// Look for bundled model in multiple possible locations
|
// Look for bundled model in multiple possible locations
|
||||||
const possiblePaths = [
|
const possiblePaths = [
|
||||||
|
// Direct @soulcraft/brainy-models paths
|
||||||
|
path.join(process.cwd(), 'node_modules', '@soulcraft', 'brainy-models', 'models', 'universal-sentence-encoder'),
|
||||||
|
path.join(process.cwd(), 'node_modules', '@soulcraft', 'brainy-models', 'universal-sentence-encoder'),
|
||||||
|
path.join(__dirname, '..', '..', 'node_modules', '@soulcraft', 'brainy-models', 'models', 'universal-sentence-encoder'),
|
||||||
|
path.join(__dirname, '..', '..', 'node_modules', '@soulcraft', 'brainy-models', 'universal-sentence-encoder'),
|
||||||
|
// Alternative paths
|
||||||
path.join(__dirname, '..', '..', 'models', 'bundled', 'universal-sentence-encoder'),
|
path.join(__dirname, '..', '..', 'models', 'bundled', 'universal-sentence-encoder'),
|
||||||
path.join(__dirname, '..', '..', 'brainy-models-package', 'models', 'universal-sentence-encoder'),
|
path.join(__dirname, '..', '..', 'brainy-models-package', 'models', 'universal-sentence-encoder'),
|
||||||
path.join(process.cwd(), 'brainy-models-package', 'models', 'universal-sentence-encoder'),
|
path.join(process.cwd(), 'brainy-models-package', 'models', 'universal-sentence-encoder'),
|
||||||
path.join(__dirname, '..', '..', 'node_modules', '@soulcraft', 'brainy-models', 'models', 'universal-sentence-encoder'),
|
// Check parent directories (for monorepo structures)
|
||||||
path.join(__dirname, '..', '..', 'node_modules', '@soulcraft', 'brainy-models', 'universal-sentence-encoder'),
|
path.join(process.cwd(), '..', 'node_modules', '@soulcraft', 'brainy-models', 'models', 'universal-sentence-encoder'),
|
||||||
path.join(process.cwd(), 'node_modules', '@soulcraft', 'brainy-models', 'universal-sentence-encoder')
|
path.join(process.cwd(), '..', '..', 'node_modules', '@soulcraft', 'brainy-models', 'models', 'universal-sentence-encoder')
|
||||||
]
|
]
|
||||||
|
|
||||||
for (const modelPath of possiblePaths) {
|
for (const modelPath of possiblePaths) {
|
||||||
|
|
@ -648,8 +676,14 @@ export function createRobustModelLoader(options?: ModelLoadOptions): RobustModel
|
||||||
*/
|
*/
|
||||||
export function getUniversalSentenceEncoderFallbacks(): string[] {
|
export function getUniversalSentenceEncoderFallbacks(): string[] {
|
||||||
return [
|
return [
|
||||||
'https://tfhub.dev/tensorflow/tfjs-model/universal-sentence-encoder/1/default/1',
|
// TensorFlow Hub model URL (correct path)
|
||||||
'https://storage.googleapis.com/tfjs-models/savedmodel/universal_sentence_encoder/1/model.json',
|
'https://tfhub.dev/tensorflow/tfjs-model/universal-sentence-encoder/1/default/1/model.json?tfjs-format=file',
|
||||||
|
// Alternative TensorFlow Hub URL
|
||||||
|
'https://www.kaggle.com/models/tensorflow/universal-sentence-encoder/tfJs/default/1/model.json?tfjs-format=file',
|
||||||
|
// Google Storage URL (updated path)
|
||||||
|
'https://storage.googleapis.com/tfjs-models/savedmodel/universal_sentence_encoder/model.json',
|
||||||
|
// Alternative Google Storage URL
|
||||||
|
'https://storage.googleapis.com/tfhub-tfjs-modules/tensorflow/universal-sentence-encoder/1/default/1/model.json',
|
||||||
// Add more fallback URLs as they become available
|
// Add more fallback URLs as they become available
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue