This commit is contained in:
Raphaël MANSUY 2025-12-04 19:15:03 +08:00
parent 7ffecec08e
commit fce5dc6be6
5 changed files with 351 additions and 3419 deletions

View file

@ -1061,6 +1061,8 @@ async def pipeline_enqueue_file(
else: else:
if not pm.is_installed("pypdf2"): # type: ignore if not pm.is_installed("pypdf2"): # type: ignore
pm.install("pypdf2") pm.install("pypdf2")
if not pm.is_installed("pycryptodome"): # type: ignore
pm.install("pycryptodome")
from PyPDF2 import PdfReader # type: ignore from PyPDF2 import PdfReader # type: ignore
from io import BytesIO from io import BytesIO

View file

@ -24,12 +24,10 @@ dependencies = [
"aiohttp", "aiohttp",
"configparser", "configparser",
"future", "future",
"google-api-core>=2.0.0,<3.0.0",
"google-genai>=1.0.0,<2.0.0",
"json_repair", "json_repair",
"nano-vectordb", "nano-vectordb",
"networkx", "networkx",
"numpy>=1.24.0,<2.0.0", "numpy",
"pandas>=2.0.0,<2.4.0", "pandas>=2.0.0,<2.4.0",
"pipmaster", "pipmaster",
"pydantic", "pydantic",
@ -42,13 +40,6 @@ dependencies = [
] ]
[project.optional-dependencies] [project.optional-dependencies]
# Test framework dependencies (for CI/CD and testing)
pytest = [
"pytest>=8.4.2",
"pytest-asyncio>=1.2.0",
"pre-commit",
]
api = [ api = [
# Core dependencies # Core dependencies
"aiohttp", "aiohttp",
@ -57,8 +48,8 @@ api = [
"json_repair", "json_repair",
"nano-vectordb", "nano-vectordb",
"networkx", "networkx",
"numpy>=1.24.0,<2.0.0", "numpy",
"openai>=2.0.0,<3.0.0", "openai>=1.0.0,<3.0.0",
"pandas>=2.0.0,<2.4.0", "pandas>=2.0.0,<2.4.0",
"pipmaster", "pipmaster",
"pydantic", "pydantic",
@ -68,8 +59,6 @@ api = [
"tenacity", "tenacity",
"tiktoken", "tiktoken",
"xlsxwriter>=3.1.0", "xlsxwriter>=3.1.0",
"google-api-core>=2.0.0,<3.0.0",
"google-genai>=1.0.0,<2.0.0",
# API-specific dependencies # API-specific dependencies
"aiofiles", "aiofiles",
"ascii_colors", "ascii_colors",
@ -86,23 +75,18 @@ api = [
"python-multipart", "python-multipart",
"pytz", "pytz",
"uvicorn", "uvicorn",
"gunicorn",
# Document processing dependencies (required for API document upload functionality)
"openpyxl>=3.0.0,<4.0.0", # XLSX processing
"pycryptodome>=3.0.0,<4.0.0", # PDF encryption support
"pypdf>=6.1.0", # PDF processing
"python-docx>=0.8.11,<2.0.0", # DOCX processing
"python-pptx>=0.6.21,<2.0.0", # PPTX processing
]
# Advanced document processing engine (optional)
docling = [
# On macOS, pytorch and frameworks use Objective-C are not fork-safe,
# and not compatible to gunicorn multi-worker mode
"docling>=2.0.0,<3.0.0; sys_platform != 'darwin'",
] ]
# Offline deployment dependencies (layered design for flexibility) # Offline deployment dependencies (layered design for flexibility)
offline-docs = [
# Document processing dependencies
"openpyxl>=3.0.0,<4.0.0",
"pycryptodome>=3.0.0,<4.0.0",
"pypdf2>=3.0.0",
"python-docx>=0.8.11,<2.0.0",
"python-pptx>=0.6.21,<2.0.0",
]
offline-storage = [ offline-storage = [
# Storage backend dependencies # Storage backend dependencies
"redis>=5.0.0,<8.0.0", "redis>=5.0.0,<8.0.0",
@ -110,48 +94,29 @@ offline-storage = [
"pymilvus>=2.6.2,<3.0.0", "pymilvus>=2.6.2,<3.0.0",
"pymongo>=4.0.0,<5.0.0", "pymongo>=4.0.0,<5.0.0",
"asyncpg>=0.29.0,<1.0.0", "asyncpg>=0.29.0,<1.0.0",
"qdrant-client>=1.11.0,<2.0.0", "qdrant-client>=1.7.0,<2.0.0",
] ]
offline-llm = [ offline-llm = [
# LLM provider dependencies # LLM provider dependencies
"openai>=2.0.0,<3.0.0", "openai>=1.0.0,<3.0.0",
"anthropic>=0.18.0,<1.0.0", "anthropic>=0.18.0,<1.0.0",
"ollama>=0.1.0,<1.0.0", "ollama>=0.1.0,<1.0.0",
"zhipuai>=2.0.0,<3.0.0", "zhipuai>=2.0.0,<3.0.0",
"aioboto3>=12.0.0,<16.0.0", "aioboto3>=12.0.0,<16.0.0",
"voyageai>=0.2.0,<1.0.0", "voyageai>=0.2.0,<1.0.0",
"llama-index>=0.9.0,<1.0.0", "llama-index>=0.9.0,<1.0.0",
"google-api-core>=2.0.0,<3.0.0",
"google-genai>=1.0.0,<2.0.0",
] ]
offline = [ offline = [
# Complete offline package (includes api for document processing, plus storage and LLM) # Complete offline package (includes all offline dependencies)
"lightrag-hku[api,offline-storage,offline-llm]", "lightrag-hku[offline-docs,offline-storage,offline-llm]",
]
evaluation = [
# Test framework dependencies (for evaluation)
"pytest>=8.4.2",
"pytest-asyncio>=1.2.0",
"pre-commit",
# RAG evaluation dependencies (RAGAS framework)
"ragas>=0.3.7",
"datasets>=4.3.0",
"httpx>=0.28.1",
]
observability = [
# LLM observability and tracing dependencies
"langfuse>=3.8.1",
] ]
[project.scripts] [project.scripts]
lightrag-server = "lightrag.api.lightrag_server:main" lightrag-server = "lightrag.api.lightrag_server:main"
lightrag-gunicorn = "lightrag.api.run_with_gunicorn:main" lightrag-gunicorn = "lightrag.api.run_with_gunicorn:main"
lightrag-download-cache = "lightrag.tools.download_cache:main" lightrag-download-cache = "lightrag.tools.download_cache:main"
lightrag-clean-llmqc = "lightrag.tools.clean_llm_query_cache:main"
[project.urls] [project.urls]
Homepage = "https://github.com/HKUDS/LightRAG" Homepage = "https://github.com/HKUDS/LightRAG"
@ -172,13 +137,5 @@ version = {attr = "lightrag.__version__"}
[tool.setuptools.package-data] [tool.setuptools.package-data]
lightrag = ["api/webui/**/*", "api/static/**/*"] lightrag = ["api/webui/**/*", "api/static/**/*"]
[tool.pytest.ini_options]
asyncio_mode = "auto"
asyncio_default_fixture_loop_scope = "function"
testpaths = ["tests"]
python_files = ["test_*.py"]
python_classes = ["Test*"]
python_functions = ["test_*"]
[tool.ruff] [tool.ruff]
target-version = "py310" target-version = "py310"

View file

@ -9,6 +9,7 @@
# Document processing dependencies (with version constraints matching pyproject.toml) # Document processing dependencies (with version constraints matching pyproject.toml)
openpyxl>=3.0.0,<4.0.0 openpyxl>=3.0.0,<4.0.0
pycryptodome>=3.0.0,<4.0.0
pypdf2>=3.0.0 pypdf2>=3.0.0
python-docx>=0.8.11,<2.0.0 python-docx>=0.8.11,<2.0.0
python-pptx>=0.6.21,<2.0.0 python-pptx>=0.6.21,<2.0.0

View file

@ -20,6 +20,7 @@ neo4j>=5.0.0,<7.0.0
ollama>=0.1.0,<1.0.0 ollama>=0.1.0,<1.0.0
openai>=2.0.0,<3.0.0 openai>=2.0.0,<3.0.0
openpyxl>=3.0.0,<4.0.0 openpyxl>=3.0.0,<4.0.0
pycryptodome>=3.0.0,<4.0.0
pymilvus>=2.6.2,<3.0.0 pymilvus>=2.6.2,<3.0.0
pymongo>=4.0.0,<5.0.0 pymongo>=4.0.0,<5.0.0
pypdf2>=3.0.0 pypdf2>=3.0.0

3691
uv.lock generated

File diff suppressed because it is too large Load diff