Files

1 line
57 KiB
JSON

{"repo": "ashahi10/hmdbchatbot", "files": {"backend/main.py": {"f321b4d385d8e5b98574470b6cad330c7e267f38": {"t": 1785745414.6502843, "n": 5215, "h": "8d1d90aaedd6089c", "c": "from fastapi import FastAPI\nfrom fastapi.middleware.cors import CORSMiddleware\nfrom contextlib import asynccontextmanager\nimport uvicorn\nimport os\nimport sys\n\n# Add the parent directory to sys.path so Python can find the modules\nsys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))\n\nfrom dotenv import load_dotenv\n\nfrom backend.utils.neo4j_connection import Neo4jConnection\nfrom backend.utils.schema_generator import generate_text_schema, get_or_cache_schema\nfrom backend.utils.cache_manager import CacheManager\nfrom backend.services.llm_service import MultiLLMService, LLMProvider\nfrom backend.services.memory_service import MemoryService\nfrom backend.services.decision_service import QueryDecisionService\nfrom backend.pipeline.langchain_pipeline import LangChainPipeline\nfrom backend.api.query_controller import router as query_router\nfrom backend.pipeline.hmdb_api import HMDBApiClient, RateLimiter\n\nimport time\n\nload_dotenv()\n\n# Memory debug mode - set to \"true\" to enable memory relevance debugging\nos.environ[\"DEBUG_MEMORY_RANKING\"] = os.getenv(\"DEBUG_MEMORY_RANKING\", \"true\")\n\n@asynccontextmanager\nasync def lifespan(app: FastAPI):\n start = time.time()\n\n # Create cache directories if they don't exist\n cache_manager = CacheManager()\n # You can optionally customize TTLs here\n # cache_manager = CacheManager(\n # schema_cache_ttl=86400, # 1 day\n # query_cache_ttl=3600, # 1 hour\n # api_cache_ttl=43200 # 12 hours\n # )\n \n # Create memory service\n memory_service = MemoryService()\n \n # Create decision service for intelligent query routing\n decision_service = QueryDecisionService(memory_confidence_threshold=0.65)\n \n # Check if caching is enabled via environment variable\n # Default to True if not specified\n enable_caching = os.getenv(\"ENABLE_CACHING\", \"true\").lower() == \"true\"\n\n # 1) Create rate limiter\n rate_limiter = RateLimiter()\n \n # 2) Create HMDB Client with caching enabled\n hmdb_client = HMDBApiClient(rate_limiter=rate_limiter, use_cache=enable_caching)\n \n # 3) Store in app.state\n app.state.hmdb_client = hmdb_client\n\n # load env variables, changing .env file will allow swapping bw kgs\n neo4j_uri = os.getenv(\"NEO4J_URI\")\n print(neo4j_uri)\n neo4j_user = os.getenv(\"NEO4J_USERNAME\")\n neo4j_password = os.getenv(\"NEO4J_PASSWORD\")\n\n # groq_api_key = os.getenv(\"GROQ_API_KEY\")\n groq_api_key = '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'\n deepseek_api_key = os.getenv(\"DEEPSEEK_API_KEY\")\n\n # make original connection to neo4j with caching enabled\n neo4j_connection = Neo4jConnection(\n uri=neo4j_uri,\n user=neo4j_user,\n password=neo4j_password,\n use_cache=enable_caching\n )\n \n configs = {\n \"groq\": {\n \"provider\": LLMProvider.GROQ,\n \"api_key\": groq_api_key,\n \"query_generator_model_name\": \"qwen-2.5-32b\",\n \"query_summarizer_model\": \"qwen-2.5-32b\",\n },\n \"ollama\": {\n \"provider\": LLMProvider.OLLAMA,\n \"query_generator_model_name\": \"deepseek-r1:1.5b\",\n \"query_summarizer_model\": \"deepseek-r1:1.5b\",\n },\n \"deepseek\": {\n \"provider\": LLMProvider.DEEPSEEK,\n \"api_key\": deepseek_api_key,\n \"query_generator_model_name\": \"deepseek-chat\",\n \"query_summarizer_model\": \"deepseek-chat\",\n }\n }\n\n # provider = \"ollama\"\n provider = \"groq\"\n\n # create llm service - local or remote (ollama or groq)\n llm_service = MultiLLMService(**configs[provider])\n\n # Generate or load db schema from cache\n start = time.time()\n neo4j_schema_text = get_or_cache_schema(neo4j_connection, force_reload=False)\n print(f\"[PERF] Schema load complete in {time.time() - start:.2f}s\")\n # print(neo4j_schema_text)\n\n # create query pipeline\n query_pipeline = LangChainPipeline(\n llm_service=llm_service,\n neo4j_connection=neo4j_connection,\n neo4j_schema_text=neo4j_schema_text,\n hmdb_client=hmdb_client\n )\n \n # store these in app state to use in routers\n app.state.neo4j_connection = neo4j_connection\n app.state.llm_service = llm_service\n app.state.query_pipeline = query_pipeline\n app.state.neo4j_schema_text = neo4j_schema_text\n app.state.cache_manager = cache_manager\n app.state.memory_service = memory_service\n app.state.decision_service = decision_service\n \n # Clean up expired memory sessions\n cleaned_sessions = memory_service.clean_expired_sessions()\n if cleaned_sessions > 0:\n print(f\"Cleaned {cleaned_sessions} expired memory sessions\")\n \n print(\"running fine\")\n print(f\"app startup time: {time.time() - start}\")\n yield\n # close neo4j connection before shutting down\n neo4j_connection.close()\n print(\"app shutdown, neo4j connection closed\")\n\napp = FastAPI(lifespan=lifespan)\n\napp.add_middleware(\n CORSMiddleware,\n allow_origins=[\"*\"],\n allow_credentials=True,\n allow_methods=[\"*\"],\n allow_headers=[\"*\"]\n)\n\napp.include_router(query_router)\n\nif __name__ == \"__main__\":\n uvicorn.run(app, host=\"0.0.0.0\", port=8001)"}, "272b2b1ef24d46baa4e98784aaf7d7622b87e7e4": {"t": 1785752943.0912611, "n": 5215, "h": "8d1d90aaedd6089c", "c": "from fastapi import FastAPI\nfrom fastapi.middleware.cors import CORSMiddleware\nfrom contextlib import asynccontextmanager\nimport uvicorn\nimport os\nimport sys\n\n# Add the parent directory to sys.path so Python can find the modules\nsys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))\n\nfrom dotenv import load_dotenv\n\nfrom backend.utils.neo4j_connection import Neo4jConnection\nfrom backend.utils.schema_generator import generate_text_schema, get_or_cache_schema\nfrom backend.utils.cache_manager import CacheManager\nfrom backend.services.llm_service import MultiLLMService, LLMProvider\nfrom backend.services.memory_service import MemoryService\nfrom backend.services.decision_service import QueryDecisionService\nfrom backend.pipeline.langchain_pipeline import LangChainPipeline\nfrom backend.api.query_controller import router as query_router\nfrom backend.pipeline.hmdb_api import HMDBApiClient, RateLimiter\n\nimport time\n\nload_dotenv()\n\n# Memory debug mode - set to \"true\" to enable memory relevance debugging\nos.environ[\"DEBUG_MEMORY_RANKING\"] = os.getenv(\"DEBUG_MEMORY_RANKING\", \"true\")\n\n@asynccontextmanager\nasync def lifespan(app: FastAPI):\n start = time.time()\n\n # Create cache directories if they don't exist\n cache_manager = CacheManager()\n # You can optionally customize TTLs here\n # cache_manager = CacheManager(\n # schema_cache_ttl=86400, # 1 day\n # query_cache_ttl=3600, # 1 hour\n # api_cache_ttl=43200 # 12 hours\n # )\n \n # Create memory service\n memory_service = MemoryService()\n \n # Create decision service for intelligent query routing\n decision_service = QueryDecisionService(memory_confidence_threshold=0.65)\n \n # Check if caching is enabled via environment variable\n # Default to True if not specified\n enable_caching = os.getenv(\"ENABLE_CACHING\", \"true\").lower() == \"true\"\n\n # 1) Create rate limiter\n rate_limiter = RateLimiter()\n \n # 2) Create HMDB Client with caching enabled\n hmdb_client = HMDBApiClient(rate_limiter=rate_limiter, use_cache=enable_caching)\n \n # 3) Store in app.state\n app.state.hmdb_client = hmdb_client\n\n # load env variables, changing .env file will allow swapping bw kgs\n neo4j_uri = os.getenv(\"NEO4J_URI\")\n print(neo4j_uri)\n neo4j_user = os.getenv(\"NEO4J_USERNAME\")\n neo4j_password = os.getenv(\"NEO4J_PASSWORD\")\n\n # groq_api_key = os.getenv(\"GROQ_API_KEY\")\n groq_api_key = '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'\n deepseek_api_key = os.getenv(\"DEEPSEEK_API_KEY\")\n\n # make original connection to neo4j with caching enabled\n neo4j_connection = Neo4jConnection(\n uri=neo4j_uri,\n user=neo4j_user,\n password=neo4j_password,\n use_cache=enable_caching\n )\n \n configs = {\n \"groq\": {\n \"provider\": LLMProvider.GROQ,\n \"api_key\": groq_api_key,\n \"query_generator_model_name\": \"qwen-2.5-32b\",\n \"query_summarizer_model\": \"qwen-2.5-32b\",\n },\n \"ollama\": {\n \"provider\": LLMProvider.OLLAMA,\n \"query_generator_model_name\": \"deepseek-r1:1.5b\",\n \"query_summarizer_model\": \"deepseek-r1:1.5b\",\n },\n \"deepseek\": {\n \"provider\": LLMProvider.DEEPSEEK,\n \"api_key\": deepseek_api_key,\n \"query_generator_model_name\": \"deepseek-chat\",\n \"query_summarizer_model\": \"deepseek-chat\",\n }\n }\n\n # provider = \"ollama\"\n provider = \"groq\"\n\n # create llm service - local or remote (ollama or groq)\n llm_service = MultiLLMService(**configs[provider])\n\n # Generate or load db schema from cache\n start = time.time()\n neo4j_schema_text = get_or_cache_schema(neo4j_connection, force_reload=False)\n print(f\"[PERF] Schema load complete in {time.time() - start:.2f}s\")\n # print(neo4j_schema_text)\n\n # create query pipeline\n query_pipeline = LangChainPipeline(\n llm_service=llm_service,\n neo4j_connection=neo4j_connection,\n neo4j_schema_text=neo4j_schema_text,\n hmdb_client=hmdb_client\n )\n \n # store these in app state to use in routers\n app.state.neo4j_connection = neo4j_connection\n app.state.llm_service = llm_service\n app.state.query_pipeline = query_pipeline\n app.state.neo4j_schema_text = neo4j_schema_text\n app.state.cache_manager = cache_manager\n app.state.memory_service = memory_service\n app.state.decision_service = decision_service\n \n # Clean up expired memory sessions\n cleaned_sessions = memory_service.clean_expired_sessions()\n if cleaned_sessions > 0:\n print(f\"Cleaned {cleaned_sessions} expired memory sessions\")\n \n print(\"running fine\")\n print(f\"app startup time: {time.time() - start}\")\n yield\n # close neo4j connection before shutting down\n neo4j_connection.close()\n print(\"app shutdown, neo4j connection closed\")\n\napp = FastAPI(lifespan=lifespan)\n\napp.add_middleware(\n CORSMiddleware,\n allow_origins=[\"*\"],\n allow_credentials=True,\n allow_methods=[\"*\"],\n allow_headers=[\"*\"]\n)\n\napp.include_router(query_router)\n\nif __name__ == \"__main__\":\n uvicorn.run(app, host=\"0.0.0.0\", port=8001)"}, "baf3a35e7674e98de87b6571ba7a46024629f2ad": {"t": 1785752944.2661226, "n": 5225, "h": "5d610212c58d7697", "c": "from fastapi import FastAPI\nfrom fastapi.middleware.cors import CORSMiddleware\nfrom contextlib import asynccontextmanager\nimport uvicorn\nimport os\nimport sys\n\n# Add the parent directory to sys.path so Python can find the modules\nsys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))\n\nfrom dotenv import load_dotenv\n\nfrom backend.utils.neo4j_connection import Neo4jConnection\nfrom backend.utils.schema_generator import generate_text_schema, get_or_cache_schema\nfrom backend.utils.cache_manager import CacheManager\nfrom backend.services.llm_service import MultiLLMService, LLMProvider\nfrom backend.services.memory_service import MemoryService\nfrom backend.services.decision_service import QueryDecisionService\nfrom backend.pipeline.langchain_pipeline import LangChainPipeline\nfrom backend.api.query_controller import router as query_router\n# from backend.pipeline.hmdb_api import HMDBApiClient, RateLimiter\n\nimport time\n\nload_dotenv()\n\n# Memory debug mode - set to \"true\" to enable memory relevance debugging\nos.environ[\"DEBUG_MEMORY_RANKING\"] = os.getenv(\"DEBUG_MEMORY_RANKING\", \"true\")\n\n@asynccontextmanager\nasync def lifespan(app: FastAPI):\n start = time.time()\n\n # Create cache directories if they don't exist\n cache_manager = CacheManager()\n # You can optionally customize TTLs here\n # cache_manager = CacheManager(\n # schema_cache_ttl=86400, # 1 day\n # query_cache_ttl=3600, # 1 hour\n # api_cache_ttl=43200 # 12 hours\n # )\n \n # Create memory service\n memory_service = MemoryService()\n \n # Create decision service for intelligent query routing\n decision_service = QueryDecisionService(memory_confidence_threshold=0.65)\n \n # Check if caching is enabled via environment variable\n # Default to True if not specified\n enable_caching = os.getenv(\"ENABLE_CACHING\", \"true\").lower() == \"true\"\n\n # 1) Create rate limiter\n # rate_limiter = RateLimiter()\n \n # 2) Create HMDB Client with caching enabled\n # hmdb_client = HMDBApiClient(rate_limiter=rate_limiter, use_cache=enable_caching)\n \n # 3) Store in app.state\n # app.state.hmdb_client = hmdb_client\n\n # load env variables, changing .env file will allow swapping bw kgs\n neo4j_uri = os.getenv(\"NEO4J_URI\")\n print(neo4j_uri)\n neo4j_user = os.getenv(\"NEO4J_USERNAME\")\n neo4j_password = os.getenv(\"NEO4J_PASSWORD\")\n\n # groq_api_key = os.getenv(\"GROQ_API_KEY\")\n groq_api_key = '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'\n deepseek_api_key = os.getenv(\"DEEPSEEK_API_KEY\")\n\n # make original connection to neo4j with caching enabled\n neo4j_connection = Neo4jConnection(\n uri=neo4j_uri,\n user=neo4j_user,\n password=neo4j_password,\n use_cache=enable_caching\n )\n \n configs = {\n \"groq\": {\n \"provider\": LLMProvider.GROQ,\n \"api_key\": groq_api_key,\n \"query_generator_model_name\": \"qwen-2.5-32b\",\n \"query_summarizer_model\": \"qwen-2.5-32b\",\n },\n \"ollama\": {\n \"provider\": LLMProvider.OLLAMA,\n \"query_generator_model_name\": \"deepseek-r1:1.5b\",\n \"query_summarizer_model\": \"deepseek-r1:1.5b\",\n },\n \"deepseek\": {\n \"provider\": LLMProvider.DEEPSEEK,\n \"api_key\": deepseek_api_key,\n \"query_generator_model_name\": \"deepseek-chat\",\n \"query_summarizer_model\": \"deepseek-chat\",\n }\n }\n\n # provider = \"ollama\"\n provider = \"groq\"\n\n # create llm service - local or remote (ollama or groq)\n llm_service = MultiLLMService(**configs[provider])\n\n # Generate or load db schema from cache\n start = time.time()\n neo4j_schema_text = get_or_cache_schema(neo4j_connection, force_reload=False)\n print(f\"[PERF] Schema load complete in {time.time() - start:.2f}s\")\n # print(neo4j_schema_text)\n\n # create query pipeline\n query_pipeline = LangChainPipeline(\n llm_service=llm_service,\n neo4j_connection=neo4j_connection,\n neo4j_schema_text=neo4j_schema_text,\n # hmdb_client=hmdb_client\n )\n \n # store these in app state to use in routers\n app.state.neo4j_connection = neo4j_connection\n app.state.llm_service = llm_service\n app.state.query_pipeline = query_pipeline\n app.state.neo4j_schema_text = neo4j_schema_text\n app.state.cache_manager = cache_manager\n app.state.memory_service = memory_service\n app.state.decision_service = decision_service\n \n # Clean up expired memory sessions\n cleaned_sessions = memory_service.clean_expired_sessions()\n if cleaned_sessions > 0:\n print(f\"Cleaned {cleaned_sessions} expired memory sessions\")\n \n print(\"running fine\")\n print(f\"app startup time: {time.time() - start}\")\n yield\n # close neo4j connection before shutting down\n neo4j_connection.close()\n print(\"app shutdown, neo4j connection closed\")\n\napp = FastAPI(lifespan=lifespan)\n\napp.add_middleware(\n CORSMiddleware,\n allow_origins=[\"*\"],\n allow_credentials=True,\n allow_methods=[\"*\"],\n allow_headers=[\"*\"]\n)\n\napp.include_router(query_router)\n\nif __name__ == \"__main__\":\n uvicorn.run(app, host=\"0.0.0.0\", port=8001)"}, "06499fc4eb788d842f0373401c89f09de75a7ec4": {"t": 1785752946.4590695, "n": 5216, "h": "216715316d4b4772", "c": "from fastapi import FastAPI\nfrom fastapi.middleware.cors import CORSMiddleware\nfrom contextlib import asynccontextmanager\nimport uvicorn\nimport os\nimport sys\n\n# Add the parent directory to sys.path so Python can find the modules\nsys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))\n\nfrom dotenv import load_dotenv\n\nfrom backend.utils.neo4j_connection import Neo4jConnection\nfrom backend.utils.schema_generator import generate_text_schema, get_or_cache_schema\nfrom backend.utils.cache_manager import CacheManager\nfrom backend.services.llm_service import MultiLLMService, LLMProvider\nfrom backend.services.memory_service import MemoryService\nfrom backend.services.decision_service import QueryDecisionService\nfrom backend.pipeline.langchain_pipeline import LangChainPipeline\nfrom backend.api.query_controller import router as query_router\nfrom backend.pipeline.hmdb_api import HMDBApiClient, RateLimiter\n\nimport time\n\nload_dotenv()\n\n# Memory debug mode - set to \"true\" to enable memory relevance debugging\nos.environ[\"DEBUG_MEMORY_RANKING\"] = os.getenv(\"DEBUG_MEMORY_RANKING\", \"true\")\n\n@asynccontextmanager\nasync def lifespan(app: FastAPI):\n start = time.time()\n\n # Create cache directories if they don't exist\n cache_manager = CacheManager()\n # You can optionally customize TTLs here\n # cache_manager = CacheManager(\n # schema_cache_ttl=86400, # 1 day\n # query_cache_ttl=3600, # 1 hour\n # api_cache_ttl=43200 # 12 hours\n # )\n \n # Create memory service\n memory_service = MemoryService()\n \n # Create decision service for intelligent query routing\n decision_service = QueryDecisionService(memory_confidence_threshold=0.65)\n \n # Check if caching is enabled via environment variable\n # Default to True if not specified\n enable_caching = os.getenv(\"ENABLE_CACHING\", \"true\").lower() == \"true\"\n\n # 1) Create rate limiter\n rate_limiter = RateLimiter()\n \n # 2) Create HMDB Client with caching enabled\n hmdb_client = HMDBApiClient(rate_limiter=rate_limiter, use_cache=enable_caching)\n \n # 3) Store in app.state\n app.state.hmdb_client = hmdb_client\n\n\n # load env variables, changing .env file will allow swapping bw kgs\n neo4j_uri = os.getenv(\"NEO4J_URI\")\n print(neo4j_uri)\n neo4j_user = os.getenv(\"NEO4J_USERNAME\")\n neo4j_password = os.getenv(\"NEO4J_PASSWORD\")\n\n # groq_api_key = os.getenv(\"GROQ_API_KEY\")\n groq_api_key = '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'\n deepseek_api_key = os.getenv(\"DEEPSEEK_API_KEY\")\n\n # make original connection to neo4j with caching enabled\n neo4j_connection = Neo4jConnection(\n uri=neo4j_uri,\n user=neo4j_user,\n password=neo4j_password,\n use_cache=enable_caching\n )\n \n configs = {\n \"groq\": {\n \"provider\": LLMProvider.GROQ,\n \"api_key\": groq_api_key,\n \"query_generator_model_name\": \"qwen-2.5-32b\",\n \"query_summarizer_model\": \"qwen-2.5-32b\",\n },\n \"ollama\": {\n \"provider\": LLMProvider.OLLAMA,\n \"query_generator_model_name\": \"deepseek-r1:1.5b\",\n \"query_summarizer_model\": \"deepseek-r1:1.5b\",\n },\n \"deepseek\": {\n \"provider\": LLMProvider.DEEPSEEK,\n \"api_key\": deepseek_api_key,\n \"query_generator_model_name\": \"deepseek-chat\",\n \"query_summarizer_model\": \"deepseek-chat\",\n }\n }\n\n # provider = \"ollama\"\n provider = \"groq\"\n\n # create llm service - local or remote (ollama or groq)\n llm_service = MultiLLMService(**configs[provider])\n\n # Generate or load db schema from cache\n start = time.time()\n neo4j_schema_text = get_or_cache_schema(neo4j_connection, force_reload=False)\n print(f\"[PERF] Schema load complete in {time.time() - start:.2f}s\")\n # print(neo4j_schema_text)\n\n # create query pipeline\n query_pipeline = LangChainPipeline(\n llm_service=llm_service,\n neo4j_connection=neo4j_connection,\n neo4j_schema_text=neo4j_schema_text,\n hmdb_client=hmdb_client\n )\n \n # store these in app state to use in routers\n app.state.neo4j_connection = neo4j_connection\n app.state.llm_service = llm_service\n app.state.query_pipeline = query_pipeline\n app.state.neo4j_schema_text = neo4j_schema_text\n app.state.cache_manager = cache_manager\n app.state.memory_service = memory_service\n app.state.decision_service = decision_service\n \n # Clean up expired memory sessions\n cleaned_sessions = memory_service.clean_expired_sessions()\n if cleaned_sessions > 0:\n print(f\"Cleaned {cleaned_sessions} expired memory sessions\")\n \n print(\"running fine\")\n print(f\"app startup time: {time.time() - start}\")\n yield\n # close neo4j connection before shutting down\n neo4j_connection.close()\n print(\"app shutdown, neo4j connection closed\")\n\napp = FastAPI(lifespan=lifespan)\n\napp.add_middleware(\n CORSMiddleware,\n allow_origins=[\"*\"],\n allow_credentials=True,\n allow_methods=[\"*\"],\n allow_headers=[\"*\"]\n)\n\napp.include_router(query_router)\n\nif __name__ == \"__main__\":\n uvicorn.run(app, host=\"0.0.0.0\", port=8001)"}, "8f5173b35174457d97eefcd0d1701ce7ba904096": {"t": 1785752947.7998724, "n": 5216, "h": "0192a781ec6cc222", "c": "from fastapi import FastAPI\nfrom fastapi.middleware.cors import CORSMiddleware\nfrom contextlib import asynccontextmanager\nimport uvicorn\nimport os\nimport sys\n\n# Add the parent directory to sys.path so Python can find the modules\nsys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))\n\nfrom dotenv import load_dotenv\n\nfrom backend.utils.neo4j_connection import Neo4jConnection\nfrom backend.utils.schema_generator import generate_text_schema, get_or_cache_schema\nfrom backend.utils.cache_manager import CacheManager\nfrom backend.services.llm_service import MultiLLMService, LLMProvider\nfrom backend.services.memory_service import MemoryService\nfrom backend.services.decision_service import QueryDecisionService\nfrom backend.pipeline.langchain_pipeline import LangChainPipeline\nfrom backend.api.query_controller import router as query_router\nfrom backend.pipeline.hmdb_api import HMDBApiClient, RateLimiter\n\nimport time\n\nload_dotenv()\n\n# Memory debug mode - set to \"true\" to enable memory relevance debugging\nos.environ[\"DEBUG_MEMORY_RANKING\"] = os.getenv(\"DEBUG_MEMORY_RANKING\", \"true\")\n\n@asynccontextmanager\nasync def lifespan(app: FastAPI):\n start = time.time()\n\n # Create cache directories if they don't exist\n cache_manager = CacheManager()\n # You can optionally customize TTLs here\n # cache_manager = CacheManager(\n # schema_cache_ttl=86400, # 1 day\n # query_cache_ttl=3600, # 1 hour\n # api_cache_ttl=43200 # 12 hours\n # )\n \n # Create memory service\n memory_service = MemoryService()\n \n # Create decision service for intelligent query routing\n decision_service = QueryDecisionService(memory_confidence_threshold=0.85)\n \n # Check if caching is enabled via environment variable\n # Default to True if not specified\n enable_caching = os.getenv(\"ENABLE_CACHING\", \"true\").lower() == \"true\"\n\n # 1) Create rate limiter\n rate_limiter = RateLimiter()\n \n # 2) Create HMDB Client with caching enabled\n hmdb_client = HMDBApiClient(rate_limiter=rate_limiter, use_cache=enable_caching)\n \n # 3) Store in app.state\n app.state.hmdb_client = hmdb_client\n\n\n # load env variables, changing .env file will allow swapping bw kgs\n neo4j_uri = os.getenv(\"NEO4J_URI\")\n print(neo4j_uri)\n neo4j_user = os.getenv(\"NEO4J_USERNAME\")\n neo4j_password = os.getenv(\"NEO4J_PASSWORD\")\n\n # groq_api_key = os.getenv(\"GROQ_API_KEY\")\n groq_api_key = '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'\n deepseek_api_key = os.getenv(\"DEEPSEEK_API_KEY\")\n\n # make original connection to neo4j with caching enabled\n neo4j_connection = Neo4jConnection(\n uri=neo4j_uri,\n user=neo4j_user,\n password=neo4j_password,\n use_cache=enable_caching\n )\n \n configs = {\n \"groq\": {\n \"provider\": LLMProvider.GROQ,\n \"api_key\": groq_api_key,\n \"query_generator_model_name\": \"qwen-2.5-32b\",\n \"query_summarizer_model\": \"qwen-2.5-32b\",\n },\n \"ollama\": {\n \"provider\": LLMProvider.OLLAMA,\n \"query_generator_model_name\": \"deepseek-r1:1.5b\",\n \"query_summarizer_model\": \"deepseek-r1:1.5b\",\n },\n \"deepseek\": {\n \"provider\": LLMProvider.DEEPSEEK,\n \"api_key\": deepseek_api_key,\n \"query_generator_model_name\": \"deepseek-chat\",\n \"query_summarizer_model\": \"deepseek-chat\",\n }\n }\n\n # provider = \"ollama\"\n provider = \"groq\"\n\n # create llm service - local or remote (ollama or groq)\n llm_service = MultiLLMService(**configs[provider])\n\n # Generate or load db schema from cache\n start = time.time()\n neo4j_schema_text = get_or_cache_schema(neo4j_connection, force_reload=False)\n print(f\"[PERF] Schema load complete in {time.time() - start:.2f}s\")\n # print(neo4j_schema_text)\n\n # create query pipeline\n query_pipeline = LangChainPipeline(\n llm_service=llm_service,\n neo4j_connection=neo4j_connection,\n neo4j_schema_text=neo4j_schema_text,\n hmdb_client=hmdb_client\n )\n \n # store these in app state to use in routers\n app.state.neo4j_connection = neo4j_connection\n app.state.llm_service = llm_service\n app.state.query_pipeline = query_pipeline\n app.state.neo4j_schema_text = neo4j_schema_text\n app.state.cache_manager = cache_manager\n app.state.memory_service = memory_service\n app.state.decision_service = decision_service\n \n # Clean up expired memory sessions\n cleaned_sessions = memory_service.clean_expired_sessions()\n if cleaned_sessions > 0:\n print(f\"Cleaned {cleaned_sessions} expired memory sessions\")\n \n print(\"running fine\")\n print(f\"app startup time: {time.time() - start}\")\n yield\n # close neo4j connection before shutting down\n neo4j_connection.close()\n print(\"app shutdown, neo4j connection closed\")\n\napp = FastAPI(lifespan=lifespan)\n\napp.add_middleware(\n CORSMiddleware,\n allow_origins=[\"*\"],\n allow_credentials=True,\n allow_methods=[\"*\"],\n allow_headers=[\"*\"]\n)\n\napp.include_router(query_router)\n\nif __name__ == \"__main__\":\n uvicorn.run(app, host=\"0.0.0.0\", port=8001)"}, "11cb45daf41c1380c7add2c75bbb19b1612d647f": {"t": 1785752949.025691, "n": 4956, "h": "b33a5fb0028b3e2b", "c": "from fastapi import FastAPI\nfrom fastapi.middleware.cors import CORSMiddleware\nfrom contextlib import asynccontextmanager\nimport uvicorn\nimport os\nimport sys\n\n# Add the parent directory to sys.path so Python can find the modules\nsys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))\n\nfrom dotenv import load_dotenv\n\nfrom backend.utils.neo4j_connection import Neo4jConnection\nfrom backend.utils.schema_generator import generate_text_schema, get_or_cache_schema\nfrom backend.utils.cache_manager import CacheManager\nfrom backend.services.llm_service import MultiLLMService, LLMProvider\nfrom backend.services.memory_service import MemoryService\nfrom backend.pipeline.langchain_pipeline import LangChainPipeline\nfrom backend.api.query_controller import router as query_router\nfrom backend.pipeline.hmdb_api import HMDBApiClient, RateLimiter\n\nimport time\n\nload_dotenv()\n\n# Memory debug mode - set to \"true\" to enable memory relevance debugging\nos.environ[\"DEBUG_MEMORY_RANKING\"] = os.getenv(\"DEBUG_MEMORY_RANKING\", \"true\")\n\n@asynccontextmanager\nasync def lifespan(app: FastAPI):\n start = time.time()\n\n # Create cache directories if they don't exist\n cache_manager = CacheManager()\n # You can optionally customize TTLs here\n # cache_manager = CacheManager(\n # schema_cache_ttl=86400, # 1 day\n # query_cache_ttl=3600, # 1 hour\n # api_cache_ttl=43200 # 12 hours\n # )\n \n # Create memory service\n memory_service = MemoryService()\n \n # Check if caching is enabled via environment variable\n # Default to True if not specified\n enable_caching = os.getenv(\"ENABLE_CACHING\", \"true\").lower() == \"true\"\n\n # 1) Create rate limiter\n rate_limiter = RateLimiter()\n \n # 2) Create HMDB Client with caching enabled\n hmdb_client = HMDBApiClient(rate_limiter=rate_limiter, use_cache=enable_caching)\n \n # 3) Store in app.state\n app.state.hmdb_client = hmdb_client\n\n\n # load env variables, changing .env file will allow swapping bw kgs\n neo4j_uri = os.getenv(\"NEO4J_URI\")\n print(neo4j_uri)\n neo4j_user = os.getenv(\"NEO4J_USERNAME\")\n neo4j_password = os.getenv(\"NEO4J_PASSWORD\")\n\n # groq_api_key = os.getenv(\"GROQ_API_KEY\")\n groq_api_key = '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'\n deepseek_api_key = os.getenv(\"DEEPSEEK_API_KEY\")\n\n # make original connection to neo4j with caching enabled\n neo4j_connection = Neo4jConnection(\n uri=neo4j_uri,\n user=neo4j_user,\n password=neo4j_password,\n use_cache=enable_caching\n )\n \n configs = {\n \"groq\": {\n \"provider\": LLMProvider.GROQ,\n \"api_key\": groq_api_key,\n \"query_generator_model_name\": \"qwen-2.5-32b\",\n \"query_summarizer_model\": \"qwen-2.5-32b\",\n },\n \"ollama\": {\n \"provider\": LLMProvider.OLLAMA,\n \"query_generator_model_name\": \"deepseek-r1:1.5b\",\n \"query_summarizer_model\": \"deepseek-r1:1.5b\",\n },\n \"deepseek\": {\n \"provider\": LLMProvider.DEEPSEEK,\n \"api_key\": deepseek_api_key,\n \"query_generator_model_name\": \"deepseek-chat\",\n \"query_summarizer_model\": \"deepseek-chat\",\n }\n }\n\n # provider = \"ollama\"\n provider = \"groq\"\n\n # create llm service - local or remote (ollama or groq)\n llm_service = MultiLLMService(**configs[provider])\n\n # Generate or load db schema from cache\n start = time.time()\n neo4j_schema_text = get_or_cache_schema(neo4j_connection, force_reload=False)\n print(f\"[PERF] Schema load complete in {time.time() - start:.2f}s\")\n # print(neo4j_schema_text)\n\n # create query pipeline\n query_pipeline = LangChainPipeline(\n llm_service=llm_service,\n neo4j_connection=neo4j_connection,\n neo4j_schema_text=neo4j_schema_text,\n hmdb_client=hmdb_client\n )\n \n # store these in app state to use in routers\n app.state.neo4j_connection = neo4j_connection\n app.state.llm_service = llm_service\n app.state.query_pipeline = query_pipeline\n app.state.neo4j_schema_text = neo4j_schema_text\n app.state.cache_manager = cache_manager\n app.state.memory_service = memory_service\n \n # Clean up expired memory sessions\n cleaned_sessions = memory_service.clean_expired_sessions()\n if cleaned_sessions > 0:\n print(f\"Cleaned {cleaned_sessions} expired memory sessions\")\n \n print(\"running fine\")\n print(f\"app startup time: {time.time() - start}\")\n yield\n # close neo4j connection before shutting down\n neo4j_connection.close()\n print(\"app shutdown, neo4j connection closed\")\n\napp = FastAPI(lifespan=lifespan)\n\napp.add_middleware(\n CORSMiddleware,\n allow_origins=[\"*\"],\n allow_credentials=True,\n allow_methods=[\"*\"],\n allow_headers=[\"*\"]\n)\n\napp.include_router(query_router)\n\nif __name__ == \"__main__\":\n uvicorn.run(app, host=\"0.0.0.0\", port=8001)"}, "6a6027e668cd875483d83899ca70a4f8ab684fe3": {"t": 1785752950.2081048, "n": 4424, "h": "e7a5f822a761e004", "c": "from fastapi import FastAPI\nfrom fastapi.middleware.cors import CORSMiddleware\nfrom contextlib import asynccontextmanager\nimport uvicorn\nimport os\nimport sys\n\n# Add the parent directory to sys.path so Python can find the modules\nsys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))\n\nfrom dotenv import load_dotenv\n\nfrom backend.utils.neo4j_connection import Neo4jConnection\nfrom backend.utils.schema_generator import generate_text_schema, get_or_cache_schema\nfrom backend.utils.cache_manager import CacheManager\nfrom backend.services.llm_service import MultiLLMService, LLMProvider\nfrom backend.pipeline.langchain_pipeline import LangChainPipeline\nfrom backend.api.query_controller import router as query_router\nfrom backend.pipeline.hmdb_api import HMDBApiClient, RateLimiter\n\nimport time\n\nload_dotenv()\n\n@asynccontextmanager\nasync def lifespan(app: FastAPI):\n start = time.time()\n\n # Create cache directories if they don't exist\n cache_manager = CacheManager()\n # You can optionally customize TTLs here\n # cache_manager = CacheManager(\n # schema_cache_ttl=86400, # 1 day\n # query_cache_ttl=3600, # 1 hour\n # api_cache_ttl=43200 # 12 hours\n # )\n \n # Check if caching is enabled via environment variable\n # Default to True if not specified\n enable_caching = os.getenv(\"ENABLE_CACHING\", \"true\").lower() == \"true\"\n\n # 1) Create rate limiter\n rate_limiter = RateLimiter()\n \n # 2) Create HMDB Client with caching enabled\n hmdb_client = HMDBApiClient(rate_limiter=rate_limiter, use_cache=enable_caching)\n \n # 3) Store in app.state\n app.state.hmdb_client = hmdb_client\n\n\n # load env variables, changing .env file will allow swapping bw kgs\n neo4j_uri = os.getenv(\"NEO4J_URI\")\n print(neo4j_uri)\n neo4j_user = os.getenv(\"NEO4J_USERNAME\")\n neo4j_password = os.getenv(\"NEO4J_PASSWORD\")\n\n # groq_api_key = os.getenv(\"GROQ_API_KEY\")\n groq_api_key = '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'\n deepseek_api_key = os.getenv(\"DEEPSEEK_API_KEY\")\n\n # make original connection to neo4j with caching enabled\n neo4j_connection = Neo4jConnection(\n uri=neo4j_uri,\n user=neo4j_user,\n password=neo4j_password,\n use_cache=enable_caching\n )\n \n configs = {\n \"groq\": {\n \"provider\": LLMProvider.GROQ,\n \"api_key\": groq_api_key,\n \"query_generator_model_name\": \"qwen-2.5-32b\",\n \"query_summarizer_model\": \"qwen-2.5-32b\",\n },\n \"ollama\": {\n \"provider\": LLMProvider.OLLAMA,\n \"query_generator_model_name\": \"deepseek-r1:1.5b\",\n \"query_summarizer_model\": \"deepseek-r1:1.5b\",\n },\n \"deepseek\": {\n \"provider\": LLMProvider.DEEPSEEK,\n \"api_key\": deepseek_api_key,\n \"query_generator_model_name\": \"deepseek-chat\",\n \"query_summarizer_model\": \"deepseek-chat\",\n }\n }\n\n # provider = \"ollama\"\n provider = \"groq\"\n\n # create llm service - local or remote (ollama or groq)\n llm_service = MultiLLMService(**configs[provider])\n\n # Generate or load db schema from cache\n start = time.time()\n neo4j_schema_text = get_or_cache_schema(neo4j_connection, force_reload=False)\n print(f\"[PERF] Schema load complete in {time.time() - start:.2f}s\")\n # print(neo4j_schema_text)\n\n # create query pipeline\n query_pipeline = LangChainPipeline(\n llm_service=llm_service,\n neo4j_connection=neo4j_connection,\n neo4j_schema_text=neo4j_schema_text,\n hmdb_client=hmdb_client\n )\n \n # store these in app state to use in routers\n app.state.neo4j_connection = neo4j_connection\n app.state.llm_service = llm_service\n app.state.query_pipeline = query_pipeline\n app.state.neo4j_schema_text = neo4j_schema_text\n app.state.cache_manager = cache_manager\n \n print(\"running fine\")\n print(f\"app startup time: {time.time() - start}\")\n yield\n # close neo4j connection before shutting down\n neo4j_connection.close()\n print(\"app shutdown, neo4j connection closed\")\n\napp = FastAPI(lifespan=lifespan)\n\napp.add_middleware(\n CORSMiddleware,\n allow_origins=[\"*\"],\n allow_credentials=True,\n allow_methods=[\"*\"],\n allow_headers=[\"*\"]\n)\n\napp.include_router(query_router)\n\nif __name__ == \"__main__\":\n uvicorn.run(app, host=\"0.0.0.0\", port=8001)"}, "1e6b655e758ab295a0b4ce34643973a5a8abe613": {"t": 1785752951.583371, "n": 3396, "h": "1aba8f9bf8715270", "c": "from fastapi import FastAPI\nfrom fastapi.middleware.cors import CORSMiddleware\nfrom contextlib import asynccontextmanager\nimport uvicorn\nimport os\n\nfrom dotenv import load_dotenv\n\nfrom utils.neo4j_connection import Neo4jConnection\nfrom utils.schema_generator import generate_text_schema\nfrom services.llm_service import MultiLLMService, LLMProvider\nfrom pipeline.langchain_pipeline import LangChainPipeline\nfrom api.query_controller import router as query_router\nfrom pipeline.hmdb_api import HMDBApiClient, RateLimiter\n\n\nimport time\n\nload_dotenv()\n\n@asynccontextmanager\nasync def lifespan(app: FastAPI):\n start = time.time()\n\n # 1) Create rate limiter\n rate_limiter = RateLimiter()\n \n # 2) Create HMDB Client\n hmdb_client = HMDBApiClient(rate_limiter=rate_limiter)\n \n # 3) Store in app.state\n app.state.hmdb_client = hmdb_client\n\n\n # load env variables, changing .env file will allow swapping bw kgs\n neo4j_uri = os.getenv(\"NEO4J_URI\")\n print(neo4j_uri)\n neo4j_user = os.getenv(\"NEO4J_USERNAME\")\n neo4j_password = os.getenv(\"NEO4J_PASSWORD\")\n\n # groq_api_key = os.getenv(\"GROQ_API_KEY\")\n groq_api_key = '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'\n deepseek_api_key = os.getenv(\"DEEPSEEK_API_KEY\")\n\n # make original connection to neo4j\n neo4j_connection = Neo4jConnection(\n uri=neo4j_uri,\n user=neo4j_user,\n password=neo4j_password\n )\n \n configs = {\n \"groq\": {\n \"provider\": LLMProvider.GROQ,\n \"api_key\": groq_api_key,\n \"query_generator_model_name\": \"qwen-2.5-32b\",\n \"query_summarizer_model\": \"qwen-2.5-32b\",\n },\n \"ollama\": {\n \"provider\": LLMProvider.OLLAMA,\n \"query_generator_model_name\": \"deepseek-r1:1.5b\",\n \"query_summarizer_model\": \"deepseek-r1:1.5b\",\n },\n \"deepseek\": {\n \"provider\": LLMProvider.DEEPSEEK,\n \"api_key\": deepseek_api_key,\n \"query_generator_model_name\": \"deepseek-chat\",\n \"query_summarizer_model\": \"deepseek-chat\",\n }\n }\n\n # provider = \"ollama\"\n provider = \"groq\"\n\n # create llm service - local or remote (ollama or groq)\n llm_service = MultiLLMService(**configs[provider])\n\n # load db schema - generated on app launch\n neo4j_schema_text = generate_text_schema(neo4j_connection)\n # print(neo4j_schema_text)\n\n # create query pipeline\n query_pipeline = LangChainPipeline(\n llm_service=llm_service,\n neo4j_connection=neo4j_connection,\n neo4j_schema_text=neo4j_schema_text,\n hmdb_client=hmdb_client\n )\n \n # store these in app state to use in routers\n app.state.neo4j_connection = neo4j_connection\n app.state.llm_service = llm_service\n app.state.query_pipeline = query_pipeline\n app.state.neo4j_schema_text = neo4j_schema_text\n \n print(\"running fine\")\n print(f\"app startup time: {time.time() - start}\")\n yield\n # close neo4j connection before shutting down\n neo4j_connection.close()\n print(\"app shutdown, neo4j connection closed\")\n\napp = FastAPI(lifespan=lifespan)\n\napp.add_middleware(\n CORSMiddleware,\n allow_origins=[\"*\"],\n allow_credentials=True,\n allow_methods=[\"*\"],\n allow_headers=[\"*\"]\n)\n\napp.include_router(query_router)\n\nif __name__ == \"__main__\":\n uvicorn.run(app, host=\"0.0.0.0\", port=8001)"}, "cc396e043c5bf6873e7421ac34d2d0be373bb764": {"t": 1785752953.9811993, "n": 3047, "h": "7f33dcf73fa34a9d", "c": "from fastapi import FastAPI\nfrom fastapi.middleware.cors import CORSMiddleware\nfrom contextlib import asynccontextmanager\nimport uvicorn\nimport os\n\nfrom dotenv import load_dotenv\n\nfrom utils.neo4j_connection import Neo4jConnection\nfrom utils.schema_generator import generate_text_schema\nfrom services.llm_service import MultiLLMService, LLMProvider\nfrom pipeline.langchain_pipeline import LangChainPipeline\nfrom api.query_controller import router as query_router\n\nimport time\n\nload_dotenv()\n\n@asynccontextmanager\nasync def lifespan(app: FastAPI):\n start = time.time()\n # load env variables, changing .env file will allow swapping bw kgs\n neo4j_uri = os.getenv(\"NEO4J_URI\")\n print(neo4j_uri)\n neo4j_user = os.getenv(\"NEO4J_USER\")\n neo4j_password = os.getenv(\"NEO4J_PASSWORD\")\n\n # groq_api_key = os.getenv(\"GROQ_API_KEY\")\n groq_api_key = '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'\n deepseek_api_key = os.getenv(\"DEEPSEEK_API_KEY\")\n\n # make original connection to neo4j\n neo4j_connection = Neo4jConnection(\n uri=neo4j_uri,\n user=neo4j_user,\n password=neo4j_password\n )\n \n configs = {\n \"groq\": {\n \"provider\": LLMProvider.GROQ,\n \"api_key\": groq_api_key,\n \"query_generator_model_name\": \"qwen-2.5-32b\",\n \"query_summarizer_model\": \"qwen-2.5-32b\",\n },\n \"ollama\": {\n \"provider\": LLMProvider.OLLAMA,\n \"query_generator_model_name\": \"deepseek-r1:1.5b\",\n \"query_summarizer_model\": \"deepseek-r1:1.5b\",\n },\n \"deepseek\": {\n \"provider\": LLMProvider.DEEPSEEK,\n \"api_key\": deepseek_api_key,\n \"query_generator_model_name\": \"deepseek-chat\",\n \"query_summarizer_model\": \"deepseek-chat\",\n }\n }\n\n provider = \"ollama\"\n\n # create llm service - local or remote (ollama or groq)\n llm_service = MultiLLMService(**configs[provider])\n\n # load db schema - generated on app launch\n neo4j_schema_text = generate_text_schema(neo4j_connection)\n # print(neo4j_schema_text)\n\n # create query pipeline\n query_pipeline = LangChainPipeline(\n llm_service=llm_service,\n neo4j_connection=neo4j_connection,\n neo4j_schema_text=neo4j_schema_text\n )\n \n # store these in app state to use in routers\n app.state.neo4j_connection = neo4j_connection\n app.state.llm_service = llm_service\n app.state.query_pipeline = query_pipeline\n app.state.neo4j_schema_text = neo4j_schema_text\n \n print(\"running fine\")\n print(f\"app startup time: {time.time() - start}\")\n yield\n # close neo4j connection before shutting down\n neo4j_connection.close()\n print(\"app shutdown, neo4j connection closed\")\n\napp = FastAPI(lifespan=lifespan)\n\napp.add_middleware(\n CORSMiddleware,\n allow_origins=[\"*\"],\n allow_credentials=True,\n allow_methods=[\"*\"],\n allow_headers=[\"*\"]\n)\n\napp.include_router(query_router)\n\nif __name__ == \"__main__\":\n uvicorn.run(app, host=\"0.0.0.0\", port=8001)"}, "89bd64a0103c32520b5e74aad5f59e51274b39db": {"t": 1785752955.263114, "n": 3067, "h": "21c727485a4d1caf", "c": "from fastapi import FastAPI\nfrom fastapi.middleware.cors import CORSMiddleware\nfrom contextlib import asynccontextmanager\nimport uvicorn\nimport os\n\nfrom dotenv import load_dotenv\n\nfrom utils.neo4j_connection import Neo4jConnection\nfrom utils.schema_generator import generate_text_schema\nfrom services.llm_service import MultiLLMService, LLMProvider\nfrom pipeline.langchain_pipeline import LangChainPipeline\nfrom api.query_controller import router as query_router\n\nimport time\n\nload_dotenv()\n\n@asynccontextmanager\nasync def lifespan(app: FastAPI):\n start = time.time()\n # load env variables, changing .env file will allow swapping bw kgs\n neo4j_uri = os.getenv(\"NEO4J_URI\")\n print(neo4j_uri)\n neo4j_user = os.getenv(\"NEO4J_USER\")\n neo4j_password = os.getenv(\"NEO4J_PASSWORD\")\n\n # groq_api_key = os.getenv(\"GROQ_API_KEY\")\n groq_api_key = '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'\n deepseek_api_key = os.getenv(\"DEEPSEEK_API_KEY\")\n\n # make original connection to neo4j\n neo4j_connection = Neo4jConnection(\n uri=neo4j_uri,\n user=neo4j_user,\n password=neo4j_password\n )\n \n configs = {\n \"groq\": {\n \"provider\": LLMProvider.GROQ,\n \"api_key\": groq_api_key,\n \"query_generator_model_name\": \"qwen-2.5-32b\",\n \"query_summarizer_model\": \"qwen-2.5-32b\",\n },\n \"ollama\": {\n \"provider\": LLMProvider.OLLAMA,\n \"query_generator_model_name\": \"tomasonjo/llama3-text2cypher-demo\",\n \"query_summarizer_model\": \"mistral-nemo:latest\",\n },\n \"deepseek\": {\n \"provider\": LLMProvider.DEEPSEEK,\n \"api_key\": deepseek_api_key,\n \"query_generator_model_name\": \"deepseek-chat\",\n \"query_summarizer_model\": \"deepseek-chat\",\n }\n }\n\n provider = \"ollama\"\n\n # create llm service - local or remote (ollama or groq)\n llm_service = MultiLLMService(**configs[provider])\n\n # load db schema - generated on app launch\n neo4j_schema_text = generate_text_schema(neo4j_connection)\n # print(neo4j_schema_text)\n\n # create query pipeline\n query_pipeline = LangChainPipeline(\n llm_service=llm_service,\n neo4j_connection=neo4j_connection,\n neo4j_schema_text=neo4j_schema_text\n )\n \n # store these in app state to use in routers\n app.state.neo4j_connection = neo4j_connection\n app.state.llm_service = llm_service\n app.state.query_pipeline = query_pipeline\n app.state.neo4j_schema_text = neo4j_schema_text\n \n print(\"running fine\")\n print(f\"app startup time: {time.time() - start}\")\n yield\n # close neo4j connection before shutting down\n neo4j_connection.close()\n print(\"app shutdown, neo4j connection closed\")\n\napp = FastAPI(lifespan=lifespan)\n\napp.add_middleware(\n CORSMiddleware,\n allow_origins=[\"*\"],\n allow_credentials=True,\n allow_methods=[\"*\"],\n allow_headers=[\"*\"]\n)\n\napp.include_router(query_router)\n\nif __name__ == \"__main__\":\n uvicorn.run(app, host=\"0.0.0.0\", port=8001)"}, "e0e83cc311d1e134cfa52d779dbdcfcee32fc673": {"t": 1785752956.5024068, "n": 2965, "h": "2f3eda0b8a109e79", "c": "from fastapi import FastAPI\nfrom fastapi.middleware.cors import CORSMiddleware\nfrom contextlib import asynccontextmanager\nimport uvicorn\nimport os\n\nfrom dotenv import load_dotenv\n\nfrom utils.neo4j_connection import Neo4jConnection\nfrom utils.schema_generator import generate_text_schema\nfrom services.llm_service import MultiLLMService, LLMProvider\nfrom pipeline.langchain_pipeline import LangChainPipeline\nfrom api.query_controller import router as query_router\n\nimport time\n\nload_dotenv()\n\n@asynccontextmanager\nasync def lifespan(app: FastAPI):\n start = time.time()\n # load env variables, changing .env file will allow swapping bw kgs\n neo4j_uri = os.getenv(\"NEO4J_URI\")\n neo4j_user = os.getenv(\"NEO4J_USER\")\n neo4j_password = os.getenv(\"NEO4J_PASSWORD\")\n\n groq_api_key = os.getenv(\"GROQ_API_KEY\")\n\n deepseek_api_key = os.getenv(\"DEEPSEEK_API_KEY\")\n\n # make original connection to neo4j\n neo4j_connection = Neo4jConnection(\n uri=neo4j_uri,\n user=neo4j_user,\n password=neo4j_password\n )\n \n configs = {\n \"groq\": {\n \"provider\": LLMProvider.GROQ,\n \"api_key\": groq_api_key,\n \"query_generator_model_name\": \"qwen-2.5-32b\",\n \"query_summarizer_model\": \"qwen-2.5-32b\",\n },\n \"ollama\": {\n \"provider\": LLMProvider.OLLAMA,\n \"query_generator_model_name\": \"tomasonjo/llama3-text2cypher-demo\",\n \"query_summarizer_model\": \"mistral-nemo:latest\",\n },\n \"deepseek\": {\n \"provider\": LLMProvider.DEEPSEEK,\n \"api_key\": deepseek_api_key,\n \"query_generator_model_name\": \"deepseek-chat\",\n \"query_summarizer_model\": \"deepseek-chat\",\n }\n }\n\n provider = \"groq\"\n\n # create llm service - local or remote (ollama or groq)\n llm_service = MultiLLMService(**configs[provider])\n\n # load db schema - generated on app launch\n neo4j_schema_text = generate_text_schema(neo4j_connection)\n # print(neo4j_schema_text)\n\n # create query pipeline\n query_pipeline = LangChainPipeline(\n llm_service=llm_service,\n neo4j_connection=neo4j_connection,\n neo4j_schema_text=neo4j_schema_text\n )\n \n # store these in app state to use in routers\n app.state.neo4j_connection = neo4j_connection\n app.state.llm_service = llm_service\n app.state.query_pipeline = query_pipeline\n app.state.neo4j_schema_text = neo4j_schema_text\n \n print(\"running fine\")\n print(f\"app startup time: {time.time() - start}\")\n yield\n # close neo4j connection before shutting down\n neo4j_connection.close()\n print(\"app shutdown, neo4j connection closed\")\n\napp = FastAPI(lifespan=lifespan)\n\napp.add_middleware(\n CORSMiddleware,\n allow_origins=[\"*\"],\n allow_credentials=True,\n allow_methods=[\"*\"],\n allow_headers=[\"*\"]\n)\n\napp.include_router(query_router)\n\nif __name__ == \"__main__\":\n uvicorn.run(app, host=\"0.0.0.0\", port=8001)"}, "c8bf035bc8c008c967a3fccf480558d6a51359c2": {"t": 1785752957.7979057, "n": 3044, "h": "3f733030ce6766d4", "c": "from fastapi import FastAPI\nfrom fastapi.middleware.cors import CORSMiddleware\nfrom contextlib import asynccontextmanager\nimport uvicorn\nimport os\n\nfrom dotenv import load_dotenv\n\nfrom utils.neo4j_connection import Neo4jConnection\nfrom utils.schema_generator import generate_text_schema\nfrom services.llm_service import MultiLLMService, LLMProvider\nfrom pipeline.langchain_pipeline import LangChainPipeline\nfrom api.query_controller import router as query_router\n\nimport time\n\nload_dotenv()\n\n@asynccontextmanager\nasync def lifespan(app: FastAPI):\n start = time.time()\n # load env variables, changing .env file will allow swapping bw kgs\n neo4j_uri = os.getenv(\"NEO4J_URI\")\n neo4j_user = os.getenv(\"NEO4J_USER\")\n neo4j_password = os.getenv(\"NEO4J_PASSWORD\")\n\n # groq_api_key = os.getenv(\"GROQ_API_KEY\")\n groq_api_key = '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'\n deepseek_api_key = os.getenv(\"DEEPSEEK_API_KEY\")\n\n # make original connection to neo4j\n neo4j_connection = Neo4jConnection(\n uri=neo4j_uri,\n user=neo4j_user,\n password=neo4j_password\n )\n \n configs = {\n \"groq\": {\n \"provider\": LLMProvider.GROQ,\n \"api_key\": groq_api_key,\n \"query_generator_model_name\": \"qwen-2.5-32b\",\n \"query_summarizer_model\": \"qwen-2.5-32b\",\n },\n \"ollama\": {\n \"provider\": LLMProvider.OLLAMA,\n \"query_generator_model_name\": \"tomasonjo/llama3-text2cypher-demo\",\n \"query_summarizer_model\": \"mistral-nemo:latest\",\n },\n \"deepseek\": {\n \"provider\": LLMProvider.DEEPSEEK,\n \"api_key\": deepseek_api_key,\n \"query_generator_model_name\": \"deepseek-chat\",\n \"query_summarizer_model\": \"deepseek-chat\",\n }\n }\n\n provider = \"groq\"\n\n # create llm service - local or remote (ollama or groq)\n llm_service = MultiLLMService(**configs[provider])\n\n # load db schema - generated on app launch\n neo4j_schema_text = generate_text_schema(neo4j_connection)\n # print(neo4j_schema_text)\n\n # create query pipeline\n query_pipeline = LangChainPipeline(\n llm_service=llm_service,\n neo4j_connection=neo4j_connection,\n neo4j_schema_text=neo4j_schema_text\n )\n \n # store these in app state to use in routers\n app.state.neo4j_connection = neo4j_connection\n app.state.llm_service = llm_service\n app.state.query_pipeline = query_pipeline\n app.state.neo4j_schema_text = neo4j_schema_text\n \n print(\"running fine\")\n print(f\"app startup time: {time.time() - start}\")\n yield\n # close neo4j connection before shutting down\n neo4j_connection.close()\n print(\"app shutdown, neo4j connection closed\")\n\napp = FastAPI(lifespan=lifespan)\n\napp.add_middleware(\n CORSMiddleware,\n allow_origins=[\"*\"],\n allow_credentials=True,\n allow_methods=[\"*\"],\n allow_headers=[\"*\"]\n)\n\napp.include_router(query_router)\n\nif __name__ == \"__main__\":\n uvicorn.run(app, host=\"0.0.0.0\", port=8001)"}, "d8d915fc36680cee70630715b47aa9499c528623": {"t": 1785752959.628871, "n": 2874, "h": "e6ddb07c50731644", "c": "from fastapi import FastAPI\nfrom fastapi.middleware.cors import CORSMiddleware\nfrom contextlib import asynccontextmanager\nimport uvicorn\nimport os\n\nfrom dotenv import load_dotenv\n\nfrom utils.neo4j_connection import Neo4jConnection\nfrom utils.schema_generator import generate_text_schema\nfrom services.llm_service import MultiLLMService, LLMProvider\nfrom pipeline.langchain_pipeline import LangChainPipeline\nfrom api.query_controller import router as query_router\n\nload_dotenv()\n\n@asynccontextmanager\nasync def lifespan(app: FastAPI):\n # load env variables, changing .env file will allow swapping bw kgs\n neo4j_uri = os.getenv(\"NEO4J_URI\")\n neo4j_user = os.getenv(\"NEO4J_USER\")\n neo4j_password = os.getenv(\"NEO4J_PASSWORD\")\n\n groq_api_key = os.getenv(\"GROQ_API_KEY\")\n deepseek_api_key = os.getenv(\"DEEPSEEK_API_KEY\")\n\n # make original connection to neo4j\n neo4j_connection = Neo4jConnection(\n uri=neo4j_uri,\n user=neo4j_user,\n password=neo4j_password\n )\n \n configs = {\n \"groq\": {\n \"provider\": LLMProvider.GROQ,\n \"api_key\": groq_api_key,\n \"query_generator_model_name\": \"qwen-2.5-32b\",\n \"query_summarizer_model\": \"qwen-2.5-32b\",\n },\n \"ollama\": {\n \"provider\": LLMProvider.OLLAMA,\n \"query_generator_model_name\": \"tomasonjo/llama3-text2cypher-demo\",\n \"query_summarizer_model\": \"mistral-nemo:latest\",\n },\n \"deepseek\": {\n \"provider\": LLMProvider.DEEPSEEK,\n \"api_key\": deepseek_api_key,\n \"query_generator_model_name\": \"deepseek-chat\",\n \"query_summarizer_model\": \"deepseek-chat\",\n }\n }\n\n provider = \"groq\"\n\n # create llm service - local or remote (ollama or groq)\n llm_service = MultiLLMService(**configs[provider])\n\n # load db schema - generated on app launch\n neo4j_schema_text = generate_text_schema(neo4j_connection)\n # print(neo4j_schema_text)\n\n # create query pipeline\n query_pipeline = LangChainPipeline(\n llm_service=llm_service,\n neo4j_connection=neo4j_connection,\n neo4j_schema_text=neo4j_schema_text\n )\n \n # store these in app state to use in routers\n app.state.neo4j_connection = neo4j_connection\n app.state.llm_service = llm_service\n app.state.query_pipeline = query_pipeline\n app.state.neo4j_schema_text = neo4j_schema_text\n \n print(\"running fine\")\n yield\n # close neo4j connection before shutting down\n neo4j_connection.close()\n print(\"app shutdown, neo4j connection closed\")\n\napp = FastAPI(lifespan=lifespan)\n\napp.add_middleware(\n CORSMiddleware,\n allow_origins=[\"*\"],\n allow_credentials=True,\n allow_methods=[\"*\"],\n allow_headers=[\"*\"]\n)\n\napp.include_router(query_router)\n\nif __name__ == \"__main__\":\n uvicorn.run(app, host=\"0.0.0.0\", port=8001)\n"}}}}