diff --git a/cloud-wrapper/src/services/brainyService.ts b/cloud-wrapper/src/services/brainyService.ts index 865f09e5..8fa21853 100644 --- a/cloud-wrapper/src/services/brainyService.ts +++ b/cloud-wrapper/src/services/brainyService.ts @@ -1,8 +1,17 @@ -import { BrainyData } from '@soulcraft/brainy'; -import dotenv from 'dotenv'; +import { BrainyData, BrainyDataConfig } from '@soulcraft/brainy' +import dotenv from 'dotenv' // Load environment variables -dotenv.config(); +dotenv.config() + +/** + * Extended configuration interface that includes rootDirectory + */ +interface ExtendedBrainyDataConfig extends BrainyDataConfig { + storage: BrainyDataConfig['storage'] & { + rootDirectory?: string + } +} /** * Initialize the Brainy instance with appropriate configuration @@ -10,39 +19,50 @@ dotenv.config(); */ export async function initializeBrainy(): Promise { // Get storage configuration from environment variables - const storageType = process.env.STORAGE_TYPE || 'filesystem'; + const storageType = process.env.STORAGE_TYPE || 'filesystem' // Create configuration object - const config: any = { + const config: ExtendedBrainyDataConfig = { storage: {} - }; + } // Configure storage based on type switch (storageType) { case 's3': // Configure S3 storage - config.storage.s3Storage = { - bucketName: process.env.S3_BUCKET_NAME, - accessKeyId: process.env.S3_ACCESS_KEY_ID, - secretAccessKey: process.env.S3_SECRET_ACCESS_KEY, - region: process.env.S3_REGION || 'us-east-1', - endpoint: process.env.S3_ENDPOINT // Optional for custom S3-compatible services - }; - break; + if (process.env.S3_ENDPOINT) { + // Use customS3Storage for S3-compatible services with custom endpoints + config.storage.customS3Storage = { + bucketName: process.env.S3_BUCKET_NAME, + accessKeyId: process.env.S3_ACCESS_KEY_ID, + secretAccessKey: process.env.S3_SECRET_ACCESS_KEY, + region: process.env.S3_REGION || 'us-east-1', + endpoint: process.env.S3_ENDPOINT + } + } else { + // Use standard S3 storage for AWS S3 + config.storage.s3Storage = { + bucketName: process.env.S3_BUCKET_NAME, + accessKeyId: process.env.S3_ACCESS_KEY_ID, + secretAccessKey: process.env.S3_SECRET_ACCESS_KEY, + region: process.env.S3_REGION || 'us-east-1' + } + } + break case 'filesystem': // Configure filesystem storage - config.storage.rootDirectory = process.env.STORAGE_ROOT_DIR || './data'; - break; + config.storage.rootDirectory = process.env.STORAGE_ROOT_DIR || './data' + break case 'memory': // No additional configuration needed for memory storage - break; + break default: // Default to filesystem storage - config.storage.rootDirectory = process.env.STORAGE_ROOT_DIR || './data'; - break; + config.storage.rootDirectory = process.env.STORAGE_ROOT_DIR || './data' + break } // Note: Universal Sentence Encoder is now the only embedding option @@ -52,26 +72,26 @@ export async function initializeBrainy(): Promise { if (process.env.HNSW_M) { config.hnsw = { M: parseInt(process.env.HNSW_M, 10), - efConstruction: process.env.HNSW_EF_CONSTRUCTION - ? parseInt(process.env.HNSW_EF_CONSTRUCTION, 10) + efConstruction: process.env.HNSW_EF_CONSTRUCTION + ? parseInt(process.env.HNSW_EF_CONSTRUCTION, 10) : 200, - efSearch: process.env.HNSW_EF_SEARCH - ? parseInt(process.env.HNSW_EF_SEARCH, 10) + efSearch: process.env.HNSW_EF_SEARCH + ? parseInt(process.env.HNSW_EF_SEARCH, 10) : 50 - }; + } } // Create and initialize the Brainy instance - const brainy = new BrainyData(config); - await brainy.init(); + const brainy = new BrainyData(config) + await brainy.init() - return brainy; + return brainy } /** * Get the current storage type being used by Brainy */ export async function getStorageType(brainy: BrainyData): Promise { - const status = await brainy.status(); - return status.storageType || 'unknown'; + const status = await brainy.status() + return status.type || 'unknown' }