import os from typing import Optional class Config: """Configuration class for the Flask application""" # Flask Configuration SECRET_KEY = os.environ.get('SECRET_KEY', 'your-secret-key-here-change-in-production') DEBUG = os.environ.get('DEBUG', 'False').lower() == 'true' # Server Configuration HOST = os.environ.get('HOST', '0.0.0.0') PORT = int(os.environ.get('PORT', 5000)) # CORS Configuration CORS_ORIGINS = os.environ.get('CORS_ORIGINS', 'http://localhost:5174,http://localhost:3000').split(',') # AI Model Configuration MODEL_CACHE_DIR = os.environ.get('MODEL_CACHE_DIR', './model_cache') ENABLE_CUDA = os.environ.get('ENABLE_CUDA', 'True').lower() == 'true' # Generation Limits MAX_QUESTIONS_MCQ = int(os.environ.get('MAX_QUESTIONS_MCQ', 10)) MAX_QUESTIONS_BOOLEAN = int(os.environ.get('MAX_QUESTIONS_BOOLEAN', 8)) MAX_QUESTIONS_SHORT = int(os.environ.get('MAX_QUESTIONS_SHORT', 8)) MAX_QUESTIONS_MIXED = int(os.environ.get('MAX_QUESTIONS_MIXED', 15)) # Text Limits MIN_TEXT_LENGTH = int(os.environ.get('MIN_TEXT_LENGTH', 50)) MAX_TEXT_LENGTH = int(os.environ.get('MAX_TEXT_LENGTH', 10000)) # Logging Configuration LOG_LEVEL = os.environ.get('LOG_LEVEL', 'INFO') LOG_DIR = os.environ.get('LOG_DIR', './logs') # Backend Integration BACKEND_URL = os.environ.get('BACKEND_URL', 'http://localhost:8080') API_KEY = os.environ.get('API_KEY', None) # Optional API key for authentication @classmethod def get_model_path(cls, model_name: str) -> str: """Get the path for a specific model""" return os.path.join(cls.MODEL_CACHE_DIR, model_name) @classmethod def ensure_directories(cls): """Ensure required directories exist""" os.makedirs(cls.MODEL_CACHE_DIR, exist_ok=True) os.makedirs(cls.LOG_DIR, exist_ok=True) class DevelopmentConfig(Config): """Development configuration""" DEBUG = True LOG_LEVEL = 'DEBUG' class ProductionConfig(Config): """Production configuration""" DEBUG = False LOG_LEVEL = 'INFO' # Override with production values - only enforce in actual production SECRET_KEY = os.environ.get('SECRET_KEY') if not SECRET_KEY and os.environ.get('FLASK_ENV') == 'production': raise ValueError("SECRET_KEY must be set in production") class TestingConfig(Config): """Testing configuration""" TESTING = True DEBUG = True # Configuration mapping config = { 'development': DevelopmentConfig, 'production': ProductionConfig, 'testing': TestingConfig, 'default': DevelopmentConfig }