from __future__ import annotations import os from pathlib import Path ROOT_DIR = Path(__file__).resolve().parent.parent ASSETS_DIR = ROOT_DIR / "assets" FONTS_DIR = ASSETS_DIR / "fonts" EXAMPLES_DIR = ASSETS_DIR / "examples" MODEL_ID = os.getenv("MODEL_ID", "PaddlePaddle/PaddleOCR-VL-1.6") MODEL_REVISION = os.getenv("MODEL_REVISION", "main") MAX_UPLOAD_MB = int(os.getenv("MAX_UPLOAD_MB", "25")) MAX_UPLOAD_BYTES = MAX_UPLOAD_MB * 1024 * 1024 MAX_IMAGE_SIDE = int(os.getenv("MAX_IMAGE_SIDE", "1920")) MAX_IMAGE_SIDE_ACCURATE = int(os.getenv("MAX_IMAGE_SIDE_ACCURATE", "2560")) MAX_NEW_TOKENS = int(os.getenv("MAX_NEW_TOKENS", "3072")) MAX_PDF_PAGES = int(os.getenv("MAX_PDF_PAGES", "8")) MAX_BATCH_ITEMS = int(os.getenv("MAX_BATCH_ITEMS", "8")) OCR_MAX_PIXELS = int(os.getenv("OCR_MAX_PIXELS", str(1280 * 28 * 28))) SPOTTING_MAX_PIXELS = int(os.getenv("SPOTTING_MAX_PIXELS", str(2048 * 28 * 28))) SPOTTING_UPSCALE_THRESHOLD = int(os.getenv("SPOTTING_UPSCALE_THRESHOLD", "1500")) TILE_HEIGHT = int(os.getenv("TILE_HEIGHT", "1400")) TILE_OVERLAP = int(os.getenv("TILE_OVERLAP", "180")) JOB_TTL_SEC = int(os.getenv("JOB_TTL_SEC", "7200")) HISTORY_LIMIT = int(os.getenv("HISTORY_LIMIT", "12")) PDF_RENDER_SCALE = float(os.getenv("PDF_RENDER_SCALE", "2.0")) ALLOWED_IMAGE_FORMATS = {"JPEG", "PNG", "WEBP", "BMP", "TIFF", "HEIF", "HEIC"} ALLOWED_IMAGE_SUFFIXES = { ".jpg", ".jpeg", ".png", ".webp", ".bmp", ".tif", ".tiff", ".heic", ".heif", } ALLOWED_DOCUMENT_SUFFIXES = ALLOWED_IMAGE_SUFFIXES | {".pdf"} LANGUAGE_AUTO = "auto" LANGUAGE_BOTH = "fa+en" LANGUAGE_FA = "fa" LANGUAGE_EN = "en" LANGUAGE_KEYS = (LANGUAGE_AUTO, LANGUAGE_BOTH, LANGUAGE_FA, LANGUAGE_EN) MODE_DOCUMENT = "document" MODE_PRECISE = "precise" MODE_TABLE = "table" MODE_MARKDOWN = "markdown" MODE_FIELDS = "fields" MODE_COMPARE = "compare" MODE_KEYS = ( MODE_DOCUMENT, MODE_PRECISE, MODE_TABLE, MODE_MARKDOWN, MODE_FIELDS, MODE_COMPARE, ) LOCALE_EN = "en" LOCALE_FA = "fa" LOCALE_KEYS = (LOCALE_EN, LOCALE_FA) ZERO_GPU_DURATION = int(os.getenv("ZERO_GPU_DURATION", "28")) ZERO_GPU_DURATION_CAP = int(os.getenv("ZERO_GPU_DURATION_CAP", "120")) PDF_DPI = int(os.getenv("PDF_DPI", "144")) LATIN_FONT_PATH = FONTS_DIR / "NotoSans-Regular.ttf" ARABIC_FONT_PATH = FONTS_DIR / "NotoNaskhArabic-Regular.ttf" QUEUE_SIZE = int(os.getenv("QUEUE_SIZE", "16")) APP_PORT = int(os.getenv("PORT", "7860")) OCR_API_KEY = os.getenv("OCR_API_KEY", "").strip() APP_AUTH_USER = os.getenv("APP_AUTH_USER", "").strip() APP_AUTH_PASSWORD = os.getenv("APP_AUTH_PASSWORD", "").strip() PAGE_BREAK = "\n\n--- page break ---\n\n" DESKEW_MAX_ANGLE = float(os.getenv("DESKEW_MAX_ANGLE", "15")) QUALITY_SHORT_CHARS = int(os.getenv("QUALITY_SHORT_CHARS", "24")) QUALITY_SPARSE_RATIO = float(os.getenv("QUALITY_SPARSE_RATIO", "0.00002"))