From 6266e5c18d7b1de35835c670600557e917e26d16 Mon Sep 17 00:00:00 2001 From: phact Date: Fri, 10 Oct 2025 14:16:58 -0400 Subject: [PATCH] persist dimensions --- .../src/app/api/queries/useGetSearchQuery.ts | 19 ++++++++++++++ .../src/app/api/queries/useGetTasksQuery.ts | 2 ++ frontend/src/app/globals.css | 2 +- frontend/src/app/knowledge/page.tsx | 26 ++++++++++++++++++- frontend/src/components/layout-wrapper.tsx | 2 +- frontend/src/contexts/task-context.tsx | 12 +++++++++ src/models/processors.py | 3 ++- src/services/search_service.py | 2 ++ src/utils/embedding_fields.py | 5 +++- src/utils/embeddings.py | 3 ++- 10 files changed, 70 insertions(+), 6 deletions(-) diff --git a/frontend/src/app/api/queries/useGetSearchQuery.ts b/frontend/src/app/api/queries/useGetSearchQuery.ts index 3db14cb2..f686cd32 100644 --- a/frontend/src/app/api/queries/useGetSearchQuery.ts +++ b/frontend/src/app/api/queries/useGetSearchQuery.ts @@ -29,6 +29,8 @@ export interface ChunkResult { owner_email?: string; file_size?: number; connector_type?: string; + embedding_model?: string; + embedding_dimensions?: number; index?: number; } @@ -43,6 +45,8 @@ export interface File { owner_email?: string; size: number; connector_type: string; + embedding_model?: string; + embedding_dimensions?: number; status?: | "processing" | "active" @@ -134,6 +138,8 @@ export const useGetSearchQuery = ( owner_email?: string; file_size?: number; connector_type?: string; + embedding_model?: string; + embedding_dimensions?: number; } >(); @@ -142,6 +148,15 @@ export const useGetSearchQuery = ( if (existing) { existing.chunks.push(chunk); existing.totalScore += chunk.score; + if (!existing.embedding_model && chunk.embedding_model) { + existing.embedding_model = chunk.embedding_model; + } + if ( + existing.embedding_dimensions == null && + typeof chunk.embedding_dimensions === "number" + ) { + existing.embedding_dimensions = chunk.embedding_dimensions; + } } else { fileMap.set(chunk.filename, { filename: chunk.filename, @@ -154,6 +169,8 @@ export const useGetSearchQuery = ( owner_email: chunk.owner_email, file_size: chunk.file_size, connector_type: chunk.connector_type, + embedding_model: chunk.embedding_model, + embedding_dimensions: chunk.embedding_dimensions, }); } }); @@ -169,6 +186,8 @@ export const useGetSearchQuery = ( owner_email: file.owner_email || "", size: file.file_size || 0, connector_type: file.connector_type || "local", + embedding_model: file.embedding_model, + embedding_dimensions: file.embedding_dimensions, chunks: file.chunks, })); diff --git a/frontend/src/app/api/queries/useGetTasksQuery.ts b/frontend/src/app/api/queries/useGetTasksQuery.ts index f7420dd7..b8cdba01 100644 --- a/frontend/src/app/api/queries/useGetTasksQuery.ts +++ b/frontend/src/app/api/queries/useGetTasksQuery.ts @@ -19,6 +19,8 @@ export interface TaskFileEntry { updated_at?: string; duration_seconds?: number; filename?: string; + embedding_model?: string; + embedding_dimensions?: number; [key: string]: unknown; } diff --git a/frontend/src/app/globals.css b/frontend/src/app/globals.css index 5b786b7b..d8460fd6 100644 --- a/frontend/src/app/globals.css +++ b/frontend/src/app/globals.css @@ -168,7 +168,7 @@ } .header-notifications { - @apply absolute right-[0px] top-[-4px] h-1 w-1 rounded-full bg-destructive; + @apply absolute right-1 top-1 h-2 w-2 rounded-full bg-destructive; } .header-menu-bar { diff --git a/frontend/src/app/knowledge/page.tsx b/frontend/src/app/knowledge/page.tsx index 385fa9be..9cd28433 100644 --- a/frontend/src/app/knowledge/page.tsx +++ b/frontend/src/app/knowledge/page.tsx @@ -86,6 +86,8 @@ function SearchPage() { connector_type: taskFile.connector_type, status: taskFile.status, error: taskFile.error, + embedding_model: taskFile.embedding_model, + embedding_dimensions: taskFile.embedding_dimensions, }; }); @@ -124,7 +126,7 @@ function SearchPage() { const gridRef = useRef(null); - const columnDefs = [ + const columnDefs: ColDef[] = [ { field: "filename", headerName: "Source", @@ -200,6 +202,28 @@ function SearchPage() { ); }, }, + { + field: "embedding_model", + headerName: "Embedding model", + minWidth: 200, + cellRenderer: ({ data }: CustomCellRendererProps) => ( + + {data?.embedding_model || "—"} + + ), + }, + { + field: "embedding_dimensions", + headerName: "Dimensions", + width: 110, + cellRenderer: ({ data }: CustomCellRendererProps) => ( + + {typeof data?.embedding_dimensions === "number" + ? data.embedding_dimensions.toString() + : "—"} + + ), + }, { field: "status", headerName: "Status", diff --git a/frontend/src/components/layout-wrapper.tsx b/frontend/src/components/layout-wrapper.tsx index fda7c181..d6061384 100644 --- a/frontend/src/components/layout-wrapper.tsx +++ b/frontend/src/components/layout-wrapper.tsx @@ -129,7 +129,7 @@ export function LayoutWrapper({ children }: { children: React.ReactNode }) { {/* Task Notification Bell */}