Browse Source

feat: add autoGenerateTitle option

(cherry picked from commit 656ab94a9c4edfee820616b8cfc39f5ee9952a3a)
imldy 1 year ago
parent
commit
20a508e2d6
5 changed files with 34 additions and 1 deletions
  1. 16 0
      app/components/settings.tsx
  2. 5 0
      app/locales/cn.ts
  3. 5 0
      app/locales/en.ts
  4. 2 0
      app/store/chat.ts
  5. 6 1
      app/store/config.ts

+ 16 - 0
app/components/settings.tsx

@@ -529,6 +529,22 @@ export function Settings() {
             ></InputRange>
           </ListItem>
 
+          <ListItem
+            title={Locale.Settings.AutoGenerateTitle.Title}
+            subTitle={Locale.Settings.AutoGenerateTitle.SubTitle}
+          >
+            <input
+              type="checkbox"
+              checked={config.enableAutoGenerateTitle}
+              onChange={(e) =>
+                updateConfig(
+                  (config) =>
+                    (config.enableAutoGenerateTitle = e.currentTarget.checked),
+                )
+              }
+            ></input>
+          </ListItem>
+
           <ListItem
             title={Locale.Settings.SendPreviewBubble.Title}
             subTitle={Locale.Settings.SendPreviewBubble.SubTitle}

+ 5 - 0
app/locales/cn.ts

@@ -170,6 +170,11 @@ const cn = {
       Title: "预览气泡",
       SubTitle: "在预览气泡中预览 Markdown 内容",
     },
+    AutoGenerateTitle: {
+      Title: "自动生成标题",
+      SubTitle:
+        "根据对话内容生成合适的标题(需标题为默认标题,并且内容长度大于设定的最小长度)",
+    },
     Mask: {
       Splash: {
         Title: "面具启动页",

+ 5 - 0
app/locales/en.ts

@@ -172,6 +172,11 @@ const en: LocaleType = {
       Title: "Send Preview Bubble",
       SubTitle: "Preview markdown in bubble",
     },
+    AutoGenerateTitle: {
+      Title: "Auto Generate Title",
+      SubTitle:
+        "Generate a suitable title based on the conversation content (requires default title and content length greater than the set minimum length)",
+    },
     Mask: {
       Splash: {
         Title: "Mask Splash Screen",

+ 2 - 0
app/store/chat.ts

@@ -479,6 +479,7 @@ export const useChatStore = create<ChatStore>()(
       },
 
       summarizeSession() {
+        const config = useAppConfig.getState();
         const session = get().currentSession();
 
         // remove error messages if any
@@ -487,6 +488,7 @@ export const useChatStore = create<ChatStore>()(
         // should summarize topic after chating more than 50 words
         const SUMMARIZE_MIN_LEN = 50;
         if (
+          config.enableAutoGenerateTitle &&
           session.topic === DEFAULT_TOPIC &&
           countMessages(messages) >= SUMMARIZE_MIN_LEN
         ) {

+ 6 - 1
app/store/config.ts

@@ -27,6 +27,7 @@ export const DEFAULT_CONFIG = {
   theme: Theme.Auto as Theme,
   tightBorder: !!getClientConfig()?.isApp,
   sendPreviewBubble: true,
+  enableAutoGenerateTitle: true,
   sidebarWidth: 300,
 
   disablePromptHint: false,
@@ -147,7 +148,7 @@ export const useAppConfig = create<ChatConfigStore>()(
     }),
     {
       name: StoreKey.Config,
-      version: 3.6,
+      version: 3.7,
       migrate(persistedState, version) {
         const state = persistedState as ChatConfig;
 
@@ -170,6 +171,10 @@ export const useAppConfig = create<ChatConfigStore>()(
           state.modelConfig.enableInjectSystemPrompts = true;
         }
 
+        if (version < 3.7) {
+          state.enableAutoGenerateTitle = true;
+        }
+
         return state as any;
       },
     },