From f5c7227a970535261af75bcc6159a39495556d08 Mon Sep 17 00:00:00 2001 From: mo Date: Sun, 28 Jun 2026 11:36:21 +0000 Subject: [PATCH] feat(knowledge-chat): animated "How it works" RAG architecture panel Add a collapsible, pulsing architecture diagram to the Knowledge Chat that visualizes the real RAG pipeline in two rows: Index (Upload -> Docling -> Split -> Embed/MiniLM -> ChromaDB) and Query (Question -> Embed -> Retrieve -> Context -> LLM -> Answer), badged with the actual stack (LangChain, ChromaDB, Docling, sentence-transformers). Connectors have a flowing dashed track plus a traveling glow dot and nodes pulse; the whole flow speeds up while the chat/ingest is busy. Honors prefers-reduced-motion. --- .../components/features/KnowledgeChatView.tsx | 100 +++++++++++++++++- ui/src/styles/globals.css | 18 ++++ 2 files changed, 116 insertions(+), 2 deletions(-) diff --git a/ui/src/components/features/KnowledgeChatView.tsx b/ui/src/components/features/KnowledgeChatView.tsx index af3ae7a..af88737 100644 --- a/ui/src/components/features/KnowledgeChatView.tsx +++ b/ui/src/components/features/KnowledgeChatView.tsx @@ -1,5 +1,5 @@ -import { useCallback, useEffect, useRef, useState } from 'react' -import { Bot, BookOpen, Database, FileText, Loader2, MessageSquare, RefreshCw, RotateCcw, Send, Upload, Wrench } from 'lucide-react' +import { Fragment, useCallback, useEffect, useRef, useState } from 'react' +import { Binary, Bot, BookOpen, ChevronDown, Cpu, Database, FileText, Layers, Loader2, MessageSquare, RefreshCw, RotateCcw, ScanText, Scissors, Search, Send, Sparkles, Upload, Workflow, Wrench } from 'lucide-react' import { cn } from '../../lib/utils' import { subTabActive, subTabIdle } from '../../lib/tabActive' @@ -38,6 +38,7 @@ export function KnowledgeChatView({ onGpuActivity }: Props = {}) { const [agentMode, setAgentMode] = useState(false) const [syncing, setSyncing] = useState(false) const [catalogDocs, setCatalogDocs] = useState(null) + const [showArch, setShowArch] = useState(true) const bottomRef = useRef(null) const loadMeta = useCallback(async () => { @@ -281,6 +282,7 @@ export function KnowledgeChatView({ onGpuActivity }: Props = {}) { } const doclingUiUrl = `${window.location.protocol}//${window.location.hostname}:5001/ui/` + const busy = loading || ingesting || summarizing || reindexing !== null return (
@@ -300,6 +302,15 @@ export function KnowledgeChatView({ onGpuActivity }: Props = {}) { )} + @@ -307,6 +318,12 @@ export function KnowledgeChatView({ onGpuActivity }: Props = {}) {
+ {showArch && ( +
+ +
+ )} +