Skip to content

Commit eb18550

Browse files
committed
fix(puterai): close streams
1 parent 5a616f6 commit eb18550

File tree

6 files changed

+12
-10
lines changed

6 files changed

+12
-10
lines changed

src/backend/src/modules/puterai/ClaudeService.js

+1
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ class ClaudeService extends BaseService {
9090
});
9191
stream.write(str + '\n');
9292
}
93+
stream.end();
9394
})();
9495

9596
return retval;

src/backend/src/modules/puterai/GroqAIService.js

+1
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ class GroqAIService extends BaseService {
5454
});
5555
stream.write(str + '\n');
5656
}
57+
stream.end();
5758
})();
5859
return retval;
5960
}

src/backend/src/modules/puterai/MistralAIService.js

+1
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ class MistralAIService extends BaseService {
5555
});
5656
stream.write(str + '\n');
5757
}
58+
stream.end();
5859
})();
5960
return retval;
6061
}

src/backend/src/modules/puterai/OpenAICompletionService.js

+1
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,7 @@ class OpenAICompletionService extends BaseService {
232232
});
233233
stream.write(str + '\n');
234234
}
235+
stream.end();
235236
})();
236237
return retval;
237238
}

src/backend/src/modules/puterai/TogetherAIService.js

+1
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ class TogetherAIService extends BaseService {
5959
});
6060
stream.write(str + '\n');
6161
}
62+
stream.end();
6263
})();
6364
return retval;
6465
}

src/puter-js/src/lib/utils.js

+7-10
Original file line numberDiff line numberDiff line change
@@ -279,15 +279,12 @@ async function driverCall_(
279279
// ===============================================
280280

281281
let is_stream = false;
282-
let got_headers = false;
283282
let signal_stream_update = null;
284283
let lastLength = 0;
285284
let response_complete = false;
286285
const parts_received = [];
287286
xhr.onreadystatechange = () => {
288-
if ( got_headers ) return;
289-
got_headers = true;
290-
if ( xhr.readyState >= 2 ) {
287+
if ( xhr.readyState === 2 ) {
291288
if ( xhr.getResponseHeader("Content-Type") !==
292289
'application/x-ndjson'
293290
) return;
@@ -311,6 +308,12 @@ async function driverCall_(
311308

312309
return resolve_func(Stream());
313310
}
311+
if ( xhr.readyState === 4 ) {
312+
response_complete = true;
313+
if ( is_stream ) {
314+
signal_stream_update?.();
315+
}
316+
}
314317
};
315318

316319
xhr.onprogress = function() {
@@ -323,19 +326,13 @@ async function driverCall_(
323326
signal_stream_update();
324327
};
325328

326-
xhr.addEventListener('load', () => {
327-
response_complete = true;
328-
});
329-
330329
// ========================
331330
// === END OF STREAMING ===
332331
// ========================
333332

334333
// load: success or error
335334
xhr.addEventListener('load', async function(response){
336-
response_complete = true;
337335
if ( is_stream ) {
338-
signal_stream_update?.();
339336
return;
340337
}
341338
const resp = await parseResponse(response.target);

0 commit comments

Comments
 (0)