"""Configuration management for the chat agent application.""" import os from dotenv import load_dotenv # Load environment variables from .env file load_dotenv() class Config: """Base configuration class.""" # Flask Configuration SECRET_KEY = os.getenv('SECRET_KEY', 'dev-secret-key-change-in-production') FLASK_ENV = os.getenv('FLASK_ENV', 'development') DEBUG = os.getenv('FLASK_DEBUG', 'True').lower() == 'true' # Groq API Configuration GROQ_API_KEY = os.getenv('GROQ_API_KEY') GROQ_MODEL = os.getenv('GROQ_MODEL', 'mixtral-8x7b-32768') # Database Configuration DATABASE_URL = os.getenv('DATABASE_URL', 'postgresql://localhost:5432/chat_agent_db') SQLALCHEMY_DATABASE_URI = DATABASE_URL SQLALCHEMY_TRACK_MODIFICATIONS = False # Redis Configuration REDIS_URL = os.getenv('REDIS_URL', 'redis://localhost:6379/0') REDIS_HOST = os.getenv('REDIS_HOST', 'localhost') REDIS_PORT = int(os.getenv('REDIS_PORT', 6379)) REDIS_DB = int(os.getenv('REDIS_DB', 0)) REDIS_PASSWORD = os.getenv('REDIS_PASSWORD', None) # Session Configuration SESSION_TYPE = 'redis' SESSION_PERMANENT = False SESSION_USE_SIGNER = True SESSION_KEY_PREFIX = os.getenv('SESSION_KEY_PREFIX', 'chat_agent:') # Chat Agent Configuration DEFAULT_LANGUAGE = os.getenv('DEFAULT_LANGUAGE', 'python') MAX_CHAT_HISTORY = int(os.getenv('MAX_CHAT_HISTORY', 20)) CONTEXT_WINDOW_SIZE = int(os.getenv('CONTEXT_WINDOW_SIZE', 10)) SESSION_TIMEOUT = int(os.getenv('SESSION_TIMEOUT', 3600)) # API Configuration MAX_TOKENS = int(os.getenv('MAX_TOKENS', 2048)) TEMPERATURE = float(os.getenv('TEMPERATURE', 0.7)) STREAM_RESPONSES = os.getenv('STREAM_RESPONSES', 'True').lower() == 'true' # Logging Configuration LOG_LEVEL = os.getenv('LOG_LEVEL', 'INFO') LOG_FILE = os.getenv('LOG_FILE', 'chat_agent.log') # Performance Configuration ENABLE_COMPRESSION = os.getenv('ENABLE_COMPRESSION', 'True').lower() == 'true' ENABLE_CACHING = os.getenv('ENABLE_CACHING', 'True').lower() == 'true' # Database Connection Pool Configuration DB_POOL_SIZE = int(os.getenv('DB_POOL_SIZE', '10')) DB_MAX_OVERFLOW = int(os.getenv('DB_MAX_OVERFLOW', '20')) DB_POOL_RECYCLE = int(os.getenv('DB_POOL_RECYCLE', '3600')) DB_POOL_TIMEOUT = int(os.getenv('DB_POOL_TIMEOUT', '30')) # Redis Connection Pool Configuration REDIS_MAX_CONNECTIONS = int(os.getenv('REDIS_MAX_CONNECTIONS', '20')) REDIS_SOCKET_TIMEOUT = int(os.getenv('REDIS_SOCKET_TIMEOUT', '5')) REDIS_CONNECT_TIMEOUT = int(os.getenv('REDIS_CONNECT_TIMEOUT', '5')) REDIS_HEALTH_CHECK_INTERVAL = int(os.getenv('REDIS_HEALTH_CHECK_INTERVAL', '30')) # Cache Configuration CACHE_DEFAULT_TTL = int(os.getenv('CACHE_DEFAULT_TTL', '3600')) CACHE_RESPONSE_TTL = int(os.getenv('CACHE_RESPONSE_TTL', '1800')) CACHE_LANGUAGE_CONTEXT_TTL = int(os.getenv('CACHE_LANGUAGE_CONTEXT_TTL', '86400')) # Performance Monitoring ENABLE_PERFORMANCE_MONITORING = os.getenv('ENABLE_PERFORMANCE_MONITORING', 'True').lower() == 'true' class DevelopmentConfig(Config): """Development configuration.""" DEBUG = True TESTING = False class ProductionConfig(Config): """Production configuration.""" DEBUG = False TESTING = False class TestingConfig(Config): """Testing configuration.""" TESTING = True DEBUG = True # Use in-memory SQLite for testing SQLALCHEMY_DATABASE_URI = 'sqlite:///:memory:' # Use separate Redis DB for testing REDIS_DB = 1 # For testing without Redis server, use None to disable Redis features REDIS_URL = os.getenv('REDIS_URL', None) # Set to None to disable Redis in tests # Configuration mapping config = { 'development': DevelopmentConfig, 'production': ProductionConfig, 'testing': TestingConfig, 'default': DevelopmentConfig }