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

@ -62,7 +62,7 @@ export const createShareChat = (
) => POST<string>(`/chat/shareChat/create`, data);
/**
* get shareChat
* get shareChat
*/
export const getShareChatList = (modelId: string) =>
GET<ShareChatSchema[]>(`/chat/shareChat/list?modelId=${modelId}`);

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,27 +65,36 @@ 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, {
$push: {
content: {
$each: content
}
},
title: content[0].value.slice(0, 20),
latestChat: content[1].value,
const [id] = await Promise.all([
...(chatId // update chat
? [
Chat.findByIdAndUpdate(chatId, {
$push: {
content: {
$each: content
}
},
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(() => {
loadHistory({ pageNum: 1, init: true });
generatingMessage();
}, 100);
// refresh data
loadHistory({ pageNum: 1, init: true });
loadMyModels(true);
generatingMessage();
},
[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>
)}