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