mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2026-01-05 20:41:30 +08:00
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(() => {
|
useEffect(() => {
|
||||||
// activeTopic not in assistant.topics
|
// activeTopic not in assistant.topics
|
||||||
const topicTarget = find(assistant.topics, { id: activeTopic?.id })
|
if (assistant && !find(assistant.topics, { id: activeTopic?.id })) {
|
||||||
// if (assistant && !find(assistant.topics, { id: activeTopic?.id })) {
|
setActiveTopic(assistant.topics[0])
|
||||||
if (assistant) {
|
|
||||||
setActiveTopic(topicTarget || assistant.topics[0])
|
|
||||||
}
|
}
|
||||||
}, [activeTopic?.id, assistant])
|
}, [activeTopic?.id, assistant])
|
||||||
|
|
||||||
return { activeTopic, setActiveTopic }
|
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) {
|
export function getTopic(assistant: Assistant, topicId: string) {
|
||||||
return assistant?.topics.find((topic) => topic.id === topicId)
|
return assistant?.topics.find((topic) => topic.id === topicId)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,6 +3,7 @@ import db from '@renderer/databases'
|
|||||||
import { useAssistant } from '@renderer/hooks/useAssistant'
|
import { useAssistant } from '@renderer/hooks/useAssistant'
|
||||||
import { useModel } from '@renderer/hooks/useModel'
|
import { useModel } from '@renderer/hooks/useModel'
|
||||||
import { useMessageStyle, useSettings } from '@renderer/hooks/useSettings'
|
import { useMessageStyle, useSettings } from '@renderer/hooks/useSettings'
|
||||||
|
import { useTopic } from '@renderer/hooks/useTopic'
|
||||||
import { fetchChatCompletion } from '@renderer/services/ApiService'
|
import { fetchChatCompletion } from '@renderer/services/ApiService'
|
||||||
import { EVENT_NAMES, EventEmitter } from '@renderer/services/EventService'
|
import { EVENT_NAMES, EventEmitter } from '@renderer/services/EventService'
|
||||||
import { getMessageModelId } from '@renderer/services/MessagesService'
|
import { getMessageModelId } from '@renderer/services/MessagesService'
|
||||||
@ -43,7 +44,7 @@ const getMessageBackground = (isBubbleStyle: boolean, isAssistantMessage: boolea
|
|||||||
|
|
||||||
const MessageItem: FC<Props> = ({
|
const MessageItem: FC<Props> = ({
|
||||||
message: _message,
|
message: _message,
|
||||||
topic,
|
topic: _topic,
|
||||||
index,
|
index,
|
||||||
hidePresetMessages,
|
hidePresetMessages,
|
||||||
isGrouped,
|
isGrouped,
|
||||||
@ -59,6 +60,7 @@ const MessageItem: FC<Props> = ({
|
|||||||
const { isBubbleStyle } = useMessageStyle()
|
const { isBubbleStyle } = useMessageStyle()
|
||||||
const { showMessageDivider, messageFont, fontSize } = useSettings()
|
const { showMessageDivider, messageFont, fontSize } = useSettings()
|
||||||
const messageContainerRef = useRef<HTMLDivElement>(null)
|
const messageContainerRef = useRef<HTMLDivElement>(null)
|
||||||
|
const topic = useTopic(assistant, _topic?.id)
|
||||||
|
|
||||||
const isLastMessage = index === 0
|
const isLastMessage = index === 0
|
||||||
const isAssistantMessage = message.role === 'assistant'
|
const isAssistantMessage = message.role === 'assistant'
|
||||||
@ -118,12 +120,14 @@ const MessageItem: FC<Props> = ({
|
|||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (topic && onGetMessages && onSetMessages) {
|
if (topic && onGetMessages && onSetMessages) {
|
||||||
if (message.status === 'sending') {
|
if (message.status === 'sending') {
|
||||||
const _assistant = {
|
|
||||||
...assistant,
|
|
||||||
prompt: `${assistant?.prompt || ''}\n${topic?.prompt || ''}`
|
|
||||||
}
|
|
||||||
const messages = onGetMessages()
|
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({
|
fetchChatCompletion({
|
||||||
message,
|
message,
|
||||||
|
|||||||
@ -135,7 +135,7 @@ const Topics: FC<Props> = ({ assistant: _assistant, activeTopic, setActiveTopic
|
|||||||
allowClear: true
|
allowClear: true
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
if (prompt !== null) updateTopic({ ...topic, prompt })
|
prompt && updateTopic({ ...topic, prompt: prompt.trim() })
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user