Browse Source

feat: close #469 support reset session and do not send memory

Yidadaa 1 year ago
parent
commit
c2b37f811b

+ 0 - 1
README.md

@@ -62,7 +62,6 @@ One-Click to deploy your own ChatGPT web UI.
 - 用户登录、账号管理、消息云同步
 
 
-
 ## Get Started
 > [简体中文 > 如何开始使用](./README_CN.md#开始使用)
 

+ 8 - 0
app/components/chat.module.scss

@@ -63,6 +63,14 @@
     font-size: 12px;
     font-weight: bold;
     margin-bottom: 10px;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+
+    .memory-prompt-action {
+      display: flex;
+      align-items: center;
+    }
   }
 
   .memory-prompt-content {

+ 28 - 2
app/components/chat.tsx

@@ -144,6 +144,16 @@ function PromptToast(props: {
             title={Locale.Context.Edit}
             onClose={() => props.setShowModal(false)}
             actions={[
+              <IconButton
+                key="reset"
+                icon={<CopyIcon />}
+                bordered
+                text={Locale.Memory.Reset}
+                onClick={() =>
+                  confirm(Locale.Memory.ResetConfirm) &&
+                  chatStore.resetSession()
+                }
+              />,
               <IconButton
                 key="copy"
                 icon={<CopyIcon />}
@@ -212,8 +222,24 @@ function PromptToast(props: {
               </div>
               <div className={chatStyle["memory-prompt"]}>
                 <div className={chatStyle["memory-prompt-title"]}>
-                  {Locale.Memory.Title} ({session.lastSummarizeIndex} of{" "}
-                  {session.messages.length})
+                  <span>
+                    {Locale.Memory.Title} ({session.lastSummarizeIndex} of{" "}
+                    {session.messages.length})
+                  </span>
+
+                  <label className={chatStyle["memory-prompt-action"]}>
+                    {Locale.Memory.Send}
+                    <input
+                      type="checkbox"
+                      checked={session.sendMemory}
+                      onChange={() =>
+                        chatStore.updateCurrentSession(
+                          (session) =>
+                            (session.sendMemory = !session.sendMemory),
+                        )
+                      }
+                    ></input>
+                  </label>
                 </div>
                 <div className={chatStyle["memory-prompt-content"]}>
                   {session.memoryPrompt || Locale.Memory.EmptyContent}

+ 4 - 1
app/locales/cn.ts

@@ -39,7 +39,10 @@ const cn = {
   Memory: {
     Title: "历史记忆",
     EmptyContent: "尚未记忆",
-    Copy: "全部复制",
+    Send: "发送记忆",
+    Copy: "复制记忆",
+    Reset: "重置对话",
+    ResetConfirm: "重置后将清空当前对话记录以及历史记忆,确认重置?",
   },
   Home: {
     NewChat: "新的聊天",

+ 5 - 1
app/locales/en.ts

@@ -41,7 +41,11 @@ const en: LocaleType = {
   Memory: {
     Title: "Memory Prompt",
     EmptyContent: "Nothing yet.",
-    Copy: "Copy All",
+    Send: "Send Memory",
+    Copy: "Copy Memory",
+    Reset: "Reset Session",
+    ResetConfirm:
+      "Resetting will clear the current conversation history and historical memory. Are you sure you want to reset?",
   },
   Home: {
     NewChat: "New Chat",

+ 4 - 0
app/locales/es.ts

@@ -42,6 +42,10 @@ const es: LocaleType = {
     Title: "Historial de memoria",
     EmptyContent: "Aún no hay nada.",
     Copy: "Copiar todo",
+    Send: "Send Memory",
+    Reset: "Reset Session",
+    ResetConfirm:
+      "Resetting will clear the current conversation history and historical memory. Are you sure you want to reset?",
   },
   Home: {
     NewChat: "Nuevo chat",

+ 4 - 0
app/locales/it.ts

@@ -42,6 +42,10 @@ const it: LocaleType = {
     Title: "Prompt di memoria",
     EmptyContent: "Vuoto.",
     Copy: "Copia tutto",
+    Send: "Send Memory",
+    Reset: "Reset Session",
+    ResetConfirm:
+      "Resetting will clear the current conversation history and historical memory. Are you sure you want to reset?",
   },
   Home: {
     NewChat: "Nuova Chat",

+ 3 - 0
app/locales/tw.ts

@@ -41,6 +41,9 @@ const tw: LocaleType = {
     Title: "上下文記憶 Prompt",
     EmptyContent: "尚未記憶",
     Copy: "複製全部",
+    Send: "發送記憶",
+    Reset: "重置對話",
+    ResetConfirm: "重置後將清空當前對話記錄以及歷史記憶,確認重置?",
   },
   Home: {
     NewChat: "新的對話",

+ 20 - 2
app/store/app.ts

@@ -149,6 +149,7 @@ export interface ChatStat {
 export interface ChatSession {
   id: number;
   topic: string;
+  sendMemory: boolean;
   memoryPrompt: string;
   context: Message[];
   messages: Message[];
@@ -170,6 +171,7 @@ function createEmptySession(): ChatSession {
   return {
     id: Date.now(),
     topic: DEFAULT_TOPIC,
+    sendMemory: true,
     memoryPrompt: "",
     context: [],
     messages: [],
@@ -202,6 +204,7 @@ interface ChatStore {
     messageIndex: number,
     updater: (message?: Message) => void,
   ) => void;
+  resetSession: () => void;
   getMessagesWithMemory: () => Message[];
   getMemoryPrompt: () => Message;
 
@@ -391,7 +394,11 @@ export const useChatStore = create<ChatStore>()(
 
         const context = session.context.slice();
 
-        if (session.memoryPrompt && session.memoryPrompt.length > 0) {
+        if (
+          session.sendMemory &&
+          session.memoryPrompt &&
+          session.memoryPrompt.length > 0
+        ) {
           const memoryPrompt = get().getMemoryPrompt();
           context.push(memoryPrompt);
         }
@@ -415,6 +422,13 @@ export const useChatStore = create<ChatStore>()(
         set(() => ({ sessions }));
       },
 
+      resetSession() {
+        get().updateCurrentSession((session) => {
+          session.messages = [];
+          session.memoryPrompt = "";
+        });
+      },
+
       summarizeSession() {
         const session = get().currentSession();
 
@@ -506,7 +520,7 @@ export const useChatStore = create<ChatStore>()(
     }),
     {
       name: LOCAL_KEY,
-      version: 1.1,
+      version: 1.2,
       migrate(persistedState, version) {
         const state = persistedState as ChatStore;
 
@@ -514,6 +528,10 @@ export const useChatStore = create<ChatStore>()(
           state.sessions.forEach((s) => (s.context = []));
         }
 
+        if (version < 1.2) {
+          state.sessions.forEach((s) => (s.sendMemory = true));
+        }
+
         return state;
       },
     },

+ 4 - 0
app/styles/globals.scss

@@ -126,6 +126,10 @@ select {
   text-align: center;
 }
 
+label {
+  cursor: pointer;
+}
+
 input {
   text-align: center;
 }