Remove corpus counts from chat chrome

This commit is contained in:
2026-08-10 17:26:58 +07:00
parent 46469468bb
commit 97cb6d16f4
31 changed files with 2192 additions and 424 deletions
+47 -23
View File
@@ -1,30 +1,29 @@
"use client";
import { useState } from "react";
import type { Citation } from "@duoc-thu/shared-types";
import { useEffect, useState } from "react";
import type { ChatMessage, Citation } from "@duoc-thu/shared-types";
import { ChatPanel } from "./_components/ChatPanel";
import { Sidebar, ChatSession } from "./_components/Sidebar";
import { EvidencePanel } from "./_components/EvidencePanel";
import { MessageSquare, FileSearch, Menu, X, Layers } from "lucide-react";
import { cn } from "@duoc-thu/ui";
const INITIAL_SESSIONS: ChatSession[] = [
{
id: "session-1",
title: "Tra cứu liều dùng Paracetamol",
updatedAt: new Date().toISOString(),
},
{
id: "session-2",
title: "Chống chỉ định Amoxicillin",
updatedAt: new Date().toISOString(),
},
];
function createSessionId() {
return `session-${crypto.randomUUID()}`;
}
export default function ChatPage() {
const [sessions, setSessions] = useState<ChatSession[]>(INITIAL_SESSIONS);
const [currentSessionId, setCurrentSessionId] = useState<string>("session-1");
const [queryOverride, setQueryOverride] = useState<string | undefined>();
const [sessions, setSessions] = useState<ChatSession[]>([]);
const [currentSessionId, setCurrentSessionId] = useState<string>("");
const [messagesBySession, setMessagesBySession] = useState<Record<string, ChatMessage[]>>({});
const [queryOverride, setQueryOverride] = useState<{ text: string; token: number } | null>(null);
useEffect(() => {
const id = createSessionId();
setSessions([{ id, title: "Phiên tra cứu mới", updatedAt: new Date().toISOString() }]);
setMessagesBySession({ [id]: [] });
setCurrentSessionId(id);
}, []);
// Citation & Evidence Panel State
const [citations, setCitations] = useState<Citation[]>([]);
@@ -36,15 +35,16 @@ export default function ChatPage() {
const [showEvidenceDesktop, setShowEvidenceDesktop] = useState(true);
const handleNewChat = () => {
const newId = `session-${Date.now()}`;
const newId = createSessionId();
const newSession: ChatSession = {
id: newId,
title: "Phiên tra cứu mới",
updatedAt: new Date().toISOString(),
};
setSessions((prev) => [newSession, ...prev]);
setMessagesBySession((prev) => ({ ...prev, [newId]: [] }));
setCurrentSessionId(newId);
setQueryOverride(undefined);
setQueryOverride(null);
setCitations([]);
setActiveCitationIndex(null);
setShowMobileSidebar(false);
@@ -52,12 +52,19 @@ export default function ChatPage() {
const handleSelectSession = (id: string) => {
setCurrentSessionId(id);
setQueryOverride(undefined);
setQueryOverride(null);
setCitations([]);
setActiveCitationIndex(null);
setShowMobileSidebar(false);
};
const handleDeleteSession = (id: string) => {
setSessions((prev) => prev.filter((s) => s.id !== id));
setMessagesBySession((prev) => {
const next = { ...prev };
delete next[id];
return next;
});
if (currentSessionId === id) {
const remaining = sessions.filter((s) => s.id !== id);
if (remaining.length > 0) {
@@ -69,10 +76,24 @@ export default function ChatPage() {
};
const handleQuickQuery = (query: string) => {
setQueryOverride(query);
setQueryOverride({ text: query, token: Date.now() });
setShowMobileSidebar(false);
};
const currentMessages = messagesBySession[currentSessionId] ?? [];
const setCurrentMessages: React.Dispatch<React.SetStateAction<ChatMessage[]>> = (update) => {
const sessionId = currentSessionId;
setMessagesBySession((prev) => {
const existing = prev[sessionId] ?? [];
const next = typeof update === "function" ? update(existing) : update;
return { ...prev, [sessionId]: next };
});
};
if (!currentSessionId) {
return <div className="flex flex-1 items-center justify-center text-sm text-txt-muted">Đang tạo phiên tra cứu an toàn...</div>;
}
const handleCitationClick = (citation: Citation, index: number, allCitations: Citation[]) => {
// Found live 2026-08-07: this used to only set the index into whatever
// `citations` array was last loaded (i.e. the MOST RECENT answer's), so
@@ -157,9 +178,12 @@ export default function ChatPage() {
{/* Desktop Region 2: Primary Answer Workspace */}
<main className="flex-1 flex justify-center overflow-hidden relative">
<ChatPanel
key={`${currentSessionId}-${queryOverride}`}
key={currentSessionId}
sessionId={currentSessionId}
initialQuery={queryOverride}
messages={currentMessages}
onMessagesChange={setCurrentMessages}
initialQuery={queryOverride?.text}
initialQueryToken={queryOverride?.token}
onCitationClick={handleCitationClick}
onCitationsLoaded={handleCitationsLoaded}
activeCitationIndex={activeCitationIndex}