""" GitRag Standalone Retriever — HuggingFace Spaces entrypoint. Requires env vars: TURSO_DATABASE_URL (or DATABASE_URL) TURSO_AUTH_TOKEN (or DB_AUTH_TOKEN) """ import os import sys import time def log_stage(message: str, start_time: float) -> None: elapsed = time.monotonic() - start_time print(f"[{elapsed:7.1f}s] {message}", flush=True) def check_config(): db_url = os.environ.get("TURSO_DATABASE_URL") or os.environ.get("DATABASE_URL") db_token = os.environ.get("TURSO_AUTH_TOKEN") or os.environ.get("DB_AUTH_TOKEN") if not db_url or not db_token: sys.stderr.write("\n") sys.stderr.write("!" * 60 + "\n") sys.stderr.write("!! FATAL ERROR: MISSING DATABASE CONFIGURATION !!\n") sys.stderr.write("!! !!\n") sys.stderr.write("!! You must set the following Secrets in your Space: !!\n") sys.stderr.write("!! - TURSO_DATABASE_URL !!\n") sys.stderr.write("!! - TURSO_AUTH_TOKEN !!\n") sys.stderr.write("!! !!\n") sys.stderr.write("!! Go to: Settings > Variables and secrets !!\n") sys.stderr.write("!" * 60 + "\n") sys.stderr.write("\n") sys.exit(1) return db_url, db_token if __name__ == "__main__": start_time = time.monotonic() db_url, db_token = check_config() try: from Persistence.Persist import PersistInLibsql, LibsqlConfig from Retriever import Retriever, Reranker from Calculators.EmbeddingCalculator import EmbeddingCalculator from gitrag_mcp_server.server import create_mcp_server except ImportError as e: sys.stderr.write(f"FATAL: Failed to import GitRag modules: {e}\n") sys.exit(1) log_stage("GitRag standalone retriever starting", start_time) log_stage("Loading embedding model", start_time) calculator = EmbeddingCalculator() log_stage("Embedding model ready", start_time) log_stage("Connecting to LibSQL", start_time) cfg = LibsqlConfig.from_parts(database_url=db_url, auth_token=db_token) persistence = PersistInLibsql(cfg=cfg) log_stage("LibSQL connection ready", start_time) log_stage("Loading reranker", start_time) reranker = Reranker() log_stage("Reranker ready", start_time) retriever = Retriever(persistence, calculator, reranker=reranker) log_stage("Retriever ready", start_time) log_stage("Starting MCP server on port 7860", start_time) mcp = create_mcp_server(retriever=retriever) mcp.run( transport="http", port=7860, host="0.0.0.0", stateless_http=True, json_response=True, show_banner=False, )