chore: fix convo summary

This commit is contained in:
Louis 2023-11-17 16:01:33 +07:00
parent d27fa7962f
commit c9cfebd7d3
4 changed files with 48 additions and 59 deletions

View File

@ -109,10 +109,10 @@ async function validateModelStatus(): Promise<InitModelResponse> {
return { error: undefined }; return { error: undefined };
} }
} }
return { error: "Model is not loaded successfully" }; return { error: "Model loading failed" };
}) })
.catch((err) => { .catch((err) => {
return { error: `Model is not loaded successfully. ${err.message}` }; return { error: `Model loading failed. ${err.message}` };
}); });
} }

View File

@ -20,11 +20,10 @@ export const useCreateConversation = () => {
const addNewConvoState = useSetAtom(addNewConversationStateAtom) const addNewConvoState = useSetAtom(addNewConversationStateAtom)
const requestCreateConvo = async (model: Model) => { const requestCreateConvo = async (model: Model) => {
const summary = model.name
const mappedConvo: Thread = { const mappedConvo: Thread = {
id: generateConversationId(), id: generateConversationId(),
modelId: model.id, modelId: model.id,
summary, summary: model.name,
createdAt: new Date().toISOString(), createdAt: new Date().toISOString(),
updatedAt: new Date().toISOString(), updatedAt: new Date().toISOString(),
messages: [], messages: [],

View File

@ -20,8 +20,8 @@ export default function useDeleteModel() {
// reload models // reload models
setDownloadedModels(downloadedModels.filter((e) => e.id !== model.id)) setDownloadedModels(downloadedModels.filter((e) => e.id !== model.id))
toaster({ toaster({
title: 'Delete a Model', title: 'Model Deletion Successful',
description: `Model ${model.id} has been deleted.`, description: `The model ${model.id} has been successfully deleted.`,
}) })
} }

View File

@ -16,6 +16,8 @@ import { ulid } from 'ulid'
import { currentPromptAtom } from '@/containers/Providers/Jotai' import { currentPromptAtom } from '@/containers/Providers/Jotai'
import { useActiveModel } from './useActiveModel'
import { import {
addNewMessageAtom, addNewMessageAtom,
getCurrentChatMessagesAtom, getCurrentChatMessagesAtom,
@ -34,54 +36,51 @@ export default function useSendChatMessage() {
const updateConvWaiting = useSetAtom(updateConversationWaitingForResponseAtom) const updateConvWaiting = useSetAtom(updateConversationWaitingForResponseAtom)
const [currentPrompt, setCurrentPrompt] = useAtom(currentPromptAtom) const [currentPrompt, setCurrentPrompt] = useAtom(currentPromptAtom)
const currentMessages = useAtomValue(getCurrentChatMessagesAtom) const currentMessages = useAtomValue(getCurrentChatMessagesAtom)
const { activeModel } = useActiveModel()
let timeout: NodeJS.Timeout | undefined = undefined
function updateConvSummary(newMessage: MessageRequest) { function updateConvSummary(newMessage: MessageRequest) {
if (timeout) { if (
clearTimeout(timeout) currentConvo &&
} newMessage.messages &&
timeout = setTimeout(() => { newMessage.messages.length > 2 &&
const conv = currentConvo (!currentConvo.summary ||
if (
!currentConvo?.summary ||
currentConvo.summary === '' || currentConvo.summary === '' ||
currentConvo.summary.startsWith('Prompt:') currentConvo.summary === activeModel?.name)
) { ) {
const summaryMsg: ChatCompletionMessage = { const summaryMsg: ChatCompletionMessage = {
role: ChatCompletionRole.User, role: ChatCompletionRole.User,
content: content:
'summary this conversation in 5 words, the response should just include the summary', 'summary this conversation in a few words, the response should just include the summary',
}
// Request convo summary
setTimeout(async () => {
const result = await pluginManager
.get<InferencePlugin>(PluginType.Inference)
?.inferenceRequest({
...newMessage,
messages: newMessage.messages?.concat([summaryMsg]),
})
if (
result?.message &&
result.message.split(' ').length <= 10 &&
conv?.id
) {
const updatedConv = {
...conv,
summary: result.message,
}
updateConversation(updatedConv)
pluginManager
.get<ConversationalPlugin>(PluginType.Conversational)
?.saveConversation({
...updatedConv,
messages: currentMessages,
})
}
}, 1000)
} }
}, 100) // Request convo summary
setTimeout(async () => {
const result = await pluginManager
.get<InferencePlugin>(PluginType.Inference)
?.inferenceRequest({
...newMessage,
messages: newMessage.messages?.slice(0, -1).concat([summaryMsg]),
})
if (
currentConvo &&
currentConvo.id === newMessage.threadId &&
result?.message &&
result?.message?.trim().length > 0 &&
result.message.split(' ').length <= 10
) {
const updatedConv = {
...currentConvo,
summary: result.message,
}
updateConversation(updatedConv)
pluginManager
.get<ConversationalPlugin>(PluginType.Conversational)
?.saveConversation({
...updatedConv,
messages: currentMessages,
})
}
}, 1000)
}
} }
const sendChatMessage = async () => { const sendChatMessage = async () => {
@ -124,15 +123,6 @@ export default function useSendChatMessage() {
addNewMessage(threadMessage) addNewMessage(threadMessage)
events.emit(EventName.OnNewMessageRequest, messageRequest) events.emit(EventName.OnNewMessageRequest, messageRequest)
if (!currentConvo?.summary && currentConvo) {
const updatedConv: Thread = {
...currentConvo,
summary: `Prompt: ${prompt}`,
}
updateConversation(updatedConv)
}
updateConvSummary(messageRequest) updateConvSummary(messageRequest)
} }