UNPKG

ruv-swarm

Version:

High-performance neural network swarm orchestration in WebAssembly

296 lines (248 loc) 7.89 kB
// neural-network.ts - TypeScript wrapper for WASM neural network functionality export interface NetworkConfig { inputSize: number; hiddenLayers: LayerConfig[]; outputSize: number; outputActivation: string; connectionRate?: number; randomSeed?: number; } export interface LayerConfig { size: number; activation: string; steepness?: number; } export interface TrainingDataConfig { inputs: number[][]; outputs: number[][]; } export interface TrainingConfig { algorithm: 'incremental_backprop' | 'batch_backprop' | 'rprop' | 'quickprop' | 'sarprop'; learningRate?: number; momentum?: number; maxEpochs: number; targetError: number; validationSplit?: number; earlyStopping?: boolean; } export interface AgentNetworkConfig { agentId: string; agentType: string; cognitivePattern: 'convergent' | 'divergent' | 'lateral' | 'systems' | 'critical' | 'abstract'; inputSize: number; outputSize: number; taskSpecialization?: string[]; } export interface CascadeConfig { maxHiddenNeurons: number; numCandidates: number; outputMaxEpochs: number; candidateMaxEpochs: number; outputLearningRate: number; candidateLearningRate: number; outputTargetError: number; candidateTargetCorrelation: number; minCorrelationImprovement: number; candidateWeightMin: number; candidateWeightMax: number; candidateActivations: string[]; verbose: boolean; } export interface NetworkInfo { numLayers: number; numInputs: number; numOutputs: number; totalNeurons: number; totalConnections: number; metrics: { trainingError: number; validationError: number; epochsTrained: number; totalConnections: number; memoryUsage: number; }; } export interface TrainingResult { converged: boolean; finalError: number; epochs: number; targetError: number; } export interface CognitiveState { agentId: string; cognitivePattern: any; neuralArchitecture: { layers: number; neurons: number; connections: number; }; trainingProgress: { epochsTrained: number; currentLoss: number; bestLoss: number; isTraining: boolean; }; performance: any; adaptationHistoryLength: number; } let wasmModule: any = null; export async function initializeNeuralWasm() { if (wasmModule) return wasmModule; try { // Dynamic import of WASM module const { default: init, ...exports } = await import('../wasm/ruv_swarm_wasm'); await init(); wasmModule = exports; return wasmModule; } catch (error) { throw new Error(`Failed to initialize WASM neural module: ${error}`); } } export class NeuralNetwork { private network: any; constructor(private wasm: any, config: NetworkConfig) { this.network = new wasm.WasmNeuralNetwork(config); } async run(inputs: number[]): Promise<number[]> { return this.network.run(new Float32Array(inputs)); } getWeights(): Float32Array { return this.network.get_weights(); } setWeights(weights: Float32Array): void { this.network.set_weights(weights); } getInfo(): NetworkInfo { return this.network.get_network_info(); } setTrainingData(data: TrainingDataConfig): void { this.network.set_training_data(data); } } export class NeuralTrainer { private trainer: any; constructor(private wasm: any, config: TrainingConfig) { this.trainer = new wasm.WasmTrainer(config); } async trainEpoch(network: NeuralNetwork, data: TrainingDataConfig): Promise<number> { return this.trainer.train_epoch(network.network, data); } async trainUntilTarget( network: NeuralNetwork, data: TrainingDataConfig, targetError: number, maxEpochs: number, ): Promise<TrainingResult> { return this.trainer.train_until_target(network.network, data, targetError, maxEpochs); } getTrainingHistory(): any[] { return this.trainer.get_training_history(); } getAlgorithmInfo(): any { return this.trainer.get_algorithm_info(); } } export class AgentNeuralManager { private manager: any; constructor(private wasm: any) { this.manager = new wasm.AgentNeuralNetworkManager(); } async createAgentNetwork(config: AgentNetworkConfig): Promise<string> { return this.manager.create_agent_network(config); } async trainAgentNetwork(agentId: string, data: TrainingDataConfig): Promise<any> { return this.manager.train_agent_network(agentId, data); } async getAgentInference(agentId: string, inputs: number[]): Promise<number[]> { return this.manager.get_agent_inference(agentId, new Float32Array(inputs)); } async getAgentCognitiveState(agentId: string): Promise<CognitiveState> { return this.manager.get_agent_cognitive_state(agentId); } async fineTuneDuringExecution(agentId: string, experienceData: any): Promise<any> { return this.manager.fine_tune_during_execution(agentId, experienceData); } } export class ActivationFunctions { static async getAll(wasm: any): Promise<[string, string][]> { return wasm.ActivationFunctionManager.get_all_functions(); } static async test(wasm: any, name: string, input: number, steepness: number = 1.0): Promise<number> { return wasm.ActivationFunctionManager.test_activation_function(name, input, steepness); } static async compare(wasm: any, input: number): Promise<Record<string, number>> { return wasm.ActivationFunctionManager.compare_functions(input); } static async getProperties(wasm: any, name: string): Promise<any> { return wasm.ActivationFunctionManager.get_function_properties(name); } } export class CascadeTrainer { private trainer: any; constructor(private wasm: any, config: CascadeConfig | null, network: NeuralNetwork, data: TrainingDataConfig) { this.trainer = new wasm.WasmCascadeTrainer(config || this.getDefaultConfig(), network.network, data); } async train(): Promise<any> { return this.trainer.train(); } getConfig(): any { return this.trainer.get_config(); } static getDefaultConfig(wasm: any): CascadeConfig { return wasm.WasmCascadeTrainer.create_default_config(); } private getDefaultConfig(): CascadeConfig { return CascadeTrainer.getDefaultConfig(this.wasm); } } // High-level helper functions export async function createNeuralNetwork(config: NetworkConfig): Promise<NeuralNetwork> { const wasm = await initializeNeuralWasm(); return new NeuralNetwork(wasm, config); } export async function createTrainer(config: TrainingConfig): Promise<NeuralTrainer> { const wasm = await initializeNeuralWasm(); return new NeuralTrainer(wasm, config); } export async function createAgentNeuralManager(): Promise<AgentNeuralManager> { const wasm = await initializeNeuralWasm(); return new AgentNeuralManager(wasm); } // Export activation function names for convenience export const ACTIVATION_FUNCTIONS = { LINEAR: 'linear', SIGMOID: 'sigmoid', SIGMOID_SYMMETRIC: 'sigmoid_symmetric', TANH: 'tanh', GAUSSIAN: 'gaussian', GAUSSIAN_SYMMETRIC: 'gaussian_symmetric', ELLIOT: 'elliot', ELLIOT_SYMMETRIC: 'elliot_symmetric', RELU: 'relu', RELU_LEAKY: 'relu_leaky', COS: 'cos', COS_SYMMETRIC: 'cos_symmetric', SIN: 'sin', SIN_SYMMETRIC: 'sin_symmetric', THRESHOLD: 'threshold', THRESHOLD_SYMMETRIC: 'threshold_symmetric', LINEAR_PIECE: 'linear_piece', LINEAR_PIECE_SYMMETRIC: 'linear_piece_symmetric', } as const; // Export training algorithm names export const TRAINING_ALGORITHMS = { INCREMENTAL_BACKPROP: 'incremental_backprop', BATCH_BACKPROP: 'batch_backprop', RPROP: 'rprop', QUICKPROP: 'quickprop', SARPROP: 'sarprop', } as const; // Export cognitive patterns export const COGNITIVE_PATTERNS = { CONVERGENT: 'convergent', DIVERGENT: 'divergent', LATERAL: 'lateral', SYSTEMS: 'systems', CRITICAL: 'critical', ABSTRACT: 'abstract', } as const;