(event)
| 195 | } |
| 196 | |
| 197 | function handleServerEvent(event) { |
| 198 | console.log('[event]', event.type, event); |
| 199 | |
| 200 | switch (event.type) { |
| 201 | case 'session.created': |
| 202 | // Session is ready — send any user settings |
| 203 | sendSessionUpdate(); |
| 204 | setStatus('listening', 'Listening...'); |
| 205 | break; |
| 206 | |
| 207 | case 'session.updated': |
| 208 | console.log('[session.updated] Session settings applied', event.session); |
| 209 | break; |
| 210 | |
| 211 | case 'input_audio_buffer.speech_started': |
| 212 | setStatus('listening', 'Hearing you speak...'); |
| 213 | break; |
| 214 | |
| 215 | case 'input_audio_buffer.speech_stopped': |
| 216 | setStatus('thinking', 'Processing...'); |
| 217 | break; |
| 218 | |
| 219 | case 'conversation.item.input_audio_transcription.completed': |
| 220 | if (event.transcript) { |
| 221 | addTranscript('user', event.transcript); |
| 222 | } |
| 223 | setStatus('thinking', 'Generating response...'); |
| 224 | break; |
| 225 | |
| 226 | case 'response.output_audio_transcript.delta': |
| 227 | // Incremental transcript — update the in-progress assistant message |
| 228 | if (event.delta) { |
| 229 | updateStreamingTranscript('assistant', event.delta); |
| 230 | } |
| 231 | break; |
| 232 | |
| 233 | case 'response.output_audio_transcript.done': |
| 234 | if (event.transcript) { |
| 235 | finalizeStreamingTranscript('assistant', event.transcript); |
| 236 | } |
| 237 | break; |
| 238 | |
| 239 | case 'response.output_audio.delta': |
| 240 | setStatus('speaking', 'Speaking...'); |
| 241 | break; |
| 242 | |
| 243 | case 'response.done': |
| 244 | setStatus('listening', 'Listening...'); |
| 245 | break; |
| 246 | |
| 247 | case 'error': |
| 248 | console.error('Server error:', event.error); |
| 249 | hasError = true; |
| 250 | setStatus('error', 'Error: ' + (event.error?.message || 'Unknown error')); |
| 251 | break; |
| 252 | } |
| 253 | } |
| 254 |
no test coverage detected