diff --git a/src/renderer/src/hooks/useTopic.ts b/src/renderer/src/hooks/useTopic.ts index 7cc7eb26f3..ae1042f195 100644 --- a/src/renderer/src/hooks/useTopic.ts +++ b/src/renderer/src/hooks/useTopic.ts @@ -17,16 +17,18 @@ export function useActiveTopic(_assistant: Assistant, topic?: Topic) { useEffect(() => { // activeTopic not in assistant.topics - const topicTarget = find(assistant.topics, { id: activeTopic?.id }) - // if (assistant && !find(assistant.topics, { id: activeTopic?.id })) { - if (assistant) { - setActiveTopic(topicTarget || assistant.topics[0]) + if (assistant && !find(assistant.topics, { id: activeTopic?.id })) { + setActiveTopic(assistant.topics[0]) } }, [activeTopic?.id, assistant]) return { activeTopic, setActiveTopic } } +export function useTopic(assistant: Assistant, topicId?: string) { + return assistant?.topics.find((topic) => topic.id === topicId) +} + export function getTopic(assistant: Assistant, topicId: string) { return assistant?.topics.find((topic) => topic.id === topicId) } diff --git a/src/renderer/src/pages/home/Messages/Message.tsx b/src/renderer/src/pages/home/Messages/Message.tsx index 3fcabb2f3d..6cc3e0976a 100644 --- a/src/renderer/src/pages/home/Messages/Message.tsx +++ b/src/renderer/src/pages/home/Messages/Message.tsx @@ -3,6 +3,7 @@ import db from '@renderer/databases' import { useAssistant } from '@renderer/hooks/useAssistant' import { useModel } from '@renderer/hooks/useModel' import { useMessageStyle, useSettings } from '@renderer/hooks/useSettings' +import { useTopic } from '@renderer/hooks/useTopic' import { fetchChatCompletion } from '@renderer/services/ApiService' import { EVENT_NAMES, EventEmitter } from '@renderer/services/EventService' import { getMessageModelId } from '@renderer/services/MessagesService' @@ -43,7 +44,7 @@ const getMessageBackground = (isBubbleStyle: boolean, isAssistantMessage: boolea const MessageItem: FC = ({ message: _message, - topic, + topic: _topic, index, hidePresetMessages, isGrouped, @@ -59,6 +60,7 @@ const MessageItem: FC = ({ const { isBubbleStyle } = useMessageStyle() const { showMessageDivider, messageFont, fontSize } = useSettings() const messageContainerRef = useRef(null) + const topic = useTopic(assistant, _topic?.id) const isLastMessage = index === 0 const isAssistantMessage = message.role === 'assistant' @@ -118,12 +120,14 @@ const MessageItem: FC = ({ useEffect(() => { if (topic && onGetMessages && onSetMessages) { if (message.status === 'sending') { - const _assistant = { - ...assistant, - prompt: `${assistant?.prompt || ''}\n${topic?.prompt || ''}` - } const messages = onGetMessages() - const assistantWithModel = message.model ? { ..._assistant, model: message.model } : _assistant + const assistantWithModel = message.model ? { ...assistant, model: message.model } : assistant + + if (topic.prompt) { + assistantWithModel.prompt = assistantWithModel.prompt + ? `${assistantWithModel.prompt}\n${topic.prompt}` + : topic.prompt + } fetchChatCompletion({ message, diff --git a/src/renderer/src/pages/home/Tabs/TopicsTab.tsx b/src/renderer/src/pages/home/Tabs/TopicsTab.tsx index 4a662ff850..592d0d7933 100644 --- a/src/renderer/src/pages/home/Tabs/TopicsTab.tsx +++ b/src/renderer/src/pages/home/Tabs/TopicsTab.tsx @@ -135,7 +135,7 @@ const Topics: FC = ({ assistant: _assistant, activeTopic, setActiveTopic allowClear: true } }) - if (prompt !== null) updateTopic({ ...topic, prompt }) + prompt && updateTopic({ ...topic, prompt: prompt.trim() }) } }, {