fix: race condition in new context event
This commit is contained in:
parent
9a65a1e7c7
commit
62de293194
@ -46,6 +46,7 @@ const Messages: React.FC<MessagesProps> = ({ assistant, topic, setActiveTopic })
|
||||
const [displayMessages, setDisplayMessages] = useState<Message[]>([])
|
||||
const [hasMore, setHasMore] = useState(false)
|
||||
const [isLoadingMore, setIsLoadingMore] = useState(false)
|
||||
const [isProcessingContext, setIsProcessingContext] = useState(false)
|
||||
const { messages, displayCount, loading, updateMessages, clearTopicMessages, deleteMessage } =
|
||||
useMessageOperations(topic)
|
||||
|
||||
@ -107,25 +108,32 @@ const Messages: React.FC<MessagesProps> = ({ assistant, topic, setActiveTopic })
|
||||
}
|
||||
}),
|
||||
EventEmitter.on(EVENT_NAMES.NEW_CONTEXT, async () => {
|
||||
const messages = messagesRef.current
|
||||
if (isProcessingContext) return
|
||||
setIsProcessingContext(true)
|
||||
|
||||
if (messages.length === 0) {
|
||||
return
|
||||
}
|
||||
try {
|
||||
const messages = messagesRef.current
|
||||
|
||||
const lastMessage = last(messages)
|
||||
if (messages.length === 0) {
|
||||
return
|
||||
}
|
||||
|
||||
const lastMessage = last(messages)
|
||||
|
||||
if (lastMessage?.type === 'clear') {
|
||||
await deleteMessage(lastMessage)
|
||||
scrollToBottom()
|
||||
return
|
||||
}
|
||||
|
||||
const clearMessage = getUserMessage({ assistant, topic, type: 'clear' })
|
||||
const newMessages = [...messages, clearMessage]
|
||||
await updateMessages(newMessages)
|
||||
|
||||
if (lastMessage?.type === 'clear') {
|
||||
deleteMessage(lastMessage)
|
||||
scrollToBottom()
|
||||
return
|
||||
} finally {
|
||||
setIsProcessingContext(false)
|
||||
}
|
||||
|
||||
const clearMessage = getUserMessage({ assistant, topic, type: 'clear' })
|
||||
const newMessages = [...messages, clearMessage]
|
||||
await updateMessages(newMessages)
|
||||
|
||||
scrollToBottom()
|
||||
}),
|
||||
EventEmitter.on(EVENT_NAMES.NEW_BRANCH, async (index: number) => {
|
||||
const newTopic = getDefaultTopic(assistant.id)
|
||||
@ -151,7 +159,7 @@ const Messages: React.FC<MessagesProps> = ({ assistant, topic, setActiveTopic })
|
||||
|
||||
return () => unsubscribes.forEach((unsub) => unsub())
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, [assistant, dispatch, scrollToBottom, topic])
|
||||
}, [assistant, dispatch, scrollToBottom, topic, isProcessingContext])
|
||||
|
||||
useEffect(() => {
|
||||
runAsyncFunction(async () => {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user