"""配置加载模块""" import os from pathlib import Path from typing import Optional import yaml from pydantic import ValidationError from .types import Config, ServerConfig, OpenVikingConfig, MemoryConfig, LoggingConfig, LLMConfig, ObsidianConfig def load_config(config_path: Optional[str] = None) -> Config: """加载配置文件""" if config_path is None: config_path = os.environ.get("MEMORY_GATEWAY_CONFIG", "config.yaml") config_file = Path(config_path) if not config_file.exists(): # 返回默认配置 return Config() try: with open(config_file, "r", encoding="utf-8") as f: data = yaml.safe_load(f) if data is None: return Config() return Config( server=ServerConfig(**data.get("server", {})), openviking=OpenVikingConfig(**data.get("openviking", {})), memory=MemoryConfig(**data.get("memory", {})), logging=LoggingConfig(**data.get("logging", {})), llm=LLMConfig(**data.get("llm", {})), obsidian=ObsidianConfig(**data.get("obsidian", {})), ) except (ValidationError, yaml.YAMLError) as e: print(f"配置文件解析错误: {e}") return Config() def get_config() -> Config: """获取全局配置(单例)""" global _config if _config is None: _config = load_config() return _config def set_config(config: Config) -> None: """设置全局配置""" global _config _config = config _config: Optional[Config] = None