From 30997c20d707a0b70c91c97de5758e0d346d66dd Mon Sep 17 00:00:00 2001
From: Josh Hawkins <32435876+hawkeye217@users.noreply.github.com>
Date: Wed, 8 Apr 2026 15:29:18 -0500
Subject: [PATCH] Render anchor badge and similarity scores in chat results
---
.../chat/ChatEventThumbnailsRow.tsx | 79 +++++++++++++------
web/src/pages/Chat.tsx | 12 +++
2 files changed, 67 insertions(+), 24 deletions(-)
diff --git a/web/src/components/chat/ChatEventThumbnailsRow.tsx b/web/src/components/chat/ChatEventThumbnailsRow.tsx
index bf2c5e88f..da26f8dd6 100644
--- a/web/src/components/chat/ChatEventThumbnailsRow.tsx
+++ b/web/src/components/chat/ChatEventThumbnailsRow.tsx
@@ -1,42 +1,73 @@
import { useApiHost } from "@/api";
+import { useTranslation } from "react-i18next";
+import { cn } from "@/lib/utils";
+
+type ChatEvent = { id: string; score?: number };
type ChatEventThumbnailsRowProps = {
- events: { id: string }[];
+ events: ChatEvent[];
+ anchor?: { id: string } | null;
};
/**
- * Horizontal scroll row of event thumbnail images for chat (e.g. after search_objects).
- * Renders nothing when events is empty.
+ * Horizontal scroll row of event thumbnail images for chat.
+ * Optionally renders an anchor thumbnail with a "reference" badge above the
+ * results, and per-event similarity scores when provided.
+ * Renders nothing when there is nothing to show.
*/
export function ChatEventThumbnailsRow({
events,
+ anchor = null,
}: ChatEventThumbnailsRowProps) {
const apiHost = useApiHost();
+ const { t } = useTranslation(["views/chat"]);
- if (events.length === 0) return null;
+ if (events.length === 0 && !anchor) return null;
+
+ const renderThumb = (event: ChatEvent, isAnchor = false) => (
+
+
+ {typeof event.score === "number" && !isAnchor && (
+
+ {Math.round(event.score * 100)}%
+
+ )}
+ {isAnchor && (
+
+ {t("anchor")}
+
+ )}
+
+ );
return (
-