60 lines
1.7 KiB
Python
60 lines
1.7 KiB
Python
"""配置加载模块"""
|
|
import os
|
|
from pathlib import Path
|
|
from typing import Optional
|
|
|
|
import yaml
|
|
from pydantic import ValidationError
|
|
|
|
from .types import Config, ServerConfig, OpenVikingConfig, EverMemOSConfig, MemoryConfig, LoggingConfig, LLMConfig, ObsidianConfig, StorageConfig
|
|
|
|
|
|
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", {})),
|
|
evermemos=EverMemOSConfig(**data.get("evermemos", {})),
|
|
memory=MemoryConfig(**data.get("memory", {})),
|
|
logging=LoggingConfig(**data.get("logging", {})),
|
|
llm=LLMConfig(**data.get("llm", {})),
|
|
obsidian=ObsidianConfig(**data.get("obsidian", {})),
|
|
storage=StorageConfig(**data.get("storage", {})),
|
|
)
|
|
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
|