From ef74fd5e31f2d55572ebbb77314ff1669f44a6e6 Mon Sep 17 00:00:00 2001 From: Webifi Date: Mon, 26 Jun 2023 20:11:00 -0500 Subject: [PATCH] Handle some more API errors --- src/lib/Chat.svelte | 2 -- src/lib/ChatCompletionResponse.svelte | 10 ++++++++-- src/lib/ChatRequest.svelte | 2 +- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/lib/Chat.svelte b/src/lib/Chat.svelte index fdac92d..6826d9c 100644 --- a/src/lib/Chat.svelte +++ b/src/lib/Chat.svelte @@ -11,9 +11,7 @@ getMessage, currentChatMessages, setCurrentChat, - currentChatId - } from './Storage.svelte' import { type Message, diff --git a/src/lib/ChatCompletionResponse.svelte b/src/lib/ChatCompletionResponse.svelte index 986784a..dbc3eff 100644 --- a/src/lib/ChatCompletionResponse.svelte +++ b/src/lib/ChatCompletionResponse.svelte @@ -90,7 +90,10 @@ export class ChatCompletionResponse { updateFromSyncResponse (response: Response) { this.setModel(response.model) - response.choices.forEach((choice, i) => { + if (!response.choices) { + return this.updateFromError(response?.error?.message || 'unexpected response from API') + } + response.choices?.forEach((choice, i) => { const exitingMessage = this.messages[i] const message = exitingMessage || choice.message if (exitingMessage) { @@ -121,7 +124,10 @@ export class ChatCompletionResponse { updateFromAsyncResponse (response: Response) { let completionTokenCount = 0 this.setModel(response.model) - response.choices.forEach((choice, i) => { + if (!response.choices) { + return this.updateFromError(response?.error?.message || 'unexpected streaming response from API') + } + response.choices?.forEach((choice, i) => { const message = this.messages[i] || { role: 'assistant', content: '', diff --git a/src/lib/ChatRequest.svelte b/src/lib/ChatRequest.svelte index e8d6d35..40b374d 100644 --- a/src/lib/ChatRequest.svelte +++ b/src/lib/ChatRequest.svelte @@ -451,7 +451,7 @@ export class ChatRequest { ...overrides } as ChatSettings) // Wait for the response to complete - if (!summary.hasFinished()) await summary.promiseToFinish() + if (!summary.hasError() && !summary.hasFinished()) await summary.promiseToFinish() if (summary.hasError()) { // Failed for some API issue. let the original caller handle it. _this.updating = false