import os import base64 from typing import List from mistralai import Mistral def _pdf_to_base64(pdf_path: str) -> str: with open(pdf_path, "rb") as f: return base64.b64encode(f.read()).decode("utf-8") def mistral_ocr_pdf(pdf_bytes: bytes) -> List[str]: """ OCR PDF bytes directly (no filesystem). """ print("🚀 OCR START | Mistral (in-memory)") client = Mistral(api_key=os.environ["MISTRAL_API_KEY"]) b64 = base64.b64encode(pdf_bytes).decode("utf-8") resp = client.ocr.process( model="mistral-ocr-latest", document={ "type": "document_url", "document_url": f"data:application/pdf;base64,{b64}", }, include_image_base64=False, ) pages = [] for page in resp.pages: if getattr(page, "markdown", None): pages.append(page.markdown) elif getattr(page, "text", None): pages.append(page.text) else: pages.append("") print(f"✅ OCR DONE | pages={len(pages)}") return pages