-
Notifications
You must be signed in to change notification settings - Fork 1.1k
/
setup.py
128 lines (115 loc) · 3.47 KB
/
setup.py
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
import sys
# Check if 'setup.py' is run directly with 'build'
# TODO: Consider generalizing this check further?
if __name__ == "__main__":
if len(sys.argv) >= 2 and sys.argv[1] == "build":
raise SystemExit(
"Error: Direct invocation of 'setup.py build' is not recommended."
"Please use 'pip' to build and install this package, like so:\n"
" pip install . (for the current directory)\n"
" pip install -e . (for an editable install)\n"
" pip wheel . --no-deps (to build a wheel)"
)
import os
import re
import codecs
from setuptools import setup, find_packages
from pybind11.setup_helpers import Pybind11Extension, build_ext
here = os.path.abspath(os.path.dirname(__file__))
install_requires = [
"diskcache",
"numpy",
"ordered_set",
"platformdirs",
"pydantic",
"referencing",
"requests",
"psutil",
"tiktoken>=0.3",
"guidance-stitch",
"llguidance==0.5.1",
]
# Our basic list of 'extras'
extras_requires = {
"azureai": ["openai>=1.0"],
"openai": ["openai>=1.0"],
"server": ["fastapi-slim", "uvicorn"],
}
# Create the union of all our requirements
all_requires = set()
for v in extras_requires.values():
all_requires = all_requires.union(v)
# Required for builds etc.
doc_requires = [
"ipython",
"nbsphinx",
"numpydoc",
"sphinx_rtd_theme",
"sphinx",
"ipykernel",
"huggingface_hub",
"llama-cpp-python",
]
test_requires = [
"azure-identity",
"bitsandbytes",
"jupyter",
"papermill",
"protobuf",
"pytest",
"pytest-cov",
"sentencepiece",
"torch",
"transformers",
"mypy==1.9.0",
"types-regex",
"types-requests",
"types-jsonschema",
"anytree"
]
bench_requires = [
"pandas",
"huggingface_hub",
"langchain_benchmarks",
"langchain-community",
"langsmith",
"json_stream",
"llama-cpp-python",
"setuptools",
"powerlift"
]
def read(*parts):
with codecs.open(os.path.join(here, *parts), "r") as fp:
return fp.read()
def find_version(*file_paths):
version_file = read(*file_paths)
version_match = re.search(r"^__version__ = ['\"]([^'\"]*)['\"]", version_file, re.M)
if version_match:
return version_match.group(1)
raise RuntimeError("Unable to find version string.")
setup(
name="guidance",
version=find_version("guidance", "__init__.py"),
url="https://github.com/guidance-ai/guidance",
author="Guidance Maintainers",
author_email="[email protected]",
description="A guidance language for controlling large language models.",
long_description="Guidance enables you to control modern language models more effectively and efficiently than traditional prompting or chaining. Guidance programs allow you to interleave generation, prompting, and logical control into a single continuous flow matching how the language model actually processes the text.",
packages=find_packages(exclude=["notebooks", "client", "tests", "tests.*"]),
package_data={"guidance": ["resources/*"]},
ext_modules=[
Pybind11Extension(
"guidance.cpp", ["guidance/_cpp/main.cpp", "guidance/_cpp/byte_trie.cpp"]
)
],
cmdclass={"build_ext": build_ext},
python_requires=">=3.9",
install_requires=install_requires,
extras_require={
"all": all_requires,
"docs": doc_requires,
"test": test_requires,
"bench": bench_requires,
**extras_requires,
},
)