diff --git a/surfsense_backend/app/agents/new_chat/tools/resume.py b/surfsense_backend/app/agents/new_chat/tools/resume.py index 6fd43d830..b1962f8d1 100644 --- a/surfsense_backend/app/agents/new_chat/tools/resume.py +++ b/surfsense_backend/app/agents/new_chat/tools/resume.py @@ -204,8 +204,19 @@ def _get_template(template_id: str | None = None) -> dict[str, str]: _MONTH_NAMES = [ - "", "Jan", "Feb", "Mar", "Apr", "May", "Jun", - "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", + "", + "Jan", + "Feb", + "Mar", + "Apr", + "May", + "Jun", + "Jul", + "Aug", + "Sep", + "Oct", + "Nov", + "Dec", ] @@ -452,7 +463,9 @@ def create_generate_resume_tool( ) return failed.id except Exception: - logger.exception("[generate_resume] Could not persist failed report row") + logger.exception( + "[generate_resume] Could not persist failed report row" + ) return None try: @@ -471,7 +484,9 @@ def create_generate_resume_tool( llm = await get_document_summary_llm(read_session, search_space_id) if not llm: - error_msg = "No LLM configured. Please configure a language model in Settings." + error_msg = ( + "No LLM configured. Please configure a language model in Settings." + ) report_id = await _save_failed_report(error_msg) return { "status": "failed", @@ -497,7 +512,8 @@ def create_generate_resume_tool( parent_body = _strip_header(parent_content) prompt = _REVISION_PROMPT.format( llm_reference=llm_reference, - user_instructions=user_instructions or "Improve and refine the resume.", + user_instructions=user_instructions + or "Improve and refine the resume.", previous_content=parent_body, ) else: @@ -553,7 +569,10 @@ def create_generate_resume_tool( if attempt == 0: dispatch_custom_event( "report_progress", - {"phase": "fixing", "message": "Fixing compilation issue..."}, + { + "phase": "fixing", + "message": "Fixing compilation issue...", + }, ) fix_prompt = _FIX_COMPILE_PROMPT.format( llm_reference=llm_reference, @@ -563,7 +582,9 @@ def create_generate_resume_tool( fix_response = await llm.ainvoke( [HumanMessage(content=fix_prompt)] ) - if fix_response.content and isinstance(fix_response.content, str): + if fix_response.content and isinstance( + fix_response.content, str + ): body = _strip_typst_fences(fix_response.content) body = _strip_imports(body) name = _extract_name(body) or name @@ -571,7 +592,9 @@ def create_generate_resume_tool( typst_source = header + body if compile_error: - error_msg = f"Typst compilation failed after 2 attempts: {compile_error}" + error_msg = ( + f"Typst compilation failed after 2 attempts: {compile_error}" + ) report_id = await _save_failed_report(error_msg) return { "status": "failed", diff --git a/surfsense_web/atoms/chat/report-panel.atom.ts b/surfsense_web/atoms/chat/report-panel.atom.ts index 60de50d67..c80230f05 100644 --- a/surfsense_web/atoms/chat/report-panel.atom.ts +++ b/surfsense_web/atoms/chat/report-panel.atom.ts @@ -42,7 +42,13 @@ export const openReportPanelAtom = atom( wordCount, shareToken, contentType, - }: { reportId: number; title: string; wordCount?: number; shareToken?: string | null; contentType?: string } + }: { + reportId: number; + title: string; + wordCount?: number; + shareToken?: string | null; + contentType?: string; + } ) => { if (!get(reportPanelAtom).isOpen) { set(preReportCollapsedAtom, get(rightPanelCollapsedAtom)); diff --git a/surfsense_web/components/report-panel/pdf-viewer.tsx b/surfsense_web/components/report-panel/pdf-viewer.tsx index 71b880324..c4980dd7e 100644 --- a/surfsense_web/components/report-panel/pdf-viewer.tsx +++ b/surfsense_web/components/report-panel/pdf-viewer.tsx @@ -1,9 +1,9 @@ "use client"; import { ZoomInIcon, ZoomOutIcon } from "lucide-react"; -import { useCallback, useEffect, useRef, useState } from "react"; -import * as pdfjsLib from "pdfjs-dist"; import type { PDFDocumentProxy, RenderTask } from "pdfjs-dist"; +import * as pdfjsLib from "pdfjs-dist"; +import { useCallback, useEffect, useRef, useState } from "react"; import { Button } from "@/components/ui/button"; import { Spinner } from "@/components/ui/spinner"; import { getAuthHeaders } from "@/lib/auth-utils"; @@ -50,7 +50,7 @@ export function PdfViewer({ pdfUrl, isPublic = false }: PdfViewerProps) { const dims = pageDimsRef.current[pageIndex]; return dims ? Math.floor(dims.height * scale) : 0; }, - [scale], + [scale] ); const getVisibleRange = useCallback(() => { @@ -285,14 +285,28 @@ export function PdfViewer({ pdfUrl, isPublic = false }: PdfViewerProps) { return (
{title}
)} -{error}
++ {error} +
{isLoading ? title : metadata.title} diff --git a/surfsense_web/components/tool-ui/generate-resume.tsx b/surfsense_web/components/tool-ui/generate-resume.tsx index b6501f183..f329ff95d 100644 --- a/surfsense_web/components/tool-ui/generate-resume.tsx +++ b/surfsense_web/components/tool-ui/generate-resume.tsx @@ -3,8 +3,8 @@ import type { ToolCallMessagePartProps } from "@assistant-ui/react"; import { useAtomValue, useSetAtom } from "jotai"; import { useParams, usePathname } from "next/navigation"; -import { useCallback, useEffect, useRef, useState } from "react"; import * as pdfjsLib from "pdfjs-dist"; +import { useCallback, useEffect, useRef, useState } from "react"; import { z } from "zod"; import { openReportPanelAtom, reportPanelAtom } from "@/atoms/chat/report-panel.atom"; import { TextShimmerLoader } from "@/components/prompt-kit/loader"; @@ -70,7 +70,9 @@ function ResumeErrorState({ title, error }: { title: string; error: string }) { {title && title !== "Resume" && (
{title}
)} -{error}
++ {error} +