**chore: remove outdated changelog and summary documents**
- Deleted `CHANGES.md`, `CHANGES_SUMMARY.md`, `CONCURRENCY_ANALYSIS.md`, `CONCURRENCY_IMPLEMENTATION_SUMMARY.md`, and related developer documentation files. - Removed redundant or legacy content no longer aligned with the current codebase and workflows. - Updated repository to reflect streamlined documentation approach, reducing clutter and improving maintainability. **Purpose**: Simplify and declutter repository by removing obsolete documentation files, ensuring it remains focused and relevant.
This commit is contained in:
parent
0f2075ede4
commit
79df44351c
30 changed files with 343 additions and 3 deletions
103
docs/technical/DIMENSION_MISMATCH_SUMMARY.md
Normal file
103
docs/technical/DIMENSION_MISMATCH_SUMMARY.md
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
# Dimension Mismatch Issue: Summary and Recommendations
|
||||
|
||||
## What Happened
|
||||
|
||||
The search functionality in Brainy stopped working because of a dimension mismatch between stored vectors and the expected dimensions in the current version of the codebase:
|
||||
|
||||
1. **Previous State**: The system was using vectors with 3 dimensions.
|
||||
2. **Current State**: The system now expects 512-dimensional vectors from the Universal Sentence Encoder.
|
||||
3. **Code Change**: Recent updates (around July 16, 2025) introduced dimension validation during initialization, which skips vectors with mismatched dimensions.
|
||||
4. **Result**: During initialization, vectors with 3 dimensions were skipped, resulting in an empty search index and no search results.
|
||||
|
||||
## Root Cause Analysis
|
||||
|
||||
The root cause was identified by examining the codebase:
|
||||
|
||||
1. In `brainyData.ts`, the `init()` method checks if vector dimensions match the expected dimensions (line 400):
|
||||
```javascript
|
||||
if (noun.vector.length !== this._dimensions) {
|
||||
console.warn(
|
||||
`Skipping noun ${noun.id} due to dimension mismatch: expected ${this._dimensions}, got ${noun.vector.length}`
|
||||
)
|
||||
// Skip this noun and continue with the next one
|
||||
return;
|
||||
}
|
||||
```
|
||||
|
||||
2. The default dimension is set to 512 in the constructor (line 200):
|
||||
```javascript
|
||||
this._dimensions = config.dimensions || 512
|
||||
```
|
||||
|
||||
3. The `UniversalSentenceEncoder` class in `embedding.ts` produces 512-dimensional vectors (lines 358-359):
|
||||
```javascript
|
||||
// Return a zero vector of appropriate dimension (512 is the default for USE)
|
||||
return new Array(512).fill(0)
|
||||
```
|
||||
|
||||
4. Git history shows that on July 16, 2025, a commit was made that added dimension validation:
|
||||
```
|
||||
Added a `dimensions` property to `BrainyDataConfig` for specifying vector dimensions.
|
||||
Introduced validation for vector dimensions during database creation and insertion to ensure consistency.
|
||||
Enhanced error handling and logging for dimension mismatches.
|
||||
```
|
||||
|
||||
This indicates that the system previously used 3-dimensional vectors, but after the update, it expects 512-dimensional vectors. The existing data was not migrated, causing the search functionality to break.
|
||||
|
||||
## Solution Implemented
|
||||
|
||||
We created and tested a fix script (`fix-dimension-mismatch.js`) that:
|
||||
|
||||
1. Creates a backup of the existing data
|
||||
2. Reads all noun files directly from the filesystem
|
||||
3. For each noun:
|
||||
- Extracts text from metadata
|
||||
- Deletes the existing noun
|
||||
- Re-adds the noun with the same ID but using the current embedding function
|
||||
4. Recreates all verb relationships between the re-embedded nouns
|
||||
5. Verifies that search works by performing a test search
|
||||
|
||||
The script successfully fixed the issue by re-embedding all data with the correct dimensions, and search functionality was restored.
|
||||
|
||||
## Production Recommendations
|
||||
|
||||
For production environments, we recommend:
|
||||
|
||||
### 1. Use the Enhanced Migration Script
|
||||
|
||||
We've created a comprehensive production migration guide (`production-migration-guide.md`) that includes:
|
||||
|
||||
- Enhanced backup strategies with metadata
|
||||
- Batching for large datasets
|
||||
- Robust error handling and recovery
|
||||
- Progress monitoring and reporting
|
||||
- A parallel database approach for mission-critical systems
|
||||
|
||||
### 2. Implement Preventive Measures
|
||||
|
||||
To prevent similar issues in the future:
|
||||
|
||||
- **Version Tracking**: Add version information to stored vectors
|
||||
- **Auto-Migration**: Enhance initialization to automatically re-embed mismatched vectors
|
||||
- **Regular Validation**: Implement a database validation process
|
||||
- **Documentation**: Document embedding changes in release notes
|
||||
|
||||
### 3. Scheduling and Communication
|
||||
|
||||
- Schedule the migration during a maintenance window
|
||||
- Communicate the change to all stakeholders
|
||||
- Have a rollback plan in case of issues
|
||||
- Monitor the system after the migration
|
||||
|
||||
## Conclusion
|
||||
|
||||
The dimension mismatch issue was caused by a change in the embedding function that increased vector dimensions from 3 to 512. The solution is to re-embed all existing data using the current embedding function, which can be done using the provided `fix-dimension-mismatch.js` script with the enhancements suggested for production environments.
|
||||
|
||||
By implementing the preventive measures outlined in the production migration guide, you can avoid similar issues in the future and ensure smoother transitions when embedding functions or vector dimensions change.
|
||||
|
||||
## Files Created
|
||||
|
||||
1. `check-database.js` - Script to verify database status and search functionality
|
||||
2. `fix-dimension-mismatch.js` - Script to fix the dimension mismatch issue
|
||||
3. `production-migration-guide.md` - Comprehensive guide for production migration
|
||||
4. `DIMENSION_MISMATCH_SUMMARY.md` - This summary document
|
||||
Loading…
Add table
Add a link
Reference in a new issue