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
87 lines
2.5 KiB
Python
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}")
|