Use userSessionId for chat history

This commit is contained in:
sjiampojamarn 2024-07-13 01:30:28 -07:00
parent 27e6f5b9e1
commit 1eee511aac
5 changed files with 30 additions and 4 deletions

View file

@ -16,4 +16,5 @@ export const chats = sqliteTable('chats', {
title: text('title').notNull(),
createdAt: text('createdAt').notNull(),
focusMode: text('focusMode').notNull(),
userSessionId: text('userSessionId'),
});

View file

@ -6,13 +6,20 @@ import { chats, messages } from '../db/schema';
const router = express.Router();
router.get('/', async (_, res) => {
router.get('/', async (req, res) => {
try {
let chats = await db.query.chats.findMany();
let userSessionId = req.headers['user-session-id'] ? req.headers['user-session-id'].toString() : '';
if (userSessionId == '') {
return res.status(200).json({ chats: {}});
}
chats = chats.reverse();
let chatRecords = await db.query.chats.findMany({
where: eq(chats.userSessionId, userSessionId),
});
return res.status(200).json({ chats: chats });
chatRecords = chatRecords.reverse();
return res.status(200).json({ chats: chatRecords });
} catch (err) {
res.status(500).json({ message: 'An error has occurred.' });
logger.error(`Error in getting chats: ${err.message}`);

View file

@ -18,6 +18,7 @@ type Message = {
messageId: string;
chatId: string;
content: string;
userSessionId: string;
};
type WSMessage = {
@ -154,6 +155,7 @@ export const handleMessage = async (
title: parsedMessage.content,
createdAt: new Date().toString(),
focusMode: parsedWSMessage.focusMode,
userSessionId: parsedMessage.userSessionId,
})
.execute();
}

View file

@ -1,5 +1,6 @@
'use client';
import crypto from 'crypto';
import DeleteChat from '@/components/DeleteChat';
import { formatTimeDifference } from '@/lib/utils';
import { BookOpenText, ClockIcon, Delete, ScanEye } from 'lucide-react';
@ -21,10 +22,17 @@ const Page = () => {
const fetchChats = async () => {
setLoading(true);
let userSessionId = localStorage.getItem('userSessionId');
if (!userSessionId) {
userSessionId = crypto.randomBytes(20).toString('hex');
localStorage.setItem('userSessionId', userSessionId)
}
const res = await fetch(`${process.env.NEXT_PUBLIC_API_URL}/chats`, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'user-session-id': userSessionId!,
},
});

View file

@ -38,6 +38,12 @@ const useSocket = (
'embeddingModelProvider',
);
let userSessionId = localStorage.getItem('userSessionId');
if (!userSessionId) {
userSessionId = crypto.randomBytes(20).toString('hex');
localStorage.setItem('userSessionId', userSessionId!)
}
if (
!chatModel ||
!chatModelProvider ||
@ -324,6 +330,7 @@ const ChatWindow = ({ id }: { id?: string }) => {
let added = false;
const messageId = crypto.randomBytes(7).toString('hex');
let userSessionId = localStorage.getItem('userSessionId');
ws?.send(
JSON.stringify({
@ -331,6 +338,7 @@ const ChatWindow = ({ id }: { id?: string }) => {
message: {
chatId: chatId!,
content: message,
userSessionId: userSessionId,
},
focusMode: focusMode,
history: [...chatHistory, ['human', message]],