diff --git a/backend/agent/tools/web_search_tool.py b/backend/agent/tools/web_search_tool.py index fc5ff9f6..f8ac199d 100644 --- a/backend/agent/tools/web_search_tool.py +++ b/backend/agent/tools/web_search_tool.py @@ -247,8 +247,11 @@ class WebSearchTool(Tool): ) response.raise_for_status() data = response.json() + print(f"--- Raw Tavily Response ---") + print(data) + print(f"--------------------------") - # Normalize Tavily extract output to a list of dicts + # Normalise Tavily extract output to a list of dicts extracted = [] if isinstance(data, list): extracted = data @@ -260,25 +263,18 @@ class WebSearchTool(Tool): else: extracted = [data] - # Format results consistently formatted_results = [] for item in extracted: formatted_result = { - "title": item.get("title", ""), - "url": item.get("url", url), - "content": item.get("raw_content") or item.get("content") or item.get("text", "") + "Title": item.get("title"), + "URL": item.get("url") or url, + "Text":item.get("raw_content") or item.get("content") or item.get("text") } - if item.get("published_date"): - formatted_result["published_date"] = item["published_date"] - + formatted_result["Published Date"] = item["published_date"] formatted_results.append(formatted_result) - # Return a properly formatted ToolResult - return ToolResult( - success=True, - output=json.dumps(formatted_results, ensure_ascii=False) - ) + return self.success_response(formatted_results) except Exception as e: error_message = str(e) diff --git a/frontend/src/components/file-renderers/pdf-renderer.tsx b/frontend/src/components/file-renderers/pdf-renderer.tsx index 57bf58f3..c4c2b6e0 100644 --- a/frontend/src/components/file-renderers/pdf-renderer.tsx +++ b/frontend/src/components/file-renderers/pdf-renderer.tsx @@ -10,8 +10,15 @@ import { Download, ArrowLeft, ArrowRight, - Fullscreen + Fullscreen, + Loader } from "lucide-react"; +import { Document, Page, pdfjs } from "react-pdf"; +import 'react-pdf/dist/esm/Page/AnnotationLayer.css'; +import 'react-pdf/dist/esm/Page/TextLayer.css'; + +// Initialize pdfjs worker +pdfjs.GlobalWorkerOptions.workerSrc = `//unpkg.com/pdfjs-dist@${pdfjs.version}/build/pdf.worker.min.js`; interface PdfRendererProps { url: string; @@ -20,12 +27,16 @@ interface PdfRendererProps { export function PdfRenderer({ url, className }: PdfRendererProps) { // State for zoom and rotation controls - const [zoom, setZoom] = useState(100); + const [zoom, setZoom] = useState(1); const [rotation, setRotation] = useState(0); + const [numPages, setNumPages] = useState(null); + const [pageNumber, setPageNumber] = useState(1); + const [isLoading, setIsLoading] = useState(true); + const [error, setError] = useState(null); // Handle zoom in/out - const handleZoomIn = () => setZoom(prev => Math.min(prev + 25, 200)); - const handleZoomOut = () => setZoom(prev => Math.max(prev - 25, 50)); + const handleZoomIn = () => setZoom(prev => Math.min(prev + 0.2, 2.0)); + const handleZoomOut = () => setZoom(prev => Math.max(prev - 0.2, 0.5)); // Handle rotation const handleRotate = () => setRotation(prev => (prev + 90) % 360); @@ -40,12 +51,32 @@ export function PdfRenderer({ url, className }: PdfRendererProps) { document.body.removeChild(link); }; + // Handle page navigation + const goToPrevPage = () => setPageNumber(prev => Math.max(prev - 1, 1)); + const goToNextPage = () => { + if (numPages !== null) { + setPageNumber(prev => Math.min(prev + 1, numPages)); + } + }; + + // Handle document loading + const onDocumentLoadSuccess = ({ numPages }: { numPages: number }) => { + setNumPages(numPages); + setIsLoading(false); + }; + + const onDocumentLoadError = (error: Error) => { + console.error("Error loading PDF:", error); + setError(error); + setIsLoading(false); + }; + // Handle fullscreen const handleFullscreen = () => { - const iframe = document.querySelector('iframe'); - if (iframe) { - if (iframe.requestFullscreen) { - iframe.requestFullscreen(); + const pdfContainer = document.getElementById('pdf-container'); + if (pdfContainer) { + if (pdfContainer.requestFullscreen) { + pdfContainer.requestFullscreen(); } } }; @@ -64,7 +95,7 @@ export function PdfRenderer({ url, className }: PdfRendererProps) { > - {zoom}% + {Math.round(zoom * 100)}% + + {pageNumber} / {numPages} + + + + )}