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 { jsonRes } from '@/service/response';
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 { authUser } from '@/service/utils/auth';
import mongoose from 'mongoose';
@ -65,19 +65,10 @@ export async function saveChat({
})) || []
}));
// 没有 chatId, 创建一个对话
if (!chatId) {
const { _id } = await Chat.create({
_id: newChatId ? new mongoose.Types.ObjectId(newChatId) : undefined,
userId,
modelId,
content,
title: content[0].value.slice(0, 20),
latestChat: content[1].value
});
return _id;
} else {
await Chat.findByIdAndUpdate(chatId, {
const [id] = await Promise.all([
...(chatId // update chat
? [
Chat.findByIdAndUpdate(chatId, {
$push: {
content: {
$each: content
@ -86,6 +77,24 @@ export async function saveChat({
title: content[0].value.slice(0, 20),
latestChat: content[1].value,
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'
).sort({
_id: -1
updateTime: -1
}),
Collection.find({ userId })
.populate({

View File

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