"""Application dependencies.""" from app.services.image_processor import ImageProcessor from app.services.layout_detector import LayoutDetector from app.services.ocr_service import OCRService, MineruOCRService, GLMOCRService from app.services.converter import Converter from app.core.config import get_settings # Global instances (initialized on startup) _layout_detector: LayoutDetector | None = None def init_layout_detector() -> None: """Initialize the global layout detector. Called during application startup. """ global _layout_detector _layout_detector = LayoutDetector() def get_layout_detector() -> LayoutDetector: """Get the global layout detector instance.""" if _layout_detector is None: raise RuntimeError("Layout detector not initialized. Call init_layout_detector() first.") return _layout_detector def get_image_processor() -> ImageProcessor: """Get an image processor instance.""" return ImageProcessor() def get_ocr_service() -> OCRService: """Get an OCR service instance.""" return OCRService( vl_server_url=get_settings().paddleocr_vl_url, layout_detector=get_layout_detector(), image_processor=get_image_processor(), converter=get_converter(), ) def get_converter() -> Converter: """Get a DOCX converter instance.""" return Converter() def get_mineru_ocr_service() -> MineruOCRService: """Get a MinerOCR service instance.""" settings = get_settings() api_url = getattr(settings, "miner_ocr_api_url", "http://127.0.0.1:8000/file_parse") glm_ocr_url = getattr(settings, "glm_ocr_url", "http://localhost:8002/v1") return MineruOCRService( api_url=api_url, converter=get_converter(), image_processor=get_image_processor(), glm_ocr_url=glm_ocr_url, ) def get_glmocr_service() -> GLMOCRService: """Get a GLM OCR service instance.""" settings = get_settings() glm_ocr_url = getattr(settings, "glm_ocr_url", "http://127.0.0.1:8002/v1") return GLMOCRService( vl_server_url=glm_ocr_url, image_processor=get_image_processor(), converter=get_converter(), )