Untitled
unknown
javascript
13 days ago
3.0 kB
0
No Index
in a day
const SYSTEM_MESSAGE = 'You are a helpful and bubbly AI assistant' const VOICE = 'ash' export default defineWebSocketHandler({ async open(peer) { // Connect to OpenAI Realtime API const openAiWs = new WebSocket('wss://api.openai.com/v1/realtime?model=gpt-4o-realtime-preview', { headers: { Authorization: `Bearer ${process.env.OPENAI_API_KEY}`, "OpenAI-Beta": "realtime=v1" } }) console.log("[ws] OpenAI Realtime socket opened") let streamSid = null const sendInitialSessionUpdate = () => { const sessionUpdate = { type: 'session.update', session: { turn_detection: { type: 'semantic_vad' }, input_audio_format: 'g711_ulaw', output_audio_format: 'g711_ulaw', voice: VOICE, instructions: SYSTEM_MESSAGE, modalities: ["text", "audio"], temperature: 0.8, max_response_output_tokens: 150, } } console.log('Sending session update:', JSON.stringify(sessionUpdate)) openAiWs.send(JSON.stringify(sessionUpdate)) // Send initial greeting const initialConversationItem = { type: 'conversation.item.create', item: { type: 'message', role: 'user', content: [ { type: 'input_text', text: `Greet the user with "Hello! I'm an AI voice assistant` } ] } } openAiWs.send(JSON.stringify(initialConversationItem)) openAiWs.send(JSON.stringify({ type: 'response.create' })) } // Handle OpenAI WebSocket connection openAiWs.onopen = () => { console.log('Connected to OpenAI Realtime API') peer.activeResponse = false // Track if a response is active setTimeout(sendInitialSessionUpdate, 100) // Ensure connection stability } openAiWs.onmessage = (event) => { const response = JSON.parse(event.data) console.log(`Received event: ${response.type}`) } // Handle WebSocket close and errors openAiWs.onclose = () => { console.log('Disconnected from OpenAI Realtime API') } openAiWs.onerror = (error) => { console.error('Error in OpenAI WebSocket:', error) } // Store the OpenAI WebSocket on the peer for cleanup peer.openAiWs = openAiWs }, async message(peer, message) { const data = JSON.parse(message.text()) }, async close(peer) { console.log("[ws] OpenAI Realtime socket closed") } })
Editor is loading...