[build-system] requires = ["setuptools>=64", "wheel"] build-backend = "setuptools.build_meta" [project] name = "lightrag-hku" dynamic = ["version"] authors = [ {name = "Zirui Guo"} ] description = "LightRAG: Simple and Fast Retrieval-Augmented Generation" readme = "README.md" license = {text = "MIT"} requires-python = ">=3.10" classifiers = [ "Development Status :: 4 - Beta", "Programming Language :: Python :: 3", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Intended Audience :: Developers", "Topic :: Software Development :: Libraries :: Python Modules", ] dependencies = [ "aiohttp", "configparser", "future", "google-api-core>=2.0.0,<3.0.0", "google-genai>=1.0.0,<2.0.0", "json_repair", "nano-vectordb", "networkx", "numpy>=1.24.0,<2.0.0", "pandas>=2.0.0,<2.4.0", "pipmaster", "pydantic", "pypinyin", "python-dotenv", "setuptools", "tenacity", "tiktoken", "xlsxwriter>=3.1.0", ] [project.optional-dependencies] # Test framework dependencies (for CI/CD and testing) pytest = [ "pytest>=8.4.2", "pytest-asyncio>=1.2.0", "pre-commit", ] api = [ # Core dependencies "aiohttp", "configparser", "future", "json_repair", "nano-vectordb", "networkx", "numpy>=1.24.0,<2.0.0", "openai>=1.0.0,<3.0.0", "pandas>=2.0.0,<2.4.0", "pipmaster", "pydantic", "pypinyin", "python-dotenv", "setuptools", "tenacity", "tiktoken", "xlsxwriter>=3.1.0", "google-api-core>=2.0.0,<3.0.0", "google-genai>=1.0.0,<2.0.0", # API-specific dependencies "aiofiles", "ascii_colors", "asyncpg", "distro", "fastapi", "httpcore", "httpx", "jiter", "passlib[bcrypt]", "psutil", "PyJWT>=2.8.0,<3.0.0", "python-jose[cryptography]", "python-multipart", "pytz", "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-storage = [ # Storage backend dependencies "redis>=5.0.0,<8.0.0", "neo4j>=5.0.0,<7.0.0", "pymilvus>=2.6.2,<3.0.0", "pymongo>=4.0.0,<5.0.0", "asyncpg>=0.29.0,<1.0.0", "qdrant-client>=1.11.0,<2.0.0", ] offline-llm = [ # LLM provider dependencies "openai>=1.0.0,<3.0.0", "anthropic>=0.18.0,<1.0.0", "ollama>=0.1.0,<1.0.0", "zhipuai>=2.0.0,<3.0.0", "aioboto3>=12.0.0,<16.0.0", "voyageai>=0.2.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 = [ # Complete offline package (includes api for document processing, plus storage and LLM) "lightrag-hku[api,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] lightrag-server = "lightrag.api.lightrag_server:main" lightrag-gunicorn = "lightrag.api.run_with_gunicorn:main" lightrag-download-cache = "lightrag.tools.download_cache:main" lightrag-clean-llmqc = "lightrag.tools.clean_llm_query_cache:main" [project.urls] Homepage = "https://github.com/HKUDS/LightRAG" Documentation = "https://github.com/HKUDS/LightRAG" Repository = "https://github.com/HKUDS/LightRAG" "Bug Tracker" = "https://github.com/HKUDS/LightRAG/issues" [tool.setuptools.packages.find] include = ["lightrag*"] exclude = ["data*", "tests*", "scripts*", "examples*", "dickens*", "reproduce*", "output_complete*", "rag_storage*", "inputs*"] [tool.setuptools] include-package-data = true [tool.setuptools.dynamic] version = {attr = "lightrag.__version__"} [tool.setuptools.package-data] 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] target-version = "py310"