55from pydantic import Field as _Field
66from langchain_neo4j import Neo4jGraph
77import json
8+ import time
89
910from nedrexapi .common import (
1011 _API_KEY_HEADER_ARG ,
2021
2122_NEO4J_PORT = _config [f'db.{ _config ["api.status" ]} .neo4j_bolt_port_internal' ]
2223_NEO4J_HOST = _config [f'db.{ _config ["api.status" ]} .neo4j_name' ]
23- _NEO4J_DRIVER = None
24-
25- try :
26- _NEO4J_DRIVER = Neo4jGraph (f"bolt://{ _NEO4J_HOST } :{ _NEO4J_PORT } " , username = "" , password = "" , database = 'neo4j' )
27- except Exception as exc :
28- logger .error ("Failed to initialize Neo4j driver for embeddings routes: {}" , exc )
24+ open_con = None
25+ # _NEO4J_DRIVER = None
26+ #
27+ # try:
28+ # _NEO4J_DRIVER = Neo4jGraph(f"bolt://{_NEO4J_HOST}:{_NEO4J_PORT}", username="", password="", database='neo4j')
29+ # except Exception as exc:
30+ # logger.error("Failed to initialize Neo4j driver for embeddings routes: {}", exc)
2931
3032router = _APIRouter ()
3133
@@ -37,13 +39,41 @@ class QueryEmbeddingRequest(_BaseModel):
3739
3840DEFAULT_QUERY_EMBEDDING_REQUEST = QueryEmbeddingRequest ()
3941
42+ def get_kg_connection () -> Neo4jGraph :
43+ global open_con
44+ NEO4J_URI = f'bolt://{ _NEO4J_HOST } :7687'
45+
46+ retry = 10
47+ while retry > 0 :
48+ try :
49+ if open_con is None :
50+ logger .debug (f"Opening connection to { NEO4J_URI } " )
51+ open_con = Neo4jGraph (
52+ url = NEO4J_URI , username = "" , password = "" , database = 'neo4j'
53+ )
54+ if open_con is not None :
55+ return open_con
56+ except Exception :
57+ retry -= 1
58+ if retry == 0 :
59+ logger .error (f"Failed to connect to Neo4j at { NEO4J_URI } after { 10 } retries!" )
60+ return None
61+ time .sleep (5 )
62+
63+
64+ def close_kg_connection ():
65+ global open_con
66+ if open_con is not None :
67+ open_con .close ()
68+ open_con = None
69+
70+
4071def run_neo4j_query (neo4j_query , params = {}):
41- if _NEO4J_DRIVER is None :
42- raise _HTTPException ( status_code = 503 , detail = "Embeddings backend is not configured." )
43- res = _NEO4J_DRIVER . query ( query = neo4j_query , params = params )
72+ kg = get_kg_connection ()
73+ res = kg . query ( query = neo4j_query , params = params )
74+ kg . close ( )
4475 return res
4576
46-
4777def to_json (result ):
4878 return json .dumps ([json .loads (json .dumps (result , default = lambda o : dict (o )))]) + "\n "
4979
0 commit comments