gitrag-free-mcp / packages /core /src /ComponentLoader.py
jacklalane's picture
Deploy GitRag space
324144b verified
Raw
History Blame Contribute Delete
1.79 kB
"""Shared component loading logic for Indexer and Retriever."""
from __future__ import annotations
import os
from typing import Optional, Tuple
from Calculators.EmbeddingCalculator import EmbeddingCalculator
from Persistence.Persist import DBConfig, LibsqlConfig, PersistenceAdapter, create_persistence_adapter
from constants import DEFAULT_DB_PROVIDER, DEFAULT_TABLE_NAME
def _env_value(name: str) -> str:
return (os.environ.get(name) or "").strip()
def resolve_db_cfg() -> DBConfig:
provider = (_env_value("DB_PROVIDER") or DEFAULT_DB_PROVIDER).lower()
database_url = _env_value("DATABASE_URL")
if not database_url and provider == "libsql":
database_url = _env_value("TURSO_DATABASE_URL")
if not database_url:
if provider == "libsql":
raise RuntimeError("DATABASE_URL (or TURSO_DATABASE_URL for libsql) is required")
raise RuntimeError(f"DATABASE_URL is required for provider '{provider}'")
auth_token = _env_value("DB_AUTH_TOKEN") or _env_value("TURSO_AUTH_TOKEN") or None
if provider == "libsql":
table = _env_value("LIBSQL_TABLE") or DEFAULT_TABLE_NAME
fts_table = _env_value("LIBSQL_FTS_TABLE") or None
return LibsqlConfig.from_parts(
database_url=database_url,
auth_token=auth_token,
table=table,
fts_table=fts_table,
)
return DBConfig(provider=provider, url=database_url, auth_token=auth_token, table_map={})
def load_components() -> Tuple[EmbeddingCalculator, PersistenceAdapter]:
"""Initialize the embedding calculator and persistence layer."""
calc = EmbeddingCalculator()
cfg = resolve_db_cfg()
persist = create_persistence_adapter(cfg.provider, cfg=cfg, dim=calc.dimensions)
return calc, persist