feat: Enhance topic handling and message prompt generation
This commit is contained in:
parent
cbd6a30e14
commit
4ecedcb267
@ -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)
|
||||
}
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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() })
|
||||
}
|
||||
},
|
||||
{
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user