UNPKG

claude-flow

Version:

Ruflo - Enterprise AI agent orchestration for Claude Code. Deploy 60+ specialized agents in coordinated swarms with self-learning, fault-tolerant consensus, vector memory, and MCP integration

113 lines (96 loc) • 2.86 kB
/** * Benchmark Framework * * Utilities for running performance benchmarks. */ export interface BenchmarkResult { name: string; iterations: number; totalTime: number; avgTime: number; minTime: number; maxTime: number; opsPerSecond: number; meetsTarget: boolean; } export interface BenchmarkOptions { iterations?: number; warmupIterations?: number; targetTime?: number; } export class BenchmarkRunner { private results: BenchmarkResult[] = []; async run(name: string, fn: () => void | Promise<void>, options: BenchmarkOptions = {}): Promise<BenchmarkResult> { const { iterations = 1000, warmupIterations = 100, targetTime } = options; // Warmup for (let i = 0; i < warmupIterations; i++) { await fn(); } // Actual benchmark const times: number[] = []; const start = performance.now(); for (let i = 0; i < iterations; i++) { const iterStart = performance.now(); await fn(); times.push(performance.now() - iterStart); } const totalTime = performance.now() - start; const avgTime = totalTime / iterations; const minTime = Math.min(...times); const maxTime = Math.max(...times); const opsPerSecond = 1000 / avgTime; const result: BenchmarkResult = { name, iterations, totalTime, avgTime, minTime, maxTime, opsPerSecond, meetsTarget: targetTime ? avgTime <= targetTime : true, }; this.results.push(result); return result; } getResults(): BenchmarkResult[] { return [...this.results]; } printSummary(): void { console.log('\n=== Benchmark Summary ===\n'); for (const result of this.results) { const status = result.meetsTarget ? 'āœ…' : 'āŒ'; console.log(`${status} ${result.name}`); console.log(` Avg: ${formatTime(result.avgTime)}`); console.log(` Min: ${formatTime(result.minTime)}`); console.log(` Max: ${formatTime(result.maxTime)}`); console.log(` Ops/sec: ${result.opsPerSecond.toFixed(2)}`); console.log(''); } } } export function formatTime(ms: number): string { if (ms < 0.001) { return `${(ms * 1000000).toFixed(2)}ns`; } else if (ms < 1) { return `${(ms * 1000).toFixed(2)}μs`; } else if (ms < 1000) { return `${ms.toFixed(2)}ms`; } else { return `${(ms / 1000).toFixed(2)}s`; } } export function meetsTarget(actual: number, target: number): boolean { return actual <= target; } export async function benchmark( name: string, fn: () => void | Promise<void>, options: BenchmarkOptions = {} ): Promise<BenchmarkResult> { const runner = new BenchmarkRunner(); return runner.run(name, fn, options); } export function createBenchmarkSuite(name: string): BenchmarkRunner { console.log(`\nšŸ“Š Benchmark Suite: ${name}\n`); return new BenchmarkRunner(); }