"use client" /** * Knowledge Base Selector - WeKnora Integration * * Allows users to select which knowledge bases to query */ import { useState } from "react" import { Button } from "@/components/ui/button" import { Badge } from "@/components/ui/badge" import { Popover, PopoverContent, PopoverTrigger, } from "@/components/ui/popover" import { Checkbox } from "@/components/ui/checkbox" import { Label } from "@/components/ui/label" import { Database, Scale, Newspaper, FileText, ChevronDown, Check } from "lucide-react" import { cn } from "@/lib/utils" interface KnowledgeBase { id: string name: string description: string icon: React.ReactNode docCount?: number color: string } // Real namespaces from vector store const KNOWLEDGE_BASES: KnowledgeBase[] = [ { id: "kenya_law", name: "Kenya Law", description: "Constitution, Acts, Bills, Case Law", icon: , color: "bg-blue-500" }, { id: "kenya_news", name: "Kenya News", description: "Current affairs and news articles", icon: , color: "bg-green-500" }, { id: "parliament", name: "Parliament", description: "Bills, Hansard, Committee Reports", icon: , color: "bg-purple-500" }, { id: "general", name: "General", description: "General knowledge base", icon: , color: "bg-orange-500" } ] interface KnowledgeBaseSelectorProps { selected: string[] onChange: (selected: string[]) => void className?: string } export function KnowledgeBaseSelector({ selected, onChange, className }: KnowledgeBaseSelectorProps) { const [open, setOpen] = useState(false) const toggleKnowledgeBase = (id: string) => { if (selected.includes(id)) { onChange(selected.filter(s => s !== id)) } else { onChange([...selected, id]) } } const selectAll = () => { onChange(KNOWLEDGE_BASES.map(kb => kb.id)) } const clearAll = () => { onChange([]) } const selectedKBs = KNOWLEDGE_BASES.filter(kb => selected.includes(kb.id)) return ( {selected.length === 0 ? "Select sources" : selected.length === KNOWLEDGE_BASES.length ? "All sources" : `${selected.length} sources`} Knowledge Bases All Clear {KNOWLEDGE_BASES.map((kb) => { const isSelected = selected.includes(kb.id) return ( toggleKnowledgeBase(kb.id)} > toggleKnowledgeBase(kb.id)} /> {kb.icon} {kb.name} {kb.docCount && ( {(kb.docCount / 1000).toFixed(0)}k docs )} {kb.description} {isSelected && } ) })} {selectedKBs.length > 0 && ( {selectedKBs.map(kb => ( toggleKnowledgeBase(kb.id)} > {kb.name} × ))} )} ) } export default KnowledgeBaseSelector
{kb.description}