Merge pull request #4341 from janhq/fix/stop-button-state

fix: send message button state reset on stop
This commit is contained in:
Louis 2024-12-26 20:12:04 +07:00 committed by GitHub
commit c77275a35c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 35 additions and 4 deletions

View File

@ -173,6 +173,21 @@ export const updateThreadWaitingForResponseAtom = atom(
} }
) )
/**
* Reset the thread waiting for response state
*/
export const resetThreadWaitingForResponseAtom = atom(null, (get, set) => {
const currentState = { ...get(threadStatesAtom) }
Object.keys(currentState).forEach((threadId) => {
currentState[threadId] = {
...currentState[threadId],
waitingForResponse: false,
error: undefined,
}
})
set(threadStatesAtom, currentState)
})
/** /**
* Update the thread last message * Update the thread last message
*/ */

View File

@ -10,6 +10,10 @@ import { LAST_USED_MODEL_ID } from './useRecommendedModel'
import { vulkanEnabledAtom } from '@/helpers/atoms/AppConfig.atom' import { vulkanEnabledAtom } from '@/helpers/atoms/AppConfig.atom'
import { activeAssistantAtom } from '@/helpers/atoms/Assistant.atom' import { activeAssistantAtom } from '@/helpers/atoms/Assistant.atom'
import { downloadedModelsAtom } from '@/helpers/atoms/Model.atom' import { downloadedModelsAtom } from '@/helpers/atoms/Model.atom'
import {
isGeneratingResponseAtom,
resetThreadWaitingForResponseAtom,
} from '@/helpers/atoms/Thread.atom'
export const activeModelAtom = atom<Model | undefined>(undefined) export const activeModelAtom = atom<Model | undefined>(undefined)
export const loadModelErrorAtom = atom<string | undefined>(undefined) export const loadModelErrorAtom = atom<string | undefined>(undefined)
@ -34,6 +38,10 @@ export function useActiveModel() {
const pendingModelLoad = useRef(false) const pendingModelLoad = useRef(false)
const isVulkanEnabled = useAtomValue(vulkanEnabledAtom) const isVulkanEnabled = useAtomValue(vulkanEnabledAtom)
const activeAssistant = useAtomValue(activeAssistantAtom) const activeAssistant = useAtomValue(activeAssistantAtom)
const setGeneratingResponse = useSetAtom(isGeneratingResponseAtom)
const resetThreadWaitingForResponseState = useSetAtom(
resetThreadWaitingForResponseAtom
)
const downloadedModelsRef = useRef<Model[]>([]) const downloadedModelsRef = useRef<Model[]>([])
@ -139,6 +147,8 @@ export function useActiveModel() {
return return
const engine = EngineManager.instance().get(stoppingModel.engine) const engine = EngineManager.instance().get(stoppingModel.engine)
setGeneratingResponse(false)
resetThreadWaitingForResponseState()
return engine return engine
?.unloadModel(stoppingModel) ?.unloadModel(stoppingModel)
.catch((e) => console.error(e)) .catch((e) => console.error(e))
@ -148,7 +158,14 @@ export function useActiveModel() {
pendingModelLoad.current = false pendingModelLoad.current = false
}) })
}, },
[activeModel, setStateModel, setActiveModel, stateModel] [
activeModel,
setStateModel,
setActiveModel,
stateModel,
setGeneratingResponse,
resetThreadWaitingForResponseState,
]
) )
const stopInference = useCallback(async () => { const stopInference = useCallback(async () => {

View File

@ -48,6 +48,7 @@ export default function useDeleteThread() {
if (thread) { if (thread) {
const updatedThread = { const updatedThread = {
...thread, ...thread,
title: 'New Thread',
metadata: { metadata: {
...thread.metadata, ...thread.metadata,
title: 'New Thread', title: 'New Thread',

View File

@ -302,9 +302,7 @@ const ChatInput = () => {
</div> </div>
)} )}
{messages[messages.length - 1]?.status !== MessageStatus.Pending && {!isGeneratingResponse && !isStreamingResponse ? (
!isGeneratingResponse &&
!isStreamingResponse ? (
<> <>
{currentPrompt.length !== 0 && ( {currentPrompt.length !== 0 && (
<Button <Button