diff --git a/surfsense_web/components/assistant-ui/markdown-text.tsx b/surfsense_web/components/assistant-ui/markdown-text.tsx index d5e7eeab4..880832f1d 100644 --- a/surfsense_web/components/assistant-ui/markdown-text.tsx +++ b/surfsense_web/components/assistant-ui/markdown-text.tsx @@ -16,8 +16,8 @@ import { TooltipIconButton } from "@/components/assistant-ui/tooltip-icon-button import { cn } from "@/lib/utils"; // Citation pattern: [citation:CHUNK_ID] or [citation:doc-CHUNK_ID] -// Also matches Chinese brackets 【】 as LLM sometimes uses them -const CITATION_REGEX = /[\[【]citation:(doc-)?(\d+)[\]】]/g; +// Also matches Chinese brackets 【】 and handles zero-width spaces that LLM sometimes inserts +const CITATION_REGEX = /[\[【]\u200B?citation:(doc-)?(\d+)\u200B?[\]】]/g; // Track chunk IDs to citation numbers mapping for consistent numbering // This map is reset when a new message starts rendering diff --git a/surfsense_web/components/new-chat/document-mention-picker.tsx b/surfsense_web/components/new-chat/document-mention-picker.tsx index 90515d52d..8b84f3218 100644 --- a/surfsense_web/components/new-chat/document-mention-picker.tsx +++ b/surfsense_web/components/new-chat/document-mention-picker.tsx @@ -91,11 +91,15 @@ export const DocumentMentionPicker = forwardRef< }, [debouncedSearch, searchSpaceId]); const surfsenseDocsQueryParams = useMemo(() => { - return { + const params: { page: number; page_size: number; title?: string } = { page: 0, page_size: PAGE_SIZE, }; - }, []); + if (debouncedSearch.trim()) { + params.title = debouncedSearch; + } + return params; + }, [debouncedSearch]); // Use query for fetching first page of documents const { data: documents, isLoading: isDocumentsLoading } = useQuery({ @@ -115,7 +119,7 @@ export const DocumentMentionPicker = forwardRef< // Use query for fetching first page of SurfSense docs const { data: surfsenseDocs, isLoading: isSurfsenseDocsLoading } = useQuery({ - queryKey: ["surfsense-docs-mention", surfsenseDocsQueryParams], + queryKey: ["surfsense-docs-mention", debouncedSearch], queryFn: () => documentsApiService.getSurfsenseDocs({ queryParams: surfsenseDocsQueryParams }), staleTime: 3 * 60 * 1000, }); diff --git a/surfsense_web/contracts/types/document.types.ts b/surfsense_web/contracts/types/document.types.ts index 7ab70d537..e6505597b 100644 --- a/surfsense_web/contracts/types/document.types.ts +++ b/surfsense_web/contracts/types/document.types.ts @@ -188,7 +188,9 @@ export const getSurfsenseDocsByChunkResponse = surfsenseDocsDocumentWithChunks; * List Surfsense docs */ export const getSurfsenseDocsRequest = z.object({ - queryParams: paginationQueryParams + queryParams: paginationQueryParams.extend({ + title: z.string().optional(), + }), }); export const getSurfsenseDocsResponse = z.object({