feat: Enhance topic handling and message prompt generation

This commit is contained in:
kangfenmao 2025-02-16 13:41:31 +08:00
parent cbd6a30e14
commit 4ecedcb267
3 changed files with 17 additions and 11 deletions

View File

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

View File

@ -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<Props> = ({
message: _message,
topic,
topic: _topic,
index,
hidePresetMessages,
isGrouped,
@ -59,6 +60,7 @@ const MessageItem: FC<Props> = ({
const { isBubbleStyle } = useMessageStyle()
const { showMessageDivider, messageFont, fontSize } = useSettings()
const messageContainerRef = useRef<HTMLDivElement>(null)
const topic = useTopic(assistant, _topic?.id)
const isLastMessage = index === 0
const isAssistantMessage = message.role === 'assistant'
@ -118,12 +120,14 @@ const MessageItem: FC<Props> = ({
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,

View File

@ -135,7 +135,7 @@ const Topics: FC<Props> = ({ assistant: _assistant, activeTopic, setActiveTopic
allowClear: true
}
})
if (prompt !== null) updateTopic({ ...topic, prompt })
prompt && updateTopic({ ...topic, prompt: prompt.trim() })
}
},
{