CoolFace
Apppublic

WebashalarForML/scratch_chat

sourceHugging Facemitupdated 1y agoView on Hugging Face
0likes
config.py110 linesDownload Raw Back to root
1"""Configuration management for the chat agent application."""
2
3import os
4from dotenv import load_dotenv
5
6# Load environment variables from .env file
7load_dotenv()
8
9
10class Config:
11    """Base configuration class."""
12    
13    # Flask Configuration
14    SECRET_KEY = os.getenv('SECRET_KEY', 'dev-secret-key-change-in-production')
15    FLASK_ENV = os.getenv('FLASK_ENV', 'development')
16    DEBUG = os.getenv('FLASK_DEBUG', 'True').lower() == 'true'
17    
18    # Groq API Configuration
19    GROQ_API_KEY = os.getenv('GROQ_API_KEY')
20    GROQ_MODEL = os.getenv('GROQ_MODEL', 'mixtral-8x7b-32768')
21    
22    # Database Configuration
23    DATABASE_URL = os.getenv('DATABASE_URL', 'postgresql://localhost:5432/chat_agent_db')
24    SQLALCHEMY_DATABASE_URI = DATABASE_URL
25    SQLALCHEMY_TRACK_MODIFICATIONS = False
26    
27    # Redis Configuration
28    REDIS_URL = os.getenv('REDIS_URL', 'redis://localhost:6379/0')
29    REDIS_HOST = os.getenv('REDIS_HOST', 'localhost')
30    REDIS_PORT = int(os.getenv('REDIS_PORT', 6379))
31    REDIS_DB = int(os.getenv('REDIS_DB', 0))
32    REDIS_PASSWORD = os.getenv('REDIS_PASSWORD', None)
33    
34    # Session Configuration
35    SESSION_TYPE = 'redis'
36    SESSION_PERMANENT = False
37    SESSION_USE_SIGNER = True
38    SESSION_KEY_PREFIX = os.getenv('SESSION_KEY_PREFIX', 'chat_agent:')
39    
40    # Chat Agent Configuration
41    DEFAULT_LANGUAGE = os.getenv('DEFAULT_LANGUAGE', 'python')
42    MAX_CHAT_HISTORY = int(os.getenv('MAX_CHAT_HISTORY', 20))
43    CONTEXT_WINDOW_SIZE = int(os.getenv('CONTEXT_WINDOW_SIZE', 10))
44    SESSION_TIMEOUT = int(os.getenv('SESSION_TIMEOUT', 3600))
45    
46    # API Configuration
47    MAX_TOKENS = int(os.getenv('MAX_TOKENS', 2048))
48    TEMPERATURE = float(os.getenv('TEMPERATURE', 0.7))
49    STREAM_RESPONSES = os.getenv('STREAM_RESPONSES', 'True').lower() == 'true'
50    
51    # Logging Configuration
52    LOG_LEVEL = os.getenv('LOG_LEVEL', 'INFO')
53    LOG_FILE = os.getenv('LOG_FILE', 'chat_agent.log')
54    
55    # Performance Configuration
56    ENABLE_COMPRESSION = os.getenv('ENABLE_COMPRESSION', 'True').lower() == 'true'
57    ENABLE_CACHING = os.getenv('ENABLE_CACHING', 'True').lower() == 'true'
58    
59    # Database Connection Pool Configuration
60    DB_POOL_SIZE = int(os.getenv('DB_POOL_SIZE', '10'))
61    DB_MAX_OVERFLOW = int(os.getenv('DB_MAX_OVERFLOW', '20'))
62    DB_POOL_RECYCLE = int(os.getenv('DB_POOL_RECYCLE', '3600'))
63    DB_POOL_TIMEOUT = int(os.getenv('DB_POOL_TIMEOUT', '30'))
64    
65    # Redis Connection Pool Configuration
66    REDIS_MAX_CONNECTIONS = int(os.getenv('REDIS_MAX_CONNECTIONS', '20'))
67    REDIS_SOCKET_TIMEOUT = int(os.getenv('REDIS_SOCKET_TIMEOUT', '5'))
68    REDIS_CONNECT_TIMEOUT = int(os.getenv('REDIS_CONNECT_TIMEOUT', '5'))
69    REDIS_HEALTH_CHECK_INTERVAL = int(os.getenv('REDIS_HEALTH_CHECK_INTERVAL', '30'))
70    
71    # Cache Configuration
72    CACHE_DEFAULT_TTL = int(os.getenv('CACHE_DEFAULT_TTL', '3600'))
73    CACHE_RESPONSE_TTL = int(os.getenv('CACHE_RESPONSE_TTL', '1800'))
74    CACHE_LANGUAGE_CONTEXT_TTL = int(os.getenv('CACHE_LANGUAGE_CONTEXT_TTL', '86400'))
75    
76    # Performance Monitoring
77    ENABLE_PERFORMANCE_MONITORING = os.getenv('ENABLE_PERFORMANCE_MONITORING', 'True').lower() == 'true'
78
79
80class DevelopmentConfig(Config):
81    """Development configuration."""
82    DEBUG = True
83    TESTING = False
84
85
86class ProductionConfig(Config):
87    """Production configuration."""
88    DEBUG = False
89    TESTING = False
90
91
92class TestingConfig(Config):
93    """Testing configuration."""
94    TESTING = True
95    DEBUG = True
96    # Use in-memory SQLite for testing
97    SQLALCHEMY_DATABASE_URI = 'sqlite:///:memory:'
98    # Use separate Redis DB for testing
99    REDIS_DB = 1
100    # For testing without Redis server, use None to disable Redis features
101    REDIS_URL = os.getenv('REDIS_URL', None)  # Set to None to disable Redis in tests
102
103
104# Configuration mapping
105config = {
106    'development': DevelopmentConfig,
107    'production': ProductionConfig,
108    'testing': TestingConfig,
109    'default': DevelopmentConfig
110}