Spaces:
Running
Running
File size: 2,877 Bytes
59aaeae a6b797a 59aaeae |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# 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
} |