Update ChatWindow.tsx

This commit is contained in:
Lucas 2025-01-17 09:09:37 +01:00 committed by GitHub
parent 1b44361b6a
commit 24948f8e9b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -8,7 +8,7 @@ import EmptyChat from './EmptyChat';
import crypto from 'crypto'; import crypto from 'crypto';
import { toast } from 'sonner'; import { toast } from 'sonner';
import { useSearchParams } from 'next/navigation'; import { useSearchParams } from 'next/navigation';
import { getSuggestions } from '@/lib/actions'; import { getSuggestions, Expert } from '@/lib/actions';
import Error from 'next/error'; import Error from 'next/error';
export type Message = { export type Message = {
@ -18,6 +18,7 @@ export type Message = {
content: string; content: string;
role: 'user' | 'assistant'; role: 'user' | 'assistant';
suggestions?: string[]; suggestions?: string[];
suggestedExperts?: Expert[];
sources?: Document[]; sources?: Document[];
}; };
@ -277,7 +278,7 @@ const loadMessages = async (
setIsMessagesLoaded(true); setIsMessagesLoaded(true);
}; };
const ChatWindow = ({ id }: { id?: string }) => { const ChatWindow = ({ id, defaultFocusMode }: { id?: string; defaultFocusMode?: string }) => {
const searchParams = useSearchParams(); const searchParams = useSearchParams();
const initialMessage = searchParams.get('q'); const initialMessage = searchParams.get('q');
@ -303,7 +304,7 @@ const ChatWindow = ({ id }: { id?: string }) => {
const [files, setFiles] = useState<File[]>([]); const [files, setFiles] = useState<File[]>([]);
const [fileIds, setFileIds] = useState<string[]>([]); const [fileIds, setFileIds] = useState<string[]>([]);
const [focusMode, setFocusMode] = useState('webSearch'); const [focusMode, setFocusMode] = useState(defaultFocusMode || 'default');
const [optimizationMode, setOptimizationMode] = useState('speed'); const [optimizationMode, setOptimizationMode] = useState('speed');
const [isMessagesLoaded, setIsMessagesLoaded] = useState(false); const [isMessagesLoaded, setIsMessagesLoaded] = useState(false);
@ -405,8 +406,7 @@ const ChatWindow = ({ id }: { id?: string }) => {
return; return;
} }
if (data.type === 'sources') { if (data.type === 'images') {
sources = data.data;
if (!added) { if (!added) {
setMessages((prevMessages) => [ setMessages((prevMessages) => [
...prevMessages, ...prevMessages,
@ -415,7 +415,13 @@ const ChatWindow = ({ id }: { id?: string }) => {
messageId: data.messageId, messageId: data.messageId,
chatId: chatId!, chatId: chatId!,
role: 'assistant', role: 'assistant',
sources: sources, sources: [{
pageContent: '',
metadata: {
illustrationImage: data.data[0]?.src,
title: data.data[0]?.title
}
}],
createdAt: new Date(), createdAt: new Date(),
}, },
]); ]);
@ -424,6 +430,33 @@ const ChatWindow = ({ id }: { id?: string }) => {
setMessageAppeared(true); setMessageAppeared(true);
} }
if (data.type === 'sources') {
if (!added) {
setMessages((prevMessages) => [
...prevMessages,
{
content: '',
messageId: data.messageId,
chatId: chatId!,
role: 'assistant',
sources: data.data,
createdAt: new Date(),
},
]);
added = true;
} else {
setMessages((prev) =>
prev.map((message) => {
if (message.messageId === data.messageId) {
return { ...message, sources: data.data };
}
return message;
}),
);
}
setMessageAppeared(true);
}
if (data.type === 'message') { if (data.type === 'message') {
if (!added) { if (!added) {
setMessages((prevMessages) => [ setMessages((prevMessages) => [
@ -472,11 +505,15 @@ const ChatWindow = ({ id }: { id?: string }) => {
lastMsg.sources.length > 0 && lastMsg.sources.length > 0 &&
!lastMsg.suggestions !lastMsg.suggestions
) { ) {
const suggestions = await getSuggestions(messagesRef.current); const { suggestions, suggestedExperts } = await getSuggestions(messagesRef.current);
setMessages((prev) => setMessages((prev) =>
prev.map((msg) => { prev.map((msg) => {
if (msg.messageId === lastMsg.messageId) { if (msg.messageId === lastMsg.messageId) {
return { ...msg, suggestions: suggestions }; return {
...msg,
suggestions: suggestions,
suggestedExperts: suggestedExperts
};
} }
return msg; return msg;
}), }),