@@ -115,9 +115,15 @@ const postHandler = async (req: NextRequest, { params }: { params: { buildUuid:
115115 const { readable, writable } = new TransformStream ( ) ;
116116 const writer = writable . getWriter ( ) ;
117117 const encoder = new TextEncoder ( ) ;
118+ let writerClosed = false ;
118119
119120 const sendEvent = ( data : AIChatSSEEvent | SSEErrorEvent ) => {
120- writer . write ( encoder . encode ( `data: ${ JSON . stringify ( data ) } \n\n` ) ) . catch ( ( ) => { } ) ;
121+ if ( writerClosed ) return ;
122+ try {
123+ writer . write ( encoder . encode ( `data: ${ JSON . stringify ( data ) } \n\n` ) ) . catch ( ( ) => { } ) ;
124+ } catch {
125+ writerClosed = true ;
126+ }
121127 } ;
122128
123129 const MAX_STORED_JSON_LENGTH = 8000 ;
@@ -132,6 +138,7 @@ const postHandler = async (req: NextRequest, { params }: { params: { buildUuid:
132138 } ;
133139
134140 req . signal . addEventListener ( 'abort' , ( ) => {
141+ writerClosed = true ;
135142 try {
136143 writer . close ( ) ;
137144 } catch {
@@ -334,6 +341,10 @@ const postHandler = async (req: NextRequest, { params }: { params: { buildUuid:
334341 iterations : e . iterations ,
335342 totalToolCalls : e . totalToolCalls ,
336343 totalDurationMs : e . totalDurationMs ,
344+ inputTokens : e . inputTokens ,
345+ outputTokens : e . outputTokens ,
346+ inputCostPerMillion : e . inputCostPerMillion ,
347+ outputCostPerMillion : e . outputCostPerMillion ,
337348 } ;
338349 }
339350 } catch {
@@ -464,6 +475,7 @@ const postHandler = async (req: NextRequest, { params }: { params: { buildUuid:
464475 modelName : 'AI model' ,
465476 } ) ;
466477 } finally {
478+ writerClosed = true ;
467479 try {
468480 await writer . close ( ) ;
469481 } catch {
0 commit comments