zulip_bot/app/config/__init__.py
2025-05-16 18:00:22 +04:00

106 lines
3.6 KiB
Python

"""
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'])