From af7fedc0797b88eff4ff3baeb8c93aca2c6c0096 Mon Sep 17 00:00:00 2001 From: WJG Date: Sun, 25 Feb 2024 11:49:16 +0800 Subject: [PATCH] misc: polish first batch submit logic --- src/services/speaker/stream.ts | 20 +++++++++++--------- tests/speaker.ts | 1 - 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/services/speaker/stream.ts b/src/services/speaker/stream.ts index ff8278e..240c4f9 100644 --- a/src/services/speaker/stream.ts +++ b/src/services/speaker/stream.ts @@ -104,7 +104,8 @@ export class StreamResponse { private _chunks: string[] = []; private _tempText = ""; private _remainingText: string = ""; - private _preSubmitTimestamp = 0; + private _isFirstSubmit = true; + private _submitCount = 0; private _batchSubmitImmediately() { if (this._tempText) { @@ -121,18 +122,19 @@ export class StreamResponse { */ private _batchSubmit(text: string) { this._tempText += text; - const isFirstSubmit = this._preSubmitTimestamp === 0; - if (isFirstSubmit) { - this._preSubmitTimestamp = Date.now(); + if (this._isFirstSubmit) { + this._isFirstSubmit = false; + // 达到首次消息收集时长后,批量提交消息 setTimeout(() => { - // 当消息长度积攒到一定长度,或达到一定时间间隔后,批量提交消息 - if ( - this._tempText.length > this.maxSentenceLength || - Date.now() - this._preSubmitTimestamp > this.firstSubmitTimeout - ) { + if (this._submitCount < 1) { this._batchSubmitImmediately(); } }, this.firstSubmitTimeout); + } else if (this._submitCount < 1) { + // 当首次消息积攒到一定长度后,也批量提交消息 + if (this._tempText.length > this.maxSentenceLength) { + this._batchSubmitImmediately(); + } } } diff --git a/tests/speaker.ts b/tests/speaker.ts index dc9902b..cc1bdbe 100644 --- a/tests/speaker.ts +++ b/tests/speaker.ts @@ -77,7 +77,6 @@ async function testSpeakerStreamResponse(speaker: AISpeaker) { `地球在赤道处稍微膨胀,而在极地处稍微收缩,最终形成一个近似于球体的形状。因此,地球是圆的` ); await add(`主要原因是由于地球的引力和自转共同作用所致。`); - await sleep(10 * 1000); console.log("finished!"); stream.finish(); });