# config.py """ Configuration file for Mistral OCR processing. Contains API key and other settings. """ import os import logging from dotenv import load_dotenv # Configure logging logger = logging.getLogger("config") # Load environment variables from .env file if it exists load_dotenv() # Mistral API key handling - get from Hugging Face secrets or environment variable # The priority order is: # 1. HF_MISTRAL_API_KEY environment var (for Hugging Face deployment) # 2. MISTRAL_API_KEY environment var (standard environment variable) # 3. Empty string (will show warning in app) MISTRAL_API_KEY = os.environ.get("HF_MISTRAL_API_KEY", os.environ.get("MISTRAL_API_KEY", "")).strip() # Check if we're in test mode (allows operation without valid API key) # Set to False to use actual API calls TEST_MODE = False # Just check if API key exists if not MISTRAL_API_KEY and not TEST_MODE: logger.warning("No Mistral API key found. OCR functionality will not work unless TEST_MODE is enabled.") if TEST_MODE: logger.info("TEST_MODE is enabled. Using mock responses instead of actual API calls.") # Model settings with fallbacks OCR_MODEL = os.environ.get("MISTRAL_OCR_MODEL", "mistral-ocr-latest") TEXT_MODEL = os.environ.get("MISTRAL_TEXT_MODEL", "mistral-small-latest") # Updated from ministral-8b-latest VISION_MODEL = os.environ.get("MISTRAL_VISION_MODEL", "mistral-large-latest") # Updated from pixtral-12b-latest # Image preprocessing settings optimized for historical documents # These can be customized from environment variables IMAGE_PREPROCESSING = { "enhance_contrast": float(os.environ.get("ENHANCE_CONTRAST", "1.8")), # Increased contrast for better text recognition "sharpen": os.environ.get("SHARPEN", "True").lower() in ("true", "1", "yes"), "denoise": os.environ.get("DENOISE", "True").lower() in ("true", "1", "yes"), "max_size_mb": float(os.environ.get("MAX_IMAGE_SIZE_MB", "12.0")), # Increased size limit for better quality "target_dpi": int(os.environ.get("TARGET_DPI", "300")), # Target DPI for scaling "compression_quality": int(os.environ.get("COMPRESSION_QUALITY", "95")) # Higher quality for better OCR results } # OCR settings optimized for reliability and performance OCR_SETTINGS = { "timeout_ms": int(os.environ.get("OCR_TIMEOUT_MS", "120000")), # Extended timeout for larger documents "max_retries": int(os.environ.get("OCR_MAX_RETRIES", "3")), # Increased retry attempts for better reliability "retry_delay": int(os.environ.get("OCR_RETRY_DELAY", "2")), # Longer initial retry delay for better success rate "include_image_base64": os.environ.get("INCLUDE_IMAGE_BASE64", "True").lower() in ("true", "1", "yes"), "thread_count": int(os.environ.get("OCR_THREAD_COUNT", "4")) # Thread count for parallel processing }