Spaces:
Sleeping
Sleeping
| """OCR from a local file path, optionally via Celery worker (upload temp blob first).""" | |
| from __future__ import annotations | |
| import logging | |
| import os | |
| from typing import TYPE_CHECKING | |
| from app.chat_image_upload import ( | |
| delete_storage_object, | |
| upload_ephemeral_ocr_blob, | |
| validate_chat_image_bytes, | |
| ) | |
| from app.ocr_celery import ocr_celery_enabled, ocr_from_image_url | |
| if TYPE_CHECKING: | |
| from agents.ocr_agent import OCRAgent | |
| logger = logging.getLogger(__name__) | |
| async def ocr_from_local_image_path( | |
| local_path: str, | |
| original_filename: str | None, | |
| fallback_agent: "OCRAgent", | |
| ) -> str: | |
| """ | |
| Run OCR on a file on local disk. If OCR_USE_Celery, upload to ephemeral storage URL | |
| then delegate to worker; otherwise process_image in-process. | |
| """ | |
| if not ocr_celery_enabled(): | |
| return await fallback_agent.process_image(local_path) | |
| with open(local_path, "rb") as f: | |
| body = f.read() | |
| ext = os.path.splitext(original_filename or local_path)[1].lower() or ".png" | |
| _, content_type = validate_chat_image_bytes(original_filename or local_path, body, None) | |
| bucket = os.getenv("SUPABASE_IMAGE_BUCKET", "image") | |
| path, url = upload_ephemeral_ocr_blob(body, ext, content_type) | |
| try: | |
| return await ocr_from_image_url(url, fallback_agent) | |
| finally: | |
| delete_storage_object(bucket, path) | |