{"record":{"id":"b3807bbe5b543ce2","repo":"odysseus-dev/odysseus","slug":"no-vision-model-available-e","errorCode":null,"errorMessage":"No vision model available: {e}","messagePattern":"No vision model available: (.+?)","errorType":"http","errorClass":"HTTPException","httpStatus":503,"severity":"error","filePath":"routes/document/document_routes.py","lineNumber":1281,"sourceCode":"            if not doc:\n                raise HTTPException(404, \"Document not found\")\n            _verify_doc_owner(db, doc, user)\n            upload_id = find_source_upload_id(doc.current_content or \"\")\n            if not upload_id:\n                raise HTTPException(400, \"Document is not linked to a source PDF\")\n            pdf_path = _locate_current_user_upload(request, upload_id, user)\n            if not pdf_path:\n                raise HTTPException(404, \"Source PDF not found\")\n        finally:\n            db.close()\n\n        # Resolve VL model (admin-configured or auto-detected vision-capable)\n        settings = _load_vl_settings()\n        vl_model = settings.get(\"vision_model\", \"\")\n        try:\n            url, model_id, headers = _resolve_vl_model(vl_model, owner=user)\n        except Exception as e:\n            raise HTTPException(503, f\"No vision model available: {e}\")\n\n        system_prompt = (\n            \"You analyze rendered PDF page images and propose values to fill in. \"\n            \"For each blank line, box, underscore, or labeled space on the page that \"\n            \"should be filled given the user's instruction, output one annotation. \"\n            \"Coordinates are percentages (0-100) of the page width/height with the \"\n            \"origin at top-left. Width/height should match the visible blank box. \"\n            \"Return ONLY a JSON array, no prose, no markdown fences. Each entry: \"\n            '{\"x\": number, \"y\": number, \"w\": number, \"h\": number, \"value\": string}. '\n            \"If a region should not be filled, omit it. If nothing should be filled, \"\n            \"return [].\"\n        )\n\n        all_annotations = []\n        pdf_doc = fitz.open(pdf_path)\n        try:\n            for page_index in range(pdf_doc.page_count):\n                page = pdf_doc[page_index]","sourceCodeStart":1263,"sourceCodeEnd":1299,"githubUrl":"https://github.com/odysseus-dev/odysseus/blob/f9235ebbf13f693a6fd29ce70b097f6ec83705bf/routes/document/document_routes.py#L1263-L1299","documentation":"Error \"No vision model available: {e}\" thrown in odysseus-dev/odysseus.","triggerScenarios":"Triggered when the corresponding server-side validation or runtime check at the recorded location rejects the request or operation and returns this error message to the caller.","commonSituations":"See trigger scenarios.","solutions":["Configure a vision-capable model endpoint in Settings before using this feature.","Check that the vision model service is running and reachable, then retry."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"f9235ebbf13f693a6fd29ce70b097f6ec83705bf","analyzedAt":"2026-08-14T21:47:48.359Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}