fix: not update active model when using resend button (#834)
Signed-off-by: James <james@jan.ai> Co-authored-by: James <james@jan.ai>
This commit is contained in:
parent
09fe295c85
commit
dacb00ed37
@ -48,6 +48,47 @@ export default function useSendChatMessage() {
|
|||||||
const { startModel } = useActiveModel()
|
const { startModel } = useActiveModel()
|
||||||
const [queuedMessage, setQueuedMessage] = useState(false)
|
const [queuedMessage, setQueuedMessage] = useState(false)
|
||||||
|
|
||||||
|
const resendChatMessage = async () => {
|
||||||
|
if (!activeThread) {
|
||||||
|
console.error('No active thread')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
updateThreadWaiting(activeThread.id, true)
|
||||||
|
|
||||||
|
const messages: ChatCompletionMessage[] = [
|
||||||
|
activeThread.assistants[0]?.instructions,
|
||||||
|
]
|
||||||
|
.map<ChatCompletionMessage>((instructions) => {
|
||||||
|
const systemMessage: ChatCompletionMessage = {
|
||||||
|
role: ChatCompletionRole.System,
|
||||||
|
content: instructions,
|
||||||
|
}
|
||||||
|
return systemMessage
|
||||||
|
})
|
||||||
|
.concat(
|
||||||
|
currentMessages.map<ChatCompletionMessage>((msg) => ({
|
||||||
|
role: msg.role,
|
||||||
|
content: msg.content[0]?.text.value ?? '',
|
||||||
|
}))
|
||||||
|
)
|
||||||
|
|
||||||
|
const messageRequest: MessageRequest = {
|
||||||
|
id: ulid(),
|
||||||
|
messages: messages,
|
||||||
|
threadId: activeThread.id,
|
||||||
|
}
|
||||||
|
|
||||||
|
const modelId = selectedModel?.id ?? activeThread.assistants[0].model.id
|
||||||
|
|
||||||
|
if (activeModel?.id !== modelId) {
|
||||||
|
setQueuedMessage(true)
|
||||||
|
await startModel(modelId)
|
||||||
|
setQueuedMessage(false)
|
||||||
|
}
|
||||||
|
events.emit(EventName.OnMessageSent, messageRequest)
|
||||||
|
}
|
||||||
|
|
||||||
const sendChatMessage = async () => {
|
const sendChatMessage = async () => {
|
||||||
if (!currentPrompt || currentPrompt.trim().length === 0) {
|
if (!currentPrompt || currentPrompt.trim().length === 0) {
|
||||||
return
|
return
|
||||||
@ -162,6 +203,7 @@ export default function useSendChatMessage() {
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
sendChatMessage,
|
sendChatMessage,
|
||||||
|
resendChatMessage,
|
||||||
queuedMessage,
|
queuedMessage,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,7 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
ChatCompletionMessage,
|
|
||||||
EventName,
|
EventName,
|
||||||
MessageRequest,
|
|
||||||
MessageStatus,
|
MessageStatus,
|
||||||
ExtensionType,
|
ExtensionType,
|
||||||
ThreadMessage,
|
ThreadMessage,
|
||||||
@ -21,17 +19,15 @@ import {
|
|||||||
getCurrentChatMessagesAtom,
|
getCurrentChatMessagesAtom,
|
||||||
} from '@/helpers/atoms/ChatMessage.atom'
|
} from '@/helpers/atoms/ChatMessage.atom'
|
||||||
import { activeThreadAtom } from '@/helpers/atoms/Conversation.atom'
|
import { activeThreadAtom } from '@/helpers/atoms/Conversation.atom'
|
||||||
|
import useSendChatMessage from '@/hooks/useSendChatMessage'
|
||||||
|
|
||||||
const MessageToolbar = ({ message }: { message: ThreadMessage }) => {
|
const MessageToolbar = ({ message }: { message: ThreadMessage }) => {
|
||||||
const deleteMessage = useSetAtom(deleteMessageAtom)
|
const deleteMessage = useSetAtom(deleteMessageAtom)
|
||||||
const thread = useAtomValue(activeThreadAtom)
|
const thread = useAtomValue(activeThreadAtom)
|
||||||
const messages = useAtomValue(getCurrentChatMessagesAtom)
|
const messages = useAtomValue(getCurrentChatMessagesAtom)
|
||||||
// const threadStateAtom = useMemo(
|
const { resendChatMessage } = useSendChatMessage()
|
||||||
// () => atom((get) => get(threadStatesAtom)[thread?.id ?? '']),
|
|
||||||
// [thread?.id]
|
const onStopInferenceClick = async () => {
|
||||||
// )
|
|
||||||
// const threadState = useAtomValue(threadStateAtom)
|
|
||||||
const stopInference = async () => {
|
|
||||||
await extensionManager
|
await extensionManager
|
||||||
.get<InferenceExtension>(ExtensionType.Inference)
|
.get<InferenceExtension>(ExtensionType.Inference)
|
||||||
?.stopInference()
|
?.stopInference()
|
||||||
@ -43,13 +39,25 @@ const MessageToolbar = ({ message }: { message: ThreadMessage }) => {
|
|||||||
}, 300)
|
}, 300)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const onDeleteClick = async () => {
|
||||||
|
deleteMessage(message.id ?? '')
|
||||||
|
if (thread) {
|
||||||
|
await extensionManager
|
||||||
|
.get<ConversationalExtension>(ExtensionType.Conversational)
|
||||||
|
?.writeMessages(
|
||||||
|
thread.id,
|
||||||
|
messages.filter((msg) => msg.id !== message.id)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={twMerge('flex flex-row items-center')}>
|
<div className={twMerge('flex flex-row items-center')}>
|
||||||
<div className="flex overflow-hidden rounded-md border border-border bg-background/20">
|
<div className="flex overflow-hidden rounded-md border border-border bg-background/20">
|
||||||
{message.status === MessageStatus.Pending && (
|
{message.status === MessageStatus.Pending && (
|
||||||
<div
|
<div
|
||||||
className="cursor-pointer border-r border-border px-2 py-2 hover:bg-background/80"
|
className="cursor-pointer border-r border-border px-2 py-2 hover:bg-background/80"
|
||||||
onClick={() => stopInference()}
|
onClick={onStopInferenceClick}
|
||||||
>
|
>
|
||||||
<StopCircle size={14} />
|
<StopCircle size={14} />
|
||||||
</div>
|
</div>
|
||||||
@ -58,20 +66,7 @@ const MessageToolbar = ({ message }: { message: ThreadMessage }) => {
|
|||||||
message.id === messages[messages.length - 1]?.id && (
|
message.id === messages[messages.length - 1]?.id && (
|
||||||
<div
|
<div
|
||||||
className="cursor-pointer border-r border-border px-2 py-2 hover:bg-background/80"
|
className="cursor-pointer border-r border-border px-2 py-2 hover:bg-background/80"
|
||||||
onClick={() => {
|
onClick={resendChatMessage}
|
||||||
const messageRequest: MessageRequest = {
|
|
||||||
id: message.id ?? '',
|
|
||||||
messages: messages.slice(0, -1).map((e) => {
|
|
||||||
const msg: ChatCompletionMessage = {
|
|
||||||
role: e.role,
|
|
||||||
content: e.content[0].text.value,
|
|
||||||
}
|
|
||||||
return msg
|
|
||||||
}),
|
|
||||||
threadId: message.thread_id ?? '',
|
|
||||||
}
|
|
||||||
events.emit(EventName.OnMessageSent, messageRequest)
|
|
||||||
}}
|
|
||||||
>
|
>
|
||||||
<RefreshCcw size={14} />
|
<RefreshCcw size={14} />
|
||||||
</div>
|
</div>
|
||||||
@ -89,16 +84,7 @@ const MessageToolbar = ({ message }: { message: ThreadMessage }) => {
|
|||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
className="cursor-pointer px-2 py-2 hover:bg-background/80"
|
className="cursor-pointer px-2 py-2 hover:bg-background/80"
|
||||||
onClick={async () => {
|
onClick={onDeleteClick}
|
||||||
deleteMessage(message.id ?? '')
|
|
||||||
if (thread)
|
|
||||||
await extensionManager
|
|
||||||
.get<ConversationalExtension>(ExtensionType.Conversational)
|
|
||||||
?.writeMessages(
|
|
||||||
thread.id,
|
|
||||||
messages.filter((msg) => msg.id !== message.id)
|
|
||||||
)
|
|
||||||
}}
|
|
||||||
>
|
>
|
||||||
<Trash2Icon size={14} />
|
<Trash2Icon size={14} />
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user