brainy/cloud-wrapper/src/services/brainyService.ts
David Snelling e00f1a92ce feat: add WebSocket API, REST API routes, and server setup for Brainy
Implemented a WebSocket API for real-time communication and REST API routes for CRUD operations on nouns and verbs. Added a server initialization script with WebSocket server integration and improved application structure with modularized routing and services.
2025-06-06 09:09:07 -07:00

80 lines
2.3 KiB
TypeScript

import { BrainyData } from '@soulcraft/brainy';
import dotenv from 'dotenv';
// Load environment variables
dotenv.config();
/**
* Initialize the Brainy instance with appropriate configuration
* based on environment variables
*/
export async function initializeBrainy(): Promise<BrainyData> {
// Get storage configuration from environment variables
const storageType = process.env.STORAGE_TYPE || 'filesystem';
// Create configuration object
const config: any = {
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;
case 'filesystem':
// Configure filesystem storage
config.storage.rootDirectory = process.env.STORAGE_ROOT_DIR || './data';
break;
case 'memory':
// No additional configuration needed for memory storage
break;
default:
// Default to filesystem storage
config.storage.rootDirectory = process.env.STORAGE_ROOT_DIR || './data';
break;
}
// Configure embedding options
if (process.env.USE_SIMPLE_EMBEDDING === 'true') {
// Use simple embedding (faster but less accurate)
config.useSimpleEmbedding = true;
}
// Configure HNSW index parameters if provided
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)
: 200,
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();
return brainy;
}
/**
* Get the current storage type being used by Brainy
*/
export async function getStorageType(brainy: BrainyData): Promise<string> {
const status = await brainy.status();
return status.storageType || 'unknown';
}