chore: update convo last message
This commit is contained in:
parent
c5d4163869
commit
9f0efa56ce
@ -105,7 +105,7 @@ export default class JanInferencePlugin implements InferencePlugin {
|
||||
*/
|
||||
private async handleMessageRequest(data: MessageRequest) {
|
||||
const message: ThreadMessage = {
|
||||
...data,
|
||||
threadId: data.threadId,
|
||||
content: "",
|
||||
role: ChatCompletionRole.Assistant,
|
||||
createdAt: new Date().toISOString(),
|
||||
|
||||
@ -1,7 +1,11 @@
|
||||
import { MessageStatus, ThreadMessage } from '@janhq/core'
|
||||
import { atom } from 'jotai'
|
||||
|
||||
import { getActiveConvoIdAtom } from './Conversation.atom'
|
||||
import {
|
||||
conversationStatesAtom,
|
||||
getActiveConvoIdAtom,
|
||||
updateThreadStateLastMessageAtom,
|
||||
} from './Conversation.atom'
|
||||
|
||||
/**
|
||||
* Stores all chat messages for all conversations
|
||||
@ -77,6 +81,8 @@ export const addNewMessageAtom = atom(
|
||||
}
|
||||
newData[currentConvoId] = updatedMessages
|
||||
set(chatMessages, newData)
|
||||
// Update thread last message
|
||||
set(updateThreadStateLastMessageAtom, currentConvoId, newMessage.content)
|
||||
}
|
||||
)
|
||||
|
||||
@ -110,6 +116,8 @@ export const updateMessageAtom = atom(
|
||||
}
|
||||
newData[conversationId] = updatedMessages
|
||||
set(chatMessages, newData)
|
||||
// Update thread last message
|
||||
set(updateThreadStateLastMessageAtom, conversationId, text)
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
@ -71,6 +71,18 @@ export const updateConversationHasMoreAtom = atom(
|
||||
}
|
||||
)
|
||||
|
||||
export const updateThreadStateLastMessageAtom = atom(
|
||||
null,
|
||||
(get, set, conversationId: string, lastMessage?: string) => {
|
||||
const currentState = { ...get(conversationStatesAtom) }
|
||||
currentState[conversationId] = {
|
||||
...currentState[conversationId],
|
||||
lastMessage,
|
||||
}
|
||||
set(conversationStatesAtom, currentState)
|
||||
}
|
||||
)
|
||||
|
||||
export const updateConversationAtom = atom(
|
||||
null,
|
||||
(get, set, conversation: Thread) => {
|
||||
|
||||
@ -25,6 +25,7 @@ const useGetUserConversations = () => {
|
||||
convoStates[convo.id ?? ''] = {
|
||||
hasMore: true,
|
||||
waitingForResponse: false,
|
||||
lastMessage: convo.messages[0]?.content ?? '',
|
||||
}
|
||||
setConvoMessages(convo.messages, convo.id ?? '')
|
||||
})
|
||||
|
||||
@ -6,6 +6,7 @@ import {
|
||||
MessageStatus,
|
||||
PluginType,
|
||||
Thread,
|
||||
ThreadMessage,
|
||||
events,
|
||||
} from '@janhq/core'
|
||||
import { ConversationalPlugin, InferencePlugin } from '@janhq/core/lib/plugins'
|
||||
@ -84,14 +85,14 @@ export default function useSendChatMessage() {
|
||||
}
|
||||
|
||||
const sendChatMessage = async () => {
|
||||
const convoId = currentConvo?.id
|
||||
if (!convoId) {
|
||||
const threadId = currentConvo?.id
|
||||
if (!threadId) {
|
||||
console.error('No conversation id')
|
||||
return
|
||||
}
|
||||
|
||||
setCurrentPrompt('')
|
||||
updateConvWaiting(convoId, true)
|
||||
updateConvWaiting(threadId, true)
|
||||
|
||||
const prompt = currentPrompt.trim()
|
||||
const messages: ChatCompletionMessage[] = currentMessages
|
||||
@ -106,27 +107,28 @@ export default function useSendChatMessage() {
|
||||
content: prompt,
|
||||
} as ChatCompletionMessage,
|
||||
])
|
||||
const newMessage: MessageRequest = {
|
||||
const messageRequest: MessageRequest = {
|
||||
id: ulid(),
|
||||
threadId: convoId,
|
||||
threadId: threadId,
|
||||
messages,
|
||||
}
|
||||
|
||||
addNewMessage({
|
||||
id: newMessage.id,
|
||||
threadId: newMessage.threadId,
|
||||
const threadMessage: ThreadMessage = {
|
||||
id: messageRequest.id,
|
||||
threadId: messageRequest.threadId,
|
||||
content: prompt,
|
||||
role: ChatCompletionRole.User,
|
||||
createdAt: new Date().toISOString(),
|
||||
status: MessageStatus.Ready,
|
||||
})
|
||||
}
|
||||
addNewMessage(threadMessage)
|
||||
|
||||
// delay randomly from 50 - 100ms
|
||||
// to prevent duplicate message id
|
||||
const delay = Math.floor(Math.random() * 50) + 50
|
||||
await new Promise((resolve) => setTimeout(resolve, delay))
|
||||
|
||||
events.emit(EventName.OnNewMessageRequest, newMessage)
|
||||
events.emit(EventName.OnNewMessageRequest, messageRequest)
|
||||
if (!currentConvo?.summary && currentConvo) {
|
||||
const updatedConv: Thread = {
|
||||
...currentConvo,
|
||||
@ -136,7 +138,7 @@ export default function useSendChatMessage() {
|
||||
updateConversation(updatedConv)
|
||||
}
|
||||
|
||||
updateConvSummary(newMessage)
|
||||
updateConvSummary(messageRequest)
|
||||
}
|
||||
|
||||
return {
|
||||
|
||||
@ -17,6 +17,7 @@ import useGetUserConversations from '@/hooks/useGetUserConversations'
|
||||
import { displayDate } from '@/utils/datetime'
|
||||
|
||||
import {
|
||||
conversationStatesAtom,
|
||||
getActiveConvoIdAtom,
|
||||
setActiveConvoIdAtom,
|
||||
userConversationsAtom,
|
||||
@ -24,6 +25,7 @@ import {
|
||||
|
||||
export default function HistoryList() {
|
||||
const conversations = useAtomValue(userConversationsAtom)
|
||||
const threadStates = useAtomValue(conversationStatesAtom)
|
||||
const { getUserConversations } = useGetUserConversations()
|
||||
const { activeModel, startModel } = useActiveModel()
|
||||
const { requestCreateConvo } = useCreateConversation()
|
||||
@ -83,6 +85,7 @@ export default function HistoryList() {
|
||||
</div>
|
||||
) : (
|
||||
conversations.map((convo, i) => {
|
||||
const lastMessage = threadStates[convo.id]?.lastMessage
|
||||
return (
|
||||
<div
|
||||
key={i}
|
||||
@ -99,7 +102,9 @@ export default function HistoryList() {
|
||||
<h2 className="line-clamp-1">{convo.summary}</h2>
|
||||
<p className="mt-1 line-clamp-2 text-xs">
|
||||
{/* TODO: Check latest message update */}
|
||||
{convo?.messages[0]?.content ?? 'No new message'}
|
||||
{lastMessage && lastMessage.length > 0
|
||||
? lastMessage
|
||||
: 'No new message'}
|
||||
</p>
|
||||
{activeModel && activeConvoId === convo.id && (
|
||||
<m.div
|
||||
|
||||
1
web/types/conversation.d.ts
vendored
1
web/types/conversation.d.ts
vendored
@ -2,4 +2,5 @@ export type ThreadState = {
|
||||
hasMore: boolean
|
||||
waitingForResponse: boolean
|
||||
error?: Error
|
||||
lastMessage?: string
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user