From 3aaf16b38bc0ad53fe214957c3406c9a32cad973 Mon Sep 17 00:00:00 2001 From: josc146 Date: Tue, 23 May 2023 12:50:53 +0800 Subject: [PATCH] global status --- frontend/src/apis/index.ts | 8 +++---- frontend/src/components/RunButton.tsx | 34 +++++++++++++-------------- frontend/src/pages/Chat.tsx | 6 ++--- frontend/src/startup.ts | 2 +- frontend/src/stores/commonStore.ts | 16 ++++++++++--- 5 files changed, 38 insertions(+), 28 deletions(-) diff --git a/frontend/src/apis/index.ts b/frontend/src/apis/index.ts index 52148dd..f616a28 100644 --- a/frontend/src/apis/index.ts +++ b/frontend/src/apis/index.ts @@ -1,4 +1,4 @@ -import commonStore, { ModelStatus } from '../stores/commonStore'; +import commonStore, { Status } from '../stores/commonStore'; export const readRoot = async () => { const port = commonStore.getCurrentModelConfig().apiParameters.apiPort; @@ -36,15 +36,15 @@ export const updateConfig = async (body: any) => { }); }; -export const getStatus = async (timeout?: number): Promise => { +export const getStatus = async (timeout?: number): Promise => { const controller = new AbortController(); if (timeout) setTimeout(() => controller.abort(), timeout); const port = commonStore.getCurrentModelConfig().apiParameters.apiPort; - let ret: ModelStatus | undefined; + let ret: Status | undefined; await fetch(`http://127.0.0.1:${port}/status`, { signal: controller.signal }).then(r => r.json()).then(data => { - ret = data.status; + ret = data; }).catch(() => { }); return ret; diff --git a/frontend/src/components/RunButton.tsx b/frontend/src/components/RunButton.tsx index 72f2080..150f39a 100644 --- a/frontend/src/components/RunButton.tsx +++ b/frontend/src/components/RunButton.tsx @@ -42,8 +42,8 @@ export const RunButton: FC<{ onClickRun?: MouseEventHandler, iconMode?: boolean const navigate = useNavigate(); const onClickMainButton = async () => { - if (commonStore.modelStatus === ModelStatus.Offline) { - commonStore.setModelStatus(ModelStatus.Starting); + if (commonStore.status.modelStatus === ModelStatus.Offline) { + commonStore.setStatus({ modelStatus: ModelStatus.Starting }); const modelConfig = commonStore.getCurrentModelConfig(); let modelName = ''; @@ -53,7 +53,7 @@ export const RunButton: FC<{ onClickRun?: MouseEventHandler, iconMode?: boolean modelPath = `./${manifest.localModelDir}/${modelName}`; } else { toast(t('Model Config Exception'), { type: 'error' }); - commonStore.setModelStatus(ModelStatus.Offline); + commonStore.setStatus({ modelStatus: ModelStatus.Offline }); return; } @@ -79,7 +79,7 @@ export const RunButton: FC<{ onClickRun?: MouseEventHandler, iconMode?: boolean } }); if (depErrorMsg) { - commonStore.setModelStatus(ModelStatus.Offline); + commonStore.setStatus({ modelStatus: ModelStatus.Offline }); return; } commonStore.setDepComplete(true); @@ -100,7 +100,7 @@ export const RunButton: FC<{ onClickRun?: MouseEventHandler, iconMode?: boolean } }); - commonStore.setModelStatus(ModelStatus.Offline); + commonStore.setStatus({ modelStatus: ModelStatus.Offline }); return; } @@ -118,7 +118,7 @@ export const RunButton: FC<{ onClickRun?: MouseEventHandler, iconMode?: boolean .then(r => { if (r.ok && !loading) { clearInterval(intervalId); - commonStore.setModelStatus(ModelStatus.Loading); + commonStore.setStatus({ modelStatus: ModelStatus.Loading }); loading = true; toast(t('Loading Model'), { type: 'info' }); updateConfig({ @@ -133,51 +133,51 @@ export const RunButton: FC<{ onClickRun?: MouseEventHandler, iconMode?: boolean strategy: getStrategy(modelConfig) }).then((r) => { if (r.ok) { - commonStore.setModelStatus(ModelStatus.Working); + commonStore.setStatus({ modelStatus: ModelStatus.Working }); toastWithButton(t('Startup Completed'), t('Chat'), () => { navigate({ pathname: '/chat' }); }, { type: 'success', autoClose: 3000 }); } else if (r.status === 304) { toast(t('Loading Model'), { type: 'info' }); } else { - commonStore.setModelStatus(ModelStatus.Offline); + commonStore.setStatus({ modelStatus: ModelStatus.Offline }); toast(t('Failed to switch model'), { type: 'error' }); } }).catch(() => { - commonStore.setModelStatus(ModelStatus.Offline); + commonStore.setStatus({ modelStatus: ModelStatus.Offline }); toast(t('Failed to switch model'), { type: 'error' }); }); } }).catch(() => { if (timeoutCount <= 0) { clearInterval(intervalId); - commonStore.setModelStatus(ModelStatus.Offline); + commonStore.setStatus({ modelStatus: ModelStatus.Offline }); } }); timeoutCount--; }, 1000); } else { - commonStore.setModelStatus(ModelStatus.Offline); + commonStore.setStatus({ modelStatus: ModelStatus.Offline }); exit(); } }; const onClick = async (e: any) => { - if (commonStore.modelStatus === ModelStatus.Offline) + if (commonStore.status.modelStatus === ModelStatus.Offline) await onClickRun?.(e); await onClickMainButton(); }; return (iconMode ? - : - ); }); diff --git a/frontend/src/pages/Chat.tsx b/frontend/src/pages/Chat.tsx index 22dc16c..682754d 100644 --- a/frontend/src/pages/Chat.tsx +++ b/frontend/src/pages/Chat.tsx @@ -95,7 +95,7 @@ const ChatPanel: FC = observer(() => { e.stopPropagation(); if (e.type === 'click' || (e.keyCode === 13 && !e.shiftKey)) { e.preventDefault(); - if (commonStore.modelStatus === ModelStatus.Offline) { + if (commonStore.status.modelStatus === ModelStatus.Offline) { toast(t('Please click the button in the top right corner to start the model'), { type: 'warning' }); return; } @@ -315,8 +315,8 @@ export const Chat: FC = observer(() => {
- - {t('Model Status') + ': ' + t(statusText[commonStore.modelStatus])} + + {t('Model Status') + ': ' + t(statusText[commonStore.status.modelStatus])}
diff --git a/frontend/src/startup.ts b/frontend/src/startup.ts index 3ba6bf0..81c139f 100644 --- a/frontend/src/startup.ts +++ b/frontend/src/startup.ts @@ -21,7 +21,7 @@ export async function startup() { getStatus(500).then(status => { // depends on config api port if (status) - commonStore.setModelStatus(status); + commonStore.setStatus(status); }); } diff --git a/frontend/src/stores/commonStore.ts b/frontend/src/stores/commonStore.ts index cd8dfed..02c42e6 100644 --- a/frontend/src/stores/commonStore.ts +++ b/frontend/src/stores/commonStore.ts @@ -18,9 +18,19 @@ export enum ModelStatus { Working, } +export type Status = { + modelStatus: ModelStatus; + pid: number; + device_name: string; +} + class CommonStore { // global - modelStatus: ModelStatus = ModelStatus.Offline; + status: Status = { + modelStatus: ModelStatus.Offline, + pid: 0, + device_name: 'CPU' + }; depComplete: boolean = false; // home introduction: IntroductionContent = manifest.introduction; @@ -54,8 +64,8 @@ class CommonStore { return this.modelConfigs[this.currentModelConfigIndex]; }; - setModelStatus = (status: ModelStatus) => { - this.modelStatus = status; + setStatus = (status: Partial) => { + this.status = { ...this.status, ...status }; }; setCurrentConfigIndex = (index: number, saveConfig: boolean = true) => {