File size: 3,749 Bytes
38e1d84
7d558c8
38e1d84
0e9f364
7d558c8
 
 
 
 
 
38e1d84
0e9f364
7d558c8
 
 
 
 
 
 
 
 
0e9f364
 
 
 
 
 
7d558c8
 
 
0e9f364
7d558c8
 
 
0e9f364
 
 
 
7d558c8
38e1d84
0e9f364
7d558c8
 
 
 
 
 
 
0e9f364
 
 
7d558c8
38e1d84
0e9f364
e7acabd
 
 
 
 
 
 
 
 
 
7d558c8
 
 
38e1d84
 
5c22708
7d558c8
 
 
38e1d84
 
 
0e9f364
 
 
38e1d84
7d558c8
38e1d84
 
 
7d558c8
 
38e1d84
 
7d558c8
 
 
 
 
0e9f364
 
 
7d558c8
e7acabd
 
 
 
 
 
 
 
d3f0362
e7acabd
 
38e1d84
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
import setuptools
from pathlib import Path


# Reading the long description from README.md
def read_long_description():
    try:
        return Path("README.md").read_text(encoding="utf-8")
    except FileNotFoundError:
        return "A description of LightRAG is currently unavailable."


# Retrieving metadata from __init__.py
def retrieve_metadata():
    vars2find = ["__author__", "__version__", "__url__"]
    vars2readme = {}
    try:
        with open("./lightrag/__init__.py") as f:
            for line in f.readlines():
                for v in vars2find:
                    if line.startswith(v):
                        line = (
                            line.replace(" ", "")
                            .replace('"', "")
                            .replace("'", "")
                            .strip()
                        )
                        vars2readme[v] = line.split("=")[1]
    except FileNotFoundError:
        raise FileNotFoundError("Metadata file './lightrag/__init__.py' not found.")

    # Checking if all required variables are found
    missing_vars = [v for v in vars2find if v not in vars2readme]
    if missing_vars:
        raise ValueError(
            f"Missing required metadata variables in __init__.py: {missing_vars}"
        )

    return vars2readme


# Reading dependencies from requirements.txt
def read_requirements():
    deps = []
    try:
        with open("./requirements.txt") as f:
            deps = [line.strip() for line in f if line.strip()]
    except FileNotFoundError:
        print(
            "Warning: 'requirements.txt' not found. No dependencies will be installed."
        )
    return deps


def read_api_requirements():
    api_deps = []
    try:
        with open("./lightrag/api/requirements.txt") as f:
            api_deps = [line.strip() for line in f if line.strip()]
    except FileNotFoundError:
        print("Warning: API requirements.txt not found.")
    return api_deps


metadata = retrieve_metadata()
long_description = read_long_description()
requirements = read_requirements()

setuptools.setup(
    name="lightrag-hku",
    url=metadata["__url__"],
    version=metadata["__version__"],
    author=metadata["__author__"],
    description="LightRAG: Simple and Fast Retrieval-Augmented Generation",
    long_description=long_description,
    long_description_content_type="text/markdown",
    packages=setuptools.find_packages(
        exclude=("tests*", "docs*")
    ),  # Automatically find packages
    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",
    ],
    python_requires=">=3.9",
    install_requires=requirements,
    include_package_data=True,  # Includes non-code files from MANIFEST.in
    project_urls={  # Additional project metadata
        "Documentation": metadata.get("__url__", ""),
        "Source": metadata.get("__url__", ""),
        "Tracker": f"{metadata.get('__url__', '')}/issues"
        if metadata.get("__url__")
        else "",
    },
    extras_require={
        "api": read_api_requirements(),  # API requirements as optional
    },
    entry_points={
        "console_scripts": [
            "lollms-lightrag-server=lightrag.api.lollms_lightrag_server:main [api]",
            "ollama-lightrag-server=lightrag.api.ollama_lightrag_server:main [api]",
            "openai-lightrag-server=lightrag.api.openai_lightrag_server:main [api]",
            "azure-openai-lightrag-server=lightrag.api.azure_openai_lightrag_server:main [api]",
        ],
    },
)