"""Application configuration using Pydantic Settings.""" from functools import lru_cache from pathlib import Path from pydantic_settings import BaseSettings, SettingsConfigDict import torch from typing import Optional class Settings(BaseSettings): """Application settings loaded from environment variables.""" model_config = SettingsConfigDict( env_file=".env", env_file_encoding="utf-8", case_sensitive=False, ) # API Settings api_prefix: str = "/doc_process/v1" debug: bool = False # PaddleOCR-VL Settings paddleocr_vl_url: str = "http://127.0.0.1:8000/v1" # Model Paths pp_doclayout_model_dir: Optional[str] = "/home/yoge/.cache/modelscope/hub/models/PaddlePaddle/PP-DocLayoutV2" # Image Processing max_image_size_mb: int = 10 image_padding_ratio: float = 0.15 # 15% on each side = 30% total expansion device: torch.device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") # cuda:0 or cpu # Server Settings host: str = "0.0.0.0" port: int = 8053 @property def pp_doclayout_dir(self) -> Path: """Get the PP-DocLayout model directory path.""" return Path(self.pp_doclayout_model_dir) @lru_cache def get_settings() -> Settings: """Get cached settings instance.""" return Settings()