fix: update model identification with provider-specific uniqueness

This commit is contained in:
suyao 2025-02-19 03:31:01 +08:00 committed by 亢奋猫
parent 4721a660fa
commit 2c3f89dbde
3 changed files with 13 additions and 5 deletions

View File

@ -1,7 +1,13 @@
import { useProviders } from './useProvider' import { useProviders } from './useProvider'
export function useModel(id?: string) { export function useModel(id?: string, providerId?: string) {
const { providers } = useProviders() const { providers } = useProviders()
const allModels = providers.map((p) => p.models).flat() const allModels = providers.map((p) => p.models).flat()
return allModels.find((m) => m.id === id) return allModels.find((m) => {
if (providerId) {
return m.id === id && m.provider === providerId
} else {
return m.id === id
}
})
} }

View File

@ -7,6 +7,7 @@ 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 { getContextCount, getMessageModelId } from '@renderer/services/MessagesService' import { getContextCount, getMessageModelId } from '@renderer/services/MessagesService'
import { getModelUniqId } from '@renderer/services/ModelService'
import { estimateHistoryTokens, estimateMessageUsage } from '@renderer/services/TokenService' import { estimateHistoryTokens, estimateMessageUsage } from '@renderer/services/TokenService'
import { Message, Topic } from '@renderer/types' import { Message, Topic } from '@renderer/types'
import { classNames, runAsyncFunction } from '@renderer/utils' import { classNames, runAsyncFunction } from '@renderer/utils'
@ -56,7 +57,7 @@ const MessageItem: FC<Props> = ({
const [message, setMessage] = useState(_message) const [message, setMessage] = useState(_message)
const { t } = useTranslation() const { t } = useTranslation()
const { assistant, setModel } = useAssistant(message.assistantId) const { assistant, setModel } = useAssistant(message.assistantId)
const model = useModel(getMessageModelId(message)) || message.model const model = useModel(getMessageModelId(message), message.model?.provider) || message.model
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)
@ -185,7 +186,7 @@ const MessageItem: FC<Props> = ({
})} })}
ref={messageContainerRef} ref={messageContainerRef}
style={{ ...style, alignItems: isBubbleStyle ? (isAssistantMessage ? 'start' : 'end') : undefined }}> style={{ ...style, alignItems: isBubbleStyle ? (isAssistantMessage ? 'start' : 'end') : undefined }}>
<MessageHeader message={message} assistant={assistant} model={model} key={getMessageModelId(message)} /> <MessageHeader message={message} assistant={assistant} model={model} key={getModelUniqId(model)} />
<MessageContentContainer <MessageContentContainer
className="message-content-container" className="message-content-container"
style={{ fontFamily, fontSize, background: messageBackground }}> style={{ fontFamily, fontSize, background: messageBackground }}>

View File

@ -1,4 +1,5 @@
import { InfoCircleOutlined, SyncOutlined, TranslationOutlined } from '@ant-design/icons' import { InfoCircleOutlined, SyncOutlined, TranslationOutlined } from '@ant-design/icons'
import { getModelUniqId } from '@renderer/services/ModelService'
import { Message, Model } from '@renderer/types' import { Message, Model } from '@renderer/types'
import { getBriefInfo } from '@renderer/utils' import { getBriefInfo } from '@renderer/utils'
import { withMessageThought } from '@renderer/utils/formats' import { withMessageThought } from '@renderer/utils/formats'
@ -77,7 +78,7 @@ const MessageContent: React.FC<Props> = ({ message: _message, model }) => {
return ( return (
<Fragment> <Fragment>
<Flex gap="8px" wrap style={{ marginBottom: 10 }}> <Flex gap="8px" wrap style={{ marginBottom: 10 }}>
{message.mentions?.map((model) => <MentionTag key={model.id}>{'@' + model.name}</MentionTag>)} {message.mentions?.map((model) => <MentionTag key={getModelUniqId(model)}>{'@' + model.name}</MentionTag>)}
</Flex> </Flex>
<MessageThought message={message} /> <MessageThought message={message} />
<Markdown message={{ ...message, content: processedContent }} /> <Markdown message={{ ...message, content: processedContent }} />