"use strict"; /** * DSPy Training Session - Usage Example * * Demonstrates how to use the DSPy learning framework for multi-model training * with automatic prompt optimization and benchmarking. * * @example */ Object.defineProperty(exports, "__esModule", { value: true }); exports.basicTrainingExample = basicTrainingExample; exports.advancedTrainingExample = advancedTrainingExample; exports.costOptimizedTrainingExample = costOptimizedTrainingExample; exports.qualityFocusedTrainingExample = qualityFocusedTrainingExample; exports.benchmarkComparisonExample = benchmarkComparisonExample; const dspy_learning_session_js_1 = require("../training/dspy-learning-session.js"); /** * Example 1: Basic Training Session */ async function basicTrainingExample() { console.log('šŸš€ Starting Basic DSPy Training Session\n'); // Configure training session with multiple models const session = new dspy_learning_session_js_1.DSPyTrainingSession({ models: [ { provider: dspy_learning_session_js_1.ModelProvider.CLAUDE, model: 'claude-sonnet-4', apiKey: process.env.ANTHROPIC_API_KEY || 'sk-ant-test', temperature: 0.7, maxTokens: 1000 }, { provider: dspy_learning_session_js_1.ModelProvider.GPT4, model: 'gpt-4-turbo', apiKey: process.env.OPENAI_API_KEY || 'sk-test', temperature: 0.7, maxTokens: 1000 }, { provider: dspy_learning_session_js_1.ModelProvider.GEMINI, model: 'gemini-2.0-flash-exp', apiKey: process.env.GEMINI_API_KEY || 'test-key', temperature: 0.7, maxTokens: 1000 }, { provider: dspy_learning_session_js_1.ModelProvider.LLAMA, model: 'llama-3.1-70b', apiKey: process.env.TOGETHER_API_KEY || 'test-key', temperature: 0.7, maxTokens: 1000 } ], optimizationRounds: 5, convergenceThreshold: 0.95, maxConcurrency: 4, enableCrossLearning: true, enableHooksIntegration: true, costBudget: 10.0, // $10 USD budget timeoutPerIteration: 30000, baselineIterations: 3, benchmarkSamples: 50 }); // Create DSPy signature for the task const optimizer = new dspy_learning_session_js_1.OptimizationEngine(); const signature = optimizer.createSignature('product-description', 'Generate compelling product descriptions', 'high-quality, SEO-optimized product description', { examples: [ { input: 'Wireless headphones with noise cancellation', output: 'Premium wireless headphones featuring advanced active noise cancellation technology...' }, { input: 'Organic cotton t-shirt', output: 'Sustainably crafted organic cotton t-shirt that combines comfort with environmental responsibility...' } ], constraints: [ 'min_length:100', 'max_length:500', 'contains:product benefits', 'contains:call to action' ], objectives: [ 'Maximize engagement', 'Optimize for SEO', 'Include emotional appeal', 'Highlight unique value proposition' ] }); // Set up event listeners session.on('start', (data) => { console.log(`šŸ“Š Training started - Phase: ${data.phase}`); }); session.on('phase', (phase) => { console.log(`\nšŸ”„ Phase transition: ${phase}`); }); session.on('iteration', (result) => { console.log(` āœ“ ${result.modelProvider} - Iteration ${result.iteration}: ` + `Quality: ${result.quality.score.toFixed(3)}, ` + `Latency: ${result.performance.latency.toFixed(0)}ms, ` + `Cost: $${result.performance.cost.toFixed(4)}`); }); session.on('optimization_round', (round) => { console.log(`\nšŸ”§ Optimization Round ${round}`); }); session.on('converged', (provider) => { console.log(` ⭐ ${provider} has converged!`); }); session.on('benchmark_progress', (data) => { console.log(` šŸ“ˆ Benchmark progress: ${data.completed}/${data.total}`); }); session.on('budget_exceeded', (cost) => { console.log(` āš ļø Cost budget exceeded: $${cost.toFixed(2)}`); }); session.on('report', (data) => { console.log('\nšŸ“Š Final Report:\n'); console.log(data.report); console.log(`\nšŸ† Best Model: ${data.bestModel}`); console.log(`šŸ’° Total Cost: $${data.totalCost.toFixed(4)}`); console.log(`ā±ļø Duration: ${(data.duration / 1000).toFixed(2)}s`); }); session.on('complete', (data) => { console.log('\nāœ… Training complete!'); }); session.on('error', (error) => { console.error('āŒ Error:', error); }); // Run the training session const basePrompt = ` Generate a compelling product description that: - Highlights key features and benefits - Uses persuasive language - Includes SEO keywords naturally - Has a clear call-to-action - Maintains professional tone Product: {product_name} `.trim(); await session.run(basePrompt, signature); // Get final statistics const stats = session.getStatistics(); console.log('\nšŸ“Š Final Statistics:', JSON.stringify(stats, null, 2)); } /** * Example 2: Advanced Training with Real-time Monitoring */ async function advancedTrainingExample() { console.log('šŸš€ Starting Advanced DSPy Training with Real-time Monitoring\n'); const session = new dspy_learning_session_js_1.DSPyTrainingSession({ models: [ { provider: dspy_learning_session_js_1.ModelProvider.CLAUDE, model: 'claude-sonnet-4', apiKey: process.env.ANTHROPIC_API_KEY || 'sk-ant-test' }, { provider: dspy_learning_session_js_1.ModelProvider.GEMINI, model: 'gemini-2.0-flash-exp', apiKey: process.env.GEMINI_API_KEY || 'test-key' } ], optimizationRounds: 10, enableCrossLearning: true, enableHooksIntegration: true, costBudget: 5.0 }); // Real-time metrics tracking const metricsHistory = []; session.on('metrics', (metrics) => { metricsHistory.push({ timestamp: Date.now(), ...metrics }); // Calculate moving averages if (metricsHistory.length >= 5) { const recent = metricsHistory.slice(-5); const avgQuality = recent.reduce((sum, m) => sum + m.quality.score, 0) / 5; const avgLatency = recent.reduce((sum, m) => sum + m.performance.latency, 0) / 5; console.log(` šŸ“Š Moving avg (last 5): Quality: ${avgQuality.toFixed(3)}, ` + `Latency: ${avgLatency.toFixed(0)}ms`); } }); // Hooks integration monitoring session.on('hooks_integration', (data) => { console.log(` šŸ”— Hooks integration: ${data.action} - ${data.key}`); }); const optimizer = new dspy_learning_session_js_1.OptimizationEngine(); const signature = optimizer.createSignature('code-generation', 'Generate TypeScript code', 'production-ready TypeScript code with types', { constraints: [ 'contains:type definitions', 'contains:error handling', 'min_length:50' ], objectives: [ 'Follow TypeScript best practices', 'Include JSDoc comments', 'Use modern ES6+ syntax' ] }); const basePrompt = ` Generate production-ready TypeScript code that: - Uses strong typing - Includes proper error handling - Follows best practices - Has clear documentation Task: {task_description} `.trim(); await session.run(basePrompt, signature); } /** * Example 3: Cost-Optimized Training */ async function costOptimizedTrainingExample() { console.log('šŸš€ Starting Cost-Optimized DSPy Training\n'); // Use only cost-effective models const session = new dspy_learning_session_js_1.DSPyTrainingSession({ models: [ { provider: dspy_learning_session_js_1.ModelProvider.GEMINI, model: 'gemini-2.0-flash-exp', apiKey: process.env.GEMINI_API_KEY || 'test-key' }, { provider: dspy_learning_session_js_1.ModelProvider.LLAMA, model: 'llama-3.1-70b', apiKey: process.env.TOGETHER_API_KEY || 'test-key' } ], optimizationRounds: 3, baselineIterations: 2, benchmarkSamples: 20, costBudget: 1.0, // Strict $1 budget enableCrossLearning: true }); // Track cost efficiency let totalIterations = 0; let totalQuality = 0; session.on('iteration', (result) => { totalIterations++; totalQuality += result.quality.score; const avgQuality = totalQuality / totalIterations; const costPerIteration = session.getStatistics().totalCost / totalIterations; console.log(` šŸ’° Iteration ${totalIterations}: ` + `Avg Quality: ${avgQuality.toFixed(3)}, ` + `Cost/iter: $${costPerIteration.toFixed(4)}`); }); const optimizer = new dspy_learning_session_js_1.OptimizationEngine(); const signature = optimizer.createSignature('summary', 'Summarize text', 'concise summary', { constraints: ['max_length:200'], objectives: ['Maintain key information', 'Use clear language'] }); const basePrompt = 'Summarize the following text: {text}'; await session.run(basePrompt, signature); const stats = session.getStatistics(); console.log(`\nšŸ’° Final cost efficiency: $${stats.totalCost.toFixed(4)} for ${totalIterations} iterations`); } /** * Example 4: Quality-Focused Training */ async function qualityFocusedTrainingExample() { console.log('šŸš€ Starting Quality-Focused DSPy Training\n'); // Use high-quality models with aggressive optimization const session = new dspy_learning_session_js_1.DSPyTrainingSession({ models: [ { provider: dspy_learning_session_js_1.ModelProvider.CLAUDE, model: 'claude-sonnet-4', apiKey: process.env.ANTHROPIC_API_KEY || 'sk-ant-test', temperature: 0.3 // Lower temperature for consistency }, { provider: dspy_learning_session_js_1.ModelProvider.GPT4, model: 'gpt-4-turbo', apiKey: process.env.OPENAI_API_KEY || 'sk-test', temperature: 0.3 } ], optimizationRounds: 15, // More rounds for quality convergenceThreshold: 0.98, // Higher threshold baselineIterations: 5, benchmarkSamples: 100, enableCrossLearning: true }); // Quality monitoring let highQualityCount = 0; let totalCount = 0; session.on('iteration', (result) => { totalCount++; if (result.quality.score >= 0.9) { highQualityCount++; } const highQualityRate = highQualityCount / totalCount; console.log(` ⭐ Quality rate: ${(highQualityRate * 100).toFixed(1)}% ` + `(${highQualityCount}/${totalCount} >= 0.9)`); }); const optimizer = new dspy_learning_session_js_1.OptimizationEngine(); const signature = optimizer.createSignature('technical-writing', 'Write technical documentation', 'clear, accurate technical documentation', { examples: [ { input: 'Explain async/await in JavaScript', output: 'Async/await is a modern JavaScript feature that simplifies asynchronous code...' } ], constraints: [ 'min_length:200', 'contains:code examples', 'contains:best practices' ], objectives: [ 'Maximize clarity', 'Include practical examples', 'Follow technical writing standards', 'Ensure accuracy' ] }); const basePrompt = ` Write clear, accurate technical documentation for: {topic} Requirements: - Include code examples - Explain concepts clearly - Follow best practices - Provide practical examples `.trim(); await session.run(basePrompt, signature); } /** * Example 5: Benchmark Comparison */ async function benchmarkComparisonExample() { console.log('šŸš€ Starting Benchmark Comparison\n'); const collector = new dspy_learning_session_js_1.BenchmarkCollector(); // Run training session const session = new dspy_learning_session_js_1.DSPyTrainingSession({ models: [ { provider: dspy_learning_session_js_1.ModelProvider.CLAUDE, model: 'claude-sonnet-4', apiKey: process.env.ANTHROPIC_API_KEY || 'sk-ant-test' }, { provider: dspy_learning_session_js_1.ModelProvider.GPT4, model: 'gpt-4-turbo', apiKey: process.env.OPENAI_API_KEY || 'sk-test' }, { provider: dspy_learning_session_js_1.ModelProvider.GEMINI, model: 'gemini-2.0-flash-exp', apiKey: process.env.GEMINI_API_KEY || 'test-key' }, { provider: dspy_learning_session_js_1.ModelProvider.LLAMA, model: 'llama-3.1-70b', apiKey: process.env.TOGETHER_API_KEY || 'test-key' } ], optimizationRounds: 5, benchmarkSamples: 50 }); session.on('iteration', (result) => { collector.addResult(result); }); session.on('complete', () => { console.log('\nšŸ“Š Benchmark Comparison:\n'); // Get comparison const comparison = collector.getComparison(); // Display comparison table console.log('Model | Iterations | Avg Quality | Avg Latency | Total Cost | Improvement'); console.log('------------|------------|-------------|-------------|------------|------------'); for (const [provider, stats] of Object.entries(comparison)) { if (!stats) continue; console.log(`${provider.padEnd(11)} | ` + `${String(stats.totalIterations).padEnd(10)} | ` + `${stats.avgQualityScore.toFixed(3).padEnd(11)} | ` + `${stats.avgLatency.toFixed(0).padEnd(11)}ms | ` + `$${stats.totalCost.toFixed(4).padEnd(9)} | ` + `${(stats.improvementRate * 100).toFixed(1)}%`); } // Highlight best model const bestModel = collector.getBestModel(); console.log(`\nšŸ† Winner: ${bestModel}`); // Generate full report console.log('\n' + collector.generateReport()); }); const optimizer = new dspy_learning_session_js_1.OptimizationEngine(); const signature = optimizer.createSignature('general-task', 'Complete task', 'high-quality output'); const basePrompt = 'Complete the following task: {task}'; await session.run(basePrompt, signature); } // ============================================================================ // Main Execution // ============================================================================ async function main() { console.log('='.repeat(80)); console.log('DSPy.ts Training Session Examples'); console.log('='.repeat(80)); console.log(); const examples = [ { name: 'Basic Training', fn: basicTrainingExample }, { name: 'Advanced Monitoring', fn: advancedTrainingExample }, { name: 'Cost-Optimized', fn: costOptimizedTrainingExample }, { name: 'Quality-Focused', fn: qualityFocusedTrainingExample }, { name: 'Benchmark Comparison', fn: benchmarkComparisonExample } ]; // Run the example specified by command line arg, or default to first const exampleIndex = parseInt(process.argv[2] || '0'); if (exampleIndex < 0 || exampleIndex >= examples.length) { console.log('Available examples:'); examples.forEach((ex, i) => { console.log(` ${i}: ${ex.name}`); }); console.log(`\nUsage: node dspy-training-example.js [0-${examples.length - 1}]`); return; } const example = examples[exampleIndex]; console.log(`Running: ${example.name}\n`); try { await example.fn(); } catch (error) { console.error('\nāŒ Example failed:', error); process.exit(1); } } // Run if executed directly if (import.meta.url === `file://${process.argv[1]}`) { main().catch(console.error); } //# sourceMappingURL=dspy-training-example.js.map