From 7556430693459acd8f6309c40d03f91af50a2251 Mon Sep 17 00:00:00 2001 From: Louis Date: Wed, 6 Mar 2024 16:15:46 +0700 Subject: [PATCH] fix: should not attach error messages to the completion request (#2258) --- .../src/helpers/sse.ts | 2 +- .../inference-openai-extension/src/index.ts | 2 +- .../src/index.ts | 2 +- web/helpers/atoms/ChatMessage.atom.ts | 5 ++++- web/hooks/useSendChatMessage.ts | 6 ++++-- web/screens/Chat/ErrorMessage/index.tsx | 5 ++++- web/screens/Chat/MessageToolbar/index.tsx | 5 ++++- .../DataFolder/ModalErrorSetDestGlobal.tsx | 2 +- web/utils/errorMessage.ts | 18 +++++++++++------- 9 files changed, 31 insertions(+), 16 deletions(-) diff --git a/extensions/inference-openai-extension/src/helpers/sse.ts b/extensions/inference-openai-extension/src/helpers/sse.ts index 23528912d..bee2e65bc 100644 --- a/extensions/inference-openai-extension/src/helpers/sse.ts +++ b/extensions/inference-openai-extension/src/helpers/sse.ts @@ -43,7 +43,7 @@ export function requestInference( if (!response.ok) { const data = await response.json() const error = { - message: data.error?.message ?? 'Error occurred.', + message: data.error?.message ?? 'An error occurred.', code: data.error?.code ?? ErrorCode.Unknown, } subscriber.error(error) diff --git a/extensions/inference-openai-extension/src/index.ts b/extensions/inference-openai-extension/src/index.ts index 8fbba0ea3..e617b81e5 100644 --- a/extensions/inference-openai-extension/src/index.ts +++ b/extensions/inference-openai-extension/src/index.ts @@ -210,7 +210,7 @@ export default class JanInferenceOpenAIExtension extends BaseExtension { const messageContent: ThreadContent = { type: ContentType.Text, text: { - value: 'Error occurred: ' + err.message, + value: 'An error occurred. ' + err.message, annotations: [], }, } diff --git a/extensions/inference-triton-trtllm-extension/src/index.ts b/extensions/inference-triton-trtllm-extension/src/index.ts index f009a81e0..2ba23d6cb 100644 --- a/extensions/inference-triton-trtllm-extension/src/index.ts +++ b/extensions/inference-triton-trtllm-extension/src/index.ts @@ -205,7 +205,7 @@ export default class JanInferenceTritonTrtLLMExtension extends BaseExtension { const messageContent: ThreadContent = { type: ContentType.Text, text: { - value: 'Error occurred: ' + err.message, + value: 'An error occurred. ' + err.message, annotations: [], }, } diff --git a/web/helpers/atoms/ChatMessage.atom.ts b/web/helpers/atoms/ChatMessage.atom.ts index 0061eca7c..d092dd89c 100644 --- a/web/helpers/atoms/ChatMessage.atom.ts +++ b/web/helpers/atoms/ChatMessage.atom.ts @@ -110,7 +110,10 @@ export const deleteMessageAtom = atom(null, (get, set, id: string) => { } const threadId = get(getActiveThreadIdAtom) if (threadId) { - newData[threadId] = newData[threadId].filter((e) => e.id !== id) + // Should also delete error messages to clear out the error state + newData[threadId] = newData[threadId].filter( + (e) => e.id !== id && e.status !== MessageStatus.Error + ) set(chatMessages, newData) } }) diff --git a/web/hooks/useSendChatMessage.ts b/web/hooks/useSendChatMessage.ts index 9b3664203..09c64a0f1 100644 --- a/web/hooks/useSendChatMessage.ts +++ b/web/hooks/useSendChatMessage.ts @@ -109,8 +109,9 @@ export default function useSendChatMessage() { currentMessages .filter( (e) => - currentMessage.role === ChatCompletionRole.User || - e.id !== currentMessage.id + (currentMessage.role === ChatCompletionRole.User || + e.id !== currentMessage.id) && + e.status !== MessageStatus.Error ) .map((msg) => ({ role: msg.role, @@ -198,6 +199,7 @@ export default function useSendChatMessage() { }) .concat( currentMessages + .filter((e) => e.status !== MessageStatus.Error) .map((msg) => ({ role: msg.role, content: msg.content[0]?.text.value ?? '', diff --git a/web/screens/Chat/ErrorMessage/index.tsx b/web/screens/Chat/ErrorMessage/index.tsx index b1439597f..25cec1cb9 100644 --- a/web/screens/Chat/ErrorMessage/index.tsx +++ b/web/screens/Chat/ErrorMessage/index.tsx @@ -27,7 +27,10 @@ const ErrorMessage = ({ message }: { message: ThreadMessage }) => { resendChatMessage(message) } - const errorTitle = getErrorTitle(message.error_code ?? ErrorCode.Unknown) + const errorTitle = getErrorTitle( + message.error_code ?? ErrorCode.Unknown, + message.content[0]?.text?.value + ) return (
diff --git a/web/screens/Chat/MessageToolbar/index.tsx b/web/screens/Chat/MessageToolbar/index.tsx index e5d81475e..9c62c5d2f 100644 --- a/web/screens/Chat/MessageToolbar/index.tsx +++ b/web/screens/Chat/MessageToolbar/index.tsx @@ -39,11 +39,14 @@ const MessageToolbar = ({ message }: { message: ThreadMessage }) => { const onDeleteClick = async () => { deleteMessage(message.id ?? '') if (thread) { + // Should also delete error messages to clear out the error state await extensionManager .get(ExtensionTypeEnum.Conversational) ?.writeMessages( thread.id, - messages.filter((msg) => msg.id !== message.id) + messages.filter( + (msg) => msg.id !== message.id && msg.status !== MessageStatus.Error + ) ) } } diff --git a/web/screens/Settings/Advanced/DataFolder/ModalErrorSetDestGlobal.tsx b/web/screens/Settings/Advanced/DataFolder/ModalErrorSetDestGlobal.tsx index 84646e735..16dc60578 100644 --- a/web/screens/Settings/Advanced/DataFolder/ModalErrorSetDestGlobal.tsx +++ b/web/screens/Settings/Advanced/DataFolder/ModalErrorSetDestGlobal.tsx @@ -21,7 +21,7 @@ const ModalErrorSetDestGlobal = () => { - Error Occurred + An Error Occurred

Oops! Something went wrong. Jan data folder remains the same. Please diff --git a/web/utils/errorMessage.ts b/web/utils/errorMessage.ts index 3af75e787..3fce6c7f3 100644 --- a/web/utils/errorMessage.ts +++ b/web/utils/errorMessage.ts @@ -1,11 +1,15 @@ import { ErrorCode } from '@janhq/core' -export const getErrorTitle = (errorCode: ErrorCode) => { - if (errorCode === ErrorCode.Unknown) { - return 'Apologies, something’s amiss!' - } - - if (errorCode === ErrorCode.InvalidApiKey) { - return 'Invalid API key. Please check your API key and try again.' +export const getErrorTitle = ( + errorCode: ErrorCode, + errorMessage: string | undefined +) => { + switch (errorCode) { + case ErrorCode.Unknown: + return 'Apologies, something’s amiss!' + case ErrorCode.InvalidApiKey: + return 'Invalid API key. Please check your API key and try again.' + default: + return errorMessage } }