From f448d8a8db5bf02d59fa942abbc9472f6878f96e Mon Sep 17 00:00:00 2001 From: kangfenmao Date: Tue, 25 Feb 2025 19:53:04 +0800 Subject: [PATCH] fix: assistant and agent emoji --- src/renderer/src/i18n/locales/en-us.json | 2 +- src/renderer/src/i18n/locales/ja-jp.json | 4 +- src/renderer/src/i18n/locales/ru-ru.json | 2 +- src/renderer/src/i18n/locales/zh-cn.json | 2 +- src/renderer/src/i18n/locales/zh-tw.json | 2 +- src/renderer/src/pages/agents/AgentsPage.tsx | 6 +- .../src/pages/home/Tabs/AssistantItem.tsx | 6 +- .../AssistantPromptSettings.tsx | 4 +- .../DefaultAssistantSettings.tsx | 132 ++++++++++++------ src/renderer/src/services/AssistantService.ts | 8 +- src/renderer/src/store/index.ts | 2 +- src/renderer/src/store/migrate.ts | 23 ++- 12 files changed, 133 insertions(+), 60 deletions(-) diff --git a/src/renderer/src/i18n/locales/en-us.json b/src/renderer/src/i18n/locales/en-us.json index e9985955f6..48ab56d6c0 100644 --- a/src/renderer/src/i18n/locales/en-us.json +++ b/src/renderer/src/i18n/locales/en-us.json @@ -79,7 +79,7 @@ "assistant.search.placeholder": "Search", "deeply_thought": "Deeply thought ({{secounds}} seconds)", "default.description": "Hello, I'm Default Assistant. You can start chatting with me right away", - "default.name": "⭐️ Default Assistant", + "default.name": "Default Assistant", "default.topic.name": "Default Topic", "input.clear": "Clear {{Command}}", "input.clear.content": "Do you want to clear all messages of the current topic?", diff --git a/src/renderer/src/i18n/locales/ja-jp.json b/src/renderer/src/i18n/locales/ja-jp.json index 6419b8045d..58d9c78449 100644 --- a/src/renderer/src/i18n/locales/ja-jp.json +++ b/src/renderer/src/i18n/locales/ja-jp.json @@ -79,7 +79,7 @@ "assistant.search.placeholder": "検索", "deeply_thought": "深く考えています({{secounds}} 秒)", "default.description": "こんにちは、私はデフォルトのアシスタントです。すぐにチャットを始められます。", - "default.name": "⭐️ デフォルトアシスタント", + "default.name": "デフォルトアシスタント", "default.topic.name": "デフォルトトピック", "input.clear": "クリア {{Command}}", "input.clear.content": "現在のトピックのすべてのメッセージをクリアしますか?", @@ -866,4 +866,4 @@ "visualization": "可視化" } } -} \ No newline at end of file +} diff --git a/src/renderer/src/i18n/locales/ru-ru.json b/src/renderer/src/i18n/locales/ru-ru.json index 0389ab8114..e2fa5ad942 100644 --- a/src/renderer/src/i18n/locales/ru-ru.json +++ b/src/renderer/src/i18n/locales/ru-ru.json @@ -79,7 +79,7 @@ "assistant.search.placeholder": "Поиск", "deeply_thought": "Мыслим ({{secounds}} секунд)", "default.description": "Привет, я Ассистент по умолчанию. Вы можете начать общаться со мной прямо сейчас", - "default.name": "⭐️ Ассистент по умолчанию", + "default.name": "Ассистент по умолчанию", "default.topic.name": "Топик по умолчанию", "input.clear": "Очистить {{Command}}", "input.clear.content": "Хотите очистить все сообщения текущего топика?", diff --git a/src/renderer/src/i18n/locales/zh-cn.json b/src/renderer/src/i18n/locales/zh-cn.json index 7afb89d9a4..c425621899 100644 --- a/src/renderer/src/i18n/locales/zh-cn.json +++ b/src/renderer/src/i18n/locales/zh-cn.json @@ -79,7 +79,7 @@ "assistant.search.placeholder": "搜索", "deeply_thought": "已深度思考(用时 {{secounds}} 秒)", "default.description": "你好,我是默认助手。你可以立刻开始跟我聊天。", - "default.name": "⭐️ 默认助手", + "default.name": "默认助手", "default.topic.name": "默认话题", "input.clear": "清空消息 {{Command}}", "input.clear.content": "确定要清除当前会话所有消息吗?", diff --git a/src/renderer/src/i18n/locales/zh-tw.json b/src/renderer/src/i18n/locales/zh-tw.json index 50b733c7f2..6c3b08e3bf 100644 --- a/src/renderer/src/i18n/locales/zh-tw.json +++ b/src/renderer/src/i18n/locales/zh-tw.json @@ -79,7 +79,7 @@ "assistant.search.placeholder": "搜尋", "deeply_thought": "已深度思考(用時 {{secounds}} 秒)", "default.description": "你好,我是預設助手。你可以立即開始與我聊天。", - "default.name": "⭐️ 預設助手", + "default.name": "預設助手", "default.topic.name": "預設話題", "input.clear": "清除 {{Command}}", "input.clear.content": "您想要清除當前話題的所有訊息嗎?", diff --git a/src/renderer/src/pages/agents/AgentsPage.tsx b/src/renderer/src/pages/agents/AgentsPage.tsx index a8a30bba8f..e3b0984de0 100644 --- a/src/renderer/src/pages/agents/AgentsPage.tsx +++ b/src/renderer/src/pages/agents/AgentsPage.tsx @@ -66,14 +66,10 @@ const AgentsPage: FC = () => { return { 搜索结果: Array.from(uniqueAgents.values()) } }, [agentGroups, search]) - const getAgentName = (agent: Agent) => { - return agent.emoji ? agent.emoji + ' ' + agent.name : agent.name - } - const onAddAgentConfirm = useCallback( (agent: Agent) => { window.modal.confirm({ - title: getAgentName(agent), + title: agent.name, content: ( {agent.description || agent.prompt} diff --git a/src/renderer/src/pages/home/Tabs/AssistantItem.tsx b/src/renderer/src/pages/home/Tabs/AssistantItem.tsx index a009846adc..da753c1ac5 100644 --- a/src/renderer/src/pages/home/Tabs/AssistantItem.tsx +++ b/src/renderer/src/pages/home/Tabs/AssistantItem.tsx @@ -107,10 +107,14 @@ const AssistantItem: FC = ({ assistant, isActive, onSwitch, onSwitch(assistant) }, [clickAssistantToShowTopic, onSwitch, assistant, topicPosition]) + const assistantName = assistant.name || t('chat.default.name') + return ( - {assistant.name || t('chat.default.name')} + + {assistant.emoji ? `${assistant.emoji} ${assistantName}` : assistantName} + {isActive && ( EventEmitter.emit(EVENT_NAMES.SWITCH_TOPIC_SIDEBAR)}> {assistant.topics.length} diff --git a/src/renderer/src/pages/settings/AssistantSettings/AssistantPromptSettings.tsx b/src/renderer/src/pages/settings/AssistantSettings/AssistantPromptSettings.tsx index c70839b2e5..67c57158e8 100644 --- a/src/renderer/src/pages/settings/AssistantSettings/AssistantPromptSettings.tsx +++ b/src/renderer/src/pages/settings/AssistantSettings/AssistantPromptSettings.tsx @@ -25,13 +25,13 @@ const AssistantPromptSettings: React.FC = ({ assistant, updateAssistant, const { t } = useTranslation() const onUpdate = () => { - const _assistant = { ...assistant, name: `${emoji} ${name}`.trim(), prompt } + const _assistant = { ...assistant, name: name.trim(), emoji, prompt } updateAssistant(_assistant) } const handleEmojiSelect = (selectedEmoji: string) => { setEmoji(selectedEmoji) - const _assistant = { ...assistant, name: `${selectedEmoji} ${name}`.trim(), prompt } + const _assistant = { ...assistant, name: name.trim(), emoji: selectedEmoji, prompt } updateAssistant(_assistant) } diff --git a/src/renderer/src/pages/settings/ModelSettings/DefaultAssistantSettings.tsx b/src/renderer/src/pages/settings/ModelSettings/DefaultAssistantSettings.tsx index 1f7b2ad84c..54c9e23de8 100644 --- a/src/renderer/src/pages/settings/ModelSettings/DefaultAssistantSettings.tsx +++ b/src/renderer/src/pages/settings/ModelSettings/DefaultAssistantSettings.tsx @@ -1,11 +1,13 @@ -import { QuestionCircleOutlined } from '@ant-design/icons' +import { CloseCircleFilled, QuestionCircleOutlined } from '@ant-design/icons' +import EmojiPicker from '@renderer/components/EmojiPicker' import { HStack } from '@renderer/components/Layout' import { TopView } from '@renderer/components/TopView' import { DEFAULT_CONTEXTCOUNT, DEFAULT_MAX_TOKENS, DEFAULT_TEMPERATURE } from '@renderer/config/constant' import { useTheme } from '@renderer/context/ThemeProvider' import { useDefaultAssistant } from '@renderer/hooks/useAssistant' import { AssistantSettings as AssistantSettingsType } from '@renderer/types' -import { Button, Col, Input, InputNumber, Modal, Row, Slider, Switch, Tooltip } from 'antd' +import { getLeadingEmoji, modalConfirm } from '@renderer/utils' +import { Button, Col, Input, InputNumber, Modal, Popover, Row, Slider, Switch, Tooltip } from 'antd' import TextArea from 'antd/es/input/TextArea' import { Dispatch, FC, SetStateAction, useState } from 'react' import { useTranslation } from 'react-i18next' @@ -20,6 +22,10 @@ const AssistantSettings: FC = () => { const [enableMaxTokens, setEnableMaxTokens] = useState(defaultAssistant?.settings?.enableMaxTokens ?? false) const [maxTokens, setMaxTokens] = useState(defaultAssistant?.settings?.maxTokens ?? 0) const [topP, setTopP] = useState(defaultAssistant.settings?.topP ?? 1) + const [emoji, setEmoji] = useState(defaultAssistant.emoji || getLeadingEmoji(defaultAssistant.name) || '') + const [name, setName] = useState( + defaultAssistant.name.replace(getLeadingEmoji(defaultAssistant.name) || '', '').trim() + ) const { theme } = useTheme() const { t } = useTranslation() @@ -73,15 +79,56 @@ const AssistantSettings: FC = () => { }) } + const handleEmojiSelect = (selectedEmoji: string) => { + setEmoji(selectedEmoji) + updateDefaultAssistant({ ...defaultAssistant, emoji: selectedEmoji, name }) + } + + const handleEmojiDelete = () => { + setEmoji('') + updateDefaultAssistant({ ...defaultAssistant, emoji: '', name }) + } + + const handleNameChange = (e: React.ChangeEvent) => { + const newName = e.target.value + setName(newName) + updateDefaultAssistant({ ...defaultAssistant, name: newName }) + } + return ( {t('common.name')} - updateDefaultAssistant({ ...defaultAssistant, name: e.target.value })} - style={{ margin: '10px 0' }} - /> + + } arrow> + + + {emoji && ( + { + e.stopPropagation() + handleEmojiDelete() + }} + style={{ + display: 'none', + position: 'absolute', + top: '-8px', + right: '-8px', + fontSize: '16px', + color: '#ff4d4f', + cursor: 'pointer' + }} + /> + )} + + + + {t('common.prompt')}