Files
wehub-resource-sync e4dcfc49aa
Tests / Import Check (Python 3.13) (push) Has been cancelled
Tests / Import Check (Python 3.14) (push) Has been cancelled
Tests / Python Tests (Python 3.11) (push) Has been cancelled
Tests / Python Tests (Python 3.12) (push) Has been cancelled
Tests / Python Tests (Python 3.14) (push) Has been cancelled
Tests / Test Summary (push) Has been cancelled
Tests / Lint and Format (push) Has been cancelled
Tests / Web Node Tests (push) Has been cancelled
Tests / Import Check (Python 3.11) (push) Has been cancelled
Tests / Import Check (Python 3.12) (push) Has been cancelled
Tests / Python Tests (Python 3.13) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:00:43 +08:00

87 lines
2.5 KiB
Python

"""
Services Layer
==============
Unified service layer for DeepTutor providing:
- LLM client and configuration
- Embedding client and configuration
- RAG pipelines and components
- Prompt management
- Web Search providers
- System setup utilities
- Configuration loading
Usage:
from deeptutor.services.llm import get_llm_client
from deeptutor.services.embedding import get_embedding_client
from deeptutor.services.rag import RAGService
from deeptutor.services.prompt import get_prompt_manager
from deeptutor.services.search import web_search
from deeptutor.services.setup import init_user_directories
from deeptutor.services.config import load_config_with_main
# LLM
llm = get_llm_client()
response = await llm.complete("Hello, world!")
# Embedding
embed = get_embedding_client()
vectors = await embed.embed(["text1", "text2"])
# RAG (LlamaIndex backend)
rag = RAGService()
result = await rag.search("query", kb_name="my_kb")
# Prompt
pm = get_prompt_manager()
prompts = pm.load_prompts("solve", "solve_agent")
# Search
result = web_search("What is AI?")
"""
# Keep service package import side-effects minimal.
# Modules are lazy-loaded in __getattr__ to avoid circular imports.
from .path_service import PathService, get_path_service
__all__ = [
"llm",
"embedding",
"rag",
"prompt",
"search",
"setup",
"session",
"config",
"PathService",
"get_path_service",
"BaseSessionManager",
]
def __getattr__(name: str):
"""Lazy import for modules that depend on heavy libraries."""
import importlib
if name == "llm":
return importlib.import_module(f"{__name__}.llm")
if name == "prompt":
return importlib.import_module(f"{__name__}.prompt")
if name == "search":
return importlib.import_module(f"{__name__}.search")
if name == "setup":
return importlib.import_module(f"{__name__}.setup")
if name == "session":
return importlib.import_module(f"{__name__}.session")
if name == "config":
return importlib.import_module(f"{__name__}.config")
if name == "rag":
return importlib.import_module(f"{__name__}.rag")
if name == "embedding":
return importlib.import_module(f"{__name__}.embedding")
if name == "BaseSessionManager":
from .session import BaseSessionManager
return BaseSessionManager
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")