wifi-densepose/vendor/midstream/npm/examples/openai-realtime-text.ts

135 lines
4.0 KiB
TypeScript

/**
* Example: OpenAI Realtime API with Text
*
* Demonstrates text-based conversation with OpenAI Realtime API
* integrated with MidStream's temporal analysis
*/
import { OpenAIRealtimeClient, createDefaultSessionConfig } from '../src/openai-realtime.js';
import * as dotenv from 'dotenv';
dotenv.config();
async function main() {
// Create client
const client = new OpenAIRealtimeClient({
apiKey: process.env.OPENAI_API_KEY!,
model: process.env.OPENAI_REALTIME_MODEL,
voice: 'alloy',
temperature: 0.8,
});
// Set up event listeners
client.on('connected', () => {
console.log('โœ“ Connected to OpenAI Realtime API');
});
client.on('session.created', (session) => {
console.log('โœ“ Session created:', session.id);
// Update session config
client.updateSession({
...createDefaultSessionConfig(),
modalities: ['text'], // Text-only for this example
instructions: 'You are a helpful assistant that analyzes conversations in real-time.',
});
});
client.on('response.text.delta', (delta) => {
process.stdout.write(delta);
});
client.on('response.text.done', (text) => {
console.log('\n');
});
client.on('response.done', (response) => {
console.log('โœ“ Response completed');
// Get MidStream analysis
const analysis = client.getMidStreamAnalysis();
console.log('\n๐Ÿ“Š MidStream Analysis:');
console.log(` - Messages analyzed: ${analysis.messageCount}`);
console.log(` - Meta-learning level: ${analysis.metaLearning.currentLevel}`);
});
client.on('midstream.analysis', (status) => {
console.log('\n๐Ÿง  Real-time MidStream update:', {
conversationSize: status.conversationHistorySize,
averageReward: status.averageReward.toFixed(2),
});
});
client.on('error', (error) => {
console.error('โŒ Error:', error.message);
});
client.on('disconnected', () => {
console.log('โœ— Disconnected from OpenAI');
});
// Connect
try {
await client.connect();
// Simulate conversation
console.log('\n๐Ÿ’ฌ Starting conversation...\n');
// Message 1
console.log('User: Hello! Can you help me understand patterns in conversations?');
client.sendText('Hello! Can you help me understand patterns in conversations?');
// Wait for response
await new Promise(resolve => {
client.once('response.done', resolve);
});
await new Promise(resolve => setTimeout(resolve, 1000));
// Message 2
console.log('\nUser: What are some common conversation patterns?');
client.sendText('What are some common conversation patterns?');
await new Promise(resolve => {
client.once('response.done', resolve);
});
await new Promise(resolve => setTimeout(resolve, 1000));
// Message 3
console.log('\nUser: Can you give me an example?');
client.sendText('Can you give me an example?');
await new Promise(resolve => {
client.once('response.done', resolve);
});
// Final analysis
await new Promise(resolve => setTimeout(resolve, 1000));
console.log('\n\nโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•');
console.log('๐Ÿ“ˆ Final MidStream Analysis');
console.log('โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•');
const finalAnalysis = client.getMidStreamAnalysis();
console.log(JSON.stringify(finalAnalysis, null, 2));
const agent = client.getAgent();
const status = agent.getStatus();
console.log('\n๐Ÿ“Š Agent Status:');
console.log(` - Conversation history: ${status.conversationHistorySize} messages`);
console.log(` - Average reward: ${status.averageReward.toFixed(2)}`);
console.log(` - Meta-learning: ${status.metaLearning.currentLevel}`);
// Cleanup
client.disconnect();
process.exit(0);
} catch (error) {
console.error('โŒ Fatal error:', error);
process.exit(1);
}
}
main();