diff --git a/web/src/components/overlay/detail/ReviewDetailDialog.tsx b/web/src/components/overlay/detail/ReviewDetailDialog.tsx index 2a5345ea2..688f2b9dc 100644 --- a/web/src/components/overlay/detail/ReviewDetailDialog.tsx +++ b/web/src/components/overlay/detail/ReviewDetailDialog.tsx @@ -11,7 +11,11 @@ import { FrigateConfig } from "@/types/frigateConfig"; import { useFormattedTimestamp } from "@/hooks/use-date-utils"; import { getIconForLabel } from "@/utils/iconUtil"; import { useApiHost } from "@/api"; -import { ReviewDetailPaneType, ReviewSegment } from "@/types/review"; +import { + ReviewDetailPaneType, + ReviewSegment, + ThreatLevel, +} from "@/types/review"; import { Event } from "@/types/event"; import { useCallback, useEffect, useMemo, useRef, useState } from "react"; import { cn } from "@/lib/utils"; @@ -71,6 +75,23 @@ export default function ReviewDetailDialog({ const aiAnalysis = useMemo(() => review?.data?.metadata, [review]); + const aiThreatLevel = useMemo(() => { + if (!aiAnalysis?.potential_threat_level) { + return "None"; + } + + switch (aiAnalysis.potential_threat_level) { + case ThreatLevel.UNUSUAL: + return "Unusual Activity"; + case ThreatLevel.SUSPICIOUS: + return "Suspicious Activity"; + case ThreatLevel.DANGER: + return "Danger"; + } + + return "Unknown"; + }, [aiAnalysis]); + const hasMismatch = useMemo(() => { if (!review || !events) { return false; @@ -235,12 +256,19 @@ export default function ReviewDetailDialog({ {pane == "overview" && (
{aiAnalysis != undefined && ( -
+
AI Analysis
Description
-
- {aiAnalysis.scene} -
+
{aiAnalysis.scene}
+
Score
+
{aiAnalysis.confidence * 100}%
+
Threat Level
+
{aiThreatLevel}
)}
diff --git a/web/src/types/review.ts b/web/src/types/review.ts index efb46f777..6f08571fd 100644 --- a/web/src/types/review.ts +++ b/web/src/types/review.ts @@ -20,6 +20,8 @@ export type ReviewData = { zones: string[]; metadata?: { scene: string; + confidence: number; + potential_threat_level?: number; }; }; @@ -76,3 +78,9 @@ export type ConsolidatedSegmentData = { }; export type TimelineZoomDirection = "in" | "out" | null; + +export enum ThreatLevel { + UNUSUAL = 1, + SUSPICIOUS = 2, + DANGER = 3, +}