""" Configuration module for the application. Loads environment variables and provides configuration values. """ import os from dotenv import load_dotenv # Load environment variables from .env file (if it exists) load_dotenv() class Config: """Configuration class for the application.""" # Zulip API settings ZULIP_EMAIL = os.getenv("ZULIP_EMAIL", "IT_bot-bot@zulip.lci.ge") ZULIP_API_KEY = os.getenv("ZULIP_API_KEY", "ta8x0Rwlf5yLlZutETiTZbHFtQMVOv1z") ZULIP_SITE = os.getenv("ZULIP_SITE", "https://zulip.lci.ge") # Zulip database settings ZULIP_DB_HOST = os.getenv("ZULIP_DB_HOST", "zulip.lci.ge") ZULIP_DB_PORT = os.getenv("ZULIP_DB_PORT", "5432") ZULIP_DB_NAME = os.getenv("ZULIP_DB_NAME", "zulip") ZULIP_DB_USER = os.getenv("ZULIP_DB_USER", "zulip") ZULIP_DB_PASSWORD = os.getenv("ZULIP_DB_PASSWORD", "BlackMoonSky89") # Database URL SQLALCHEMY_DATABASE_URI = f"postgresql://{ZULIP_DB_USER}:{ZULIP_DB_PASSWORD}@{ZULIP_DB_HOST}:{ZULIP_DB_PORT}/{ZULIP_DB_NAME}" # ChromaDB settings CHROMADB_PATH = os.getenv("CHROMADB_PATH", "./chromadb") CHROMADB_COLLECTION = os.getenv("CHROMADB_COLLECTION", "zulip_messages") # Channels to monitor (IT Discussions, IT Knowledge, IT Support) CHANNELS_TO_MONITOR = [ "IT Discussions", "IT Knowledge", "IT Support" ] # AI model settings # OpenAI settings (primary) OPENAI_API_KEY = os.getenv("OPENAI_API_KEY", "") OPENAI_MODEL = os.getenv("OPENAI_MODEL", "gpt-4o") # Gemini API settings (legacy) GEMINI_API_KEY = os.getenv("GEMINI_API_KEY", "AIzaSyD_VYKUcleCUkAxZj1sX3pWLHvGk0HDe9s") # Embedding settings USE_NOMIC_EMBEDDINGS = os.getenv("USE_NOMIC_EMBEDDINGS", "False").lower() == "true" COHERE_API_KEY = os.getenv("COHERE_API_KEY", "4sCOTMgEg5rXeXU0XMmPeucSBMl5xd4FMhyV2UDW") # Ollama settings OLLAMA_MODEL = os.getenv("OLLAMA_MODEL", "nomic-embed-text") OLLAMA_HOST = os.getenv("OLLAMA_HOST", "http://localhost:11434") # Flask settings SECRET_KEY = os.getenv("SECRET_KEY", "your_secret_key_here") DEBUG = os.getenv("DEBUG", "True").lower() == "true" # Bot settings BOT_NAME = "IT_Bot" BOT_TRIGGER = f"@**{BOT_NAME}**" # Rate limiting settings RATE_LIMIT_PERIOD = int(os.getenv("RATE_LIMIT_PERIOD", "60")) # 60 seconds RATE_LIMIT_REQUESTS = int(os.getenv("RATE_LIMIT_REQUESTS", "10")) # 10 requests per period class DevelopmentConfig(Config): """Development configuration.""" DEBUG = True class ProductionConfig(Config): """Production configuration.""" DEBUG = False class TestingConfig(Config): """Testing configuration.""" TESTING = True # Use a test database SQLALCHEMY_DATABASE_URI = os.getenv('TEST_SQLALCHEMY_DATABASE_URI', 'postgresql://zulip:BlackMoonSky89@zulip.lci.ge:5432/zulip_test') # Use a test ChromaDB path CHROMADB_PATH = os.getenv('TEST_CHROMADB_PATH', './chromadb_test') # Configuration dictionary config_dict = { 'development': DevelopmentConfig, 'production': ProductionConfig, 'testing': TestingConfig, 'default': DevelopmentConfig } def load_config(config_name=None): """ Load the appropriate configuration based on environment variables or the provided config_name. Args: config_name (str, optional): Name of the configuration to load. Defaults to None. Returns: Config: Configuration object """ if not config_name: config_name = os.getenv('FLASK_ENV', 'default') return config_dict.get(config_name, config_dict['default'])