"""Runtime composition shared by Gateway routes and the read-only agent tool.""" from __future__ import annotations import httpx from deerflow.config import get_app_config from deerflow.config.app_config import AppConfig from deerflow.config.llmwiki_config import ResolvedLlmWikiRuntime, resolve_llmwiki_runtime from deerflow.config.system_settings import load_system_settings from deerflow.integrations.weknora.client import WeKnoraClient from deerflow.persistence.llmwiki import LlmWikiStore _default_store: LlmWikiStore | None = None def register_llmwiki_store(store: LlmWikiStore | None) -> None: global _default_store _default_store = store def get_llmwiki_store() -> LlmWikiStore: if _default_store is None: raise RuntimeError("LLMWiki store is not initialized") return _default_store def get_resolved_llmwiki_runtime(config: AppConfig | None = None) -> ResolvedLlmWikiRuntime: current = config or get_app_config() return resolve_llmwiki_runtime(current.llmwiki, load_system_settings().llmwiki) def build_weknora_client( runtime: ResolvedLlmWikiRuntime, *, http_client: httpx.AsyncClient | None = None, ) -> WeKnoraClient: if not runtime.weknora_enabled: raise RuntimeError("WeKnora mode is not enabled") return WeKnoraClient( base_url=runtime.api_base_url, http_client=http_client, admin_email=runtime.admin_email, admin_password=runtime.admin_password, )