{
"event": "PreToolUse",
"tool_name": "Read",
"tool_input": {
"file_path": "\/opt\/scripts\/pipeline\/vision.py",
"offset": 130,
"limit": 60
}
}
{
"tool_response": {
"type": "text",
"file": {
"filePath": "\/opt\/scripts\/pipeline\/vision.py",
"content": "\ndef analyze_document(file_path, model=DEFAULT_VISION_MODEL, store_images=False, image_dir=None, progress=None):\n \"\"\"\n Analyze all pages of a PDF document.\n\n Args:\n file_path: Path to PDF file\n model: Vision model to use\n store_images: Whether to save images to disk\n image_dir: Directory for saved images (default: \/tmp\/pipeline_images)\n progress: PipelineProgress instance for live updates\n\n Returns:\n List of page analysis results\n \"\"\"\n db.log(\"INFO\", f\"Vision analysis starting: {file_path}\", f\"model={model}\")\n\n # Convert PDF to images\n pages = pdf_to_images(file_path)\n db.log(\"INFO\", f\"Extracted {len(pages)} pages from PDF\")\n\n if progress:\n progress.add_log(f\"Vision: {len(pages)} Seiten gefunden\")\n\n if image_dir is None:\n image_dir = \"\/tmp\/pipeline_images\" # noqa: S108\n\n if store_images:\n os.makedirs(image_dir, exist_ok=True)\n\n results = []\n\n for page in pages:\n page_num = page[\"page_number\"]\n db.log(\"INFO\", f\"Analyzing page {page_num}\/{len(pages)}\")\n\n if progress:\n progress.add_log(f\"Vision: Seite {page_num}\/{len(pages)}...\")\n\n # Optional: Save image to disk\n image_path = None\n if store_images:\n filename = f\"{Path(file_path).stem}_page_{page_num:03d}.{IMAGE_FORMAT}\"\n image_path = os.path.join(image_dir, filename)\n with open(image_path, \"wb\") as f:\n f.write(page[\"image_bytes\"])\n\n # Analyze with vision model\n analysis = analyze_image_ollama(page[\"image_bytes\"], model=model)\n\n results.append(\n {\n \"page_number\": page_num,\n \"width\": page[\"width\"],\n \"height\": page[\"height\"],\n \"size_kb\": page[\"size_kb\"],\n \"image_path\": image_path,\n \"analysis\": analysis.get(\"analysis\", \"\") if analysis[\"success\"] else None,\n \"error\": analysis.get(\"error\") if not analysis[\"success\"] else None,\n \"eval_tokens\": analysis.get(\"eval_count\", 0),",
"numLines": 60,
"startLine": 130,
"totalLines": 388
}
}
}