feat: enhance message model handling and user display

- Updated Message component to fallback to message.model if model retrieval fails, improving robustness.
- Refactored MessageHeader to utilize getModelName for better user name display based on message role, enhancing clarity.
- Introduced getModelName function in ModelService to streamline model name retrieval, improving code modularity and readability.
This commit is contained in:
kangfenmao 2025-01-22 15:08:44 +08:00
parent 57aef23741
commit 084da9ebab
3 changed files with 15 additions and 4 deletions

View File

@ -53,7 +53,7 @@ const MessageItem: FC<Props> = ({
const [message, setMessage] = useState(_message)
const { t } = useTranslation()
const { assistant, setModel } = useAssistant(message.assistantId)
const model = useModel(getMessageModelId(message))
const model = useModel(getMessageModelId(message)) || message.model
const { isBubbleStyle } = useMessageStyle()
const { showMessageDivider, messageFont, fontSize } = useSettings()
const messageContainerRef = useRef<HTMLDivElement>(null)

View File

@ -6,6 +6,7 @@ import { useTheme } from '@renderer/context/ThemeProvider'
import useAvatar from '@renderer/hooks/useAvatar'
import { useMessageStyle, useSettings } from '@renderer/hooks/useSettings'
import { getMessageModelId } from '@renderer/services/MessagesService'
import { getModelName } from '@renderer/services/ModelService'
import { Assistant, Message, Model } from '@renderer/types'
import { firstLetter, removeLeadingEmoji } from '@renderer/utils'
import { Avatar } from 'antd'
@ -35,10 +36,16 @@ const MessageHeader: FC<Props> = memo(({ assistant, model, message }) => {
const avatarSource = useMemo(() => getAvatarSource(isLocalAi, getMessageModelId(message)), [message])
const getUserName = useCallback(() => {
if (isLocalAi && message.role !== 'user') return APP_NAME
if (message.role === 'assistant') return model?.name || model?.id || message.modelId || ''
if (isLocalAi && message.role !== 'user') {
return APP_NAME
}
if (message.role === 'assistant') {
return getModelName(model) || getMessageModelId(message) || ''
}
return userName || t('common.you')
}, [message.modelId, message.role, model?.id, model?.name, t, userName])
}, [message, model, t, userName])
const isAssistantMessage = message.role === 'assistant'
const showMinappIcon = sidebarIcons.visible.includes('minapp')

View File

@ -15,3 +15,7 @@ export const hasModel = (m?: Model) => {
return allModels.find((model) => model.id === m?.id)
}
export function getModelName(model?: Model) {
return model?.name || model?.id || ''
}