diff --git a/examples/graph_visual_with_html.py b/examples/graph_visual_with_html.py
index d082a170..c1a6a015 100644
--- a/examples/graph_visual_with_html.py
+++ b/examples/graph_visual_with_html.py
@@ -1,5 +1,6 @@
import networkx as nx
import pipmaster as pm
+
if not pm.is_installed("pyvis"):
pm.install("pyvis")
diff --git a/lightrag/api/static/js/lightrag_api.js b/lightrag/api/static/js/lightrag_api.js
index 2b13a726..3c2ff69c 100644
--- a/lightrag/api/static/js/lightrag_api.js
+++ b/lightrag/api/static/js/lightrag_api.js
@@ -256,7 +256,7 @@ const handlers = {
const queryInput = document.getElementById('queryInput');
const queryMode = document.getElementById('queryMode');
const queryResult = document.getElementById('queryResult');
-
+
let apiKey = localStorage.getItem('apiKey') || '';
queryBtn.addEventListener('click', async () => {
@@ -372,4 +372,4 @@ window.removeFile = (fileName) => {
`).join('');
-};
\ No newline at end of file
+};
diff --git a/lightrag/kg/json_kv_impl.py b/lightrag/kg/json_kv_impl.py
index 57fe765d..2fb753fe 100644
--- a/lightrag/kg/json_kv_impl.py
+++ b/lightrag/kg/json_kv_impl.py
@@ -48,7 +48,6 @@ Usage:
"""
-
import asyncio
import os
from dataclasses import dataclass
@@ -133,5 +132,3 @@ class JsonKVStorage(BaseKVStorage):
del self._data[id]
await self.index_done_callback()
logger.info(f"Successfully deleted {len(ids)} items from {self.namespace}")
-
-
diff --git a/lightrag/kg/milvus_impl.py b/lightrag/kg/milvus_impl.py
index 905a08b5..2995fd9b 100644
--- a/lightrag/kg/milvus_impl.py
+++ b/lightrag/kg/milvus_impl.py
@@ -7,6 +7,7 @@ from lightrag.utils import logger
from ..base import BaseVectorStorage
import pipmaster as pm
+
if not pm.is_installed("pymilvus"):
pm.install("pymilvus")
from pymilvus import MilvusClient
diff --git a/lightrag/kg/mongo_impl.py b/lightrag/kg/mongo_impl.py
index 9515514a..21365a70 100644
--- a/lightrag/kg/mongo_impl.py
+++ b/lightrag/kg/mongo_impl.py
@@ -2,6 +2,7 @@ import os
from tqdm.asyncio import tqdm as tqdm_async
from dataclasses import dataclass
import pipmaster as pm
+
if not pm.is_installed("pymongo"):
pm.install("pymongo")
diff --git a/lightrag/kg/nano_vector_db_impl.py b/lightrag/kg/nano_vector_db_impl.py
index f2372799..aa23e811 100644
--- a/lightrag/kg/nano_vector_db_impl.py
+++ b/lightrag/kg/nano_vector_db_impl.py
@@ -47,6 +47,7 @@ Usage:
from lightrag.storage.networkx_storage import NetworkXStorage
"""
+
import asyncio
import os
from tqdm.asyncio import tqdm as tqdm_async
diff --git a/lightrag/kg/neo4j_impl.py b/lightrag/kg/neo4j_impl.py
index cd552122..f4e18446 100644
--- a/lightrag/kg/neo4j_impl.py
+++ b/lightrag/kg/neo4j_impl.py
@@ -4,6 +4,7 @@ import os
from dataclasses import dataclass
from typing import Any, Union, Tuple, List, Dict
import pipmaster as pm
+
if not pm.is_installed("neo4j"):
pm.install("neo4j")
diff --git a/lightrag/kg/networkx_impl.py b/lightrag/kg/networkx_impl.py
index 493c551e..bb84cf82 100644
--- a/lightrag/kg/networkx_impl.py
+++ b/lightrag/kg/networkx_impl.py
@@ -47,6 +47,7 @@ Usage:
from lightrag.storage.networkx_storage import NetworkXStorage
"""
+
import html
import os
from dataclasses import dataclass
diff --git a/lightrag/kg/postgres_impl.py b/lightrag/kg/postgres_impl.py
index efeb7cf5..57fe8d8d 100644
--- a/lightrag/kg/postgres_impl.py
+++ b/lightrag/kg/postgres_impl.py
@@ -8,6 +8,7 @@ from typing import Union, List, Dict, Set, Any, Tuple
import numpy as np
import pipmaster as pm
+
if not pm.is_installed("asyncpg"):
pm.install("asyncpg")
diff --git a/lightrag/kg/redis_impl.py b/lightrag/kg/redis_impl.py
index 013196e3..147ea5f3 100644
--- a/lightrag/kg/redis_impl.py
+++ b/lightrag/kg/redis_impl.py
@@ -2,6 +2,7 @@ import os
from tqdm.asyncio import tqdm as tqdm_async
from dataclasses import dataclass
import pipmaster as pm
+
if not pm.is_installed("redis"):
pm.install("redis")
diff --git a/lightrag/kg/tidb_impl.py b/lightrag/kg/tidb_impl.py
index 8ba1de65..d76c2c99 100644
--- a/lightrag/kg/tidb_impl.py
+++ b/lightrag/kg/tidb_impl.py
@@ -5,17 +5,19 @@ from typing import Union
import numpy as np
import pipmaster as pm
+
if not pm.is_installed("pymysql"):
pm.install("pymysql")
if not pm.is_installed("sqlalchemy"):
pm.install("sqlalchemy")
-
+
from sqlalchemy import create_engine, text
from tqdm import tqdm
from lightrag.base import BaseVectorStorage, BaseKVStorage, BaseGraphStorage
from lightrag.utils import logger
+
class TiDB(object):
def __init__(self, config, **kwargs):
self.host = config.get("host", None)
diff --git a/lightrag/utils.py b/lightrag/utils.py
index 9792e251..745594d2 100644
--- a/lightrag/utils.py
+++ b/lightrag/utils.py
@@ -16,9 +16,7 @@ import numpy as np
import tiktoken
from lightrag.prompt import PROMPTS
-from typing import List
-import csv
-import io
+
class UnlimitedSemaphore:
"""A context manager that allows unlimited access."""
@@ -237,16 +235,14 @@ def truncate_list_by_token_size(list_data: list, key: callable, max_token_size:
return list_data
-
-
def list_of_list_to_csv(data: List[List[str]]) -> str:
output = io.StringIO()
writer = csv.writer(
output,
- quoting=csv.QUOTE_ALL, # Quote all fields
- escapechar='\\', # Use backslash as escape character
- quotechar='"', # Use double quotes
- lineterminator='\n' # Explicit line terminator
+ quoting=csv.QUOTE_ALL, # Quote all fields
+ escapechar="\\", # Use backslash as escape character
+ quotechar='"', # Use double quotes
+ lineterminator="\n", # Explicit line terminator
)
writer.writerows(data)
return output.getvalue()
@@ -254,16 +250,16 @@ def list_of_list_to_csv(data: List[List[str]]) -> str:
def csv_string_to_list(csv_string: str) -> List[List[str]]:
# Clean the string by removing NUL characters
- cleaned_string = csv_string.replace('\0', '')
-
+ cleaned_string = csv_string.replace("\0", "")
+
output = io.StringIO(cleaned_string)
reader = csv.reader(
output,
- quoting=csv.QUOTE_ALL, # Match the writer configuration
- escapechar='\\', # Use backslash as escape character
- quotechar='"', # Use double quotes
+ quoting=csv.QUOTE_ALL, # Match the writer configuration
+ escapechar="\\", # Use backslash as escape character
+ quotechar='"', # Use double quotes
)
-
+
try:
return [row for row in reader]
except csv.Error as e:
diff --git a/requirements.txt b/requirements.txt
index 0f4c18ac..d8f5612f 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -2,10 +2,10 @@ accelerate
aiofiles
aiohttp
configparser
+graspologic
# database packages
networkx
-graspologic
# Basic modules
numpy