aiwg
Version:
Cognitive architecture for AI-augmented software development with structured memory, ensemble validation, and closed-loop correction. FAIR-aligned artifacts, 84% cost reduction via human-in-the-loop, standards adopted by 100+ organizations.
136 lines (114 loc) • 4.84 kB
JavaScript
/**
* Example usage of IterationAnalytics
*
* Run with: node tools/ralph-external/iteration-analytics.example.mjs
*/
import { IterationAnalytics } from './iteration-analytics.mjs';
import { existsSync, rmSync } from 'fs';
const EXAMPLE_DIR = '.aiwg/ralph/analytics-example';
// Clean up previous run
if (existsSync(EXAMPLE_DIR)) {
rmSync(EXAMPLE_DIR, { recursive: true, force: true });
}
console.log('=== IterationAnalytics Example ===\n');
// Create analytics tracker
const analytics = new IterationAnalytics(
'example-loop-001',
'Implement user authentication with JWT tokens',
{
storagePath: EXAMPLE_DIR,
diminishingReturnsThreshold: 0.05,
consecutiveCountThreshold: 2,
qualityThreshold: 70,
}
);
console.log('1. Created analytics tracker for loop:', analytics.loopId);
console.log(' Task:', analytics.taskDescription);
console.log();
// Simulate Ralph loop iterations with quality scores
const iterations = [
{ score: 65, tokens: 1200, cost: 0.012, time: 4500, verified: 'passed' },
{ score: 78, tokens: 1500, cost: 0.015, time: 5200, verified: 'passed' },
{ score: 85, tokens: 1800, cost: 0.018, time: 6100, verified: 'passed' }, // Peak
{ score: 87, tokens: 1600, cost: 0.016, time: 5800, verified: 'passed' },
{ score: 88, tokens: 1700, cost: 0.017, time: 5900, verified: 'passed' }, // Diminishing returns
{ score: 86, tokens: 1900, cost: 0.019, time: 6400, verified: 'failed' }, // Degradation
];
console.log('2. Recording iterations:\n');
iterations.forEach((iter, index) => {
const record = analytics.recordIteration({
iteration_number: index + 1,
quality_score: iter.score,
tokens_used: iter.tokens,
token_cost_usd: iter.cost,
execution_time_ms: iter.time,
verification_status: iter.verified,
output_snapshot_path: `.aiwg/ralph/example/iteration-${index + 1}`,
reflections: [`Iteration ${index + 1} complete`],
});
console.log(` Iteration ${record.iteration_number}: Quality ${record.quality_score} (delta: ${record.quality_delta >= 0 ? '+' : ''}${record.quality_delta})`);
});
console.log();
// Check for diminishing returns
const diminishingReturns = analytics.detectDiminishingReturns();
console.log('3. Diminishing Returns Analysis:');
console.log(` Detected: ${diminishingReturns.detected}`);
if (diminishingReturns.detected) {
console.log(` First detected at iteration: ${diminishingReturns.iteration}`);
console.log(` Reason: ${diminishingReturns.reason}`);
}
console.log();
// Get quality trajectory
const trajectory = analytics.getTrajectory();
console.log('4. Quality Trajectory:', trajectory);
console.log();
// Get optimal iteration
const optimal = analytics.getOptimalIteration(false);
console.log('5. Optimal Iteration:');
console.log(` Iteration: ${optimal.iteration_number}`);
console.log(` Quality Score: ${optimal.quality_score}`);
console.log(` Verification Status: ${optimal.verification_status}`);
console.log();
// Select best iteration based on configuration
const selection = analytics.selectBestIteration();
console.log('6. Best Iteration Selection:');
console.log(` Selected Iteration: ${selection.selected.iteration_number}`);
console.log(` Quality Score: ${selection.selected.quality_score}`);
console.log(` Reason: ${selection.reason}`);
console.log();
// Generate summary
const summary = analytics.generateSummary();
console.log('7. Summary Statistics:');
console.log(` Total Iterations: ${summary.total_iterations}`);
console.log(` Total Tokens: ${summary.total_tokens.toLocaleString()}`);
console.log(` Total Cost: $${summary.total_cost_usd.toFixed(4)}`);
console.log(` Total Time: ${IterationAnalytics.formatDuration(summary.total_time_ms)}`);
console.log(` Quality Trajectory: ${summary.quality_trajectory}`);
console.log();
// Export analytics
const paths = analytics.export();
console.log('8. Exported Analytics:');
console.log(` JSON: ${paths.json}`);
console.log(` Markdown Report: ${paths.markdown}`);
console.log();
// Show excerpt of markdown report
const report = analytics.generateReport();
const reportLines = report.split('\n');
console.log('9. Markdown Report Preview:');
console.log(' ---');
reportLines.slice(0, 20).forEach(line => console.log(' ' + line));
console.log(' ...');
console.log(' ---');
console.log();
console.log('10. Chart Preview:');
const chart = analytics.generateQualityChart();
chart.split('\n').forEach(line => console.log(' ' + line));
console.log();
// Demonstrate loading from file
console.log('11. Loading from saved file...');
const loaded = IterationAnalytics.load(paths.json);
console.log(` Loaded loop: ${loaded.loopId}`);
console.log(` Iterations: ${loaded.iterations.length}`);
console.log();
console.log('=== Example Complete ===');
console.log(`\nCheck ${EXAMPLE_DIR} for generated files.`);