106 lines
3.6 KiB
Python
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']) |