42 lines
1.3 KiB
Python
42 lines
1.3 KiB
Python
"""Product knowledge base module (obsidian-wiki compatible).
|
|
|
|
Self-contained: knowledge ingestion, storage (DB mirror + Markdown vault),
|
|
search and graph export all live here. The Gateway only depends on
|
|
:class:`KnowledgeService` via :func:`make_knowledge_service`.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import TYPE_CHECKING
|
|
|
|
from deerflow.knowledge.obsidian_adapter import ObsidianWikiAdapter
|
|
from deerflow.knowledge.repository import KnowledgeRepository
|
|
from deerflow.knowledge.service import EmptyThreadError, KnowledgeService
|
|
|
|
if TYPE_CHECKING:
|
|
from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker
|
|
|
|
from deerflow.config.knowledge_config import KnowledgeConfig
|
|
|
|
__all__ = [
|
|
"EmptyThreadError",
|
|
"KnowledgeRepository",
|
|
"KnowledgeService",
|
|
"ObsidianWikiAdapter",
|
|
"make_knowledge_service",
|
|
]
|
|
|
|
|
|
def make_knowledge_service(
|
|
session_factory: async_sessionmaker[AsyncSession] | None,
|
|
config: KnowledgeConfig,
|
|
) -> KnowledgeService | None:
|
|
"""Build the knowledge service.
|
|
|
|
Returns ``None`` when persistence is memory-only (no session factory) or
|
|
the feature is disabled — the router then responds 503.
|
|
"""
|
|
if session_factory is None or not config.enabled:
|
|
return None
|
|
return KnowledgeService(KnowledgeRepository(session_factory), config)
|