yc1838
lint
abd5331
Raw
History Blame Contribute Delete
1.41 kB
import io
from pathlib import Path
import httpx
from pypdf import PdfReader
def inspect_pdf(url_or_path: str, query: str) -> str:
"""Extract text from a PDF (local or remote). If query asks for visual/layout details, consider vision analysis."""
try:
if url_or_path.startswith(("http://", "https://")):
resp = httpx.get(url_or_path, follow_redirects=True, timeout=30.0)
resp.raise_for_status()
data = resp.content
else:
path = Path(url_or_path)
if not path.exists():
return f"File not found: {url_or_path}"
data = path.read_bytes()
reader = PdfReader(io.BytesIO(data))
text = "\n".join((page.extract_text() or "") for page in reader.pages)
# Heuristic: if text is very short OR query mentions 'image', 'diagram', 'chart', 'layout'
# we might want to use vision. But let's start with text.
if not text.strip() or any(k in query.lower() for k in ["diagram", "chart", "figure", "image", "visual"]):
# Fallback to vision for the first few pages?
# For GAIA, usually text extraction is enough or it's a visual task.
pass
return text if text.strip() else "PDF contains no extractable text. It might be an image-only PDF."
except Exception as e:
return f"Error inspecting PDF: {e}"