From 8bd0f3da215ffa798eaf167267d092dd950bed5a Mon Sep 17 00:00:00 2001 From: Louis Date: Tue, 19 Nov 2024 23:18:52 +0700 Subject: [PATCH] fix: inconsistent error handling --- web/hooks/useActiveModel.ts | 22 ++++++------------ web/hooks/useSendChatMessage.ts | 8 +------ .../LoadModelError/index.tsx | 23 ++++--------------- 3 files changed, 12 insertions(+), 41 deletions(-) diff --git a/web/hooks/useActiveModel.ts b/web/hooks/useActiveModel.ts index 7b9ee98e0..63513bee2 100644 --- a/web/hooks/useActiveModel.ts +++ b/web/hooks/useActiveModel.ts @@ -26,15 +26,13 @@ export const stateModelAtom = atom({ model: undefined, }) -const pendingModelLoadAtom = atom(false) - export function useActiveModel() { const [activeModel, setActiveModel] = useAtom(activeModelAtom) const activeThread = useAtomValue(activeThreadAtom) const [stateModel, setStateModel] = useAtom(stateModelAtom) const downloadedModels = useAtomValue(downloadedModelsAtom) const setLoadModelError = useSetAtom(loadModelErrorAtom) - const [pendingModelLoad, setPendingModelLoad] = useAtom(pendingModelLoadAtom) + const pendingModelLoad = useRef(false) const isVulkanEnabled = useAtomValue(vulkanEnabledAtom) const downloadedModelsRef = useRef([]) @@ -55,7 +53,7 @@ export function useActiveModel() { if (activeModel) { await stopModel(activeModel) } - setPendingModelLoad(true) + pendingModelLoad.current = true let model = downloadedModelsRef?.current.find((e) => e.id === modelId) @@ -120,16 +118,16 @@ export function useActiveModel() { undefined, })) - if (!pendingModelLoad && abortable) { + if (!pendingModelLoad.current && abortable) { return Promise.reject(new Error('aborted')) } toaster({ title: 'Failed!', - description: `Model ${model.id} failed to start.`, + description: `Model ${model.id} failed to start. ${error.message ?? ''}`, type: 'error', }) - setLoadModelError(error) + setLoadModelError(error.message ?? error) return Promise.reject(error) }) } @@ -147,16 +145,10 @@ export function useActiveModel() { .then(() => { setActiveModel(undefined) setStateModel({ state: 'start', loading: false, model: undefined }) - setPendingModelLoad(false) + pendingModelLoad.current = false }) }, - [ - activeModel, - setStateModel, - setActiveModel, - setPendingModelLoad, - stateModel, - ] + [activeModel, setStateModel, setActiveModel, stateModel] ) const stopInference = useCallback(async () => { diff --git a/web/hooks/useSendChatMessage.ts b/web/hooks/useSendChatMessage.ts index cda53b24a..bf0333d37 100644 --- a/web/hooks/useSendChatMessage.ts +++ b/web/hooks/useSendChatMessage.ts @@ -27,7 +27,7 @@ import { MessageRequestBuilder } from '@/utils/messageRequestBuilder' import { ThreadMessageBuilder } from '@/utils/threadMessageBuilder' -import { loadModelErrorAtom, useActiveModel } from './useActiveModel' +import { useActiveModel } from './useActiveModel' import { extensionManager } from '@/extension/ExtensionManager' import { @@ -60,10 +60,8 @@ export default function useSendChatMessage() { const currentMessages = useAtomValue(getCurrentChatMessagesAtom) const selectedModel = useAtomValue(selectedModelAtom) const { activeModel, startModel } = useActiveModel() - const loadModelFailed = useAtomValue(loadModelErrorAtom) const modelRef = useRef() - const loadModelFailedRef = useRef() const activeModelParams = useAtomValue(getActiveThreadModelParamsAtom) const engineParamsUpdate = useAtomValue(engineParamsUpdateAtom) @@ -80,10 +78,6 @@ export default function useSendChatMessage() { modelRef.current = activeModel }, [activeModel]) - useEffect(() => { - loadModelFailedRef.current = loadModelFailed - }, [loadModelFailed]) - useEffect(() => { activeThreadRef.current = activeThread }, [activeThread]) diff --git a/web/screens/Thread/ThreadCenterPanel/LoadModelError/index.tsx b/web/screens/Thread/ThreadCenterPanel/LoadModelError/index.tsx index 16a0024e8..5829a6923 100644 --- a/web/screens/Thread/ThreadCenterPanel/LoadModelError/index.tsx +++ b/web/screens/Thread/ThreadCenterPanel/LoadModelError/index.tsx @@ -20,23 +20,8 @@ const LoadModelError = () => { const setSelectedSettingScreen = useSetAtom(selectedSettingAtom) const activeThread = useAtomValue(activeThreadAtom) - const PORT_NOT_AVAILABLE = 'PORT_NOT_AVAILABLE' - const ErrorMessage = () => { - if (loadModelError === PORT_NOT_AVAILABLE) { - return ( -

- Port 3928 is currently unavailable. Check for conflicting apps, or - access  - setModalTroubleShooting(true)} - > - troubleshooting assistance - -

- ) - } else if ( + if ( typeof loadModelError?.includes === 'function' && loadModelError.includes('EXTENSION_IS_NOT_INSTALLED') ) { @@ -63,10 +48,10 @@ const LoadModelError = () => { ) } else { return ( -
- Apologies, {`Something's wrong.`}.  +
+ {loadModelError &&

{loadModelError}

}

- Access  + {`Something's wrong.`} Access  setModalTroubleShooting(true)}