fix: messages re-render on different threads (#4638)
This commit is contained in:
parent
82c45debb7
commit
b8743cfb50
@ -143,8 +143,7 @@ export default function ModelHandler() {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// The thread title should not be updated if the message is less than 10 words
|
// No new line character is presented in the title
|
||||||
// And no new line character is present
|
|
||||||
// And non-alphanumeric characters should be removed
|
// And non-alphanumeric characters should be removed
|
||||||
if (messageContent.includes('\n')) {
|
if (messageContent.includes('\n')) {
|
||||||
messageContent = messageContent.replace(/\n/g, ' ')
|
messageContent = messageContent.replace(/\n/g, ' ')
|
||||||
@ -290,13 +289,7 @@ export default function ModelHandler() {
|
|||||||
.catch(() => undefined)
|
.catch(() => undefined)
|
||||||
if (updatedMessage) {
|
if (updatedMessage) {
|
||||||
deleteMessage(message.id)
|
deleteMessage(message.id)
|
||||||
addNewMessage({
|
addNewMessage(updatedMessage)
|
||||||
...updatedMessage,
|
|
||||||
metadata: {
|
|
||||||
...updatedMessage.metadata,
|
|
||||||
reserve_id: message.id,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
setTokenSpeed((prev) =>
|
setTokenSpeed((prev) =>
|
||||||
prev ? { ...prev, message: updatedMessage.id } : undefined
|
prev ? { ...prev, message: updatedMessage.id } : undefined
|
||||||
)
|
)
|
||||||
|
|||||||
@ -160,12 +160,7 @@ const ChatBody = memo(
|
|||||||
>
|
>
|
||||||
{items.map((virtualRow) => (
|
{items.map((virtualRow) => (
|
||||||
<div
|
<div
|
||||||
key={
|
key={messages[virtualRow.index]?.id ?? virtualRow.index}
|
||||||
(messages[virtualRow.index]?.metadata
|
|
||||||
?.reserve_id as string) ??
|
|
||||||
messages[virtualRow.index]?.id ??
|
|
||||||
virtualRow.index
|
|
||||||
}
|
|
||||||
data-index={virtualRow.index}
|
data-index={virtualRow.index}
|
||||||
ref={virtualizer.measureElement}
|
ref={virtualizer.measureElement}
|
||||||
>
|
>
|
||||||
@ -175,6 +170,7 @@ const ChatBody = memo(
|
|||||||
<ChatItem
|
<ChatItem
|
||||||
{...messages[virtualRow.index]}
|
{...messages[virtualRow.index]}
|
||||||
loadModelError={loadModelError}
|
loadModelError={loadModelError}
|
||||||
|
index={virtualRow.index}
|
||||||
isCurrentMessage={
|
isCurrentMessage={
|
||||||
virtualRow.index === messages?.length - 1
|
virtualRow.index === messages?.length - 1
|
||||||
}
|
}
|
||||||
|
|||||||
@ -21,6 +21,7 @@ type Ref = HTMLDivElement
|
|||||||
type Props = {
|
type Props = {
|
||||||
loadModelError?: string
|
loadModelError?: string
|
||||||
isCurrentMessage?: boolean
|
isCurrentMessage?: boolean
|
||||||
|
index: number
|
||||||
} & ThreadMessage
|
} & ThreadMessage
|
||||||
|
|
||||||
const ChatItem = forwardRef<Ref, Props>((message, ref) => {
|
const ChatItem = forwardRef<Ref, Props>((message, ref) => {
|
||||||
@ -78,6 +79,7 @@ const ChatItem = forwardRef<Ref, Props>((message, ref) => {
|
|||||||
{...message}
|
{...message}
|
||||||
content={content}
|
content={content}
|
||||||
status={status}
|
status={status}
|
||||||
|
index={message.index}
|
||||||
isCurrentMessage={message.isCurrentMessage ?? false}
|
isCurrentMessage={message.isCurrentMessage ?? false}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -8,10 +8,10 @@ import { MarkdownTextMessage } from './MarkdownTextMessage'
|
|||||||
interface Props {
|
interface Props {
|
||||||
text: string
|
text: string
|
||||||
status: string
|
status: string
|
||||||
id: string
|
id: number
|
||||||
}
|
}
|
||||||
|
|
||||||
const thinkingBlockStateAtom = atom<{ [id: string]: boolean }>({})
|
const thinkingBlockStateAtom = atom<{ [id: number]: boolean }>({})
|
||||||
|
|
||||||
const ThinkingBlock = ({ id, text, status }: Props) => {
|
const ThinkingBlock = ({ id, text, status }: Props) => {
|
||||||
const [thinkingState, setThinkingState] = useAtom(thinkingBlockStateAtom)
|
const [thinkingState, setThinkingState] = useAtom(thinkingBlockStateAtom)
|
||||||
|
|||||||
@ -27,7 +27,7 @@ import {
|
|||||||
import { chatWidthAtom } from '@/helpers/atoms/Setting.atom'
|
import { chatWidthAtom } from '@/helpers/atoms/Setting.atom'
|
||||||
|
|
||||||
const MessageContainer: React.FC<
|
const MessageContainer: React.FC<
|
||||||
ThreadMessage & { isCurrentMessage: boolean }
|
ThreadMessage & { isCurrentMessage: boolean; index: number }
|
||||||
> = (props) => {
|
> = (props) => {
|
||||||
const isUser = props.role === ChatCompletionRole.User
|
const isUser = props.role === ChatCompletionRole.User
|
||||||
const isSystem = props.role === ChatCompletionRole.System
|
const isSystem = props.role === ChatCompletionRole.System
|
||||||
@ -162,7 +162,7 @@ const MessageContainer: React.FC<
|
|||||||
>
|
>
|
||||||
{reasoningSegment && (
|
{reasoningSegment && (
|
||||||
<ThinkingBlock
|
<ThinkingBlock
|
||||||
id={(props.metadata?.reserve_id as string) ?? props.id}
|
id={props.index}
|
||||||
text={reasoningSegment}
|
text={reasoningSegment}
|
||||||
status={props.status}
|
status={props.status}
|
||||||
/>
|
/>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user