mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2025-12-30 07:39:06 +08:00
refactor: remove isPreset messages and assistant.messages
This commit is contained in:
parent
d47c93b4d8
commit
3cb34d30a9
@ -281,7 +281,6 @@ export async function upgradeToV7(tx: Transaction): Promise<void> {
|
||||
modelId: oldMessage.modelId,
|
||||
model: oldMessage.model,
|
||||
type: oldMessage.type === 'clear' ? 'clear' : undefined,
|
||||
isPreset: oldMessage.isPreset,
|
||||
useful: oldMessage.useful,
|
||||
askId: oldMessage.askId,
|
||||
mentions: oldMessage.mentions,
|
||||
|
||||
@ -30,16 +30,7 @@
|
||||
"agent": "Export Agent"
|
||||
},
|
||||
"delete.popup.content": "Are you sure you want to delete this agent?",
|
||||
"edit.message.add.title": "Add",
|
||||
"edit.message.assistant.placeholder": "Enter assistant message",
|
||||
"edit.message.assistant.title": "Assistant",
|
||||
"edit.message.empty.content": "Conversation input content cannot be empty",
|
||||
"edit.message.group.title": "Message Group",
|
||||
"edit.message.title": "Preset messages",
|
||||
"edit.message.user.placeholder": "Enter user message",
|
||||
"edit.message.user.title": "User",
|
||||
"edit.model.select.title": "Select Model",
|
||||
"edit.settings.hide_preset_messages": "Hide Preset Message",
|
||||
"edit.title": "Edit Agent",
|
||||
"manage.title": "Manage Agents",
|
||||
"my_agents": "My Agents",
|
||||
@ -76,7 +67,6 @@
|
||||
"settings.mcp.noServersAvailable": "No MCP servers available. Add servers in settings",
|
||||
"settings.mcp.description": "Default enabled MCP servers",
|
||||
"settings.model": "Model Settings",
|
||||
"settings.preset_messages": "Preset Messages",
|
||||
"settings.prompt": "Prompt Settings",
|
||||
"settings.reasoning_effort": "Reasoning effort",
|
||||
"settings.reasoning_effort.off": "Off",
|
||||
|
||||
@ -30,16 +30,7 @@
|
||||
"agent": "エージェントをエクスポート"
|
||||
},
|
||||
"delete.popup.content": "このエージェントを削除してもよろしいですか?",
|
||||
"edit.message.add.title": "追加",
|
||||
"edit.message.assistant.placeholder": "アシスタントのメッセージを入力",
|
||||
"edit.message.assistant.title": "アシスタント",
|
||||
"edit.message.empty.content": "会話の入力内容が空です",
|
||||
"edit.message.group.title": "メッセージグループ",
|
||||
"edit.message.title": "プリセットメッセージ",
|
||||
"edit.message.user.placeholder": "ユーザーメッセージを入力",
|
||||
"edit.message.user.title": "ユーザー",
|
||||
"edit.model.select.title": "モデルを選択",
|
||||
"edit.settings.hide_preset_messages": "プリセットメッセージを非表示",
|
||||
"edit.title": "エージェントを編集",
|
||||
"manage.title": "エージェントを管理",
|
||||
"my_agents": "マイエージェント",
|
||||
@ -76,7 +67,6 @@
|
||||
"settings.default_model": "デフォルトモデル",
|
||||
"settings.knowledge_base": "ナレッジベース設定",
|
||||
"settings.model": "モデル設定",
|
||||
"settings.preset_messages": "プリセットメッセージ",
|
||||
"settings.prompt": "プロンプト設定",
|
||||
"settings.reasoning_effort": "思考連鎖の長さ",
|
||||
"settings.reasoning_effort.off": "オフ",
|
||||
|
||||
@ -11,16 +11,7 @@
|
||||
"add.prompt.variables.tip": "Доступные переменные: {{date}}, {{time}}, {{datetime}}, {{system}}, {{arch}}, {{language}}, {{model_name}}",
|
||||
"add.title": "Создать агента",
|
||||
"delete.popup.content": "Вы уверены, что хотите удалить этого агента?",
|
||||
"edit.message.add.title": "Добавить",
|
||||
"edit.message.assistant.placeholder": "Введите сообщение ассистента",
|
||||
"edit.message.assistant.title": "Ассистент",
|
||||
"edit.message.empty.content": "Содержание вводимого сообщения не может быть пустым",
|
||||
"edit.message.group.title": "Группа сообщений",
|
||||
"edit.message.title": "Предустановленные сообщения",
|
||||
"edit.message.user.placeholder": "Введите сообщение пользователя",
|
||||
"edit.message.user.title": "Пользователь",
|
||||
"edit.model.select.title": "Выбрать модель",
|
||||
"edit.settings.hide_preset_messages": "Скрыть предустановленные сообщения",
|
||||
"edit.title": "Редактировать агента",
|
||||
"manage.title": "Редактировать агентов",
|
||||
"my_agents": "Мои агенты",
|
||||
@ -76,7 +67,6 @@
|
||||
"settings.default_model": "Модель по умолчанию",
|
||||
"settings.knowledge_base": "Настройки базы знаний",
|
||||
"settings.model": "Настройки модели",
|
||||
"settings.preset_messages": "Предустановленные сообщения",
|
||||
"settings.prompt": "Настройки промптов",
|
||||
"settings.reasoning_effort.off": "Выключить",
|
||||
"settings.reasoning_effort.high": "Стараюсь думать",
|
||||
|
||||
@ -30,16 +30,7 @@
|
||||
"agent": "导出智能体"
|
||||
},
|
||||
"delete.popup.content": "确定要删除此智能体吗?",
|
||||
"edit.message.add.title": "添加",
|
||||
"edit.message.assistant.placeholder": "输入助手消息",
|
||||
"edit.message.assistant.title": "助手",
|
||||
"edit.message.empty.content": "会话输入内容不能为空",
|
||||
"edit.message.group.title": "消息组",
|
||||
"edit.message.title": "预设消息",
|
||||
"edit.message.user.placeholder": "输入用户消息",
|
||||
"edit.message.user.title": "用户",
|
||||
"edit.model.select.title": "选择模型",
|
||||
"edit.settings.hide_preset_messages": "隐藏预设消息",
|
||||
"edit.title": "编辑智能体",
|
||||
"manage.title": "管理智能体",
|
||||
"my_agents": "我的智能体",
|
||||
@ -83,7 +74,6 @@
|
||||
"settings.tool_use_mode.function": "函数",
|
||||
"settings.tool_use_mode.prompt": "提示词",
|
||||
"settings.model": "模型设置",
|
||||
"settings.preset_messages": "预设消息",
|
||||
"settings.prompt": "提示词设置",
|
||||
"settings.reasoning_effort": "思维链长度",
|
||||
"settings.reasoning_effort.off": "关闭",
|
||||
|
||||
@ -30,16 +30,7 @@
|
||||
"agent": "匯出智慧代理人"
|
||||
},
|
||||
"delete.popup.content": "確定要刪除此智慧代理人嗎?",
|
||||
"edit.message.add.title": "新增",
|
||||
"edit.message.assistant.placeholder": "輸入助手訊息",
|
||||
"edit.message.assistant.title": "助手",
|
||||
"edit.message.empty.content": "會話輸入內容不能為空",
|
||||
"edit.message.group.title": "訊息分組",
|
||||
"edit.message.title": "預設訊息",
|
||||
"edit.message.user.placeholder": "輸入使用者訊息",
|
||||
"edit.message.user.title": "使用者",
|
||||
"edit.model.select.title": "選擇模型",
|
||||
"edit.settings.hide_preset_messages": "隱藏預設訊息",
|
||||
"edit.title": "編輯智慧代理人",
|
||||
"manage.title": "管理智慧代理人",
|
||||
"my_agents": "我的智慧代理人",
|
||||
@ -76,7 +67,6 @@
|
||||
"settings.default_model": "預設模型",
|
||||
"settings.knowledge_base": "知識庫設定",
|
||||
"settings.model": "模型設定",
|
||||
"settings.preset_messages": "預設訊息",
|
||||
"settings.prompt": "提示詞設定",
|
||||
"settings.reasoning_effort": "思維鏈長度",
|
||||
"settings.reasoning_effort.off": "關閉",
|
||||
|
||||
@ -10,16 +10,7 @@
|
||||
"add.prompt.placeholder": "Εισαγάγετε φράση προκαλέσεως",
|
||||
"add.title": "Δημιουργία νέου ειδικού",
|
||||
"delete.popup.content": "Είστε σίγουροι ότι θέλετε να διαγράψετε αυτόν τον ειδικό;",
|
||||
"edit.message.add.title": "Προσθήκη",
|
||||
"edit.message.assistant.placeholder": "Εισαγάγετε μήνυμα βοηθού",
|
||||
"edit.message.assistant.title": "Βοηθός",
|
||||
"edit.message.empty.content": "Το περιεχόμενο του συνομιλητή δεν μπορεί να είναι κενό.",
|
||||
"edit.message.group.title": "Ομάδα μηνυμάτων",
|
||||
"edit.message.title": "Προεπιλογές μηνυμάτων",
|
||||
"edit.message.user.placeholder": "Εισαγάγετε μήνυμα χρήστη",
|
||||
"edit.message.user.title": "Χρήστης",
|
||||
"edit.model.select.title": "Επιλογή μοντέλου",
|
||||
"edit.settings.hide_preset_messages": "Απόκρυψη προεπιλογών μηνυμάτων",
|
||||
"edit.title": "Επεξεργασία ειδικού",
|
||||
"manage.title": "Διαχείριση ειδικών",
|
||||
"my_agents": "Οι ειδικοί μου",
|
||||
@ -64,7 +55,6 @@
|
||||
"settings.default_model": "Προεπιλεγμένο μοντέλο",
|
||||
"settings.knowledge_base": "Ρυθμίσεις βάσης γνώσεων",
|
||||
"settings.model": "Ρυθμίσεις μοντέλου",
|
||||
"settings.preset_messages": "Προεπιλεγμένα μηνύματα",
|
||||
"settings.prompt": "Ρυθμίσεις προκαλύμματος",
|
||||
"settings.reasoning_effort": "Μήκος λογισμικού αλυσίδας",
|
||||
"settings.reasoning_effort.high": "Μεγάλο",
|
||||
|
||||
@ -10,16 +10,7 @@
|
||||
"add.prompt.placeholder": "Ingrese la palabra clave",
|
||||
"add.title": "Crear agente inteligente",
|
||||
"delete.popup.content": "¿Está seguro de que desea eliminar este agente inteligente?",
|
||||
"edit.message.add.title": "Agregar",
|
||||
"edit.message.assistant.placeholder": "Ingrese el mensaje del asistente",
|
||||
"edit.message.assistant.title": "Asistente",
|
||||
"edit.message.empty.content": "El contenido de la sesión de chat no puede estar vacío",
|
||||
"edit.message.group.title": "Grupo de mensajes",
|
||||
"edit.message.title": "Mensaje predeterminado",
|
||||
"edit.message.user.placeholder": "Ingrese el mensaje del usuario",
|
||||
"edit.message.user.title": "Usuario",
|
||||
"edit.model.select.title": "Seleccionar modelo",
|
||||
"edit.settings.hide_preset_messages": "Ocultar mensajes predeterminados",
|
||||
"edit.title": "Editar agente inteligente",
|
||||
"manage.title": "Administrar agentes inteligentes",
|
||||
"my_agents": "Mis agentes inteligentes",
|
||||
@ -64,7 +55,6 @@
|
||||
"settings.default_model": "Modelo Predeterminado",
|
||||
"settings.knowledge_base": "Configuración de Base de Conocimientos",
|
||||
"settings.model": "Configuración de Modelo",
|
||||
"settings.preset_messages": "Mensajes Preestablecidos",
|
||||
"settings.prompt": "Configuración de Palabras Clave",
|
||||
"settings.reasoning_effort": "Longitud de Cadena de Razonamiento",
|
||||
"settings.reasoning_effort.high": "Largo",
|
||||
|
||||
@ -10,16 +10,7 @@
|
||||
"add.prompt.placeholder": "Entrer le mot-clé",
|
||||
"add.title": "Créer un agent intelligent",
|
||||
"delete.popup.content": "Êtes-vous sûr de vouloir supprimer cet agent intelligent ?",
|
||||
"edit.message.add.title": "Ajouter",
|
||||
"edit.message.assistant.placeholder": "Entrer le message de l'assistant",
|
||||
"edit.message.assistant.title": "Assistant",
|
||||
"edit.message.empty.content": "Le contenu de la session ne peut pas être vide",
|
||||
"edit.message.group.title": "Groupe de messages",
|
||||
"edit.message.title": "Messages prédéfinis",
|
||||
"edit.message.user.placeholder": "Entrer le message de l'utilisateur",
|
||||
"edit.message.user.title": "Utilisateur",
|
||||
"edit.model.select.title": "Sélectionner un modèle",
|
||||
"edit.settings.hide_preset_messages": "Masquer les messages prédéfinis",
|
||||
"edit.title": "Modifier l'agent intelligent",
|
||||
"manage.title": "Gérer les agents intelligents",
|
||||
"my_agents": "Mes agents intelligents",
|
||||
@ -64,7 +55,6 @@
|
||||
"settings.default_model": "Modèle par défaut",
|
||||
"settings.knowledge_base": "Paramètres de la base de connaissances",
|
||||
"settings.model": "Paramètres du modèle",
|
||||
"settings.preset_messages": "Messages prédéfinis",
|
||||
"settings.prompt": "Paramètres de l'invite",
|
||||
"settings.reasoning_effort": "Longueur de la chaîne de raisonnement",
|
||||
"settings.reasoning_effort.high": "Long",
|
||||
|
||||
@ -10,16 +10,7 @@
|
||||
"add.prompt.placeholder": "Digite o Prompt",
|
||||
"add.title": "Criar Agente Inteligente",
|
||||
"delete.popup.content": "Tem certeza de que deseja excluir este agente inteligente?",
|
||||
"edit.message.add.title": "Adicionar",
|
||||
"edit.message.assistant.placeholder": "Digite a Mensagem do Assistente",
|
||||
"edit.message.assistant.title": "Assistente",
|
||||
"edit.message.empty.content": "O conteúdo da sessão não pode estar vazio",
|
||||
"edit.message.group.title": "Grupo de Mensagens",
|
||||
"edit.message.title": "Mensagens Padrão",
|
||||
"edit.message.user.placeholder": "Digite a Mensagem do Usuário",
|
||||
"edit.message.user.title": "Usuário",
|
||||
"edit.model.select.title": "Selecionar Modelo",
|
||||
"edit.settings.hide_preset_messages": "Ocultar Mensagens Padrão",
|
||||
"edit.title": "Editar Agente Inteligente",
|
||||
"manage.title": "Gerenciar Agentes Inteligentes",
|
||||
"my_agents": "Meus Agentes Inteligentes",
|
||||
@ -64,7 +55,6 @@
|
||||
"settings.default_model": "Modelo Padrão",
|
||||
"settings.knowledge_base": "Configurações da Base de Conhecimento",
|
||||
"settings.model": "Configurações do Modelo",
|
||||
"settings.preset_messages": "Mensagens Pré-definidas",
|
||||
"settings.prompt": "Configurações de Prompt",
|
||||
"settings.reasoning_effort": "Comprimento da Cadeia de Raciocínio",
|
||||
"settings.reasoning_effort.high": "Longo",
|
||||
|
||||
@ -18,7 +18,7 @@ import { modelGenerating, useRuntime } from '@renderer/hooks/useRuntime'
|
||||
import { useMessageStyle, useSettings } from '@renderer/hooks/useSettings'
|
||||
import { useShortcut, useShortcutDisplay } from '@renderer/hooks/useShortcuts'
|
||||
import { useSidebarIconShow } from '@renderer/hooks/useSidebarIcon'
|
||||
import { addAssistantMessagesToTopic, getDefaultTopic } from '@renderer/services/AssistantService'
|
||||
import { getDefaultTopic } from '@renderer/services/AssistantService'
|
||||
import { EVENT_NAMES, EventEmitter } from '@renderer/services/EventService'
|
||||
import FileManager from '@renderer/services/FileManager'
|
||||
import { checkRateLimit, getUserMessage } from '@renderer/services/MessagesService'
|
||||
@ -408,7 +408,6 @@ const Inputbar: FC<Props> = ({ assistant: _assistant, setActiveTopic, topic }) =
|
||||
const topic = getDefaultTopic(assistant.id)
|
||||
|
||||
await db.topics.add({ id: topic.id, messages: [] })
|
||||
await addAssistantMessagesToTopic({ assistant, topic })
|
||||
|
||||
// Clear previous state
|
||||
// Reset to assistant default model
|
||||
|
||||
@ -29,7 +29,6 @@ interface Props {
|
||||
assistant?: Assistant
|
||||
index?: number
|
||||
total?: number
|
||||
hidePresetMessages?: boolean
|
||||
hideMenuBar?: boolean
|
||||
style?: React.CSSProperties
|
||||
isGrouped?: boolean
|
||||
@ -42,7 +41,6 @@ const MessageItem: FC<Props> = ({
|
||||
topic,
|
||||
// assistant,
|
||||
index,
|
||||
hidePresetMessages,
|
||||
hideMenuBar = false,
|
||||
isGrouped,
|
||||
isStreaming = false,
|
||||
@ -122,10 +120,6 @@ const MessageItem: FC<Props> = ({
|
||||
return () => unsubscribes.forEach((unsub) => unsub())
|
||||
}, [message.id, messageHighlightHandler])
|
||||
|
||||
if (hidePresetMessages && message.isPreset) {
|
||||
return null
|
||||
}
|
||||
|
||||
if (message.type === 'clear') {
|
||||
return (
|
||||
<NewContextMessage className="clear-context-divider" onClick={() => EventEmitter.emit(EVENT_NAMES.NEW_CONTEXT)}>
|
||||
|
||||
@ -19,11 +19,10 @@ import SelectableMessage from './MessageSelect'
|
||||
interface Props {
|
||||
messages: (Message & { index: number })[]
|
||||
topic: Topic
|
||||
hidePresetMessages?: boolean
|
||||
registerMessageElement?: (id: string, element: HTMLElement | null) => void
|
||||
}
|
||||
|
||||
const MessageGroup = ({ messages, topic, hidePresetMessages, registerMessageElement }: Props) => {
|
||||
const MessageGroup = ({ messages, topic, registerMessageElement }: Props) => {
|
||||
const { editMessage } = useMessageOperations(topic)
|
||||
const { multiModelMessageStyle: multiModelMessageStyleSetting, gridColumns, gridPopoverTrigger } = useSettings()
|
||||
const { isMultiSelectMode } = useChatContext(topic)
|
||||
@ -168,7 +167,6 @@ const MessageGroup = ({ messages, topic, hidePresetMessages, registerMessageElem
|
||||
message,
|
||||
topic,
|
||||
index: message.index,
|
||||
hidePresetMessages,
|
||||
style: {
|
||||
paddingTop: isGrouped && ['horizontal', 'grid'].includes(multiModelMessageStyle) ? 0 : 15
|
||||
}
|
||||
@ -220,16 +218,7 @@ const MessageGroup = ({ messages, topic, hidePresetMessages, registerMessageElem
|
||||
</SelectableMessage>
|
||||
)
|
||||
},
|
||||
[
|
||||
isGrid,
|
||||
isGrouped,
|
||||
topic,
|
||||
hidePresetMessages,
|
||||
multiModelMessageStyle,
|
||||
isHorizontal,
|
||||
selectedMessageId,
|
||||
gridPopoverTrigger
|
||||
]
|
||||
[isGrid, isGrouped, topic, multiModelMessageStyle, isHorizontal, selectedMessageId, gridPopoverTrigger]
|
||||
)
|
||||
|
||||
return (
|
||||
|
||||
@ -289,7 +289,6 @@ const Messages: React.FC<MessagesProps> = ({ assistant, topic, setActiveTopic, o
|
||||
key={key}
|
||||
messages={groupMessages}
|
||||
topic={topic}
|
||||
hidePresetMessages={assistant.settings?.hideMessages}
|
||||
registerMessageElement={registerMessageElement}
|
||||
/>
|
||||
))}
|
||||
|
||||
@ -1,170 +0,0 @@
|
||||
import { DeleteOutlined, PlusOutlined } from '@ant-design/icons'
|
||||
import { Assistant, AssistantMessage, AssistantSettings } from '@renderer/types'
|
||||
import { Button, Card, Col, Divider, Form as FormAntd, FormInstance, Row, Space, Switch } from 'antd'
|
||||
import TextArea from 'antd/es/input/TextArea'
|
||||
import { FC, useMemo, useRef, useState } from 'react'
|
||||
import { useTranslation } from 'react-i18next'
|
||||
import styled from 'styled-components'
|
||||
|
||||
interface Props {
|
||||
assistant: Assistant
|
||||
updateAssistant: (assistant: Assistant) => void
|
||||
updateAssistantSettings: (settings: Partial<AssistantSettings>) => void
|
||||
}
|
||||
|
||||
const AssistantMessagesSettings: FC<Props> = ({ assistant, updateAssistant, updateAssistantSettings }) => {
|
||||
const { t } = useTranslation()
|
||||
const [form] = Form.useForm()
|
||||
const formRef = useRef<FormInstance>(null)
|
||||
const [messages, setMessagess] = useState<AssistantMessage[]>(assistant?.messages || [])
|
||||
const [hideMessages, setHideMessages] = useState(assistant?.settings?.hideMessages || false)
|
||||
|
||||
const showSaveButton = useMemo(() => {
|
||||
const originalMessages = assistant?.messages || []
|
||||
if (originalMessages.length !== messages.length) return true
|
||||
|
||||
return messages.some((msg, index) => {
|
||||
const originalMsg = originalMessages[index]
|
||||
return !originalMsg || msg.content.trim() !== originalMsg.content.trim()
|
||||
})
|
||||
}, [messages, assistant?.messages])
|
||||
|
||||
const onSave = () => {
|
||||
// 检查是否有空对话组
|
||||
for (let i = 0; i < messages.length; i += 2) {
|
||||
const userContent = messages[i].content.trim()
|
||||
const assistantContent = messages[i + 1]?.content.trim()
|
||||
if (userContent === '' || assistantContent === '') {
|
||||
window.modal.error({
|
||||
centered: true,
|
||||
content: t('agents.edit.message.empty.content')
|
||||
})
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// 过滤掉空消息并将消息分组
|
||||
const filteredMessagess = messages.reduce((acc, conv, index) => {
|
||||
if (index % 2 === 0) {
|
||||
const userContent = conv.content.trim()
|
||||
const assistantContent = messages[index + 1]?.content.trim()
|
||||
if (userContent !== '' || assistantContent !== '') {
|
||||
acc.push({ role: 'user', content: userContent }, { role: 'assistant', content: assistantContent })
|
||||
}
|
||||
}
|
||||
return acc
|
||||
}, [] as AssistantMessage[])
|
||||
|
||||
updateAssistant({
|
||||
...assistant,
|
||||
messages: filteredMessagess
|
||||
})
|
||||
|
||||
window.message.success({ content: t('message.save.success.title'), key: 'save-messages' })
|
||||
}
|
||||
|
||||
const addMessages = () => {
|
||||
setMessagess([...messages, { role: 'user', content: '' }, { role: 'assistant', content: '' }])
|
||||
}
|
||||
|
||||
const updateMessages = (index: number, role: 'user' | 'assistant', content: string) => {
|
||||
const newMessagess = [...messages]
|
||||
newMessagess[index] = { role, content }
|
||||
setMessagess(newMessagess)
|
||||
}
|
||||
|
||||
const deleteMessages = (index: number) => {
|
||||
const newMessagess = [...messages]
|
||||
newMessagess.splice(index, 2) // 删除用户和助手的对话
|
||||
setMessagess(newMessagess)
|
||||
}
|
||||
|
||||
return (
|
||||
<Container>
|
||||
<Form ref={formRef} layout="vertical" form={form} labelAlign="right" colon={false}>
|
||||
<Form.Item label={t('agents.edit.settings.hide_preset_messages')}>
|
||||
<Switch
|
||||
checked={hideMessages}
|
||||
onChange={(checked) => {
|
||||
setHideMessages(checked)
|
||||
updateAssistantSettings({ hideMessages: checked })
|
||||
}}
|
||||
/>
|
||||
</Form.Item>
|
||||
<Divider style={{ marginBottom: 15 }} />
|
||||
<Form.Item label={t('agents.edit.message.group.title')}>
|
||||
{messages.map(
|
||||
(_, index) =>
|
||||
index % 2 === 0 && (
|
||||
<Card
|
||||
size="small"
|
||||
key={index}
|
||||
style={{ marginBottom: 16 }}
|
||||
title={`${t('agents.edit.message.group.title')} #${index / 2 + 1}`}
|
||||
extra={<Button icon={<DeleteOutlined />} type="text" danger onClick={() => deleteMessages(index)} />}>
|
||||
<Row gutter={16} align="middle" style={{ marginBottom: 16 }}>
|
||||
<Col span={3}>
|
||||
<label>{t('agents.edit.message.user.title')}</label>
|
||||
</Col>
|
||||
<Col span={21}>
|
||||
<TextArea
|
||||
value={messages[index].content}
|
||||
onChange={(e) => updateMessages(index, 'user', e.target.value)}
|
||||
placeholder={t('agents.edit.message.user.placeholder')}
|
||||
spellCheck={false}
|
||||
rows={1}
|
||||
/>
|
||||
</Col>
|
||||
</Row>
|
||||
<Row gutter={16} align="top">
|
||||
<Col span={3}>
|
||||
<label>{t('agents.edit.message.assistant.title')}</label>
|
||||
</Col>
|
||||
<Col span={21}>
|
||||
<TextArea
|
||||
value={messages[index + 1]?.content || ''}
|
||||
onChange={(e) => updateMessages(index + 1, 'assistant', e.target.value)}
|
||||
placeholder={t('agents.edit.message.assistant.placeholder')}
|
||||
spellCheck={false}
|
||||
rows={3}
|
||||
/>
|
||||
</Col>
|
||||
</Row>
|
||||
</Card>
|
||||
)
|
||||
)}
|
||||
<Space>
|
||||
<Button icon={<PlusOutlined />} onClick={addMessages}>
|
||||
{t('agents.edit.message.add.title')}
|
||||
</Button>
|
||||
</Space>
|
||||
</Form.Item>
|
||||
<Divider style={{ marginBottom: 15 }} />
|
||||
<Form.Item>
|
||||
{showSaveButton && (
|
||||
<Button type="primary" onClick={onSave}>
|
||||
{t('common.save')}
|
||||
</Button>
|
||||
)}
|
||||
</Form.Item>
|
||||
</Form>
|
||||
<div style={{ minHeight: 50 }} />
|
||||
</Container>
|
||||
)
|
||||
}
|
||||
|
||||
const Container = styled.div`
|
||||
display: flex;
|
||||
flex: 1;
|
||||
flex-direction: column;
|
||||
height: 100%;
|
||||
padding-top: 10px;
|
||||
`
|
||||
|
||||
const Form = styled(FormAntd)`
|
||||
.ant-form-item-no-colon {
|
||||
font-weight: 500;
|
||||
}
|
||||
`
|
||||
|
||||
export default AssistantMessagesSettings
|
||||
@ -11,7 +11,6 @@ import styled from 'styled-components'
|
||||
|
||||
import AssistantKnowledgeBaseSettings from './AssistantKnowledgeBaseSettings'
|
||||
import AssistantMCPSettings from './AssistantMCPSettings'
|
||||
import AssistantMessagesSettings from './AssistantMessagesSettings'
|
||||
import AssistantModelSettings from './AssistantModelSettings'
|
||||
import AssistantPromptSettings from './AssistantPromptSettings'
|
||||
import AssistantRegularPromptsSettings from './AssistantRegularPromptsSettings'
|
||||
@ -63,10 +62,6 @@ const AssistantSettingPopupContainer: React.FC<Props> = ({ resolve, tab, ...prop
|
||||
key: 'model',
|
||||
label: t('assistants.settings.model')
|
||||
},
|
||||
{
|
||||
key: 'messages',
|
||||
label: t('assistants.settings.preset_messages')
|
||||
},
|
||||
showKnowledgeIcon && {
|
||||
key: 'knowledge_base',
|
||||
label: t('assistants.settings.knowledge_base')
|
||||
@ -126,13 +121,6 @@ const AssistantSettingPopupContainer: React.FC<Props> = ({ resolve, tab, ...prop
|
||||
updateAssistantSettings={updateAssistantSettings}
|
||||
/>
|
||||
)}
|
||||
{menu === 'messages' && (
|
||||
<AssistantMessagesSettings
|
||||
assistant={assistant}
|
||||
updateAssistant={updateAssistant}
|
||||
updateAssistantSettings={updateAssistantSettings}
|
||||
/>
|
||||
)}
|
||||
{menu === 'knowledge_base' && showKnowledgeIcon && (
|
||||
<AssistantKnowledgeBaseSettings
|
||||
assistant={assistant}
|
||||
|
||||
@ -572,12 +572,10 @@ export default class AnthropicProvider extends BaseProvider {
|
||||
public async summaries(messages: Message[], assistant: Assistant): Promise<string> {
|
||||
const model = getTopNamingModel() || assistant.model || getDefaultModel()
|
||||
|
||||
const userMessages = takeRight(messages, 5)
|
||||
.filter((message) => !message.isPreset)
|
||||
.map((message) => ({
|
||||
role: message.role,
|
||||
content: getMainTextContent(message)
|
||||
}))
|
||||
const userMessages = takeRight(messages, 5).map((message) => ({
|
||||
role: message.role,
|
||||
content: getMainTextContent(message)
|
||||
}))
|
||||
|
||||
if (first(userMessages)?.role === 'assistant') {
|
||||
userMessages.shift()
|
||||
|
||||
@ -763,13 +763,11 @@ export default class GeminiProvider extends BaseProvider {
|
||||
public async summaries(messages: Message[], assistant: Assistant): Promise<string> {
|
||||
const model = getTopNamingModel() || assistant.model || getDefaultModel()
|
||||
|
||||
const userMessages = takeRight(messages, 5)
|
||||
.filter((message) => !message.isPreset)
|
||||
.map((message) => ({
|
||||
role: message.role,
|
||||
// Get content using helper
|
||||
content: getMainTextContent(message)
|
||||
}))
|
||||
const userMessages = takeRight(messages, 5).map((message) => ({
|
||||
role: message.role,
|
||||
// Get content using helper
|
||||
content: getMainTextContent(message)
|
||||
}))
|
||||
|
||||
const userMessageContent = userMessages.reduce((prev, curr) => {
|
||||
const content = curr.role === 'user' ? `User: ${curr.content}` : `Assistant: ${curr.content}`
|
||||
|
||||
@ -999,12 +999,10 @@ export default class OpenAIProvider extends BaseOpenAIProvider {
|
||||
public async summaries(messages: Message[], assistant: Assistant): Promise<string> {
|
||||
const model = getTopNamingModel() || assistant.model || getDefaultModel()
|
||||
|
||||
const userMessages = takeRight(messages, 5)
|
||||
.filter((message) => !message.isPreset)
|
||||
.map((message) => ({
|
||||
role: message.role,
|
||||
content: getMainTextContent(message)
|
||||
}))
|
||||
const userMessages = takeRight(messages, 5).map((message) => ({
|
||||
role: message.role,
|
||||
content: getMainTextContent(message)
|
||||
}))
|
||||
|
||||
const userMessageContent = userMessages.reduce((prev, curr) => {
|
||||
const content = curr.role === 'user' ? `User: ${curr.content}` : `Assistant: ${curr.content}`
|
||||
|
||||
@ -821,12 +821,10 @@ export abstract class BaseOpenAIProvider extends BaseProvider {
|
||||
*/
|
||||
public async summaries(messages: Message[], assistant: Assistant): Promise<string> {
|
||||
const model = getTopNamingModel() || assistant.model || getDefaultModel()
|
||||
const userMessages = takeRight(messages, 5)
|
||||
.filter((message) => !message.isPreset)
|
||||
.map((message) => ({
|
||||
role: message.role,
|
||||
content: getMainTextContent(message)
|
||||
}))
|
||||
const userMessages = takeRight(messages, 5).map((message) => ({
|
||||
role: message.role,
|
||||
content: getMainTextContent(message)
|
||||
}))
|
||||
const userMessageContent = userMessages.reduce((prev, curr) => {
|
||||
const content = curr.role === 'user' ? `User: ${curr.content}` : `Assistant: ${curr.content}`
|
||||
return prev + (prev ? '\n' : '') + content
|
||||
|
||||
@ -1,13 +1,9 @@
|
||||
import { DEFAULT_CONTEXTCOUNT, DEFAULT_MAX_TOKENS, DEFAULT_TEMPERATURE } from '@renderer/config/constant'
|
||||
import db from '@renderer/databases'
|
||||
import i18n from '@renderer/i18n'
|
||||
import store from '@renderer/store'
|
||||
import { addAssistant } from '@renderer/store/assistants'
|
||||
import type { Agent, Assistant, AssistantSettings, Model, Provider, Topic } from '@renderer/types'
|
||||
import type { Message, MessageBlock } from '@renderer/types/newMessage'
|
||||
import { AssistantMessageStatus, MessageBlockStatus } from '@renderer/types/newMessage'
|
||||
import { uuid } from '@renderer/utils'
|
||||
import { createMainTextBlock } from '@renderer/utils/messageUtils/create'
|
||||
|
||||
export function getDefaultAssistant(): Assistant {
|
||||
return {
|
||||
@ -109,7 +105,6 @@ export const getAssistantSettings = (assistant: Assistant): AssistantSettings =>
|
||||
maxTokens: getAssistantMaxTokens(),
|
||||
streamOutput: assistant?.settings?.streamOutput ?? true,
|
||||
toolUseMode: assistant?.settings?.toolUseMode ?? 'prompt',
|
||||
hideMessages: assistant?.settings?.hideMessages ?? false,
|
||||
defaultModel: assistant?.defaultModel ?? undefined,
|
||||
customParameters: assistant?.settings?.customParameters ?? []
|
||||
}
|
||||
@ -120,47 +115,6 @@ export function getAssistantById(id: string) {
|
||||
return assistants.find((a) => a.id === id)
|
||||
}
|
||||
|
||||
export async function addAssistantMessagesToTopic({ assistant, topic }: { assistant: Assistant; topic: Topic }) {
|
||||
const newMessages: Message[] = []
|
||||
const newBlocks: MessageBlock[] = []
|
||||
const defaultModel = getDefaultModel()
|
||||
|
||||
for (const msg of assistant?.messages || []) {
|
||||
const messageId = uuid()
|
||||
|
||||
const mainTextBlock = createMainTextBlock(messageId, msg.content, {
|
||||
status: MessageBlockStatus.SUCCESS
|
||||
})
|
||||
newBlocks.push(mainTextBlock)
|
||||
|
||||
const message: Message = {
|
||||
id: messageId,
|
||||
assistantId: assistant.id,
|
||||
role: msg.role,
|
||||
topicId: topic.id,
|
||||
createdAt: new Date().toISOString(),
|
||||
status: AssistantMessageStatus.SUCCESS,
|
||||
blocks: [mainTextBlock.id],
|
||||
model: assistant.defaultModel || defaultModel,
|
||||
isPreset: true
|
||||
}
|
||||
|
||||
newMessages.push(message)
|
||||
}
|
||||
|
||||
if (newBlocks.length > 0) {
|
||||
await db.message_blocks.bulkPut(newBlocks)
|
||||
}
|
||||
|
||||
if (await db.topics.get(topic.id)) {
|
||||
await db.topics.update(topic.id, { messages: newMessages })
|
||||
} else {
|
||||
await db.topics.add({ id: topic.id, messages: newMessages })
|
||||
}
|
||||
|
||||
return newMessages
|
||||
}
|
||||
|
||||
export async function createAssistantFromAgent(agent: Agent) {
|
||||
const assistantId = uuid()
|
||||
const topic = getDefaultTopic(assistantId)
|
||||
@ -178,8 +132,6 @@ export async function createAssistantFromAgent(agent: Agent) {
|
||||
|
||||
store.dispatch(addAssistant(assistant))
|
||||
|
||||
await addAssistantMessagesToTopic({ assistant, topic })
|
||||
|
||||
window.message.success({
|
||||
content: i18n.t('message.assistant.added.content'),
|
||||
key: 'assistant-added'
|
||||
|
||||
@ -40,8 +40,7 @@ const assistantsSlice = createSlice({
|
||||
contextCount: DEFAULT_CONTEXTCOUNT,
|
||||
enableMaxTokens: false,
|
||||
maxTokens: 0,
|
||||
streamOutput: true,
|
||||
hideMessages: false
|
||||
streamOutput: true
|
||||
}
|
||||
}
|
||||
agent.settings[key] = settings[key]
|
||||
|
||||
@ -48,8 +48,7 @@ const assistantsSlice = createSlice({
|
||||
contextCount: DEFAULT_CONTEXTCOUNT,
|
||||
enableMaxTokens: false,
|
||||
maxTokens: 0,
|
||||
streamOutput: true,
|
||||
hideMessages: false
|
||||
streamOutput: true
|
||||
}
|
||||
}
|
||||
assistant.settings[key] = settings[key]
|
||||
|
||||
@ -58,7 +58,6 @@ export type AssistantSettings = {
|
||||
maxTokens: number | undefined
|
||||
enableMaxTokens: boolean
|
||||
streamOutput: boolean
|
||||
hideMessages: boolean
|
||||
defaultModel?: Model
|
||||
customParameters?: AssistantSettingCustomParameters[]
|
||||
reasoning_effort?: ReasoningEffortOptions
|
||||
@ -88,7 +87,6 @@ export type LegacyMessage = {
|
||||
metrics?: Metrics
|
||||
knowledgeBaseIds?: string[]
|
||||
type: 'text' | '@' | 'clear'
|
||||
isPreset?: boolean
|
||||
mentions?: Model[]
|
||||
askId?: string
|
||||
useful?: boolean
|
||||
|
||||
@ -170,7 +170,6 @@ export type Message = {
|
||||
modelId?: string
|
||||
model?: Model
|
||||
type?: 'clear'
|
||||
isPreset?: boolean
|
||||
useful?: boolean
|
||||
askId?: string // 关联的问题消息ID
|
||||
mentions?: Model[]
|
||||
|
||||
@ -102,7 +102,6 @@ function createMessage(
|
||||
modelId: partialMsg.modelId,
|
||||
model: partialMsg.model,
|
||||
type: partialMsg.type,
|
||||
isPreset: partialMsg.isPreset,
|
||||
useful: partialMsg.useful,
|
||||
askId: partialMsg.askId,
|
||||
mentions: partialMsg.mentions,
|
||||
|
||||
@ -100,7 +100,6 @@ function createMessage(
|
||||
modelId: partialMsg.modelId,
|
||||
model: partialMsg.model,
|
||||
type: partialMsg.type,
|
||||
isPreset: partialMsg.isPreset,
|
||||
useful: partialMsg.useful,
|
||||
askId: partialMsg.askId,
|
||||
mentions: partialMsg.mentions,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user