diff --git a/llama_stack/ui/app/logs/vector-stores/layout.tsx b/llama_stack/ui/app/logs/vector-stores/layout.tsx index 9245f5486..921d505be 100644 --- a/llama_stack/ui/app/logs/vector-stores/layout.tsx +++ b/llama_stack/ui/app/logs/vector-stores/layout.tsx @@ -1,16 +1,31 @@ "use client"; -import React from "react"; -import LogsLayout from "@/components/layout/logs-layout"; +import { useParams, usePathname } from "next/navigation"; +import { + PageBreadcrumb, + BreadcrumbSegment, +} from "@/components/layout/page-breadcrumb"; -export default function VectorStoresLayout({ +export default function VectorStoreDetailLayout({ children, }: { children: React.ReactNode; }) { + const params = useParams(); + const pathname = usePathname(); + const vectorStoreId = params.id as string; + + const breadcrumbSegments: BreadcrumbSegment[] = [ + { label: "Vector Stores", href: "/logs/vector-stores" }, + { label: `Details (${vectorStoreId})` }, + ]; + + const isBaseDetailPage = pathname === `/logs/vector-stores/${vectorStoreId}`; + return ( - +
+ {isBaseDetailPage && } {children} - +
); } diff --git a/llama_stack/ui/app/logs/vector-stores/page.tsx b/llama_stack/ui/app/logs/vector-stores/page.tsx index 29e1fabd6..664513caa 100644 --- a/llama_stack/ui/app/logs/vector-stores/page.tsx +++ b/llama_stack/ui/app/logs/vector-stores/page.tsx @@ -8,6 +8,7 @@ import type { } from "llama-stack-client/resources/vector-stores/vector-stores"; import { useRouter } from "next/navigation"; import { usePagination } from "@/hooks/use-pagination"; +import { Button } from "@/components/ui/button"; import { Table, TableBody, @@ -49,73 +50,92 @@ export default function VectorStoresPage() { } }, [status, hasMore, loadMore]); - if (status === "loading") { + const renderContent = () => { + if (status === "loading") { + return ( +
+ + + +
+ ); + } + + if (status === "error") { + return
Error: {error?.message}
; + } + + if (!stores || stores.length === 0) { + return

No vector stores found.

; + } + return ( -
- - - -
+
+ + + + ID + Name + Created + Completed + Cancelled + Failed + In Progress + Total + Usage Bytes + Provider ID + Provider Vector DB ID + + + + {stores.map((store) => { + const fileCounts = store.file_counts; + const metadata = store.metadata || {}; + const providerId = metadata.provider_id ?? ""; + const providerDbId = metadata.provider_vector_db_id ?? ""; + + return ( + router.push(`/logs/vector-stores/${store.id}`)} + className="cursor-pointer hover:bg-muted/50" + > + + + + {store.name} + + {new Date(store.created_at * 1000).toLocaleString()} + + {fileCounts.completed} + {fileCounts.cancelled} + {fileCounts.failed} + {fileCounts.in_progress} + {fileCounts.total} + {store.usage_bytes} + {providerId} + {providerDbId} + + ); + })} + +
+
); - } - - if (status === "error") { - return
Error: {error?.message}
; - } - - if (!stores || stores.length === 0) { - return

No vector stores found.

; - } + }; return ( -
- - - - ID - Name - Created - Completed - Cancelled - Failed - In Progress - Total - Usage Bytes - Provider ID - Provider Vector DB ID - - - - {stores.map((store) => { - const fileCounts = store.file_counts; - const metadata = store.metadata || {}; - const providerId = metadata.provider_id ?? ""; - const providerDbId = metadata.provider_vector_db_id ?? ""; - - return ( - router.push(`/logs/vector-stores/${store.id}`)} - className="cursor-pointer hover:bg-muted/50" - > - {store.id} - {store.name} - - {new Date(store.created_at * 1000).toLocaleString()} - - {fileCounts.completed} - {fileCounts.cancelled} - {fileCounts.failed} - {fileCounts.in_progress} - {fileCounts.total} - {store.usage_bytes} - {providerId} - {providerDbId} - - ); - })} - -
-
+
+

Vector Stores

+ {renderContent()} +
); }