from __future__ import annotations from app.providers.ocr.base import OcrProvider from app.storage.models import VisualAssetRecord from .base import Lens class OcrLens(Lens): name = "glm_ocr" view_type = "ocr" def __init__(self, provider: OcrProvider): self.provider = provider async def execute(self, asset: VisualAssetRecord, image_bytes: bytes, parameters: dict) -> tuple[dict, float, list[dict]]: payload = await self.provider.extract(image_bytes, parameters.get("region")) confidence = min([line.get("confidence", 0.0) for line in payload.get("lines", [])] or [0.0]) provenance = [ { "asset_id": asset.id, "bbox": line.get("bbox"), "extraction_method": self.name, "confidence": line.get("confidence", confidence), "lens_version": self.version, } for line in payload.get("lines", []) ] return payload, confidence, provenance