chore: update convo last message

This commit is contained in:
Louis 2023-11-16 20:15:45 +07:00
parent c5d4163869
commit 9f0efa56ce
7 changed files with 43 additions and 14 deletions

View File

@ -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(),

View File

@ -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)
}
}
)

View File

@ -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) => {

View File

@ -25,6 +25,7 @@ const useGetUserConversations = () => {
convoStates[convo.id ?? ''] = {
hasMore: true,
waitingForResponse: false,
lastMessage: convo.messages[0]?.content ?? '',
}
setConvoMessages(convo.messages, convo.id ?? '')
})

View File

@ -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 {

View File

@ -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

View File

@ -2,4 +2,5 @@ export type ThreadState = {
hasMore: boolean
waitingForResponse: boolean
error?: Error
lastMessage?: string
}