From 1cc56f1cb53cf009e2d9cdb0903ef50251d3ced7 Mon Sep 17 00:00:00 2001 From: Yuguo Qin Date: Mon, 17 Feb 2025 03:03:14 +0800 Subject: [PATCH 1/7] Current docker setup. --- .env.example | 88 ++++++++++++++++++---------------- docker-compose.yml | 29 ++++++++++- lightragDBs/docker-compose.yml | 44 +++++++++++++++++ 3 files changed, 118 insertions(+), 43 deletions(-) create mode 100644 lightragDBs/docker-compose.yml diff --git a/.env.example b/.env.example index 2701335a..e60b2bf3 100644 --- a/.env.example +++ b/.env.example @@ -1,20 +1,19 @@ ### Server Configuration -# HOST=0.0.0.0 -# PORT=9621 -# NAMESPACE_PREFIX=lightrag # separating data from difference Lightrag instances -# CORS_ORIGINS=http://localhost:3000,http://localhost:8080 +HOST=0.0.0.0 +PORT=9621 +NAMESPACE_PREFIX=lightrag_1 # separating data from difference Lightrag instances ### Optional SSL Configuration -# SSL=true -# SSL_CERTFILE=/path/to/cert.pem -# SSL_KEYFILE=/path/to/key.pem +#SSL=true +#SSL_CERTFILE=/path/to/cert.pem +#SSL_KEYFILE=/path/to/key.pem ### Security (empty for no api-key is needed) # LIGHTRAG_API_KEY=your-secure-api-key-here ### Directory Configuration -# WORKING_DIR= -# INPUT_DIR= +# WORKING_DIR=./rag_storage +# INPUT_DIR=./inputs ### Logging level LOG_LEVEL=INFO @@ -38,15 +37,15 @@ MAX_EMBED_TOKENS=8192 ### LLM Configuration (Use valid host. For local services, you can use host.docker.internal) ### Ollama example -LLM_BINDING=ollama -LLM_BINDING_HOST=http://host.docker.internal:11434 -LLM_MODEL=mistral-nemo:latest +# LLM_BINDING=ollama +# LLM_BINDING_HOST=http://host.docker.internal:11434 +# LLM_MODEL=mistral-nemo:latest ### OpenAI alike example -# LLM_BINDING=openai -# LLM_MODEL=deepseek-chat -# LLM_BINDING_HOST=https://api.deepseek.com -# LLM_BINDING_API_KEY=your_api_key +LLM_BINDING=openai +LLM_MODEL=deepseek-chat +LLM_BINDING_HOST=https://api.deepseek.com +LLM_BINDING_API_KEY=your_api_key ### for OpenAI LLM (LLM_BINDING_API_KEY take priority) # OPENAI_API_KEY=your_api_key @@ -61,6 +60,7 @@ LLM_MODEL=mistral-nemo:latest # Ollama example EMBEDDING_BINDING=ollama EMBEDDING_BINDING_HOST=http://host.docker.internal:11434 +EMBEDDING_BINDING_API_KEY= EMBEDDING_MODEL=bge-m3:latest ### Lollms example @@ -78,56 +78,60 @@ EMBEDDING_MODEL=bge-m3:latest # AZURE_EMBEDDING_API_VERSION=2023-05-15 ### Data storage selection -# LIGHTRAG_KV_STORAGE=PGKVStorage -# LIGHTRAG_VECTOR_STORAGE=PGVectorStorage -# LIGHTRAG_GRAPH_STORAGE=PGGraphStorage -# LIGHTRAG_DOC_STATUS_STORAGE=PGDocStatusStorage +LIGHTRAG_KV_STORAGE=RedisKVStorage +LIGHTRAG_VECTOR_STORAGE=QdrantVectorDBStorage +LIGHTRAG_GRAPH_STORAGE=Neo4JStorage +LIGHTRAG_DOC_STATUS_STORAGE=MongoDocStatusStorage ### Oracle Database Configuration -ORACLE_DSN=localhost:1521/XEPDB1 -ORACLE_USER=your_username -ORACLE_PASSWORD='your_password' -ORACLE_CONFIG_DIR=/path/to/oracle/config +#ORACLE_DSN=localhost:1521/XEPDB1 +#ORACLE_USER=your_username +#ORACLE_PASSWORD='your_password' +#ORACLE_CONFIG_DIR=/path/to/oracle/config #ORACLE_WALLET_LOCATION=/path/to/wallet # optional #ORACLE_WALLET_PASSWORD='your_password' # optional #ORACLE_WORKSPACE=default # separating all data from difference Lightrag instances(deprecated, use NAMESPACE_PREFIX in future) ### TiDB Configuration -TIDB_HOST=localhost -TIDB_PORT=4000 -TIDB_USER=your_username -TIDB_PASSWORD='your_password' -TIDB_DATABASE=your_database +#TIDB_HOST=localhost +#TIDB_PORT=4000 +#TIDB_USER=your_username +#TIDB_PASSWORD='your_password' +#TIDB_DATABASE=your_database #TIDB_WORKSPACE=default # separating all data from difference Lightrag instances(deprecated, use NAMESPACE_PREFIX in future) ### PostgreSQL Configuration -POSTGRES_HOST=localhost -POSTGRES_PORT=5432 -POSTGRES_USER=your_username -POSTGRES_PASSWORD='your_password' -POSTGRES_DATABASE=your_database +# POSTGRES_HOST=postgres +# POSTGRES_PORT=5432 +# POSTGRES_USER=postgres +# POSTGRES_PASSWORD='your_password' +# POSTGRES_DATABASE=lightrag #POSTGRES_WORKSPACE=default # separating all data from difference Lightrag instances(deprecated, use NAMESPACE_PREFIX in future) ### Independent AGM Configuration(not for AMG embedded in PostreSQL) -AGE_POSTGRES_DB= -AGE_POSTGRES_USER= -AGE_POSTGRES_PASSWORD= -AGE_POSTGRES_HOST= +#AGE_POSTGRES_DB= +#AGE_POSTGRES_USER= +#AGE_POSTGRES_PASSWORD= +#AGE_POSTGRES_HOST= # AGE_POSTGRES_PORT=8529 # AGE Graph Name(apply to PostgreSQL and independent AGM) # AGE_GRAPH_NAME=lightrag # deprecated, use NAME_SPACE_PREFIX instead ### Neo4j Configuration -NEO4J_URI=neo4j+s://xxxxxxxx.databases.neo4j.io +NEO4J_URI=neo4j+s://neo4j NEO4J_USERNAME=neo4j NEO4J_PASSWORD='your_password' +NEO4J_DATABASE=neo4j # IMPORTANT: free version of neo4j does not support multiple databases, therefore we force it to neo4j ### MongoDB Configuration -MONGODB_URI=mongodb://root:root@localhost:27017/ -MONGODB_DATABASE=LightRAG +MONGO_URI=mongodb://mongodb:root@mongodb:27017/ +MONGO_DATABASE=lightrag MONGODB_GRAPH=false # deprecated (keep for backward compatibility) ### Qdrant -QDRANT_URL=http://localhost:16333 +QDRANT_URL=http://qdrant:16333 QDRANT_API_KEY=your-api-key # 可选 + +### Redis +REDIS_URI=redis://redis:6379 diff --git a/docker-compose.yml b/docker-compose.yml index b5659692..41ecdfba 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,10 +1,30 @@ version: '3.8' +name: ${NAMESPACE_PREFIX} services: + neo4j: + image: neo4j + environment: + NEO4J_AUTH: ${NEO4J_USERNAME}/${NEO4J_PASSWORD} + NEO4J_apoc_export_file_enabled: true + NEO4J_apoc_import_file_enabled: true + NEO4J_apoc_import_file_use__neo4j__config: true + NEO4J_PLUGINS: '["apoc"]' + volumes: + - ./data/neo4j/data:/data + - ./data/neo4j/plugins:/plugins + - ./data/neo4j/logs:/logs + ports: + - "127.0.0.1:7474:7474" # HTTP + - "127.0.0.1:7687:7687" # Bolt + networks: + - lightrag_net + restart: always + lightrag: build: . ports: - - "${PORT:-9621}:9621" + - "127.0.0.1:9621:9621" volumes: - ./data/rag_storage:/app/data/rag_storage - ./data/inputs:/app/data/inputs @@ -16,8 +36,15 @@ services: restart: unless-stopped networks: - lightrag_net + - lightrag_db_network extra_hosts: - "host.docker.internal:host-gateway" + depends_on: + - neo4j + networks: lightrag_net: driver: bridge + lightrag_db_network: + name: lightrag_db_network + external: true diff --git a/lightragDBs/docker-compose.yml b/lightragDBs/docker-compose.yml new file mode 100644 index 00000000..cc2695fc --- /dev/null +++ b/lightragDBs/docker-compose.yml @@ -0,0 +1,44 @@ +version: '3.8' +name: lightrag_db + +services: + mongodb: + image: mongo + environment: + MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME} + MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD} + volumes: + - ./volumes/mongodb:/data/db + # ports: + # - "27017:27017" + networks: + - lightrag_db_network + restart: always + + qdrant: + image: qdrant/qdrant + volumes: + - ./volumes/qdrant:/qdrant/storage + - ./volumes/qdrant/snapshots:/qdrant/snapshots + environment: + QDRANT__SERVICE__API_KEY: ${VECTOR_STORE_DB_API_KEY} + # ports: + # - "6333:6333" # REST API + # - "6334:6334" # GRPC + networks: + - lightrag_db_network + restart: always + + redis: + image: redis:alpine + volumes: + - ./volumes/redis:/data + # ports: + # - "127.0.0.1:6379:6379" + networks: + - lightrag_db_network + restart: always + +networks: + lightrag_db_network: + name: lightrag_db_network From d2f1e961ece9b4d8a0ac7b28d1d47c6841554140 Mon Sep 17 00:00:00 2001 From: ultrageopro Date: Mon, 17 Feb 2025 12:58:04 +0300 Subject: [PATCH 2/7] feat: neo4j custom timeouts & fix: neo4j max_pool_size --- lightrag/kg/neo4j_impl.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/lightrag/kg/neo4j_impl.py b/lightrag/kg/neo4j_impl.py index 5ffbf2bc..f8868ecb 100644 --- a/lightrag/kg/neo4j_impl.py +++ b/lightrag/kg/neo4j_impl.py @@ -69,12 +69,24 @@ class Neo4JStorage(BaseGraphStorage): config.get("neo4j", "connection_pool_size", fallback=800), ) ) + CONNECTION_TIMEOUT = float( + os.environ.get("NEO4J_CONNECTION_TIMEOUT"), + config.get("neo4j", "connection_timeout", fallback=60.0), + ) + CONNECTION_ACQUISITION_TIMEOUT = float( + os.environ.get("NEO4J_CONNECTION_ACQUISITION_TIMEOUT"), + config.get("neo4j", "connection_acquisition_timeout", fallback=60.0), + ) DATABASE = os.environ.get( "NEO4J_DATABASE", re.sub(r"[^a-zA-Z0-9-]", "-", namespace) ) self._driver: AsyncDriver = AsyncGraphDatabase.driver( - URI, auth=(USERNAME, PASSWORD) + URI, + auth=(USERNAME, PASSWORD), + max_connection_pool_size=MAX_CONNECTION_POOL_SIZE, + connection_timeout=CONNECTION_TIMEOUT, + connection_acquisition_timeout=CONNECTION_ACQUISITION_TIMEOUT, ) # Try to connect to the database @@ -82,6 +94,8 @@ class Neo4JStorage(BaseGraphStorage): URI, auth=(USERNAME, PASSWORD), max_connection_pool_size=MAX_CONNECTION_POOL_SIZE, + connection_timeout=CONNECTION_TIMEOUT, + connection_acquisition_timeout=CONNECTION_ACQUISITION_TIMEOUT, ) as _sync_driver: for database in (DATABASE, None): self._DATABASE = database From 22c319420f13add73b02f27e212b74256fe90031 Mon Sep 17 00:00:00 2001 From: Yuguo Qin Date: Mon, 17 Feb 2025 19:56:46 +0800 Subject: [PATCH 3/7] Fix neo4j outdated get_edge() return data format. --- lightrag/kg/neo4j_impl.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/lightrag/kg/neo4j_impl.py b/lightrag/kg/neo4j_impl.py index 5ffbf2bc..e7a59b0c 100644 --- a/lightrag/kg/neo4j_impl.py +++ b/lightrag/kg/neo4j_impl.py @@ -278,14 +278,16 @@ class Neo4JStorage(BaseGraphStorage): result = await session.run(query) record = await result.single() - if record and "edge_properties" in record: + if record: try: result = dict(record["edge_properties"]) + logger.info(f"Result: {result}") # Ensure required keys exist with defaults required_keys = { "weight": 0.0, "source_id": None, - "target_id": None, + "description": None, + "keywords": None, } for key, default_value in required_keys.items(): if key not in result: @@ -305,20 +307,20 @@ class Neo4JStorage(BaseGraphStorage): f"and {entity_name_label_target}: {str(e)}" ) # Return default edge properties on error - return {"weight": 0.0, "source_id": None, "target_id": None} + return {"weight": 0.0, "description": None, "keywords": None, "source_id": None} logger.debug( f"{inspect.currentframe().f_code.co_name}: No edge found between {entity_name_label_source} and {entity_name_label_target}" ) # Return default edge properties when no edge found - return {"weight": 0.0, "source_id": None, "target_id": None} + return {"weight": 0.0, "description": None, "keywords": None, "source_id": None} except Exception as e: logger.error( f"Error in get_edge between {source_node_id} and {target_node_id}: {str(e)}" ) # Return default edge properties on error - return {"weight": 0.0, "source_id": None, "target_id": None} + return {"weight": 0.0, "description": None, "keywords": None, "source_id": None} async def get_node_edges(self, source_node_id: str) -> list[tuple[str, str]] | None: node_label = source_node_id.strip('"') From 1a5f6969e9d2954710248d06e93507a19575280e Mon Sep 17 00:00:00 2001 From: Yuguo Qin Date: Mon, 17 Feb 2025 22:19:42 +0800 Subject: [PATCH 4/7] Clean dep changes. --- .env.example | 88 ++++++++++++++++++++++------------------------ docker-compose.yml | 29 +-------------- 2 files changed, 43 insertions(+), 74 deletions(-) diff --git a/.env.example b/.env.example index 421f1138..f70244e5 100644 --- a/.env.example +++ b/.env.example @@ -1,19 +1,20 @@ ### Server Configuration -HOST=0.0.0.0 -PORT=9621 -NAMESPACE_PREFIX=lightrag_1 # separating data from difference Lightrag instances +# HOST=0.0.0.0 +# PORT=9621 +# NAMESPACE_PREFIX=lightrag # separating data from difference Lightrag instances +# CORS_ORIGINS=http://localhost:3000,http://localhost:8080 ### Optional SSL Configuration -#SSL=true -#SSL_CERTFILE=/path/to/cert.pem -#SSL_KEYFILE=/path/to/key.pem +# SSL=true +# SSL_CERTFILE=/path/to/cert.pem +# SSL_KEYFILE=/path/to/key.pem ### Security (empty for no api-key is needed) # LIGHTRAG_API_KEY=your-secure-api-key-here ### Directory Configuration -# WORKING_DIR=./rag_storage -# INPUT_DIR=./inputs +# WORKING_DIR= +# INPUT_DIR= ### Logging level LOG_LEVEL=INFO @@ -45,15 +46,15 @@ SUMMARY_LANGUAGE=English ### LLM Configuration (Use valid host. For local services, you can use host.docker.internal) ### Ollama example -# LLM_BINDING=ollama -# LLM_BINDING_HOST=http://host.docker.internal:11434 -# LLM_MODEL=mistral-nemo:latest +LLM_BINDING=ollama +LLM_BINDING_HOST=http://host.docker.internal:11434 +LLM_MODEL=mistral-nemo:latest ### OpenAI alike example -LLM_BINDING=openai -LLM_MODEL=deepseek-chat -LLM_BINDING_HOST=https://api.deepseek.com -LLM_BINDING_API_KEY=your_api_key +# LLM_BINDING=openai +# LLM_MODEL=deepseek-chat +# LLM_BINDING_HOST=https://api.deepseek.com +# LLM_BINDING_API_KEY=your_api_key ### for OpenAI LLM (LLM_BINDING_API_KEY take priority) # OPENAI_API_KEY=your_api_key @@ -68,7 +69,6 @@ LLM_BINDING_API_KEY=your_api_key # Ollama example EMBEDDING_BINDING=ollama EMBEDDING_BINDING_HOST=http://host.docker.internal:11434 -EMBEDDING_BINDING_API_KEY= EMBEDDING_MODEL=bge-m3:latest ### Lollms example @@ -86,60 +86,56 @@ EMBEDDING_MODEL=bge-m3:latest # AZURE_EMBEDDING_API_VERSION=2023-05-15 ### Data storage selection -LIGHTRAG_KV_STORAGE=RedisKVStorage -LIGHTRAG_VECTOR_STORAGE=QdrantVectorDBStorage -LIGHTRAG_GRAPH_STORAGE=Neo4JStorage -LIGHTRAG_DOC_STATUS_STORAGE=MongoDocStatusStorage +# LIGHTRAG_KV_STORAGE=PGKVStorage +# LIGHTRAG_VECTOR_STORAGE=PGVectorStorage +# LIGHTRAG_GRAPH_STORAGE=PGGraphStorage +# LIGHTRAG_DOC_STATUS_STORAGE=PGDocStatusStorage ### Oracle Database Configuration -#ORACLE_DSN=localhost:1521/XEPDB1 -#ORACLE_USER=your_username -#ORACLE_PASSWORD='your_password' -#ORACLE_CONFIG_DIR=/path/to/oracle/config +ORACLE_DSN=localhost:1521/XEPDB1 +ORACLE_USER=your_username +ORACLE_PASSWORD='your_password' +ORACLE_CONFIG_DIR=/path/to/oracle/config #ORACLE_WALLET_LOCATION=/path/to/wallet # optional #ORACLE_WALLET_PASSWORD='your_password' # optional #ORACLE_WORKSPACE=default # separating all data from difference Lightrag instances(deprecated, use NAMESPACE_PREFIX in future) ### TiDB Configuration -#TIDB_HOST=localhost -#TIDB_PORT=4000 -#TIDB_USER=your_username -#TIDB_PASSWORD='your_password' -#TIDB_DATABASE=your_database +TIDB_HOST=localhost +TIDB_PORT=4000 +TIDB_USER=your_username +TIDB_PASSWORD='your_password' +TIDB_DATABASE=your_database #TIDB_WORKSPACE=default # separating all data from difference Lightrag instances(deprecated, use NAMESPACE_PREFIX in future) ### PostgreSQL Configuration -# POSTGRES_HOST=postgres -# POSTGRES_PORT=5432 -# POSTGRES_USER=postgres -# POSTGRES_PASSWORD='your_password' -# POSTGRES_DATABASE=lightrag +POSTGRES_HOST=localhost +POSTGRES_PORT=5432 +POSTGRES_USER=your_username +POSTGRES_PASSWORD='your_password' +POSTGRES_DATABASE=your_database #POSTGRES_WORKSPACE=default # separating all data from difference Lightrag instances(deprecated, use NAMESPACE_PREFIX in future) ### Independent AGM Configuration(not for AMG embedded in PostreSQL) -#AGE_POSTGRES_DB= -#AGE_POSTGRES_USER= -#AGE_POSTGRES_PASSWORD= -#AGE_POSTGRES_HOST= +AGE_POSTGRES_DB= +AGE_POSTGRES_USER= +AGE_POSTGRES_PASSWORD= +AGE_POSTGRES_HOST= # AGE_POSTGRES_PORT=8529 # AGE Graph Name(apply to PostgreSQL and independent AGM) # AGE_GRAPH_NAME=lightrag # deprecated, use NAME_SPACE_PREFIX instead ### Neo4j Configuration -NEO4J_URI=neo4j+s://neo4j +NEO4J_URI=neo4j+s://xxxxxxxx.databases.neo4j.io NEO4J_USERNAME=neo4j NEO4J_PASSWORD='your_password' -NEO4J_DATABASE=neo4j # IMPORTANT: free version of neo4j does not support multiple databases, therefore we force it to neo4j ### MongoDB Configuration -MONGO_URI=mongodb://mongodb:root@mongodb:27017/ -MONGO_DATABASE=lightrag +MONGODB_URI=mongodb://root:root@localhost:27017/ +MONGODB_DATABASE=LightRAG MONGODB_GRAPH=false # deprecated (keep for backward compatibility) ### Qdrant -QDRANT_URL=http://qdrant:16333 +QDRANT_URL=http://localhost:16333 QDRANT_API_KEY=your-api-key # 可选 - -### Redis -REDIS_URI=redis://redis:6379 diff --git a/docker-compose.yml b/docker-compose.yml index 41ecdfba..b5659692 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,30 +1,10 @@ version: '3.8' -name: ${NAMESPACE_PREFIX} services: - neo4j: - image: neo4j - environment: - NEO4J_AUTH: ${NEO4J_USERNAME}/${NEO4J_PASSWORD} - NEO4J_apoc_export_file_enabled: true - NEO4J_apoc_import_file_enabled: true - NEO4J_apoc_import_file_use__neo4j__config: true - NEO4J_PLUGINS: '["apoc"]' - volumes: - - ./data/neo4j/data:/data - - ./data/neo4j/plugins:/plugins - - ./data/neo4j/logs:/logs - ports: - - "127.0.0.1:7474:7474" # HTTP - - "127.0.0.1:7687:7687" # Bolt - networks: - - lightrag_net - restart: always - lightrag: build: . ports: - - "127.0.0.1:9621:9621" + - "${PORT:-9621}:9621" volumes: - ./data/rag_storage:/app/data/rag_storage - ./data/inputs:/app/data/inputs @@ -36,15 +16,8 @@ services: restart: unless-stopped networks: - lightrag_net - - lightrag_db_network extra_hosts: - "host.docker.internal:host-gateway" - depends_on: - - neo4j - networks: lightrag_net: driver: bridge - lightrag_db_network: - name: lightrag_db_network - external: true From d3ee5da8de88fd64370adbf0b8d209696b9f4820 Mon Sep 17 00:00:00 2001 From: Yuguo Qin Date: Mon, 17 Feb 2025 22:20:46 +0800 Subject: [PATCH 5/7] Clean lighragDBs. --- lightragDBs/docker-compose.yml | 44 ---------------------------------- 1 file changed, 44 deletions(-) delete mode 100644 lightragDBs/docker-compose.yml diff --git a/lightragDBs/docker-compose.yml b/lightragDBs/docker-compose.yml deleted file mode 100644 index cc2695fc..00000000 --- a/lightragDBs/docker-compose.yml +++ /dev/null @@ -1,44 +0,0 @@ -version: '3.8' -name: lightrag_db - -services: - mongodb: - image: mongo - environment: - MONGO_INITDB_ROOT_USERNAME: ${MONGO_INITDB_ROOT_USERNAME} - MONGO_INITDB_ROOT_PASSWORD: ${MONGO_INITDB_ROOT_PASSWORD} - volumes: - - ./volumes/mongodb:/data/db - # ports: - # - "27017:27017" - networks: - - lightrag_db_network - restart: always - - qdrant: - image: qdrant/qdrant - volumes: - - ./volumes/qdrant:/qdrant/storage - - ./volumes/qdrant/snapshots:/qdrant/snapshots - environment: - QDRANT__SERVICE__API_KEY: ${VECTOR_STORE_DB_API_KEY} - # ports: - # - "6333:6333" # REST API - # - "6334:6334" # GRPC - networks: - - lightrag_db_network - restart: always - - redis: - image: redis:alpine - volumes: - - ./volumes/redis:/data - # ports: - # - "127.0.0.1:6379:6379" - networks: - - lightrag_db_network - restart: always - -networks: - lightrag_db_network: - name: lightrag_db_network From 64f8cb7daee58bfa45d907f48bff2e1aea9becf4 Mon Sep 17 00:00:00 2001 From: Yannick Stephan Date: Mon, 17 Feb 2025 18:38:55 +0100 Subject: [PATCH 6/7] fixed lint --- lightrag/kg/neo4j_impl.py | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/lightrag/kg/neo4j_impl.py b/lightrag/kg/neo4j_impl.py index e7a59b0c..b7b63580 100644 --- a/lightrag/kg/neo4j_impl.py +++ b/lightrag/kg/neo4j_impl.py @@ -307,20 +307,35 @@ class Neo4JStorage(BaseGraphStorage): f"and {entity_name_label_target}: {str(e)}" ) # Return default edge properties on error - return {"weight": 0.0, "description": None, "keywords": None, "source_id": None} + return { + "weight": 0.0, + "description": None, + "keywords": None, + "source_id": None, + } logger.debug( f"{inspect.currentframe().f_code.co_name}: No edge found between {entity_name_label_source} and {entity_name_label_target}" ) # Return default edge properties when no edge found - return {"weight": 0.0, "description": None, "keywords": None, "source_id": None} + return { + "weight": 0.0, + "description": None, + "keywords": None, + "source_id": None, + } except Exception as e: logger.error( f"Error in get_edge between {source_node_id} and {target_node_id}: {str(e)}" ) # Return default edge properties on error - return {"weight": 0.0, "description": None, "keywords": None, "source_id": None} + return { + "weight": 0.0, + "description": None, + "keywords": None, + "source_id": None, + } async def get_node_edges(self, source_node_id: str) -> list[tuple[str, str]] | None: node_label = source_node_id.strip('"') From 9f2689551f93d6e5013e82ef4dc37a72a0031777 Mon Sep 17 00:00:00 2001 From: ultrageopro Date: Mon, 17 Feb 2025 20:54:08 +0300 Subject: [PATCH 7/7] fix: .get --- lightrag/kg/neo4j_impl.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/lightrag/kg/neo4j_impl.py b/lightrag/kg/neo4j_impl.py index f8868ecb..53224a39 100644 --- a/lightrag/kg/neo4j_impl.py +++ b/lightrag/kg/neo4j_impl.py @@ -70,12 +70,16 @@ class Neo4JStorage(BaseGraphStorage): ) ) CONNECTION_TIMEOUT = float( - os.environ.get("NEO4J_CONNECTION_TIMEOUT"), - config.get("neo4j", "connection_timeout", fallback=60.0), + os.environ.get( + "NEO4J_CONNECTION_TIMEOUT", + config.get("neo4j", "connection_timeout", fallback=60.0), + ), ) CONNECTION_ACQUISITION_TIMEOUT = float( - os.environ.get("NEO4J_CONNECTION_ACQUISITION_TIMEOUT"), - config.get("neo4j", "connection_acquisition_timeout", fallback=60.0), + os.environ.get( + "NEO4J_CONNECTION_ACQUISITION_TIMEOUT", + config.get("neo4j", "connection_acquisition_timeout", fallback=60.0), + ), ) DATABASE = os.environ.get( "NEO4J_DATABASE", re.sub(r"[^a-zA-Z0-9-]", "-", namespace)