@@ -374,62 +374,65 @@ Use this context to calculate relative dates like "yesterday", "last week", "beg
374374 return
375375 }
376376
377+ let parsed : any
377378 try {
378- const parsed = JSON . parse ( data )
379- const eventType = parsed ?. type ?? activeEventType
380-
381- if (
382- eventType === 'response.error' ||
383- eventType === 'error' ||
384- activeEventType === 'response.failed'
385- ) {
386- throw new Error ( parsed ?. error ?. message || 'Responses stream error' )
387- }
379+ parsed = JSON . parse ( data )
380+ } catch ( parseError ) {
381+ logger . debug ( `[${ requestId } ] Skipped non-JSON line: ${ data . substring ( 0 , 100 ) } ` )
382+ continue
383+ }
388384
389- if (
390- eventType === 'response.output_text.delta' ||
391- eventType === 'response.output_json.delta'
392- ) {
393- let content = ''
394- if ( typeof parsed . delta === 'string' ) {
395- content = parsed . delta
396- } else if ( parsed . delta && typeof parsed . delta . text === 'string' ) {
397- content = parsed . delta . text
398- } else if ( parsed . delta && parsed . delta . json !== undefined ) {
399- content = JSON . stringify ( parsed . delta . json )
400- } else if ( parsed . json !== undefined ) {
401- content = JSON . stringify ( parsed . json )
402- } else if ( typeof parsed . text === 'string' ) {
403- content = parsed . text
404- }
385+ const eventType = parsed ?. type ?? activeEventType
405386
406- if ( content ) {
407- chunkCount ++
408- if ( chunkCount === 1 ) {
409- logger . info ( `[${ requestId } ] Received first content chunk` )
410- }
387+ if (
388+ eventType === 'response.error' ||
389+ eventType === 'error' ||
390+ eventType === 'response.failed'
391+ ) {
392+ throw new Error ( parsed ?. error ?. message || 'Responses stream error' )
393+ }
411394
412- controller . enqueue (
413- encoder . encode ( `data: ${ JSON . stringify ( { chunk : content } ) } \n\n` )
414- )
395+ if (
396+ eventType === 'response.output_text.delta' ||
397+ eventType === 'response.output_json.delta'
398+ ) {
399+ let content = ''
400+ if ( typeof parsed . delta === 'string' ) {
401+ content = parsed . delta
402+ } else if ( parsed . delta && typeof parsed . delta . text === 'string' ) {
403+ content = parsed . delta . text
404+ } else if ( parsed . delta && parsed . delta . json !== undefined ) {
405+ content = JSON . stringify ( parsed . delta . json )
406+ } else if ( parsed . json !== undefined ) {
407+ content = JSON . stringify ( parsed . json )
408+ } else if ( typeof parsed . text === 'string' ) {
409+ content = parsed . text
410+ }
411+
412+ if ( content ) {
413+ chunkCount ++
414+ if ( chunkCount === 1 ) {
415+ logger . info ( `[${ requestId } ] Received first content chunk` )
415416 }
417+
418+ controller . enqueue (
419+ encoder . encode ( `data: ${ JSON . stringify ( { chunk : content } ) } \n\n` )
420+ )
416421 }
422+ }
417423
418- if ( eventType === 'response.completed' ) {
419- const usage = parseResponsesUsage ( parsed ?. response ?. usage ?? parsed ?. usage )
420- if ( usage ) {
421- finalUsage = {
422- prompt_tokens : usage . promptTokens ,
423- completion_tokens : usage . completionTokens ,
424- total_tokens : usage . totalTokens ,
425- }
426- logger . info (
427- `[${ requestId } ] Received usage data: ${ JSON . stringify ( finalUsage ) } `
428- )
424+ if ( eventType === 'response.completed' ) {
425+ const usage = parseResponsesUsage ( parsed ?. response ?. usage ?? parsed ?. usage )
426+ if ( usage ) {
427+ finalUsage = {
428+ prompt_tokens : usage . promptTokens ,
429+ completion_tokens : usage . completionTokens ,
430+ total_tokens : usage . totalTokens ,
429431 }
432+ logger . info (
433+ `[${ requestId } ] Received usage data: ${ JSON . stringify ( finalUsage ) } `
434+ )
430435 }
431- } catch ( parseError ) {
432- logger . debug ( `[${ requestId } ] Skipped non-JSON line: ${ data . substring ( 0 , 100 ) } ` )
433436 }
434437 }
435438 }
0 commit comments