diff --git a/src/renderer/src/hooks/useAppInit.ts b/src/renderer/src/hooks/useAppInit.ts index 548aca25f4..2a481f564b 100644 --- a/src/renderer/src/hooks/useAppInit.ts +++ b/src/renderer/src/hooks/useAppInit.ts @@ -38,7 +38,7 @@ export function useAppInit() { enableDataCollection } = useSettings() const { minappShow } = useRuntime() - const { setDefaultModel, setTopicNamingModel, setTranslateModel } = useDefaultModel() + const { setDefaultModel, setQuickModel, setTranslateModel } = useDefaultModel() const avatar = useLiveQuery(() => db.settings.get('image://avatar')) const { theme } = useTheme() const memoryConfig = useAppSelector(selectMemoryConfig) @@ -115,7 +115,7 @@ export function useAppInit() { if (isLocalAi) { const model = JSON.parse(import.meta.env.VITE_RENDERER_INTEGRATED_MODEL) setDefaultModel(model) - setTopicNamingModel(model) + setQuickModel(model) setTranslateModel(model) } // eslint-disable-next-line react-hooks/exhaustive-deps diff --git a/src/renderer/src/hooks/useAssistant.ts b/src/renderer/src/hooks/useAssistant.ts index 5ca700b4bd..b029f96b06 100644 --- a/src/renderer/src/hooks/useAssistant.ts +++ b/src/renderer/src/hooks/useAssistant.ts @@ -23,7 +23,7 @@ import { updateTopic, updateTopics } from '@renderer/store/assistants' -import { setDefaultModel, setTopicNamingModel, setTranslateModel } from '@renderer/store/llm' +import { setDefaultModel, setQuickModel, setTranslateModel } from '@renderer/store/llm' import { Assistant, AssistantSettings, Model, Topic } from '@renderer/types' import { uuid } from '@renderer/utils' import { useCallback, useEffect, useMemo } from 'react' @@ -167,15 +167,15 @@ export function useDefaultAssistant() { } export function useDefaultModel() { - const { defaultModel, topicNamingModel, translateModel } = useAppSelector((state) => state.llm) + const { defaultModel, quickModel, translateModel } = useAppSelector((state) => state.llm) const dispatch = useAppDispatch() return { defaultModel, - topicNamingModel, + quickModel, translateModel, setDefaultModel: (model: Model) => dispatch(setDefaultModel({ model })), - setTopicNamingModel: (model: Model) => dispatch(setTopicNamingModel({ model })), + setQuickModel: (model: Model) => dispatch(setQuickModel({ model })), setTranslateModel: (model: Model) => dispatch(setTranslateModel({ model })) } } diff --git a/src/renderer/src/i18n/locales/en-us.json b/src/renderer/src/i18n/locales/en-us.json index a33c1002d5..5d37e8a98e 100644 --- a/src/renderer/src/i18n/locales/en-us.json +++ b/src/renderer/src/i18n/locales/en-us.json @@ -2276,8 +2276,8 @@ }, "message_title": { "use_topic_naming": { - "help": "When enabled, use topic naming model to create titles for exported messages. This will also affect all Markdown export methods.", - "title": "Use topic naming model to create titles for exported messages" + "help": "When enabled, use the quick model to name the title for exported messages. This setting also affects all export methods through Markdown.", + "title": "Use the quick model to name the title for the exported message" } }, "minute_interval_one": "{{count}} minute", @@ -3115,7 +3115,6 @@ "default_assistant_model": "Default Assistant Model", "default_assistant_model_description": "Model used when creating a new assistant, if the assistant is not set, this model will be used", "empty": "No models found", - "enable_topic_naming": "Topic Auto Naming", "manage": { "add_listed": { "confirm": "Are you sure you want to add all models to the list?", @@ -3141,10 +3140,17 @@ "quick_assistant_default_tag": "Default", "quick_assistant_model": "Quick Assistant Model", "quick_assistant_selection": "Select Assistant", - "topic_naming_model": "Topic Naming Model", - "topic_naming_model_description": "Model used when automatically naming a new topic", - "topic_naming_model_setting_title": "Topic Naming Model Settings", - "topic_naming_prompt": "Topic Naming Prompt", + "quick_model": { + "description": "Model used for simple tasks such as topic naming and keyword extraction", + "label": "Quick Model", + "setting_title": "Quick model setup", + "tooltip": "It is recommended to choose a lightweight model and not recommended to choose a thinking model." + }, + "topic_naming": { + "auto": "Topic Auto Naming", + "label": "Topic naming", + "prompt": "Topic Naming Prompt" + }, "translate_model": "Translate Model", "translate_model_description": "Model used for translation service", "translate_model_prompt_message": "Please enter the translate model prompt", diff --git a/src/renderer/src/i18n/locales/ja-jp.json b/src/renderer/src/i18n/locales/ja-jp.json index e9951fb798..1a38ee0bd2 100644 --- a/src/renderer/src/i18n/locales/ja-jp.json +++ b/src/renderer/src/i18n/locales/ja-jp.json @@ -2276,8 +2276,8 @@ }, "message_title": { "use_topic_naming": { - "help": "この設定は、すべてのMarkdownエクスポート方法に影響します。", - "title": "トピック命名モデルを使用してメッセージのタイトルを作成" + "help": "有効にすると、エクスポートされたメッセージのタイトル名に高速モデルを使用します。この設定はMarkdownによるエクスポート方法全般にも影響します。", + "title": "高速モデルを使用してエクスポートされたメッセージのタイトルを命名" } }, "minute_interval_one": "{{count}} 分", @@ -3115,7 +3115,6 @@ "default_assistant_model": "デフォルトアシスタントモデル", "default_assistant_model_description": "新しいアシスタントを作成する際に使用されるモデル。アシスタントがモデルを設定していない場合、このモデルが使用されます", "empty": "モデルが見つかりません", - "enable_topic_naming": "トピックの自動命名", "manage": { "add_listed": { "confirm": "すべてのモデルをリストに追加しますか?", @@ -3141,10 +3140,17 @@ "quick_assistant_default_tag": "デフォルト", "quick_assistant_model": "クイックアシスタントモデル", "quick_assistant_selection": "アシスタントを選択します", - "topic_naming_model": "トピック命名モデル", - "topic_naming_model_description": "新しいトピックを自動的に命名する際に使用されるモデル", - "topic_naming_model_setting_title": "トピック命名モデルの設定", - "topic_naming_prompt": "トピック命名プロンプト", + "quick_model": { + "description": "トピックの命名や検索キーワードの抽出などの簡単なタスクを実行する際に使用されるモデル", + "label": "高速モデル", + "setting_title": "高速モデル設定", + "tooltip": "軽量モデルの選択を推奨し、思考モデルの選択は推奨しません" + }, + "topic_naming": { + "auto": "トピックの自動命名", + "label": "トピック名", + "prompt": "トピック命名プロンプト" + }, "translate_model": "翻訳モデル", "translate_model_description": "翻訳サービスに使用されるモデル", "translate_model_prompt_message": "翻訳モデルのプロンプトを入力してください", diff --git a/src/renderer/src/i18n/locales/ru-ru.json b/src/renderer/src/i18n/locales/ru-ru.json index bdb865ce23..7ea239bc38 100644 --- a/src/renderer/src/i18n/locales/ru-ru.json +++ b/src/renderer/src/i18n/locales/ru-ru.json @@ -2276,8 +2276,8 @@ }, "message_title": { "use_topic_naming": { - "help": "Этот параметр влияет на все методы экспорта в Markdown, такие как Notion, Yuque и т.д.", - "title": "Использовать модель именования тем для создания заголовков сообщений" + "help": "После включения заголовки экспортируемых сообщений будут назначаться с использованием быстрой модели. Эта настройка также влияет на все способы экспорта через Markdown", + "title": "Использование быстрой модели для наименования заголовков экспортированных сообщений" } }, "minute_interval_one": "{{count}} минута", @@ -3115,7 +3115,6 @@ "default_assistant_model": "Модель ассистента по умолчанию", "default_assistant_model_description": "Модель, используемая при создании нового ассистента, если ассистент не имеет настроенной модели, будет использоваться эта модель", "empty": "Модели не найдены", - "enable_topic_naming": "Автоматическое переименование топика", "manage": { "add_listed": { "confirm": "Вы уверены, что хотите добавить все модели в список?", @@ -3141,10 +3140,17 @@ "quick_assistant_default_tag": "умолчанию", "quick_assistant_model": "Модель быстрого помощника", "quick_assistant_selection": "Выберите помощника", - "topic_naming_model": "Модель именования топика", - "topic_naming_model_description": "Модель, используемая при автоматическом именовании нового топика", - "topic_naming_model_setting_title": "Настройки модели именования топика", - "topic_naming_prompt": "Подсказка для именования топика", + "quick_model": { + "description": "модель, используемая для выполнения простых задач, таких как именование тем, извлечение ключевых слов для поиска и т.д.", + "label": "Быстрая модель", + "setting_title": "Быстрая настройка модели", + "tooltip": "Рекомендуется выбирать легковесную модель, не рекомендуется выбирать модель с функцией размышления" + }, + "topic_naming": { + "auto": "Автоматическое переименование топика", + "label": "Название темы", + "prompt": "Подсказка для именования топика" + }, "translate_model": "Модель перевода", "translate_model_description": "Модель, используемая для сервиса перевода", "translate_model_prompt_message": "Введите модель перевода", diff --git a/src/renderer/src/i18n/locales/zh-cn.json b/src/renderer/src/i18n/locales/zh-cn.json index ee907a9f01..3901a2f5c2 100644 --- a/src/renderer/src/i18n/locales/zh-cn.json +++ b/src/renderer/src/i18n/locales/zh-cn.json @@ -2276,8 +2276,8 @@ }, "message_title": { "use_topic_naming": { - "help": "开启后,使用话题命名模型为导出的消息创建标题。该项也会影响所有通过 Markdown 导出的方式", - "title": "使用话题命名模型为导出的消息创建标题" + "help": "开启后,使用快速模型为导出的消息命名标题。该项也会影响所有通过 Markdown 导出的方式", + "title": "使用快速模型为导出的消息命名标题" } }, "minute_interval_one": "{{count}} 分钟", @@ -3115,7 +3115,6 @@ "default_assistant_model": "默认助手模型", "default_assistant_model_description": "创建新助手时使用的模型,如果助手未设置模型,则使用此模型", "empty": "没有模型", - "enable_topic_naming": "话题自动重命名", "manage": { "add_listed": { "confirm": "确定要添加所有模型到列表吗?", @@ -3141,10 +3140,17 @@ "quick_assistant_default_tag": "默认", "quick_assistant_model": "快捷助手模型", "quick_assistant_selection": "选择助手", - "topic_naming_model": "话题命名模型", - "topic_naming_model_description": "自动命名新话题时使用的模型", - "topic_naming_model_setting_title": "话题命名模型设置", - "topic_naming_prompt": "话题命名提示词", + "quick_model": { + "description": "执行话题命名、搜索关键字提炼等简单任务时使用的模型", + "label": "快速模型", + "setting_title": "快速模型设置", + "tooltip": "建议选择轻量模型,不建议选择思考模型" + }, + "topic_naming": { + "auto": "话题自动重命名", + "label": "话题命名", + "prompt": "话题命名提示词" + }, "translate_model": "翻译模型", "translate_model_description": "翻译服务使用的模型", "translate_model_prompt_message": "请输入翻译模型提示词", diff --git a/src/renderer/src/i18n/locales/zh-tw.json b/src/renderer/src/i18n/locales/zh-tw.json index 27ec4da126..e43e91249a 100644 --- a/src/renderer/src/i18n/locales/zh-tw.json +++ b/src/renderer/src/i18n/locales/zh-tw.json @@ -2276,8 +2276,8 @@ }, "message_title": { "use_topic_naming": { - "help": "此設定會影響所有通過 Markdown 導出的方式,如 Notion、語雀等", - "title": "使用話題命名模型為導出的消息創建標題" + "help": "開啟後,使用快速模型為導出的消息命名標題。該項也會影響所有透過 Markdown 導出的方式", + "title": "使用快速模型為導出的消息命名標題" } }, "minute_interval_one": "{{count}} 分鐘", @@ -3115,7 +3115,6 @@ "default_assistant_model": "預設助手模型", "default_assistant_model_description": "建立新助手時使用的模型,如果助手未設定模型,則使用此模型", "empty": "找不到模型", - "enable_topic_naming": "話題自動重新命名", "manage": { "add_listed": { "confirm": "確定要新增所有模型到列表嗎?", @@ -3141,10 +3140,17 @@ "quick_assistant_default_tag": "預設", "quick_assistant_model": "快捷助手模型", "quick_assistant_selection": "選擇助手", - "topic_naming_model": "話題命名模型", - "topic_naming_model_description": "自動命名新話題時使用的模型", - "topic_naming_model_setting_title": "話題命名模型設定", - "topic_naming_prompt": "話題命名提示詞", + "quick_model": { + "description": "用於執行話題命名、搜尋關鍵字提煉等簡單任務的模型", + "label": "快速模型", + "setting_title": "快速模型設定", + "tooltip": "建議選擇輕量模型,不建議選擇思考模型" + }, + "topic_naming": { + "auto": "話題自動重新命名", + "label": "話題命名", + "prompt": "話題命名提示詞" + }, "translate_model": "翻譯模型", "translate_model_description": "翻譯服務使用的模型", "translate_model_prompt_message": "請輸入翻譯模型提示詞", diff --git a/src/renderer/src/i18n/translate/el-gr.json b/src/renderer/src/i18n/translate/el-gr.json index d907bf2ebb..161906ea26 100644 --- a/src/renderer/src/i18n/translate/el-gr.json +++ b/src/renderer/src/i18n/translate/el-gr.json @@ -2274,8 +2274,8 @@ }, "message_title": { "use_topic_naming": { - "help": "Όταν είναι ενεργό, δημιουργεί τίτλους για τα μηνύματα που εξάγονται χρησιμοποιώντας μοντέλο ονομασίας θεμάτων. Αυτό επηρεάζει επίσης όλες τις μεθόδους εξαγωγής μέσω Markdown.", - "title": "Δημιουργία τίτλων μηνυμάτων χρησιμοποιώντας μοντέλο ονομασίας θεμάτων" + "help": "Όταν ενεργοποιηθεί, χρησιμοποιεί το γρήγορο μοντέλο για να ονομάσει τον τίτλο των εξαγόμενων μηνυμάτων. Αυτό επηρεάζει επίσης όλους τους τρόπους εξαγωγής μέσω Markdown.", + "title": "Χρησιμοποιήστε το γρήγορο μοντέλο για να ονομάσετε τον τίτλο των εξαγόμενων μηνυμάτων" } }, "minute_interval_one": "{{count}} λεπτά", @@ -3113,7 +3113,6 @@ "default_assistant_model": "Πρόεδρος Υπηρεσίας προεπιλεγμένου μοντέλου", "default_assistant_model_description": "Το μοντέλο που χρησιμοποιείται όταν δημιουργείτε νέο υπάλληλο. Αν το υπάλληλο δεν έχει επιλεγμένο ένα μοντέλο, τότε θα χρησιμοποιεί αυτό το μοντέλο.", "empty": "Δεν υπάρχουν μοντέλα", - "enable_topic_naming": "Αυτόματη αναδόμηση θεμάτων", "manage": { "add_listed": { "confirm": "Είστε βέβαιοι ότι θέλετε να προσθέσετε όλα τα μοντέλα στη λίστα;", @@ -3139,10 +3138,17 @@ "quick_assistant_default_tag": "Προεπιλογή", "quick_assistant_model": "Μοντέλο Γρήγορου Βοηθού", "quick_assistant_selection": "Επιλογή Βοηθού", - "topic_naming_model": "Μοντέλο αναδόμησης θεμάτων", - "topic_naming_model_description": "Το μοντέλο που χρησιμοποιείται όταν αυτόματα ονομάζεται ένα νέο θέμα", - "topic_naming_model_setting_title": "Ρυθμίσεις Μοντέλου Αναδόμησης Θεμάτων", - "topic_naming_prompt": "Προσδιορισμός προκαθορισμένου θέματος", + "quick_model": { + "description": "Το μοντέλο που χρησιμοποιείται για απλές εργασίες, όπως η ονομασία θεμάτων και η εξαγωγή λέξεων-κλειδιών αναζήτησης", + "label": "Γρήγορο μοντέλο", + "setting_title": "Γρήγορη ρύθμιση μοντέλου", + "tooltip": "Προτείνεται να επιλέξετε ένα ελαφρύ μοντέλο και δεν συνιστάται να επιλέξετε ένα μοντέλο σκέψης" + }, + "topic_naming": { + "auto": "Αυτόματη αναδόμηση θεμάτων", + "label": "Ονομασία θέματος", + "prompt": "Προσδιορισμός προκαθορισμένου θέματος" + }, "translate_model": "Μοντέλο μετάφρασης", "translate_model_description": "Το μοντέλο που χρησιμοποιείται για τη μετάφραση", "translate_model_prompt_message": "Εισάγετε την προσδιορισμένη προειδοποίηση μετάφρασης", diff --git a/src/renderer/src/i18n/translate/es-es.json b/src/renderer/src/i18n/translate/es-es.json index caafec597c..8957cf1f42 100644 --- a/src/renderer/src/i18n/translate/es-es.json +++ b/src/renderer/src/i18n/translate/es-es.json @@ -2274,8 +2274,8 @@ }, "message_title": { "use_topic_naming": { - "help": "Al activarlo, se utilizará el modelo de nombramiento temático para generar títulos de mensajes exportados. Esta opción también afectará a todos los métodos de exportación mediante Markdown.", - "title": "Usar el modelo de nombramiento temático para crear títulos de mensajes exportados" + "help": "Activado, utiliza el modelo rápido para nombrar el título de los mensajes exportados. Esta opción también afecta a todas las formas de exportación mediante Markdown.", + "title": "Usar el modelo rápido para nombrar el título de los mensajes exportados" } }, "minute_interval_one": "{{count}} minuto", @@ -3113,7 +3113,6 @@ "default_assistant_model": "Modelo predeterminado del asistente", "default_assistant_model_description": "Modelo utilizado al crear nuevos asistentes, si el asistente no tiene un modelo asignado, se utiliza este modelo", "empty": "Sin modelos", - "enable_topic_naming": "Renombrar temas automáticamente", "manage": { "add_listed": { "confirm": "¿Está seguro de que desea agregar todos los modelos a la lista?", @@ -3139,10 +3138,17 @@ "quick_assistant_default_tag": "Predeterminado", "quick_assistant_model": "Modelo del asistente rápido", "quick_assistant_selection": "Seleccionar asistente", - "topic_naming_model": "Modelo de nombramiento de temas", - "topic_naming_model_description": "Modelo utilizado para nombrar temas automáticamente", - "topic_naming_model_setting_title": "Configuración del modelo de nombramiento de temas", - "topic_naming_prompt": "Sugerencias para nombramiento de temas", + "quick_model": { + "description": "El modelo rápido es utilizado para realizar tareas sencillas como nombrar temas, extraer palabras clave de búsqueda, etc.", + "label": "Modelo rápido", + "setting_title": "Configuración del modelo rápido", + "tooltip": "Se recomienda elegir un modelo ligero y no se recomienda elegir un modelo de razonamiento" + }, + "topic_naming": { + "auto": "Renombrar temas automáticamente", + "label": "Nombramiento del tema", + "prompt": "Sugerencias para nombramiento de temas" + }, "translate_model": "Modelo de traducción", "translate_model_description": "Modelo utilizado para el servicio de traducción", "translate_model_prompt_message": "Ingrese las sugerencias del modelo de traducción", diff --git a/src/renderer/src/i18n/translate/fr-fr.json b/src/renderer/src/i18n/translate/fr-fr.json index 1a5bf18641..32326df24c 100644 --- a/src/renderer/src/i18n/translate/fr-fr.json +++ b/src/renderer/src/i18n/translate/fr-fr.json @@ -2274,8 +2274,8 @@ }, "message_title": { "use_topic_naming": { - "help": "Lorsque cette option est activée, le modèle de dénomination thématique sera utilisé pour créer les titres des messages exportés. Cette option affectera également toutes les méthodes d'exportation au format Markdown.", - "title": "Utiliser le modèle de dénomination thématique pour créer les titres des messages exportés" + "help": "Activé, utilise un modèle rapide pour nommer les titres des messages exportés. Cette option affecte également toutes les méthodes d'exportation via Markdown.", + "title": "Utiliser le modèle rapide pour nommer le titre des messages exportés" } }, "minute_interval_one": "{{count}} minute", @@ -3113,7 +3113,6 @@ "default_assistant_model": "Modèle d'assistant par défaut", "default_assistant_model_description": "Modèle utilisé pour créer de nouveaux assistants, si aucun modèle n'est défini pour l'assistant, ce modèle sera utilisé", "empty": "Aucun modèle", - "enable_topic_naming": "Renommage automatique des sujets", "manage": { "add_listed": { "confirm": "Êtes-vous sûr de vouloir ajouter tous les modèles à la liste ?", @@ -3139,10 +3138,17 @@ "quick_assistant_default_tag": "Par défaut", "quick_assistant_model": "Modèle de l'assistant rapide", "quick_assistant_selection": "Sélectionner l'assistant", - "topic_naming_model": "Modèle de renommage des sujets", - "topic_naming_model_description": "Modèle utilisé pour le renommage automatique des nouveaux sujets", - "topic_naming_model_setting_title": "Paramètres du modèle de renommage des sujets", - "topic_naming_prompt": "Mot-clé de renommage des sujets", + "quick_model": { + "description": "modèle utilisé pour effectuer des tâches simples telles que la nomination de sujets, l'extraction de mots-clés de recherche, etc.", + "label": "Modèle rapide", + "setting_title": "Configuration rapide du modèle", + "tooltip": "Il est recommandé de choisir un modèle léger et déconseillé de choisir un modèle de réflexion." + }, + "topic_naming": { + "auto": "Renommage automatique des sujets", + "label": "Nom de sujet", + "prompt": "Mot-clé de renommage des sujets" + }, "translate_model": "Modèle de traduction", "translate_model_description": "Modèle utilisé pour le service de traduction", "translate_model_prompt_message": "Entrez le mot-clé du modèle de traduction", diff --git a/src/renderer/src/i18n/translate/pt-pt.json b/src/renderer/src/i18n/translate/pt-pt.json index 61229bbf1e..c76b3e630b 100644 --- a/src/renderer/src/i18n/translate/pt-pt.json +++ b/src/renderer/src/i18n/translate/pt-pt.json @@ -2274,8 +2274,8 @@ }, "message_title": { "use_topic_naming": { - "help": "Ativando esta opção, será usado um modelo de nomeação por tópico para criar os títulos das mensagens exportadas. Esta configuração também afetará todas as formas de exportação feitas por meio de Markdown.", - "title": "Usar modelo de nomeação por tópico para criar títulos das mensagens exportadas" + "help": "Ativado, usa um modelo rápido para nomear o título das mensagens exportadas. Esta opção também afeta todas as formas de exportação por Markdown.", + "title": "Usar modelo rápido para nomear o título das mensagens exportadas" } }, "minute_interval_one": "{{count}} minuto", @@ -3113,7 +3113,6 @@ "default_assistant_model": "Modelo de assistente padrão", "default_assistant_model_description": "Modelo usado ao criar um novo assistente, se o assistente não tiver um modelo definido, este será usado", "empty": "Sem modelos", - "enable_topic_naming": "Renomeação automática de tópicos", "manage": { "add_listed": { "confirm": "Tem a certeza de que deseja adicionar todos os modelos à lista?", @@ -3139,10 +3138,17 @@ "quick_assistant_default_tag": "Padrão", "quick_assistant_model": "Modelo do Assistente Rápido", "quick_assistant_selection": "Selecionar Assistente", - "topic_naming_model": "Modelo de nomenclatura de tópicos", - "topic_naming_model_description": "Modelo usado para nomear tópicos automaticamente", - "topic_naming_model_setting_title": "Configurações do modelo de nomenclatura de tópicos", - "topic_naming_prompt": "Prompt de nomenclatura de tópicos", + "quick_model": { + "description": "Modelo utilizado para executar tarefas simples, como nomeação de tópicos, extração de palavras-chave de busca, entre outras.", + "label": "Modelo rápido", + "setting_title": "Configuração rápida do modelo", + "tooltip": "Sugere-se escolher um modelo leve e não se recomenda escolher um modelo de raciocínio" + }, + "topic_naming": { + "auto": "Renomeação automática de tópicos", + "label": "Nomeação do tópico", + "prompt": "Prompt de nomenclatura de tópicos" + }, "translate_model": "Modelo de tradução", "translate_model_description": "Modelo usado para serviços de tradução", "translate_model_prompt_message": "Digite o prompt do modelo de tradução", diff --git a/src/renderer/src/pages/settings/ModelSettings/ModelSettings.tsx b/src/renderer/src/pages/settings/ModelSettings/ModelSettings.tsx index 8832afda61..b0a0453a90 100644 --- a/src/renderer/src/pages/settings/ModelSettings/ModelSettings.tsx +++ b/src/renderer/src/pages/settings/ModelSettings/ModelSettings.tsx @@ -1,4 +1,5 @@ import { RedoOutlined } from '@ant-design/icons' +import InfoTooltip from '@renderer/components/InfoTooltip' import { HStack } from '@renderer/components/Layout' import ModelSelector from '@renderer/components/ModelSelector' import { isEmbeddingModel, isRerankModel, isTextToImageModel } from '@renderer/config/models' @@ -13,17 +14,17 @@ import { setTranslateModelPrompt } from '@renderer/store/settings' import { Model } from '@renderer/types' import { Button, Tooltip } from 'antd' import { find } from 'lodash' -import { FolderPen, Languages, MessageSquareMore, Settings2 } from 'lucide-react' +import { Languages, MessageSquareMore, Rocket, Settings2 } from 'lucide-react' import { FC, useCallback, useMemo } from 'react' import { useTranslation } from 'react-i18next' import { SettingContainer, SettingDescription, SettingGroup, SettingTitle } from '..' import TranslateSettingsPopup from '../TranslateSettingsPopup/TranslateSettingsPopup' import DefaultAssistantSettings from './DefaultAssistantSettings' -import TopicNamingModalPopup from './TopicNamingModalPopup' +import TopicNamingModalPopup from './QuickModelPopup' const ModelSettings: FC = () => { - const { defaultModel, topicNamingModel, translateModel, setDefaultModel, setTopicNamingModel, setTranslateModel } = + const { defaultModel, quickModel, translateModel, setDefaultModel, setQuickModel, setTranslateModel } = useDefaultModel() const { providers } = useProviders() const allModels = providers.map((p) => p.models).flat() @@ -43,10 +44,7 @@ const ModelSettings: FC = () => { [defaultModel] ) - const defaultTopicNamingModel = useMemo( - () => (hasModel(topicNamingModel) ? getModelUniqId(topicNamingModel) : undefined), - [topicNamingModel] - ) + const defaultQuickModel = useMemo(() => (hasModel(quickModel) ? getModelUniqId(quickModel) : undefined), [quickModel]) const defaultTranslateModel = useMemo( () => (hasModel(translateModel) ? getModelUniqId(translateModel) : undefined), @@ -83,23 +81,24 @@ const ModelSettings: FC = () => { - - {t('settings.models.topic_naming_model')} + + {t('settings.models.quick_model.label')} + setTopicNamingModel(find(allModels, JSON.parse(value)) as Model)} + onChange={(value) => setQuickModel(find(allModels, JSON.parse(value)) as Model)} placeholder={t('settings.models.empty')} /> - )} - - - ) -} - -const TopViewKey = 'TopicNamingModalPopup' - -export default class TopicNamingModalPopup { - static topviewId = 0 - static hide() { - TopView.hide(TopViewKey) - } - static show() { - return new Promise((resolve) => { - TopView.show( - { - resolve(v) - TopView.hide(TopViewKey) - }} - />, - TopViewKey - ) - }) - } -} diff --git a/src/renderer/src/services/ApiService.ts b/src/renderer/src/services/ApiService.ts index 579269414e..2cddbcee2c 100644 --- a/src/renderer/src/services/ApiService.ts +++ b/src/renderer/src/services/ApiService.ts @@ -65,7 +65,7 @@ import { getDefaultAssistant, getDefaultModel, getProviderByModel, - getTopNamingModel, + getQuickModel, getTranslateModel } from './AssistantService' import { processKnowledgeSearch } from './KnowledgeService' @@ -135,7 +135,7 @@ async function fetchExternalTool( } const summaryAssistant = getDefaultAssistant() - summaryAssistant.model = assistant.model || getDefaultModel() + summaryAssistant.model = getQuickModel() || assistant.model || getDefaultModel() summaryAssistant.prompt = prompt const callSearchSummary = async (params: { messages: Message[]; assistant: Assistant }) => { @@ -677,7 +677,7 @@ export async function fetchLanguageDetection({ text, onResponse }: FetchLanguage export async function fetchMessagesSummary({ messages, assistant }: { messages: Message[]; assistant: Assistant }) { let prompt = (getStoreSetting('topicNamingPrompt') as string) || i18n.t('prompts.title') - const model = getTopNamingModel() || assistant.model || getDefaultModel() + const model = getQuickModel() || assistant.model || getDefaultModel() if (prompt && containsSupportedVariables(prompt)) { prompt = await replacePromptVariables(prompt, model.name) @@ -747,7 +747,7 @@ export async function fetchMessagesSummary({ messages, assistant }: { messages: } export async function fetchSearchSummary({ messages, assistant }: { messages: Message[]; assistant: Assistant }) { - const model = assistant.model || getDefaultModel() + const model = getQuickModel() || assistant.model || getDefaultModel() const provider = getProviderByModel(model) if (!hasApiKey(provider)) { diff --git a/src/renderer/src/services/AssistantService.ts b/src/renderer/src/services/AssistantService.ts index 771d804359..311b1d1528 100644 --- a/src/renderer/src/services/AssistantService.ts +++ b/src/renderer/src/services/AssistantService.ts @@ -99,8 +99,8 @@ export function getDefaultModel() { return store.getState().llm.defaultModel } -export function getTopNamingModel() { - return store.getState().llm.topicNamingModel +export function getQuickModel() { + return store.getState().llm.quickModel } export function getTranslateModel() { diff --git a/src/renderer/src/services/__tests__/ApiService.test.ts b/src/renderer/src/services/__tests__/ApiService.test.ts index ea5006678d..f0fc782a52 100644 --- a/src/renderer/src/services/__tests__/ApiService.test.ts +++ b/src/renderer/src/services/__tests__/ApiService.test.ts @@ -16,6 +16,7 @@ import { GeminiAPIClient } from '@renderer/aiCore/clients/gemini/GeminiAPIClient import { OpenAIResponseAPIClient } from '@renderer/aiCore/clients/openai/OpenAIResponseAPIClient' import { GenericChunk } from '@renderer/aiCore/middleware/schemas' import { isVisionModel } from '@renderer/config/models' +import { LlmState } from '@renderer/store/llm' import { Assistant, MCPCallToolResponse, MCPToolResponse, Model, Provider, WebSearchSource } from '@renderer/types' import { Chunk, @@ -178,7 +179,8 @@ vi.mock('@renderer/store/llm.ts', () => { id: 'gemini-2.5-pro', name: 'Gemini 2.5 Pro', provider: 'gemini', - supported_text_delta: true + supported_text_delta: true, + group: '' } ], isSystem: true, @@ -189,19 +191,29 @@ vi.mock('@renderer/store/llm.ts', () => { id: 'gemini-2.5-pro', name: 'Gemini 2.5 Pro', provider: 'gemini', - supported_text_delta: true + supported_text_delta: true, + group: '' }, topicNamingModel: { id: 'gemini-2.5-pro', name: 'Gemini 2.5 Pro', provider: 'gemini', - supported_text_delta: true + supported_text_delta: true, + group: '' + }, + quickModel: { + id: 'gemini-2.5-pro', + name: 'Gemini 2.5 Pro', + provider: 'gemini', + supported_text_delta: true, + group: '' }, translateModel: { id: 'gemini-2.5-pro', name: 'Gemini 2.5 Pro', provider: 'gemini', - supported_text_delta: true + supported_text_delta: true, + group: '' }, quickAssistantId: '', settings: { @@ -215,9 +227,14 @@ vi.mock('@renderer/store/llm.ts', () => { }, projectId: '', location: '' + }, + awsBedrock: { + accessKeyId: '', + secretAccessKey: '', + region: '' } } - } + } satisfies LlmState const mockReducer = (state = mockInitialState) => { return state diff --git a/src/renderer/src/store/index.ts b/src/renderer/src/store/index.ts index c328f8b6c3..f1c8b8bb3c 100644 --- a/src/renderer/src/store/index.ts +++ b/src/renderer/src/store/index.ts @@ -62,7 +62,7 @@ const persistedReducer = persistReducer( { key: 'cherry-studio', storage, - version: 133, + version: 134, blacklist: ['runtime', 'messages', 'messageBlocks', 'tabs'], migrate }, diff --git a/src/renderer/src/store/llm.ts b/src/renderer/src/store/llm.ts index 82a73d0c0d..6dd1b777a5 100644 --- a/src/renderer/src/store/llm.ts +++ b/src/renderer/src/store/llm.ts @@ -33,7 +33,9 @@ type LlmSettings = { export interface LlmState { providers: Provider[] defaultModel: Model + /** @deprecated */ topicNamingModel: Model + quickModel: Model translateModel: Model quickAssistantId: string settings: LlmSettings @@ -42,6 +44,7 @@ export interface LlmState { export const initialState: LlmState = { defaultModel: SYSTEM_MODELS.defaultModel[0], topicNamingModel: SYSTEM_MODELS.defaultModel[1], + quickModel: SYSTEM_MODELS.defaultModel[1], translateModel: SYSTEM_MODELS.defaultModel[2], quickAssistantId: '', providers: SYSTEM_PROVIDERS, @@ -71,12 +74,14 @@ export const initialState: LlmState = { } } +// 由于 isLocalAi 目前总是为false,该函数暂未被使用 +// 需要投入使用时,应当保证返回值类型满足 LlmState 要求,而不是使用类型断言 const getIntegratedInitialState = () => { const model = JSON.parse(import.meta.env.VITE_RENDERER_INTEGRATED_MODEL) return { defaultModel: model, - topicNamingModel: model, + quickModel: model, translateModel: model, providers: [ { @@ -160,8 +165,8 @@ const llmSlice = createSlice({ setDefaultModel: (state, action: PayloadAction<{ model: Model }>) => { state.defaultModel = action.payload.model }, - setTopicNamingModel: (state, action: PayloadAction<{ model: Model }>) => { - state.topicNamingModel = action.payload.model + setQuickModel: (state, action: PayloadAction<{ model: Model }>) => { + state.quickModel = action.payload.model }, setTranslateModel: (state, action: PayloadAction<{ model: Model }>) => { state.translateModel = action.payload.model @@ -226,7 +231,7 @@ export const { addModel, removeModel, setDefaultModel, - setTopicNamingModel, + setQuickModel, setTranslateModel, setQuickAssistantId, setOllamaKeepAliveTime, diff --git a/src/renderer/src/store/migrate.ts b/src/renderer/src/store/migrate.ts index 35be59f72d..c56dcf38cb 100644 --- a/src/renderer/src/store/migrate.ts +++ b/src/renderer/src/store/migrate.ts @@ -2135,10 +2135,21 @@ const migrateConfig = { logger.error('migrate 133 error', error as Error) return state } + }, + '134': (state: RootState) => { + try { + state.llm.quickModel = state.llm.topicNamingModel + + return state + } catch (error) { + logger.error('migrate 134 error', error as Error) + return state + } } } // 注意:添加新迁移时,记得同时更新 persistReducer +// file://./index.ts const migrate = createMigrate(migrateConfig as any)