Spaces:
Runtime error
Runtime error
| """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 | |
| } |