refactor: remove isPreset messages and assistant.messages

This commit is contained in:
kangfenmao 2025-06-06 15:48:27 +08:00
parent d47c93b4d8
commit 3cb34d30a9
27 changed files with 22 additions and 377 deletions

View File

@ -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,

View File

@ -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",

View File

@ -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": "オフ",

View File

@ -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": "Стараюсь думать",

View File

@ -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": "关闭",

View File

@ -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": "關閉",

View File

@ -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": "Μεγάλο",

View File

@ -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",

View File

@ -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",

View File

@ -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",

View File

@ -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

View File

@ -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)}>

View File

@ -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 (

View File

@ -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}
/>
))}

View File

@ -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

View File

@ -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}

View File

@ -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()

View File

@ -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}`

View File

@ -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}`

View File

@ -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

View File

@ -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'

View File

@ -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]

View File

@ -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]

View File

@ -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

View File

@ -170,7 +170,6 @@ export type Message = {
modelId?: string
model?: Model
type?: 'clear'
isPreset?: boolean
useful?: boolean
askId?: string // 关联的问题消息ID
mentions?: Model[]

View File

@ -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,

View File

@ -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,