import { Citation, PathEvidence, VisualGrounding } from "@/lib/api"; import { coverageTier, displaySource } from "@/lib/format"; const TIER_META = { strong: { label: "Strong evidence", cls: "evidence-strong", bar: "bg-ok", dot: "bg-ok", pill: "pill-ok" }, weak: { label: "Weak evidence", cls: "evidence-weak", bar: "bg-warn", dot: "bg-warn", pill: "pill-warn" }, none: { label: "Insufficient evidence", cls: "evidence-none", bar: "bg-bad", dot: "bg-bad", pill: "pill-bad" }, } as const; function CoverageHeader({ coverage }: { coverage: number }) { const pct = Math.round(Math.max(0, Math.min(1, coverage)) * 100); const tier = coverageTier(coverage); const m = TIER_META[tier]; return (
Share of the question's key terms supported by retrieved evidence.
{loc}
} {hasScore && ({whySelected(c)}
{c.source}
Ask a question to see the evidence trail.
Vector hits, PathRAG graph paths, and the exact citations an answer was grounded on appear here โ with a coverage score and per-source reasoning.
No citations attached to the answer.
)}No graph paths โ this was answered by vector retrieval alone.
)}Passages are ranked by hybrid (dense + sparse) retrieval, expanded along reliable graph relations, reranked, then only the cited sources are kept.