mirror of
https://github.com/rennf93/roboco.git
synced 2026-08-03 07:23:24 +02:00
All 34 feature flags get verified one-line tips; secret inputs state the write-only contract; KB index types get canonical descriptions; switch tips ride Labels so Radix data-state stays intact. Also fixes the scorecard SectionLabel swallowing props, which made tooltips on it silently inert.
71 lines
2.3 KiB
TypeScript
71 lines
2.3 KiB
TypeScript
"use client";
|
|
|
|
import { Card, CardContent } from "@/components/ui/card";
|
|
import { RAGCitation } from "@/types";
|
|
import { KBIndexTypeBadge } from "./kb-index-type-badge";
|
|
import { HelpTip } from "@/components/ui/help-tip";
|
|
import { Quote, Hash } from "lucide-react";
|
|
|
|
interface RAGCitationCardProps {
|
|
citation: RAGCitation;
|
|
index: number;
|
|
}
|
|
|
|
export function RAGCitationCard({ citation, index }: RAGCitationCardProps) {
|
|
// Truncate content
|
|
const snippet =
|
|
citation.content.length > 200
|
|
? citation.content.substring(0, 200) + "..."
|
|
: citation.content;
|
|
|
|
// Format source
|
|
const formatSource = (source: string) => {
|
|
if (source.includes("/")) {
|
|
const parts = source.split("/");
|
|
if (parts.length > 3) {
|
|
return ".../" + parts.slice(-2).join("/");
|
|
}
|
|
}
|
|
return source;
|
|
};
|
|
|
|
const scorePercent = Math.round(citation.score * 100);
|
|
|
|
return (
|
|
<Card className="bg-muted/30">
|
|
<CardContent className="p-3">
|
|
<div className="flex items-start gap-2">
|
|
<div className="flex items-center justify-center w-5 h-5 rounded-full bg-primary/10 text-primary text-xs font-medium shrink-0">
|
|
{index + 1}
|
|
</div>
|
|
<div className="flex-1 min-w-0">
|
|
<div className="flex items-center gap-2 flex-wrap mb-1">
|
|
<KBIndexTypeBadge
|
|
indexType={citation.index_type}
|
|
className="text-xs"
|
|
/>
|
|
<HelpTip label="Similarity score — how closely this chunk matches your query in the embedding search.">
|
|
<span className="text-xs text-muted-foreground flex items-center gap-0.5">
|
|
<Hash className="h-3 w-3" />
|
|
{scorePercent}%
|
|
</span>
|
|
</HelpTip>
|
|
</div>
|
|
<HelpTip label={citation.source}>
|
|
<p className="text-xs text-muted-foreground font-mono truncate mb-1">
|
|
{formatSource(citation.source)}
|
|
</p>
|
|
</HelpTip>
|
|
<div className="flex items-start gap-1">
|
|
<Quote className="h-3 w-3 text-muted-foreground shrink-0 mt-0.5" />
|
|
<p className="text-sm text-foreground/80 line-clamp-3">
|
|
{snippet}
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</CardContent>
|
|
</Card>
|
|
);
|
|
}
|