Files

59 lines
1.9 KiB
Python
Raw Permalink Normal View History

2026-03-29 00:20:53 +08:00
import json
import threading
from pathlib import Path
from typing import Any, Dict
from app.core.data_root import get_data_root
class KnowledgeGlobalConfigStore:
def __init__(self) -> None:
self._lock = threading.RLock()
@staticmethod
def _file_path() -> Path:
return get_data_root() / "knowledge_global_config.json"
def _read(self) -> Dict[str, Any]:
file_path = self._file_path()
if not file_path.exists():
return {}
try:
with file_path.open("r", encoding="utf-8") as file_obj:
data = json.load(file_obj)
except (OSError, json.JSONDecodeError):
return {}
if not isinstance(data, dict):
return {}
return data
def _write(self, data: Dict[str, Any]) -> None:
file_path = self._file_path()
file_path.parent.mkdir(parents=True, exist_ok=True)
with file_path.open("w", encoding="utf-8") as file_obj:
json.dump(data, file_obj, indent=2, ensure_ascii=False)
def get(self) -> Dict[str, Any]:
with self._lock:
data = self._read()
return {
"api_base": data.get("api_base"),
"api_key": data.get("api_key"),
"default_embedding_model": data.get("default_embedding_model"),
}
def update(self, payload: Dict[str, Any]) -> Dict[str, Any]:
with self._lock:
current = self.get()
if "api_base" in payload:
current["api_base"] = payload.get("api_base")
if "api_key" in payload:
current["api_key"] = payload.get("api_key")
if "default_embedding_model" in payload:
current["default_embedding_model"] = payload.get("default_embedding_model")
self._write(current)
return current
knowledge_global_config_store = KnowledgeGlobalConfigStore()