From e5e04c36740ed5939f67104018c63f7efc760034 Mon Sep 17 00:00:00 2001 From: n4ze3m Date: Sat, 30 Nov 2024 19:04:45 +0530 Subject: [PATCH] feat: Add option to resume last chat when opening Web UI --- src/assets/locale/da/settings.json | 3 ++ src/assets/locale/de/settings.json | 3 ++ src/assets/locale/en/settings.json | 3 ++ src/assets/locale/es/settings.json | 3 ++ src/assets/locale/fr/settings.json | 3 ++ src/assets/locale/it/settings.json | 3 ++ src/assets/locale/ja-JP/settings.json | 3 ++ src/assets/locale/ko/settings.json | 3 ++ src/assets/locale/ml/settings.json | 3 ++ src/assets/locale/no/settings.json | 3 ++ src/assets/locale/pt-BR/settings.json | 3 ++ src/assets/locale/ru/settings.json | 3 ++ src/assets/locale/sv/settings.json | 3 ++ src/assets/locale/uk/settings.json | 3 ++ src/assets/locale/zh/settings.json | 3 ++ .../Option/Playground/Playground.tsx | 31 +++++++++++++++++-- .../Option/Settings/general-settings.tsx | 16 ++++++++++ src/db/index.ts | 24 +++++++++++--- src/services/app.ts | 4 +++ 19 files changed, 113 insertions(+), 7 deletions(-) diff --git a/src/assets/locale/da/settings.json b/src/assets/locale/da/settings.json index 1d088d1..9c16997 100644 --- a/src/assets/locale/da/settings.json +++ b/src/assets/locale/da/settings.json @@ -21,6 +21,9 @@ "copilotResumeLastChat": { "label": "Genoptag den sidste chat, når du åbner SidePanel (copilot)" }, + "webUIResumeLastChat": { + "label": "Genoptag den sidste chat, når du åbner Web UI'en" + }, "hideCurrentChatModelSettings": { "label": "Skjul nuværende chat model indstillinger" }, diff --git a/src/assets/locale/de/settings.json b/src/assets/locale/de/settings.json index c6b134b..b310307 100644 --- a/src/assets/locale/de/settings.json +++ b/src/assets/locale/de/settings.json @@ -21,6 +21,9 @@ "copilotResumeLastChat": { "label": "Letzten Chat beim Öffnen des Seitenpanels fortsetzen (Copilot)" }, + "webUIResumeLastChat": { + "label": "Letzten Chat beim Öffnen der Web-UI fortsetzen" + }, "hideCurrentChatModelSettings": { "label": "Aktuelle Chat-Modell-Einstellungen ausblenden" }, diff --git a/src/assets/locale/en/settings.json b/src/assets/locale/en/settings.json index eb98bf4..7a97966 100644 --- a/src/assets/locale/en/settings.json +++ b/src/assets/locale/en/settings.json @@ -21,6 +21,9 @@ "copilotResumeLastChat": { "label": "Resume the last chat when opening the SidePanel (Copilot)" }, + "webUIResumeLastChat": { + "label": "Resume the last chat when opening the Web UI" + }, "hideCurrentChatModelSettings": { "label": "Hide the current Chat Model Settings" }, diff --git a/src/assets/locale/es/settings.json b/src/assets/locale/es/settings.json index 4ed17d8..17db408 100644 --- a/src/assets/locale/es/settings.json +++ b/src/assets/locale/es/settings.json @@ -21,6 +21,9 @@ "copilotResumeLastChat": { "label": "Retomar el último chat al abrir el Panel Lateral (Copilot)" }, + "webUIResumeLastChat": { + "label": "Retomar el último chat al abrir la Interfaz Web" + }, "hideCurrentChatModelSettings": { "label": "Ocultar Configuraciones del Modelo de Chat Actual" }, diff --git a/src/assets/locale/fr/settings.json b/src/assets/locale/fr/settings.json index 7d3b191..18211df 100644 --- a/src/assets/locale/fr/settings.json +++ b/src/assets/locale/fr/settings.json @@ -21,6 +21,9 @@ "copilotResumeLastChat": { "label": "Reprendre la dernière conversation lors de l'ouverture du sidepanel (Copilot)" }, + "webUIResumeLastChat": { + "label": "Reprendre la dernière conversation lors de l'ouverture de l'interface Web" + }, "hideCurrentChatModelSettings": { "label": "Masquer les paramètres actuels du modèle de chat" }, diff --git a/src/assets/locale/it/settings.json b/src/assets/locale/it/settings.json index e227d22..a88f90a 100644 --- a/src/assets/locale/it/settings.json +++ b/src/assets/locale/it/settings.json @@ -21,6 +21,9 @@ "copilotResumeLastChat": { "label": "Riprendi l'ultima chat quando apri il Pannello Laterale (Copilot)" }, + "webUIResumeLastChat": { + "label": "Riprendi l'ultima chat quando apri l'interfaccia Web" + }, "hideCurrentChatModelSettings": { "label": "Nascondi le impostazioni correnti del modello Chat" }, diff --git a/src/assets/locale/ja-JP/settings.json b/src/assets/locale/ja-JP/settings.json index 0058062..bd5266e 100644 --- a/src/assets/locale/ja-JP/settings.json +++ b/src/assets/locale/ja-JP/settings.json @@ -24,6 +24,9 @@ "copilotResumeLastChat": { "label": "サイドパネルを開いたときに最後のチャットを再開 (Copilot)" }, + "webUIResumeLastChat": { + "label": "Web UIを開いたときに最後のチャットを再開" + }, "hideCurrentChatModelSettings": { "label": "現在のチャットモデル設定を非表示" }, diff --git a/src/assets/locale/ko/settings.json b/src/assets/locale/ko/settings.json index f3c7109..4779bdc 100644 --- a/src/assets/locale/ko/settings.json +++ b/src/assets/locale/ko/settings.json @@ -24,6 +24,9 @@ "copilotResumeLastChat": { "label": "사이드 패널을 열 때 마지막 채팅 재개 (Copilot)" }, + "webUIResumeLastChat": { + "label": "웹 UI를 열 때 마지막 채팅 재개" + }, "hideCurrentChatModelSettings": { "label": "현재 채팅 모델 설정 숨기기" }, diff --git a/src/assets/locale/ml/settings.json b/src/assets/locale/ml/settings.json index 03d67f1..63f5dc8 100644 --- a/src/assets/locale/ml/settings.json +++ b/src/assets/locale/ml/settings.json @@ -24,6 +24,9 @@ "copilotResumeLastChat": { "label": "സൈഡ്പാനൽ തുറക്കുമ്പോൾ അവസാനത്തെ ചാറ്റ് പുനരാരംഭിക്കുക (Copilot)" }, + "webUIResumeLastChat": { + "label": "വെബ് UI തുറക്കുമ്പോൾ അവസാനത്തെ ചാറ്റ് പുനരാരംഭിക്കുക" + }, "hideCurrentChatModelSettings": { "label": "നിലവിലുള്ള ചാറ്റ് മോഡൽ ക്രമീകരണങ്ങൾ മറയ്ക്കുക" }, diff --git a/src/assets/locale/no/settings.json b/src/assets/locale/no/settings.json index 1d9c2cd..10e4495 100644 --- a/src/assets/locale/no/settings.json +++ b/src/assets/locale/no/settings.json @@ -21,6 +21,9 @@ "copilotResumeLastChat": { "label": "Gjenoppta siste chat ved åpning av SidePanel (copilot)" }, + "webUIResumeLastChat": { + "label": "Gjenoppta siste chat når Web UI åpnes" + }, "hideCurrentChatModelSettings": { "label": "Skjul gjeldende chat modell innstillinger" }, diff --git a/src/assets/locale/pt-BR/settings.json b/src/assets/locale/pt-BR/settings.json index fad3b11..8c812b8 100644 --- a/src/assets/locale/pt-BR/settings.json +++ b/src/assets/locale/pt-BR/settings.json @@ -21,6 +21,9 @@ "copilotResumeLastChat": { "label": "Retomar o último chat ao abrir o Painel Lateral (Copilot)" }, + "webUIResumeLastChat": { + "label": "Retomar o último chat ao abrir a Interface Web" + }, "hideCurrentChatModelSettings": { "label": "Ocultar as Configurações Atuais do Modelo de Chat" }, diff --git a/src/assets/locale/ru/settings.json b/src/assets/locale/ru/settings.json index adf0008..fe509c7 100644 --- a/src/assets/locale/ru/settings.json +++ b/src/assets/locale/ru/settings.json @@ -21,6 +21,9 @@ "copilotResumeLastChat": { "label": "Возобновить последний чат при открытии боковой панели (Copilot)" }, + "webUIResumeLastChat": { + "label": "Возобновить последний чат при открытии веб-интерфейса" + }, "hideCurrentChatModelSettings": { "label": "Скрыть текущие настройки модели чата" }, diff --git a/src/assets/locale/sv/settings.json b/src/assets/locale/sv/settings.json index d1e11d0..7d782de 100644 --- a/src/assets/locale/sv/settings.json +++ b/src/assets/locale/sv/settings.json @@ -21,6 +21,9 @@ "copilotResumeLastChat": { "label": "Återuppta den senaste chatten när du öppnar sidopanelen (Copilot)" }, + "webUIResumeLastChat": { + "label": "Återuppta den senaste chatten när du öppnar webbgränssnittet" + }, "hideCurrentChatModelSettings": { "label": "Göm de nuvarande chattmodellinställningarna" }, diff --git a/src/assets/locale/uk/settings.json b/src/assets/locale/uk/settings.json index db0695b..bdcaa0b 100644 --- a/src/assets/locale/uk/settings.json +++ b/src/assets/locale/uk/settings.json @@ -21,6 +21,9 @@ "copilotResumeLastChat": { "label": "Поновити останню розмову при відкритті бічної панелі (Copilot)" }, + "webUIResumeLastChat": { + "label": "Поновити останню розмову при відкритті веб-інтерфейсу" + }, "hideCurrentChatModelSettings": { "label": "Приховати налаштування поточної моделі чату" }, diff --git a/src/assets/locale/zh/settings.json b/src/assets/locale/zh/settings.json index 2f834e9..0ec0554 100644 --- a/src/assets/locale/zh/settings.json +++ b/src/assets/locale/zh/settings.json @@ -24,6 +24,9 @@ "copilotResumeLastChat": { "label": "打开侧边栏时恢复上次聊天(Copilot)" }, + "webUIResumeLastChat": { + "label": "打开Web UI时恢复上次聊天" + }, "hideCurrentChatModelSettings": { "label": "隐藏当前聊天模型设置" }, diff --git a/src/components/Option/Playground/Playground.tsx b/src/components/Option/Playground/Playground.tsx index bc52b59..b97dae9 100644 --- a/src/components/Option/Playground/Playground.tsx +++ b/src/components/Option/Playground/Playground.tsx @@ -2,11 +2,18 @@ import React from "react" import { PlaygroundForm } from "./PlaygroundForm" import { PlaygroundChat } from "./PlaygroundChat" import { useMessageOption } from "@/hooks/useMessageOption" +import { webUIResumeLastChat } from "@/services/app" +import { + formatToChatHistory, + formatToMessage, + getRecentChatFromWebUI +} from "@/db" export const Playground = () => { const drop = React.useRef(null) const [dropedFile, setDropedFile] = React.useState() - const { selectedKnowledge } = useMessageOption() + const { selectedKnowledge, messages, setHistoryId, setHistory, setMessages } = + useMessageOption() const [dropState, setDropState] = React.useState< "idle" | "dragging" | "error" @@ -71,6 +78,26 @@ export const Playground = () => { } } }, [selectedKnowledge]) + + const setRecentMessagesOnLoad = async () => { + const isEnabled = await webUIResumeLastChat() + if (!isEnabled) { + return + } + if (messages.length === 0) { + const recentChat = await getRecentChatFromWebUI() + if (recentChat) { + setHistoryId(recentChat.history.id) + setHistory(formatToChatHistory(recentChat.messages)) + setMessages(formatToMessage(recentChat.messages)) + } + } + } + + React.useEffect(() => { + setRecentMessagesOnLoad() + }, []) + return (
{ dropState === "dragging" ? "bg-gray-100 dark:bg-gray-800 z-10" : "" } bg-white dark:bg-[#171717]`}> - +
diff --git a/src/components/Option/Settings/general-settings.tsx b/src/components/Option/Settings/general-settings.tsx index f615236..c471fd4 100644 --- a/src/components/Option/Settings/general-settings.tsx +++ b/src/components/Option/Settings/general-settings.tsx @@ -27,6 +27,11 @@ export const GeneralSettings = () => { false ) + const [webUIResumeLastChat, setWebUIResumeLastChat] = useStorage( + "webUIResumeLastChat", + false + ) + const [restoreLastChatModel, setRestoreLastChatModel] = useStorage( "restoreLastChatModel", false @@ -113,6 +118,17 @@ export const GeneralSettings = () => { onChange={(checked) => setCopilotResumeLastChat(checked)} />
+
+
+ + {t("generalSettings.settings.webUIResumeLastChat.label")} + +
+ setWebUIResumeLastChat(checked)} + /> +
diff --git a/src/db/index.ts b/src/db/index.ts index da837b2..6cab3ef 100644 --- a/src/db/index.ts +++ b/src/db/index.ts @@ -356,11 +356,11 @@ export const updateMessageByIndex = async ( message: string ) => { try { - const db = new PageAssitDatabase() - const chatHistory = (await db.getChatHistory(history_id)).reverse() - chatHistory[index].content = message - await db.db.set({ [history_id]: chatHistory.reverse() }) - } catch(e) { + const db = new PageAssitDatabase() + const chatHistory = (await db.getChatHistory(history_id)).reverse() + chatHistory[index].content = message + await db.db.set({ [history_id]: chatHistory.reverse() }) + } catch (e) { // temp chat will break } } @@ -515,6 +515,20 @@ export const getRecentChatFromCopilot = async () => { return { history, messages } } +export const getRecentChatFromWebUI = async () => { + const db = new PageAssitDatabase() + const chatHistories = await db.getChatHistories() + if (chatHistories.length === 0) return null + const history = chatHistories.find( + (history) => history.message_source === "web-ui" + ) + if (!history) return null + + const messages = await db.getChatHistory(history.id) + + return { history, messages } +} + export const getTitleById = async (id: string) => { const db = new PageAssitDatabase() const title = await db.getChatHistoryTitleById(id) diff --git a/src/services/app.ts b/src/services/app.ts index bbae388..647abab 100644 --- a/src/services/app.ts +++ b/src/services/app.ts @@ -39,6 +39,10 @@ export const copilotResumeLastChat = async () => { return await storage.get("copilotResumeLastChat") } +export const webUIResumeLastChat = async () => { + return await storage.get("webUIResumeLastChat") +} + export const defaultSidebarOpen = async () => { const sidebarOpen = await storage.get("sidebarOpen") if (!sidebarOpen || sidebarOpen === "") {