scratch_chat / config.py
WebashalarForML's picture
Upload 178 files
330b6e4 verified
"""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
}