""" Centralized configuration management for SearchEngine. Loads configuration from environment variables and .env file. """ import os from pathlib import Path from typing import Dict, Any from dotenv import load_dotenv # Load .env file from project root PROJECT_ROOT = Path(__file__).parent.parent load_dotenv(PROJECT_ROOT / '.env') # Elasticsearch Configuration ES_CONFIG = { 'host': os.getenv('ES_HOST', 'http://localhost:9200'), 'username': os.getenv('ES_USERNAME'), 'password': os.getenv('ES_PASSWORD'), } # Redis Configuration REDIS_CONFIG = { 'host': os.getenv('REDIS_HOST', 'localhost'), 'port': int(os.getenv('REDIS_PORT', 6479)), 'password': os.getenv('REDIS_PASSWORD'), } # DeepL API Key DEEPL_AUTH_KEY = os.getenv('DEEPL_AUTH_KEY') # Customer Configuration CUSTOMER_ID = os.getenv('CUSTOMER_ID', 'customer1') # API Service Configuration API_HOST = os.getenv('API_HOST', '0.0.0.0') API_PORT = int(os.getenv('API_PORT', 6002)) # Model Directories TEXT_MODEL_DIR = os.getenv('TEXT_MODEL_DIR', '/data/tw/models/bge-m3') IMAGE_MODEL_DIR = os.getenv('IMAGE_MODEL_DIR', '/data/tw/models/cn-clip') # Cache Directory CACHE_DIR = os.getenv('CACHE_DIR', '.cache') def get_es_config() -> Dict[str, Any]: """Get Elasticsearch configuration.""" return ES_CONFIG.copy() def get_redis_config() -> Dict[str, Any]: """Get Redis configuration.""" return REDIS_CONFIG.copy() def get_deepl_key() -> str: """Get DeepL API key.""" return DEEPL_AUTH_KEY def get_customer_id() -> str: """Get default customer ID.""" return CUSTOMER_ID def print_config(): """Print current configuration (with sensitive data masked).""" print("=" * 60) print("SearchEngine Configuration") print("=" * 60) print("\nElasticsearch:") print(f" Host: {ES_CONFIG['host']}") print(f" Username: {ES_CONFIG['username']}") print(f" Password: {'*' * 10 if ES_CONFIG['password'] else 'None'}") print("\nRedis:") print(f" Host: {REDIS_CONFIG['host']}") print(f" Port: {REDIS_CONFIG['port']}") print(f" Password: {'*' * 10 if REDIS_CONFIG['password'] else 'None'}") print("\nDeepL:") print(f" API Key: {'*' * 10 if DEEPL_AUTH_KEY else 'None (translation disabled)'}") print("\nCustomer:") print(f" Customer ID: {CUSTOMER_ID}") print("\nAPI Service:") print(f" Host: {API_HOST}") print(f" Port: {API_PORT}") print("\nModels:") print(f" Text Model: {TEXT_MODEL_DIR}") print(f" Image Model: {IMAGE_MODEL_DIR}") print("\nCache:") print(f" Cache Directory: {CACHE_DIR}") print("=" * 60) if __name__ == "__main__": print_config()