feat: update model use time

This commit is contained in:
archer 2023-05-29 22:51:09 +08:00
parent 2fce76202a
commit 2fc31a706d
No known key found for this signature in database
GPG Key ID: 569A5660D2379E28
5 changed files with 62 additions and 44 deletions

View File

@ -1,7 +1,7 @@
import type { NextApiRequest, NextApiResponse } from 'next'; import type { NextApiRequest, NextApiResponse } from 'next';
import { jsonRes } from '@/service/response'; import { jsonRes } from '@/service/response';
import { ChatItemType } from '@/types/chat'; import { ChatItemType } from '@/types/chat';
import { connectToDatabase, Chat } from '@/service/mongo'; import { connectToDatabase, Chat, Model } from '@/service/mongo';
import { authModel } from '@/service/utils/auth'; import { authModel } from '@/service/utils/auth';
import { authUser } from '@/service/utils/auth'; import { authUser } from '@/service/utils/auth';
import mongoose from 'mongoose'; import mongoose from 'mongoose';
@ -65,19 +65,10 @@ export async function saveChat({
})) || [] })) || []
})); }));
// 没有 chatId, 创建一个对话 const [id] = await Promise.all([
if (!chatId) { ...(chatId // update chat
const { _id } = await Chat.create({ ? [
_id: newChatId ? new mongoose.Types.ObjectId(newChatId) : undefined, Chat.findByIdAndUpdate(chatId, {
userId,
modelId,
content,
title: content[0].value.slice(0, 20),
latestChat: content[1].value
});
return _id;
} else {
await Chat.findByIdAndUpdate(chatId, {
$push: { $push: {
content: { content: {
$each: content $each: content
@ -86,6 +77,24 @@ export async function saveChat({
title: content[0].value.slice(0, 20), title: content[0].value.slice(0, 20),
latestChat: content[1].value, latestChat: content[1].value,
updateTime: new Date() updateTime: new Date()
}); }).then(() => '')
} ]
: [
Chat.create({
_id: newChatId ? new mongoose.Types.ObjectId(newChatId) : undefined,
userId,
modelId,
content,
title: content[0].value.slice(0, 20),
latestChat: content[1].value
}).then((res) => res._id)
]),
Model.findByIdAndUpdate(modelId, {
updateTime: new Date()
}) // update model
]);
return {
id
};
} }

View File

@ -20,7 +20,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse<
}, },
'_id avatar name chat.systemPrompt' '_id avatar name chat.systemPrompt'
).sort({ ).sort({
_id: -1 updateTime: -1
}), }),
Collection.find({ userId }) Collection.find({ userId })
.populate({ .populate({

View File

@ -105,7 +105,7 @@ const Chat = ({ modelId, chatId }: { modelId: string; chatId: string }) => {
const { copyData } = useCopyData(); const { copyData } = useCopyData();
const { isPc } = useGlobalStore(); const { isPc } = useGlobalStore();
const { Loading, setIsLoading } = useLoading(); const { Loading, setIsLoading } = useLoading();
const { userInfo } = useUserStore(); const { userInfo, loadMyModels } = useUserStore();
const { isOpen: isOpenSlider, onClose: onCloseSlider, onOpen: onOpenSlider } = useDisclosure(); const { isOpen: isOpenSlider, onClose: onCloseSlider, onOpen: onOpenSlider } = useDisclosure();
// close contextMenu // close contextMenu
@ -228,13 +228,21 @@ const Chat = ({ modelId, chatId }: { modelId: string; chatId: string }) => {
}) })
})); }));
// refresh history // refresh data
setTimeout(() => {
loadHistory({ pageNum: 1, init: true }); loadHistory({ pageNum: 1, init: true });
loadMyModels(true);
generatingMessage(); generatingMessage();
}, 100);
}, },
[chatId, setForbidLoadChatData, generatingMessage, loadHistory, modelId, router, setChatData] [
chatId,
modelId,
setChatData,
loadHistory,
loadMyModels,
generatingMessage,
setForbidLoadChatData,
router
]
); );
/** /**
@ -458,14 +466,14 @@ const Chat = ({ modelId, chatId }: { modelId: string; chatId: string }) => {
async ({ async ({
modelId, modelId,
chatId, chatId,
isLoading = false loading = false
}: { }: {
modelId: string; modelId: string;
chatId: string; chatId: string;
isLoading?: boolean; loading?: boolean;
}) => { }) => {
isLoading && setIsLoading(true);
try { try {
loading && setIsLoading(true);
const res = await getInitChatSiteInfo(modelId, chatId); const res = await getInitChatSiteInfo(modelId, chatId);
setChatData({ setChatData({
@ -500,18 +508,18 @@ const Chat = ({ modelId, chatId }: { modelId: string; chatId: string }) => {
return null; return null;
}, },
[ [
router,
loadHistory,
setForbidLoadChatData,
scrollToBottom,
setChatData,
setIsLoading, setIsLoading,
setChatData,
scrollToBottom,
setForbidLoadChatData,
router,
setLastChatModelId,
setLastChatId, setLastChatId,
setLastChatModelId loadHistory
] ]
); );
// 初始化聊天框 // 初始化聊天框
const { isLoading } = useQuery(['init', modelId, chatId], () => { useQuery(['init', modelId, chatId], () => {
// pc: redirect to latest model chat // pc: redirect to latest model chat
if (!modelId && lastChatModelId) { if (!modelId && lastChatModelId) {
router.replace(`/chat?modelId=${lastChatModelId}&chatId=${lastChatId}`); router.replace(`/chat?modelId=${lastChatModelId}&chatId=${lastChatId}`);
@ -529,7 +537,8 @@ const Chat = ({ modelId, chatId }: { modelId: string; chatId: string }) => {
return loadChatInfo({ return loadChatInfo({
modelId, modelId,
chatId chatId,
loading: true
}); });
}); });
@ -874,7 +883,7 @@ const Chat = ({ modelId, chatId }: { modelId: string; chatId: string }) => {
</Box> </Box>
)} )}
<Loading loading={isLoading} fixed={false} /> <Loading fixed={false} />
</Flex> </Flex>
)} )}