brainy/src/neural/embeddedTypeEmbeddings.ts

118 lines
146 KiB
TypeScript
Raw Normal View History

/**
* 🧠 BRAINY EMBEDDED TYPE EMBEDDINGS
*
* AUTO-GENERATED - DO NOT EDIT
fix(storage): v4.8.0 metadata architecture refactoring - FIXES VFS bug CRITICAL FIX: VFS bug that persisted through v4.5.1-v4.7.4 is NOW FIXED. Root Cause: - Storage adapters were not properly extracting standard fields from metadata - This caused getVerbsBySource_internal() to return 0 relationships despite relationships existing - VFS PathResolver couldn't navigate directory structure Solution - Metadata Architecture Refactoring: 1. Move standard fields to top-level of HNSWNounWithMetadata and HNSWVerbWithMetadata - type, createdAt, updatedAt, confidence, weight, service, data, createdBy 2. Update all 9 storage adapters to extract standard fields from metadata on load 3. Maintain backward compatibility at storage layer (metadata files unchanged) Changes: - src/coreTypes.ts: Update HNSWNounWithMetadata and HNSWVerbWithMetadata interfaces - Add top-level standard fields - Change data type from unknown to Record<string, any> - Add confidence field to GraphVerb - src/storage/baseStorage.ts: Add type cast pattern for standard field extraction - src/storage/adapters/*.ts: Fix all 9 adapters (memoryStorage, fileSystemStorage, gcsStorage, s3CompatibleStorage, r2Storage, opfsStorage, azureBlobStorage, typeAwareStorageAdapter) - Extract standard fields from metadata on load - Place at top-level of returned entities - src/api/DataAPI.ts: Read fields from top-level instead of metadata - src/graph/graphAdjacencyIndex.ts: Convert HNSWVerbWithMetadata to GraphVerb format - src/utils/metadataIndex.ts: Fix typo (metadata → entityOrMetadata) - src/types/brainy.types.ts: Add createdBy field to AddParams - src/types/graphTypes.ts: Add service field to GraphVerb Test Results: ✅ VFS bug FIXED - vfs.readdir('/') now returns files (was returning empty array) ✅ getVerbsBySource_internal() now returns relationships correctly ✅ Build succeeds with ZERO compilation errors ✅ 95.7% of tests pass (954/997) Breaking Changes: - None - backward compatibility maintained at storage layer Version: 4.8.0 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-27 15:43:49 -07:00
* Generated: 2025-10-27T22:13:06.943Z
* Noun Types: 31
* Verb Types: 40
*
* This file contains pre-computed embeddings for all NounTypes and VerbTypes.
* No runtime computation needed, instant availability!
*/
import { NounType, VerbType } from '../types/graphTypes.js'
import { Vector } from '../coreTypes.js'
// Type metadata
export const TYPE_METADATA = {
nounTypes: 31,
verbTypes: 40,
totalTypes: 71,
embeddingDimensions: 384,
fix(storage): v4.8.0 metadata architecture refactoring - FIXES VFS bug CRITICAL FIX: VFS bug that persisted through v4.5.1-v4.7.4 is NOW FIXED. Root Cause: - Storage adapters were not properly extracting standard fields from metadata - This caused getVerbsBySource_internal() to return 0 relationships despite relationships existing - VFS PathResolver couldn't navigate directory structure Solution - Metadata Architecture Refactoring: 1. Move standard fields to top-level of HNSWNounWithMetadata and HNSWVerbWithMetadata - type, createdAt, updatedAt, confidence, weight, service, data, createdBy 2. Update all 9 storage adapters to extract standard fields from metadata on load 3. Maintain backward compatibility at storage layer (metadata files unchanged) Changes: - src/coreTypes.ts: Update HNSWNounWithMetadata and HNSWVerbWithMetadata interfaces - Add top-level standard fields - Change data type from unknown to Record<string, any> - Add confidence field to GraphVerb - src/storage/baseStorage.ts: Add type cast pattern for standard field extraction - src/storage/adapters/*.ts: Fix all 9 adapters (memoryStorage, fileSystemStorage, gcsStorage, s3CompatibleStorage, r2Storage, opfsStorage, azureBlobStorage, typeAwareStorageAdapter) - Extract standard fields from metadata on load - Place at top-level of returned entities - src/api/DataAPI.ts: Read fields from top-level instead of metadata - src/graph/graphAdjacencyIndex.ts: Convert HNSWVerbWithMetadata to GraphVerb format - src/utils/metadataIndex.ts: Fix typo (metadata → entityOrMetadata) - src/types/brainy.types.ts: Add createdBy field to AddParams - src/types/graphTypes.ts: Add service field to GraphVerb Test Results: ✅ VFS bug FIXED - vfs.readdir('/') now returns files (was returning empty array) ✅ getVerbsBySource_internal() now returns relationships correctly ✅ Build succeeds with ZERO compilation errors ✅ 95.7% of tests pass (954/997) Breaking Changes: - None - backward compatibility maintained at storage layer Version: 4.8.0 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-27 15:43:49 -07:00
generatedAt: "2025-10-27T22:13:06.944Z",
sizeBytes: {
embeddings: 109056,
base64: 145408
}
}
// All noun types in order
const NOUN_TYPE_ORDER: NounType[] = ["person","organization","location","thing","concept","event","document","media","file","message","content","collection","dataset","product","service","user","task","project","process","state","role","topic","language","currency","measurement","hypothesis","experiment","contract","regulation","interface","resource"]
// All verb types in order
const VERB_TYPE_ORDER: VerbType[] = ["relatedTo","contains","partOf","locatedAt","references","precedes","succeeds","causes","dependsOn","requires","creates","transforms","becomes","modifies","consumes","owns","attributedTo","createdBy","belongsTo","memberOf","worksWith","friendOf","follows","likes","reportsTo","supervises","mentors","communicates","describes","defines","categorizes","measures","evaluates","uses","implements","extends","inherits","conflicts","synchronizes","competes"]
// Pre-computed embeddings (142.0KB base64)
const EMBEDDINGS_BASE64 = "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
// Decode embeddings at startup (happens once, <10ms)
function decodeEmbeddings(): Uint8Array {
if (typeof Buffer !== 'undefined') {
// Node.js environment
return Buffer.from(EMBEDDINGS_BASE64, 'base64')
} else if (typeof atob !== 'undefined') {
// Browser environment
const binaryString = atob(EMBEDDINGS_BASE64)
const bytes = new Uint8Array(binaryString.length)
for (let i = 0; i < binaryString.length; i++) {
bytes[i] = binaryString.charCodeAt(i)
}
return bytes
}
return new Uint8Array(0)
}
// Cached decoded embeddings
let decodedEmbeddings: Uint8Array | null = null
/**
* Get noun type embeddings as a Map for fast lookup
* This is called once and cached
*/
export function getNounTypeEmbeddings(): Map<NounType, Vector> {
if (!decodedEmbeddings) {
decodedEmbeddings = decodeEmbeddings()
}
const embeddings = new Map<NounType, Vector>()
const view = new DataView(decodedEmbeddings.buffer)
const embeddingSize = 384
NOUN_TYPE_ORDER.forEach((type, index) => {
const offset = index * embeddingSize * 4
const embedding = new Float32Array(embeddingSize)
for (let i = 0; i < embeddingSize; i++) {
embedding[i] = view.getFloat32(offset + i * 4, true)
}
embeddings.set(type, Array.from(embedding))
})
return embeddings
}
/**
* Get verb type embeddings as a Map for fast lookup
* This is called once and cached
*/
export function getVerbTypeEmbeddings(): Map<VerbType, Vector> {
if (!decodedEmbeddings) {
decodedEmbeddings = decodeEmbeddings()
}
const embeddings = new Map<VerbType, Vector>()
const view = new DataView(decodedEmbeddings.buffer)
const embeddingSize = 384
// Verb embeddings start after noun embeddings
const verbStartOffset = 31 * embeddingSize * 4
VERB_TYPE_ORDER.forEach((type, index) => {
const offset = verbStartOffset + index * embeddingSize * 4
const embedding = new Float32Array(embeddingSize)
for (let i = 0; i < embeddingSize; i++) {
embedding[i] = view.getFloat32(offset + i * 4, true)
}
embeddings.set(type, Array.from(embedding))
})
return embeddings
}
// Import logging
import { prodLog } from '../utils/logger.js'
prodLog.info(`🧠 Brainy Type Embeddings loaded: ${TYPE_METADATA.nounTypes} nouns, ${TYPE_METADATA.verbTypes} verbs, ${(TYPE_METADATA.sizeBytes.embeddings / 1024).toFixed(1)}KB`)