studyhub-app / studyhub /app /factory.py
parhamkhoshsolat's picture
StudyHub web — custom Docker frontend (FastAPI + SPA)
8db761b verified
Raw
History Blame Contribute Delete
1.39 kB
from __future__ import annotations
from ..core.llm import FakeLLMClient, LLMClient, default_failover_from_env
from ..core.loader import load_index
from ..ingest.embedder import Embedder, FakeEmbedder
from .config import Settings
from .service import StudyService
def build_embedder(kind: str) -> Embedder:
if kind == "fake":
return FakeEmbedder()
from ..ingest.embedder import BGEM3Embedder
return BGEM3Embedder()
def build_llm(settings: Settings) -> LLMClient:
if settings.fake_llm:
return FakeLLMClient("This is a local demo answer grounded in your notes [S1].")
return default_failover_from_env()
def build_reranker(settings: Settings):
kind = settings.rerank_kind
if kind == "fake":
from ..core.rerank import FakeReranker
return FakeReranker()
if kind == "bge":
from ..core.rerank import BGEReranker
return BGEReranker()
return None
def build_service(settings: Settings) -> StudyService:
from pathlib import Path
from ..graph.store import load_graph
index = load_index(settings.index_dir)
embedder = build_embedder(settings.embedder_kind)
llm = build_llm(settings)
reranker = build_reranker(settings)
graph = load_graph(Path(settings.index_dir) / "graph.json")
return StudyService(index, embedder, llm, settings.materials_dir, reranker=reranker, graph=graph)