@@ -225,18 +225,39 @@ We'll migrate "TechFlow's" existing OpenAI-powered customer support chat to use
225225
226226 let fullResponse = ' ' ;
227227
228- for await (const event of stream ) {
229- if (event.type === ' response.output_text.delta' ) {
230- process .stdout .write (event .delta );
231- fullResponse += event .delta ;
228+ const reader = stream .body ?.getReader ();
229+ if (! reader ) return fullResponse ;
230+
231+ const decoder = new TextDecoder ();
232+
233+ while (true ) {
234+ const { done , value } = await reader.read();
235+ if (done ) break;
236+
237+ const chunk = decoder .decode (value );
238+
239+ // Parse and process SSE events
240+ const lines = chunk .split (' \n ' ).filter (line => line .trim ());
241+ for (const line of lines ) {
242+ if (line .startsWith (' data: ' )) {
243+ try {
244+ const event = JSON .parse (line .slice (6 ));
245+ if (event .path && event .delta ) {
246+ process .stdout .write (event .delta );
247+ fullResponse += event .delta ;
248+ }
249+ } catch (e ) {
250+ console .error (' Invalid JSON line:' , line );
251+ continue ;
252+ }
253+ }
232254 }
233255 }
234256
235257 console .log (' \n\n Complete response received.' );
236258 return fullResponse ;
237259 }
238260
239- // Test streaming
240261 streamWithVapi('Write a detailed explanation of REST APIs');
241262 ```
242263 </Step >
@@ -267,7 +288,7 @@ We'll migrate "TechFlow's" existing OpenAI-powered customer support chat to use
267288 return response .output [0 ].content [0 ].text ;
268289 }
269290
270- return response ; // Return stream for streaming requests
291+ return response ;
271292 }
272293
273294 return { sendMessage };
@@ -391,8 +412,22 @@ We'll migrate "TechFlow's" existing OpenAI-powered customer support chat to use
391412 if (done ) break;
392413
393414 const chunk = decoder .decode (value );
394- // Process SSE events here...
395- console.log(chunk);
415+
416+ // Parse and process SSE events
417+ const lines = chunk .split (' \n ' ).filter (line => line .trim ());
418+ for (const line of lines ) {
419+ if (line .startsWith (' data: ' )) {
420+ try {
421+ const event = JSON .parse (line .slice (6 ));
422+ if (event .path && event .delta ) {
423+ process .stdout .write (event .delta );
424+ }
425+ } catch (e ) {
426+ console .error (' Invalid JSON line:' , line );
427+ continue ;
428+ }
429+ }
430+ }
396431 }
397432 }
398433
@@ -440,8 +475,27 @@ We'll migrate "TechFlow's" existing OpenAI-powered customer support chat to use
440475
441476 if (stream ) {
442477 res.setHeader(' Content-Type' , ' text/event-stream' );
478+ res.setHeader(' Cache-Control' , ' no-cache' );
479+ res.setHeader(' Connection' , ' keep-alive' );
480+
443481 const reader = response.body?.getReader();
444- // Handle streaming response...
482+ if (!reader) {
483+ return res.status(500).json({ error: ' Failed to get stream reader' });
484+ }
485+
486+ const decoder = new TextDecoder();
487+
488+ while (true) {
489+ const { done , value } = await reader .read ();
490+ if (done ) {
491+ res.write(' data: [DONE]\n\n ' );
492+ res.end();
493+ break;
494+ }
495+
496+ const chunk = decoder.decode(value);
497+ res.write(chunk);
498+ }
445499 } else {
446500 const chat = await response.json();
447501 const openaiResponse = {
0 commit comments