WebashalarForML/scratch_chat
0
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}