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