Skip to content

Agents Package Streaming

This example demonstrates the real-time streaming response capabilities of the @robota-sdk/agents package, showcasing advanced streaming features with performance monitoring.

Overview

The agents streaming example shows how to:

  • Implement real-time streaming responses
  • Monitor streaming performance and metrics
  • Handle errors gracefully during streaming
  • Optimize agent configuration for streaming
  • Track streaming statistics and performance

Code Example

typescript
/**
 * 11-agents-streaming.ts
 * 
 * This example demonstrates the streaming response capabilities of the @robota-sdk/agents package:
 * - Real-time streaming responses
 * - Streaming with tools and plugins
 * - Error handling in streaming scenarios
 * - Performance monitoring during streaming
 */

import { Robota } from '@robota-sdk/agents';
import { OpenAIProvider } from '@robota-sdk/openai';
import OpenAI from 'openai';
import dotenv from 'dotenv';

// Load environment variables
dotenv.config();

async function main() {
    try {
        console.log('🌊 Agents Package Streaming Example Started...\n');

        // Validate API key
        const apiKey = process.env.OPENAI_API_KEY;
        if (!apiKey) {
            throw new Error('OPENAI_API_KEY environment variable is required');
        }

        console.log('⚙️ Creating agent optimized for streaming...');

        // Create OpenAI client and provider
        const openaiClient = new OpenAI({ apiKey });
        const openaiProvider = new OpenAIProvider({
            client: openaiClient
        });

        // Create Robota instance optimized for streaming
        const robota = new Robota({
            name: 'StreamingAgent',
            model: 'gpt-3.5-turbo',
            provider: 'openai',
            aiProviders: {
                'openai': openaiProvider
            },
            currentModel: 'gpt-3.5-turbo',
            systemMessage: 'You are a helpful assistant that provides detailed explanations.',
            logging: {
                level: 'info',
                enabled: true
            },
            streaming: {
                enabled: true,
                bufferSize: 50
            }
        });

        console.log(`✅ Streaming agent '${robota.getStats().name}' created successfully\n`);

        // Test streaming with different query types
        const queries = [
            'Tell me about space exploration.',
            'Explain quantum computing in simple terms.'
        ];

        for (let i = 0; i < queries.length; i++) {
            const query = queries[i];
            console.log(`🌊 Streaming Response ${i + 1}:`);
            console.log(`User: ${query}\n`);

            const startTime = Date.now();
            let streamedContent = '';
            let chunkCount = 0;

            try {
                // Start streaming
                const stream = await robota.stream(query);

                process.stdout.write('Assistant: ');

                // Handle streaming chunks
                for await (const chunk of stream) {
                    if (chunk.content) {
                        process.stdout.write(chunk.content);
                        streamedContent += chunk.content;
                        chunkCount++;
                    }
                    
                    // Handle streaming metadata
                    if (chunk.metadata) {
                        // Optional: Process streaming metadata
                    }
                }

                const duration = Date.now() - startTime;
                console.log(`\n\n📊 Streaming Stats:`);
                console.log(`- Duration: ${duration}ms`);
                console.log(`- Chunks received: ${chunkCount}`);
                console.log(`- Characters streamed: ${streamedContent.length}`);
                console.log(`- Average chunk size: ${Math.round(streamedContent.length / chunkCount)} chars`);

            } catch (error) {
                console.error(`❌ Streaming error: ${error}`);
            }

            if (i < queries.length - 1) {
                console.log('\n' + '─'.repeat(80) + '\n');
            }
        }

        // Show Final Statistics
        console.log('\n📊 Final Agent Statistics:');
        const stats = robota.getStats();
        console.log(`- Agent name: ${stats.name}`);
        console.log(`- Total interactions: ${stats.historyLength / 2}`);
        console.log(`- Uptime: ${Math.round(stats.uptime)}ms`);

        console.log('\n✅ Streaming Example Completed!');

        // Clean up resources
        await robota.destroy();
        process.exit(0);
    } catch (error) {
        console.error('❌ Error occurred:', error);
        process.exit(1);
    }
}

// Execute
main();

Expected Output

🌊 Agents Package Streaming Example Started...

⚙️ Creating agent optimized for streaming...
✅ Streaming agent 'StreamingAgent' created successfully

🌊 Streaming Response 1:
User: Tell me about space exploration.

Space exploration represents humanity's quest to understand and explore the cosmos beyond Earth. It began in earnest during the mid-20th century with the launch of Sputnik 1 in 1957, marking the start of the space age. Since then, we've achieved remarkable milestones including human moon landings, robotic missions to Mars, and the development of the International Space Station.

📊 Streaming Stats:
- Duration: 1847ms
- Chunks received: 45
- Characters streamed: 384
- Average chunk size: 9 chars

📊 Final Agent Statistics:
- Agent name: StreamingAgent
- Total interactions: 22
- Current provider: openai
- Uptime: 1847ms

✅ Streaming Example Completed!

Released under the MIT License.