Spaces:
Running
Running
feat: implement dynamic stream timeout to improve response handling responsiveness
Browse files- index.html +7 -4
index.html
CHANGED
|
@@ -536,15 +536,17 @@
|
|
| 536 |
|
| 537 |
const iterator = submission[Symbol.asyncIterator]();
|
| 538 |
let streamDone = false;
|
|
|
|
| 539 |
|
| 540 |
while (!streamDone) {
|
| 541 |
-
//
|
| 542 |
-
//
|
| 543 |
-
//
|
|
|
|
| 544 |
const result = await Promise.race([
|
| 545 |
iterator.next(),
|
| 546 |
new Promise(resolve =>
|
| 547 |
-
setTimeout(() => resolve({ value: undefined, done: true }),
|
| 548 |
)
|
| 549 |
]);
|
| 550 |
|
|
@@ -556,6 +558,7 @@
|
|
| 556 |
const event = result.value;
|
| 557 |
|
| 558 |
if (event.type === "data") {
|
|
|
|
| 559 |
typingIndicatorWrapper.style.display = 'none';
|
| 560 |
typingIndicator.style.display = 'none';
|
| 561 |
fullResponse = event.data[0];
|
|
|
|
| 536 |
|
| 537 |
const iterator = submission[Symbol.asyncIterator]();
|
| 538 |
let streamDone = false;
|
| 539 |
+
let hasReceivedData = false;
|
| 540 |
|
| 541 |
while (!streamDone) {
|
| 542 |
+
// Dynamic timeout: 60s before first data (queue/connection wait),
|
| 543 |
+
// 2s after first data (idle = stream finished, since tokens
|
| 544 |
+
// arrive every few hundred ms during generation).
|
| 545 |
+
const idleTimeout = hasReceivedData ? 2000 : 60000;
|
| 546 |
const result = await Promise.race([
|
| 547 |
iterator.next(),
|
| 548 |
new Promise(resolve =>
|
| 549 |
+
setTimeout(() => resolve({ value: undefined, done: true }), idleTimeout)
|
| 550 |
)
|
| 551 |
]);
|
| 552 |
|
|
|
|
| 558 |
const event = result.value;
|
| 559 |
|
| 560 |
if (event.type === "data") {
|
| 561 |
+
hasReceivedData = true;
|
| 562 |
typingIndicatorWrapper.style.display = 'none';
|
| 563 |
typingIndicator.style.display = 'none';
|
| 564 |
fullResponse = event.data[0];
|