From b21bba3dfacfafd3009d796116429df483bed8aa Mon Sep 17 00:00:00 2001 From: Webifi Date: Wed, 7 Jun 2023 08:10:13 -0500 Subject: [PATCH] Don't allow a prompt to be sent while streaming. --- src/lib/Chat.svelte | 15 +++++++-------- src/lib/ChatCompletionResponse.svelte | 17 +++++++++++++---- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/lib/Chat.svelte b/src/lib/Chat.svelte index f31a64d..c2a918a 100644 --- a/src/lib/Chat.svelte +++ b/src/lib/Chat.svelte @@ -57,7 +57,7 @@ export let params = { chatId: '' } const chatId: number = parseInt(params.chatId) - let updating: boolean = false + let updating: boolean|number = false let updatingMessage: string = '' let input: HTMLTextAreaElement let recognition: any = null @@ -370,11 +370,12 @@ } if (opts.streaming) { + chatResponse.onFinish(() => { updating = false; updatingMessage = '' }) fetchEventSource(apiBase + '/v1/chat/completions', { ...fetchOptions, onmessage (ev) { // Remove updating indicator - updating = false + updating = 1 // hide indicator, but still signal we're updating updatingMessage = '' if (!chatResponse.hasFinished()) { // console.log('ev.data', ev.data) @@ -403,13 +404,11 @@ chatResponse.updateFromSyncResponse(json) } } catch (e) { + updating = false + updatingMessage = '' chatResponse.updateFromError(e.message) } - // Hide updating bar - updating = false - updatingMessage = '' - return chatResponse } @@ -559,7 +558,7 @@ -{#if updating} +{#if updating === true}
@@ -603,7 +602,7 @@

- +

diff --git a/src/lib/ChatCompletionResponse.svelte b/src/lib/ChatCompletionResponse.svelte index 606b299..5992136 100644 --- a/src/lib/ChatCompletionResponse.svelte +++ b/src/lib/ChatCompletionResponse.svelte @@ -20,7 +20,6 @@ export class ChatCompletionResponse { private messages: Message[] private error: string - private didFinish: boolean private finishResolver: (value: Message[]) => void private errorResolver: (error: string) => void @@ -32,6 +31,7 @@ export class ChatCompletionResponse { private promptTokenCount:number private finished = false private messageChangeListeners: ((m: Message[]) => void)[] = [] + private finishListeners: ((m: Message[]) => void)[] = [] setPromptTokenCount (tokens:number) { this.promptTokenCount = tokens @@ -100,6 +100,9 @@ export class ChatCompletionResponse { onMessageChange = (listener: (m: Message[]) => void): number => this.messageChangeListeners.push(listener) + onFinish = (listener: (m: Message[]) => void): number => + this.finishListeners.push(listener) + promiseToFinish = (): Promise => this.finishPromise hasFinished = (): boolean => this.finished @@ -114,14 +117,20 @@ export class ChatCompletionResponse { }) } + private notifyFinish (): void { + this.finishListeners.forEach((listener) => { + listener(this.messages) + }) + } + private finish = (): void => { - if (this.didFinish) return - this.didFinish = true + if (this.finished) return + this.finished = true const message = this.messages[0] if (message) { updateRunningTotal(this.chat.id, message.usage as any, message.model as any) } - this.finished = true + this.notifyFinish() if (this.error) { this.errorResolver(this.error) } else {