feat(core): Multi-module dependency splitting (#606)

Close #601 

**Note**: This is a breaking upgrade. We have updated chromadb from
version 0.3.22 to the latest version. In this new version, the database
storage engine has been switched from "duckdb" to "SQLite". For more
details, you can check [here](https://docs.trychroma.com/migration). If
you were using chromadb previously, you'll need to delete the content
imported into the knowledge base and re-import it.

Other:
- Support InternLM 20B
This commit is contained in:
Aries-ckt 2023-09-20 18:58:42 +08:00 committed by GitHub
commit 132814e26e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
30 changed files with 326 additions and 262 deletions

View File

@ -76,6 +76,16 @@ autolabeler:
# feat(connection): Support xxxx
# fix(connection): Fix xxx
- '/^(build|chore|ci|depr|docs|feat|fix|perf|refactor|release|test)\(.*connection.*\)/'
- label: core
title:
# feat(core): Support xxxx
# fix(core): Fix xxx
- '/^(build|chore|ci|depr|docs|feat|fix|perf|refactor|release|test)\(.*core.*\)/'
- label: web
title:
# feat(web): Support xxxx
# fix(web): Fix xxx
- '/^(build|chore|ci|depr|docs|feat|fix|perf|refactor|release|test)\(.*web.*\)/'
- label: build
title:
- '/^build/'

2
.gitignore vendored
View File

@ -28,6 +28,8 @@ sdist/
var/
wheels/
models/
# Soft link
models
plugins/
pip-wheel-metadata/

View File

@ -86,7 +86,7 @@ Currently, we have released multiple key features, which are listed below to dem
- Unified vector storage/indexing of knowledge base
- Support for unstructured data such as PDF, TXT, Markdown, CSV, DOC, PPT, and WebURL
- Multi LLMs Support, Supports multiple large language models, currently supporting
- 🔥 InternLM(7b)
- 🔥 InternLM(7b,20b)
- 🔥 Baichuan2(7b,13b)
- 🔥 Vicuna-v1.5(7b,13b)
- 🔥 llama-2(7b,13b,70b)

View File

@ -119,7 +119,7 @@ DB-GPT 是一个开源的以数据库为基础的GPT实验项目使用本地
- 非结构化数据支持包括PDF、MarkDown、CSV、WebURL
- 多模型支持
- 支持多种大语言模型, 当前已支持如下模型:
- 🔥 InternLM(7b)
- 🔥 InternLM(7b,20b)
- 🔥 Baichuan2(7b,13b)
- 🔥 Vicuna-v1.5(7b,13b)
- 🔥 llama-2(7b,13b,70b)

View File

@ -11,10 +11,12 @@ ARG LANGUAGE="en"
ARG PIP_INDEX_URL="https://pypi.org/simple"
ENV PIP_INDEX_URL=$PIP_INDEX_URL
ARG DB_GPT_INSTALL_MODEL="default"
ENV DB_GPT_INSTALL_MODEL=$DB_GPT_INSTALL_MODEL
RUN mkdir -p /app
# COPY only requirements.txt first to leverage Docker cache
COPY ./requirements.txt /app/requirements.txt
COPY ./setup.py /app/setup.py
COPY ./README.md /app/README.md
@ -26,9 +28,9 @@ WORKDIR /app
# RUN pip3 install -i $PIP_INDEX_URL ".[all]"
RUN pip3 install --upgrade pip -i $PIP_INDEX_URL \
&& pip3 install -i $PIP_INDEX_URL . \
# && pip3 install -i $PIP_INDEX_URL ".[llama_cpp]" \
&& (if [ "${LANGUAGE}" = "zh" ]; \
&& pip3 install -i $PIP_INDEX_URL ".[$DB_GPT_INSTALL_MODEL]"
RUN (if [ "${LANGUAGE}" = "zh" ]; \
# language is zh, download zh_core_web_sm from github
then wget https://github.com/explosion/spacy-models/releases/download/zh_core_web_sm-3.5.0/zh_core_web_sm-3.5.0-py3-none-any.whl -O /tmp/zh_core_web_sm-3.5.0-py3-none-any.whl \
&& pip3 install /tmp/zh_core_web_sm-3.5.0-py3-none-any.whl -i $PIP_INDEX_URL \
@ -58,4 +60,4 @@ RUN (if [ "${LOAD_EXAMPLES}" = "true" ]; \
ENV PYTHONPATH "/app:$PYTHONPATH"
EXPOSE 5000
CMD ["python3", "pilot/server/dbgpt_server.py"]
CMD ["dbgpt", "start", "webserver"]

View File

@ -4,14 +4,21 @@ SCRIPT_LOCATION=$0
cd "$(dirname "$SCRIPT_LOCATION")"
WORK_DIR=$(pwd)
BASE_IMAGE="nvidia/cuda:11.8.0-runtime-ubuntu22.04"
BASE_IMAGE_DEFAULT="nvidia/cuda:11.8.0-runtime-ubuntu22.04"
BASE_IMAGE_DEFAULT_CPU="ubuntu:22.04"
BASE_IMAGE=$BASE_IMAGE_DEFAULT
IMAGE_NAME="eosphorosai/dbgpt"
IMAGE_NAME_ARGS=""
# zh: https://pypi.tuna.tsinghua.edu.cn/simple
PIP_INDEX_URL="https://pypi.org/simple"
# en or zh
LANGUAGE="en"
BUILD_LOCAL_CODE="false"
LOAD_EXAMPLES="true"
BUILD_NETWORK=""
DB_GPT_INSTALL_MODEL="default"
usage () {
echo "USAGE: $0 [--base-image nvidia/cuda:11.8.0-runtime-ubuntu22.04] [--image-name db-gpt]"
@ -21,6 +28,8 @@ usage () {
echo " [--language en or zh] You language, default: en"
echo " [--build-local-code true or false] Whether to use the local project code to package the image, default: false"
echo " [--load-examples true or false] Whether to load examples to default database default: true"
echo " [--network network name] The network of docker build"
echo " [--install-mode mode name] Installation mode name, default: default, If you completely use openai's service, you can set the mode name to 'openai'"
echo " [-h|--help] Usage message"
}
@ -33,7 +42,7 @@ while [[ $# -gt 0 ]]; do
shift # past value
;;
-n|--image-name)
IMAGE_NAME="$2"
IMAGE_NAME_ARGS="$2"
shift # past argument
shift # past value
;;
@ -57,6 +66,20 @@ while [[ $# -gt 0 ]]; do
shift
shift
;;
--network)
BUILD_NETWORK=" --network $2 "
shift # past argument
shift # past value
;;
-h|--help)
help="true"
shift
;;
--install-mode)
DB_GPT_INSTALL_MODEL="$2"
shift # past argument
shift # past value
;;
-h|--help)
help="true"
shift
@ -73,11 +96,29 @@ if [[ $help ]]; then
exit 0
fi
docker build \
if [ "$DB_GPT_INSTALL_MODEL" != "default" ]; then
IMAGE_NAME="$IMAGE_NAME-$DB_GPT_INSTALL_MODEL"
echo "install mode is not 'default', set image name to: ${IMAGE_NAME}"
fi
if [ -z "$IMAGE_NAME_ARGS" ]; then
if [ "$DB_GPT_INSTALL_MODEL" == "openai" ]; then
# Use cpu image
BASE_IMAGE=$BASE_IMAGE_DEFAULT_CPU
fi
else
# User input image is not empty
BASE_IMAGE=$IMAGE_NAME_ARGS
fi
echo "Begin build docker image, base image: ${BASE_IMAGE}, target image name: ${IMAGE_NAME}"
docker build $BUILD_NETWORK \
--build-arg BASE_IMAGE=$BASE_IMAGE \
--build-arg PIP_INDEX_URL=$PIP_INDEX_URL \
--build-arg LANGUAGE=$LANGUAGE \
--build-arg BUILD_LOCAL_CODE=$BUILD_LOCAL_CODE \
--build-arg LOAD_EXAMPLES=$LOAD_EXAMPLES \
--build-arg DB_GPT_INSTALL_MODEL=$DB_GPT_INSTALL_MODEL \
-f Dockerfile \
-t $IMAGE_NAME $WORK_DIR/../../

View File

@ -6,7 +6,7 @@ Local cluster deployment
**Installing Command-Line Tool**
All operations below are performed using the `dbgpt` command. To use the `dbgpt` command, you need to install the DB-GPT project with `pip install -e .`. Alternatively, you can use `python pilot/scripts/cli_scripts.py` as a substitute for the `dbgpt` command.
All operations below are performed using the `dbgpt` command. To use the `dbgpt` command, you need to install the DB-GPT project with `pip install -e ".[default]"`. Alternatively, you can use `python pilot/scripts/cli_scripts.py` as a substitute for the `dbgpt` command.
### Launch Model Controller

View File

@ -49,7 +49,7 @@ For the entire installation process of DB-GPT, we use the miniconda3 virtual env
python>=3.10
conda create -n dbgpt_env python=3.10
conda activate dbgpt_env
pip install -e .
pip install -e ".[default]"
```
Before use DB-GPT Knowledge
```bash

View File

@ -6,7 +6,7 @@ DB-GPT provides a management and deployment solution for multiple models. This c
Multi LLMs Support, Supports multiple large language models, currently supporting
- 🔥 InternLM(7b)
- 🔥 InternLM(7b,20b)
- 🔥 Baichuan2(7b,13b)
- 🔥 Vicuna-v1.5(7b,13b)
- 🔥 llama-2(7b,13b,70b)

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: DB-GPT 👏👏 0.3.6\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-09-13 09:06+0800\n"
"POT-Creation-Date: 2023-09-20 17:34+0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: zh_CN\n"
@ -20,157 +20,156 @@ msgstr ""
"Generated-By: Babel 2.12.1\n"
#: ../../getting_started/install/cluster/vms/index.md:1
#: 2d2e04ba49364eae9b8493bb274765a6
#: 48c062c146cd42b48c248ae590d386df
msgid "Local cluster deployment"
msgstr "本地集群部署"
#: ../../getting_started/install/cluster/vms/index.md:4
#: e405d0e7ad8c4b2da4b4ca27c77f5fea
#: ce59bbbc9c294cafa6df8165de61967f
msgid "Model cluster deployment"
msgstr "模型集群部署"
#: ../../getting_started/install/cluster/vms/index.md:7
#: bba397ddac754a2bab8edca163875b65
#: 51650b41f4974f819a623db1e97764c7
msgid "**Installing Command-Line Tool**"
msgstr "**安装命令行工具**"
#: ../../getting_started/install/cluster/vms/index.md:9
#: bc45851124354522af8c9bb9748ff1fa
#: 64fcb0e3ec8d491aa9d15f783823e579
#, fuzzy
msgid ""
"All operations below are performed using the `dbgpt` command. To use the "
"`dbgpt` command, you need to install the DB-GPT project with `pip install"
" -e .`. Alternatively, you can use `python pilot/scripts/cli_scripts.py` "
"as a substitute for the `dbgpt` command."
" -e \".[default]\"`. Alternatively, you can use `python "
"pilot/scripts/cli_scripts.py` as a substitute for the `dbgpt` command."
msgstr ""
"以下所有操作都使用 `dbgpt` 命令完成。要使用 `dbgpt` 命令您需要安装DB-GPT项目方法是使用`pip install -e .`。或者,您可以使用 `python pilot/scripts/cli_scripts.py` 作为 `dbgpt` 命令的替代。"
"以下所有操作都使用 `dbgpt` 命令完成。要使用 `dbgpt` 命令您需要安装DB-GPT项目方法是使用`pip install -e "
".`。或者,您可以使用 `python pilot/scripts/cli_scripts.py` 作为 `dbgpt` 命令的替代。"
#: ../../getting_started/install/cluster/vms/index.md:11
#: 9d11f7807fd140c8949b634700adc966
#: 572f2d79178a4e6780799dd8bc0867f9
msgid "Launch Model Controller"
msgstr "启动 Model Controller"
#: ../../getting_started/install/cluster/vms/index.md:17
#: 97716be92ba64ce9a215433bddf77add
#: 66cfeb3d834c4f7b87bb3180ae447203
msgid "By default, the Model Controller starts on port 8000."
msgstr "默认情况下Model Controller 启动在 8000 端口。"
#: ../../getting_started/install/cluster/vms/index.md:20
#: 3f65e6a1e59248a59c033891d1ab7ba8
#: cddb3dbc31734462b6aa3c63e3c76fe2
msgid "Launch LLM Model Worker"
msgstr "启动 LLM Model Worker"
#: ../../getting_started/install/cluster/vms/index.md:22
#: 60241d97573e4265b7fb150c378c4a08
#: 953eeafd791942e895833bce2a4d755f
msgid "If you are starting `chatglm2-6b`:"
msgstr "如果您启动的是 `chatglm2-6b`"
#: ../../getting_started/install/cluster/vms/index.md:31
#: 18bbeb1de110438fa96dd5c736b9a7b1
#: 779d8daa394b4731bc74a93c077961e1
msgid "If you are starting `vicuna-13b-v1.5`:"
msgstr "如果您启动的是 `vicuna-13b-v1.5`"
#: ../../getting_started/install/cluster/vms/index.md:40
#: ../../getting_started/install/cluster/vms/index.md:53
#: 24b1a27313c64224aaeab6cbfad1fe19 fc94a698a7904c6893eef7e7a6e52972
#: 736b34df46e640fbbf3eb41ff5f44cc2 b620ee13d10748e6a89c67a9bfb5a53b
msgid "Note: Be sure to use your own model name and model path."
msgstr "注意:确保使用您自己的模型名称和模型路径。"
#: ../../getting_started/install/cluster/vms/index.md:42
#: 19746195e85f4784bf66a9e67378c04b
#: d1f48ab4090d4344aa2a010cdc88a28e
msgid "Launch Embedding Model Worker"
msgstr "启动 Embedding Model Worker"
#: ../../getting_started/install/cluster/vms/index.md:55
#: e93ce68091f64d0294b3f912a66cc18b
#: 0b4c6d2ff51c4167b553a6255ce268ba
msgid "Check your model:"
msgstr "检查您的模型:"
#: ../../getting_started/install/cluster/vms/index.md:61
#: fa0b8f3a18fe4bab88fbf002bf26d32e
#: defd23cef23a4e74b150b7b49b99d333
msgid "You will see the following output:"
msgstr "您将看到以下输出:"
#: ../../getting_started/install/cluster/vms/index.md:75
#: 695262fb4f224101902bc7865ac7871f
#: aaa86e08b60e46ddae52a03f25812f24
msgid "Connect to the model service in the webserver (dbgpt_server)"
msgstr "在 webserver (dbgpt_server) 中连接到模型服务 (dbgpt_server)"
#: ../../getting_started/install/cluster/vms/index.md:77
#: 73bf4c2ae5c64d938e3b7e77c06fa21e
#: 7fd7b622b2f649d0b7d9b51a998a038c
msgid ""
"**First, modify the `.env` file to change the model name and the Model "
"Controller connection address.**"
msgstr ""
"**首先,修改 `.env` 文件以更改模型名称和模型控制器连接地址。**"
msgstr "**首先,修改 `.env` 文件以更改模型名称和模型控制器连接地址。**"
#: ../../getting_started/install/cluster/vms/index.md:85
#: 8ab126fd72ed4368a79b821ba50e62c8
#: 7ce03ec66f624d0eabd5a2fbe2efcbcc
msgid "Start the webserver"
msgstr "启动 webserver"
#: ../../getting_started/install/cluster/vms/index.md:91
#: 5a7e25c84ca2412bb64310bfad9e2403
#: 9e1e2b7925834d6b9140633db1082032
msgid "`--light` indicates not to start the embedded model service."
msgstr "`--light` 表示不启动嵌入式模型服务。"
#: ../../getting_started/install/cluster/vms/index.md:93
#: 8cd9ec4fa9cb4c0fa8ff05c05a85ea7f
#: 4d47f76763914a78a89d62f0befa3fd9
msgid ""
"Alternatively, you can prepend the command with `LLM_MODEL=chatglm2-6b` "
"to start:"
msgstr ""
"或者,您可以在命令前加上 `LLM_MODEL=chatglm2-6b` 来启动:"
msgstr "或者,您可以在命令前加上 `LLM_MODEL=chatglm2-6b` 来启动:"
#: ../../getting_started/install/cluster/vms/index.md:100
#: 13ed16758a104860b5fc982d36638b17
#: 28408fe554dd411c9ca672466d5563b6
msgid "More Command-Line Usages"
msgstr "更多命令行用法"
#: ../../getting_started/install/cluster/vms/index.md:102
#: 175f614d547a4391bab9a77762f9174e
#: 8e0aa88d092d49fdb0fa849c83565a41
msgid "You can view more command-line usages through the help command."
msgstr "您可以通过帮助命令查看更多命令行用法。"
#: ../../getting_started/install/cluster/vms/index.md:104
#: 6a4475d271c347fbbb35f2936a86823f
#: f307f82ced7947f980bb65b3543580d1
msgid "**View the `dbgpt` help**"
msgstr "**查看 `dbgpt` 帮助**"
#: ../../getting_started/install/cluster/vms/index.md:109
#: 3eb11234cf504cc9ac369d8462daa14b
#: 7564aed77a7d43e6878b506c6a9788a2
msgid "You will see the basic command parameters and usage:"
msgstr "您将看到基本的命令参数和用法:"
#: ../../getting_started/install/cluster/vms/index.md:127
#: 6eb47aecceec414e8510fe022b6fddbd
#: 569f2b9e62e44179ae8dcf5b05a1f3e8
msgid "**View the `dbgpt start` help**"
msgstr "**查看 `dbgpt start` 帮助**"
#: ../../getting_started/install/cluster/vms/index.md:133
#: 1f4c0a4ce0704ca8ac33178bd13c69ad
#: 43e8747d136d4f6cab83c1b1beaa32b0
msgid "Here you can see the related commands and usage for start:"
msgstr "在这里,您可以看到启动的相关命令和用法:"
#: ../../getting_started/install/cluster/vms/index.md:150
#: 22e8e67bc55244e79764d091f334560b
#: 25e37b3050b348ec9a5c96d9db515e9b
msgid "**View the `dbgpt start worker`help**"
msgstr "**查看 `dbgpt start worker` 帮助**"
#: ../../getting_started/install/cluster/vms/index.md:156
#: 5631b83fda714780855e99e90d4eb542
#: 8e959fd455ca45f9a5e69e0af9b764a4
msgid "Here you can see the parameters to start Model Worker:"
msgstr "在这里,您可以看到启动 Model Worker 的参数:"
#: ../../getting_started/install/cluster/vms/index.md:215
#: cf4a31fd3368481cba1b3ab382615f53
#: 374d274c7a254533900145ef17bb24fb
msgid "**View the `dbgpt model`help**"
msgstr "**查看 `dbgpt model` 帮助**"
#: ../../getting_started/install/cluster/vms/index.md:221
#: 3740774ec4b240f2882b5b59da224d55
#: 19bcc9abe62f490d9c3c092c5deea24a
msgid ""
"The `dbgpt model ` command can connect to the Model Controller via the "
"Model Controller address and then manage a remote model:"
msgstr ""
"`dbgpt model` 命令可以通过 Model Controller 地址连接到 Model Controller然后管理远程模型"
msgstr "`dbgpt model` 命令可以通过 Model Controller 地址连接到 Model Controller然后管理远程模型"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: DB-GPT 👏👏 0.3.5\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-09-13 10:46+0800\n"
"POT-Creation-Date: 2023-09-20 17:34+0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: zh_CN\n"
@ -20,86 +20,91 @@ msgstr ""
"Generated-By: Babel 2.12.1\n"
#: ../../getting_started/install/llm/llm.rst:2
#: ../../getting_started/install/llm/llm.rst:24
#: e693a8d3769b4d9e99c4442ca77dc43c
#: ../../getting_started/install/llm/llm.rst:25
#: 5242ca319fab49988e018cd5b5d893df
msgid "LLM Usage"
msgstr "LLM使用"
#: ../../getting_started/install/llm/llm.rst:3 0a73562d18ba455bab04277b715c3840
#: ../../getting_started/install/llm/llm.rst:3 b12a86c062f441cd870e94d56146e6ea
msgid ""
"DB-GPT provides a management and deployment solution for multiple models."
" This chapter mainly discusses how to deploy different models."
msgstr "DB-GPT提供了多模型的管理和部署方案本章主要讲解针对不同的模型该怎么部署"
#: ../../getting_started/install/llm/llm.rst:19
#: d7e4de2a7e004888897204ec76b6030b
#: ../../getting_started/install/llm/llm.rst:20
#: a7e76642fec94a658a48ced7b4133a61
msgid ""
"Multi LLMs Support, Supports multiple large language models, currently "
"supporting"
msgstr "目前DB-GPT已适配如下模型"
#: ../../getting_started/install/llm/llm.rst:9 4616886b8b2244bd93355e871356d89e
#: ../../getting_started/install/llm/llm.rst:9 9dbc17aae88a4d2fa4c291d58e8390e2
msgid "🔥 InternLM(7b,20b)"
msgstr ""
#: ../../getting_started/install/llm/llm.rst:10
#: 7d423bfe0c9f41758f0bf55e30803955
#, fuzzy
msgid "🔥 Baichuan2(7b,13b)"
msgstr "Baichuan(7b,13b)"
#: ../../getting_started/install/llm/llm.rst:10
#: ad0e4793d4e744c1bdf59f5a3d9c84be
#: ../../getting_started/install/llm/llm.rst:11
#: 2e44b9f9f2a842d1969255610974f9c0
msgid "🔥 Vicuna-v1.5(7b,13b)"
msgstr "🔥 Vicuna-v1.5(7b,13b)"
#: ../../getting_started/install/llm/llm.rst:11
#: d291e58001ae487bbbf2a1f9f889f5fd
#: ../../getting_started/install/llm/llm.rst:12
#: ea32bf9802054af396accaf55291a3a1
msgid "🔥 llama-2(7b,13b,70b)"
msgstr "🔥 llama-2(7b,13b,70b)"
#: ../../getting_started/install/llm/llm.rst:12
#: 1e49702ee40b4655945a2a13efaad536
#: ../../getting_started/install/llm/llm.rst:13
#: fc39e32250424dbaa7c0c65d45a01983
msgid "WizardLM-v1.2(13b)"
msgstr "WizardLM-v1.2(13b)"
#: ../../getting_started/install/llm/llm.rst:13
#: 4ef5913ddfe840d7a12289e6e1d4cb60
#: ../../getting_started/install/llm/llm.rst:14
#: e17ed83eba5a46ea9950c8ba719403ba
msgid "Vicuna (7b,13b)"
msgstr "Vicuna (7b,13b)"
#: ../../getting_started/install/llm/llm.rst:14
#: ea46c2211257459285fa48083cb59561
#: ../../getting_started/install/llm/llm.rst:15
#: a13575c9b1b1458282d5a6351128735f
msgid "ChatGLM-6b (int4,int8)"
msgstr "ChatGLM-6b (int4,int8)"
#: ../../getting_started/install/llm/llm.rst:15
#: 90688302bae4452a84f14e8ecb7f1a21
#: ../../getting_started/install/llm/llm.rst:16
#: 504b4a29240d4e69a258d5ca4d0846d2
msgid "ChatGLM2-6b (int4,int8)"
msgstr "ChatGLM2-6b (int4,int8)"
#: ../../getting_started/install/llm/llm.rst:16
#: ee1469545a314696a36e7296c7b71960
#: ../../getting_started/install/llm/llm.rst:17
#: 0edd5c73197e4e5d9691665dc79e78b0
msgid "guanaco(7b,13b,33b)"
msgstr "guanaco(7b,13b,33b)"
#: ../../getting_started/install/llm/llm.rst:17
#: 25abad241f4d4eee970d5938bf71311f
#: ../../getting_started/install/llm/llm.rst:18
#: bd97e381ac6743e4a03df54b980ac5b9
msgid "Gorilla(7b,13b)"
msgstr "Gorilla(7b,13b)"
#: ../../getting_started/install/llm/llm.rst:18
#: 8e3d0399431a4c6a9065a8ae0ad3c8ac
#: ../../getting_started/install/llm/llm.rst:19
#: 8d46081371b34471ba8f1dbc374955be
msgid "Baichuan(7b,13b)"
msgstr "Baichuan(7b,13b)"
#: ../../getting_started/install/llm/llm.rst:19
#: c285fa7c9c6c4e3e9840761a09955348
#: ../../getting_started/install/llm/llm.rst:20
#: 08a1d4b2abac4effbc236fcd38f9a205
msgid "OpenAI"
msgstr "OpenAI"
#: ../../getting_started/install/llm/llm.rst:21
#: 4ac13a21f323455982750bd2e0243b72
#: ../../getting_started/install/llm/llm.rst:22
#: 4f1e438738854cf1ad35800ddbeb9e12
msgid "llama_cpp"
msgstr "llama_cpp"
#: ../../getting_started/install/llm/llm.rst:22
#: 7231edceef584724a6f569c6b363e083
#: ../../getting_started/install/llm/llm.rst:23
#: 5db1549fcfca4744b441cde5922d7fd3
msgid "quantization"
msgstr "quantization"

View File

@ -1,4 +1,5 @@
"""加载组件"""
from __future__ import annotations
import json
import os
@ -8,17 +9,19 @@ import requests
import threading
import datetime
from pathlib import Path
from typing import List
from typing import List, TYPE_CHECKING
from urllib.parse import urlparse
from zipimport import zipimporter
import requests
from auto_gpt_plugin_template import AutoGPTPluginTemplate
from pilot.configs.config import Config
from pilot.configs.model_config import PLUGINS_DIR
from pilot.logs import logger
if TYPE_CHECKING:
from auto_gpt_plugin_template import AutoGPTPluginTemplate
def inspect_zip_for_modules(zip_path: str, debug: bool = False) -> list[str]:
"""
@ -115,7 +118,7 @@ def load_native_plugins(cfg: Config):
t.start()
def scan_plugins(cfg: Config, debug: bool = False) -> List[AutoGPTPluginTemplate]:
def scan_plugins(cfg: Config, debug: bool = False) -> List["AutoGPTPluginTemplate"]:
"""Scan the plugins directory for plugins and loads them.
Args:

View File

@ -1,11 +1,16 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from __future__ import annotations
import os
from typing import List
from typing import List, Optional, TYPE_CHECKING
from pilot.singleton import Singleton
if TYPE_CHECKING:
from auto_gpt_plugin_template import AutoGPTPluginTemplate
from pilot.component import SystemApp
class Config(metaclass=Singleton):
"""Configuration class to store the state of bools for different scripts access"""
@ -99,9 +104,8 @@ class Config(metaclass=Singleton):
self.message_dir = os.getenv("MESSAGE_HISTORY_DIR", "../../message")
### The associated configuration parameters of the plug-in control the loading and use of the plug-in
from auto_gpt_plugin_template import AutoGPTPluginTemplate
self.plugins: List[AutoGPTPluginTemplate] = []
self.plugins: List["AutoGPTPluginTemplate"] = []
self.plugins_openai = []
self.plugins_auto_load = os.getenv("AUTO_LOAD_PLUGIN", "True") == "True"
@ -189,9 +193,7 @@ class Config(metaclass=Singleton):
### Log level
self.DBGPT_LOG_LEVEL = os.getenv("DBGPT_LOG_LEVEL", "INFO")
from pilot.component import SystemApp
self.SYSTEM_APP: SystemApp = None
self.SYSTEM_APP: Optional["SystemApp"] = None
def set_debug_mode(self, value: bool) -> None:
"""Set the debug mode value"""

View File

@ -23,15 +23,18 @@ os.chdir(new_directory)
def get_device() -> str:
import torch
try:
import torch
return (
"cuda"
if torch.cuda.is_available()
else "mps"
if torch.backends.mps.is_available()
else "cpu"
)
return (
"cuda"
if torch.cuda.is_available()
else "mps"
if torch.backends.mps.is_available()
else "cpu"
)
except ModuleNotFoundError:
return "cpu"
LLM_MODEL_CONFIG = {
@ -70,8 +73,9 @@ LLM_MODEL_CONFIG = {
"wizardlm-13b": os.path.join(MODEL_PATH, "WizardLM-13B-V1.2"),
"llama-cpp": os.path.join(MODEL_PATH, "ggml-model-q4_0.bin"),
# https://huggingface.co/internlm/internlm-chat-7b-v1_1, 7b vs 7b-v1.1: https://github.com/InternLM/InternLM/issues/288
"internlm-7b": os.path.join(MODEL_PATH, "internlm-chat-7b-v1_1"),
"internlm-7b": os.path.join(MODEL_PATH, "internlm-chat-7b"),
"internlm-7b-8k": os.path.join(MODEL_PATH, "internlm-chat-7b-8k"),
"internlm-20b": os.path.join(MODEL_PATH, "internlm-20b-chat"),
}
EMBEDDING_MODEL_CONFIG = {

View File

@ -1,6 +1,5 @@
from typing import Optional
from chromadb.errors import NotEnoughElementsException
from langchain.text_splitter import TextSplitter
from pilot.embedding_engine.embedding_factory import (
@ -69,10 +68,10 @@ class EmbeddingEngine:
vector_client = VectorStoreConnector(
self.vector_store_config["vector_store_type"], self.vector_store_config
)
try:
ans = vector_client.similar_search(text, topk)
except NotEnoughElementsException:
ans = vector_client.similar_search(text, 1)
# https://github.com/chroma-core/chroma/issues/657
ans = vector_client.similar_search(text, topk)
# except NotEnoughElementsException:
# ans = vector_client.similar_search(text, 1)
return ans
def vector_exist(self):

View File

@ -1,6 +1,5 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
from typing import List, Optional
import markdown

View File

@ -3,7 +3,6 @@
from abc import ABC, abstractmethod
from typing import Dict, List, Optional
from chromadb.errors import NotEnoughElementsException
from langchain.text_splitter import TextSplitter
from pilot.vector_store.connector import VectorStoreConnector
@ -71,10 +70,9 @@ class SourceEmbedding(ABC):
self.vector_client = VectorStoreConnector(
self.vector_store_config["vector_store_type"], self.vector_store_config
)
try:
ans = self.vector_client.similar_search(doc, topk)
except NotEnoughElementsException:
ans = self.vector_client.similar_search(doc, 1)
# https://github.com/chroma-core/chroma/issues/657
ans = self.vector_client.similar_search(doc, topk)
# ans = self.vector_client.similar_search(doc, 1)
return ans
def vector_name_exist(self):

View File

@ -1,5 +1,4 @@
import logging
import platform
from typing import Dict, Iterator, List
from pilot.configs.model_config import get_device
@ -12,7 +11,7 @@ from pilot.server.chat_adapter import get_llm_chat_adapter, BaseChatAdpter
from pilot.utils.model_utils import _clear_torch_cache
from pilot.utils.parameter_utils import EnvArgumentParser
logger = logging.getLogger("model_worker")
logger = logging.getLogger(__name__)
class DefaultModelWorker(ModelWorker):
@ -91,8 +90,13 @@ class DefaultModelWorker(ModelWorker):
_clear_torch_cache(self._model_params.device)
def generate_stream(self, params: Dict) -> Iterator[ModelOutput]:
import torch
torch_imported = False
try:
import torch
torch_imported = True
except ImportError:
pass
try:
# params adaptation
params, model_context = self.llm_chat_adapter.model_adaptation(
@ -117,16 +121,17 @@ class DefaultModelWorker(ModelWorker):
)
yield model_output
print(f"\n\nfull stream output:\n{previous_response}")
except torch.cuda.CudaError:
model_output = ModelOutput(
text="**GPU OutOfMemory, Please Refresh.**", error_code=0
)
yield model_output
except Exception as e:
model_output = ModelOutput(
text=f"**LLMServer Generate Error, Please CheckErrorInfo.**: {e}",
error_code=0,
)
# Check if the exception is a torch.cuda.CudaError and if torch was imported.
if torch_imported and isinstance(e, torch.cuda.CudaError):
model_output = ModelOutput(
text="**GPU OutOfMemory, Please Refresh.**", error_code=0
)
else:
model_output = ModelOutput(
text=f"**LLMServer Generate Error, Please CheckErrorInfo.**: {e}",
error_code=0,
)
yield model_output
def generate(self, params: Dict) -> ModelOutput:

View File

@ -5,6 +5,7 @@ import os
import sys
import random
import time
import logging
from concurrent.futures import ThreadPoolExecutor
from dataclasses import asdict
from typing import Awaitable, Callable, Dict, Iterator, List, Optional
@ -12,7 +13,6 @@ from typing import Awaitable, Callable, Dict, Iterator, List, Optional
from fastapi import APIRouter, FastAPI
from fastapi.responses import StreamingResponse
from pilot.component import SystemApp
from pilot.configs.model_config import LOGDIR
from pilot.model.base import (
ModelInstance,
ModelOutput,
@ -30,15 +30,13 @@ from pilot.model.cluster.manager_base import (
WorkerManagerFactory,
)
from pilot.model.cluster.base import *
from pilot.utils import build_logger
from pilot.utils.parameter_utils import (
EnvArgumentParser,
ParameterDescription,
_dict_to_command_args,
)
logger = build_logger("model_worker", LOGDIR + "/model_worker.log")
logger = logging.getLogger(__name__)
RegisterFunc = Callable[[WorkerRunData], Awaitable[None]]
DeregisterFunc = Callable[[WorkerRunData], Awaitable[None]]

View File

@ -1,4 +1,3 @@
import bardapi
import requests
from typing import List
from pilot.scene.base_message import ModelMessage, ModelMessageRoleType
@ -52,6 +51,8 @@ def bard_generate_stream(
else:
yield f"bard proxy url request failed!, response = {str(response)}"
else:
import bardapi
response = bardapi.core.Bard(proxy_api_key).get_answer("\n".join(msgs))
if response is not None and response.get("content") is not None:

View File

@ -10,9 +10,6 @@ from pilot.scene.base_chat import BaseChat
from pilot.scene.base import ChatScene
from pilot.common.sql_database import Database
from pilot.configs.config import Config
from pilot.common.markdown_text import (
generate_htm_table,
)
from pilot.scene.chat_data.chat_excel.excel_learning.prompt import prompt
from pilot.scene.chat_data.chat_excel.excel_reader import ExcelReader
from pilot.json_utils.utilities import DateTimeEncoder

View File

@ -1,7 +1,5 @@
from typing import Dict
from chromadb.errors import NoIndexException
from pilot.scene.base_chat import BaseChat
from pilot.scene.base import ChatScene
from pilot.configs.config import Config
@ -59,22 +57,19 @@ class ChatKnowledge(BaseChat):
)
def generate_input_values(self):
try:
if self.space_context:
self.prompt_template.template_define = self.space_context["prompt"][
"scene"
]
self.prompt_template.template = self.space_context["prompt"]["template"]
docs = self.knowledge_embedding_client.similar_search(
self.current_user_input, self.top_k
)
context = [d.page_content for d in docs]
context = context[: self.max_token]
input_values = {"context": context, "question": self.current_user_input}
except NoIndexException:
if self.space_context:
self.prompt_template.template_define = self.space_context["prompt"]["scene"]
self.prompt_template.template = self.space_context["prompt"]["template"]
docs = self.knowledge_embedding_client.similar_search(
self.current_user_input, self.top_k
)
if not docs:
raise ValueError(
"you have no knowledge space, please add your knowledge space"
)
context = [d.page_content for d in docs]
context = context[: self.max_token]
input_values = {"context": context, "question": self.current_user_input}
return input_values
@property

View File

@ -71,7 +71,7 @@ def load(
skip_wrong_doc: bool,
max_workers: int,
):
"""Load you local knowledge to DB-GPT"""
"""Load your local knowledge to DB-GPT"""
from pilot.server.knowledge._cli.knowledge_client import knowledge_init
knowledge_init(

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -170,8 +170,9 @@ class DBSummaryClient:
def init_db_profile(self, db_summary_client, dbname, embeddings):
from pilot.embedding_engine.string_embedding import StringEmbedding
vector_store_name = dbname + "_profile"
profile_store_config = {
"vector_store_name": dbname + "_profile",
"vector_store_name": vector_store_name,
"chroma_persist_path": KNOWLEDGE_UPLOAD_ROOT_PATH,
"vector_store_type": CFG.VECTOR_STORE_TYPE,
"embeddings": embeddings,
@ -190,6 +191,8 @@ class DBSummaryClient:
)
docs.extend(embedding.read_batch())
embedding.index_to_store(docs)
else:
logger.info(f"Vector store name {vector_store_name} exist")
logger.info("init db profile success...")

View File

@ -2,6 +2,7 @@ import os
from typing import Any
from chromadb.config import Settings
from chromadb import PersistentClient
from pilot.logs import logger
from pilot.vector_store.base import VectorStoreBase
@ -18,15 +19,18 @@ class ChromaStore(VectorStoreBase):
ctx["chroma_persist_path"], ctx["vector_store_name"] + ".vectordb"
)
chroma_settings = Settings(
chroma_db_impl="duckdb+parquet",
# chroma_db_impl="duckdb+parquet", => deprecated configuration of Chroma
persist_directory=self.persist_dir,
anonymized_telemetry=False,
)
client = PersistentClient(path=self.persist_dir, settings=chroma_settings)
collection_metadata = {"hnsw:space": "cosine"}
self.vector_store_client = Chroma(
persist_directory=self.persist_dir,
embedding_function=self.embeddings,
client_settings=chroma_settings,
# client_settings=chroma_settings,
client=client,
collection_metadata=collection_metadata,
)
@ -35,9 +39,13 @@ class ChromaStore(VectorStoreBase):
return self.vector_store_client.similarity_search(text, topk)
def vector_name_exists(self):
return (
os.path.exists(self.persist_dir) and len(os.listdir(self.persist_dir)) > 0
)
logger.info(f"Check persist_dir: {self.persist_dir}")
if not os.path.exists(self.persist_dir):
return False
files = os.listdir(self.persist_dir)
# Skip default file: chroma.sqlite3
files = list(filter(lambda f: f != "chroma.sqlite3", files))
return len(files) > 0
def load_document(self, documents):
logger.info("ChromaStore load document")

View File

@ -1,84 +0,0 @@
# torch==2.0.0
aiohttp==3.8.4
aiosignal==1.3.1
async-timeout==4.0.2
attrs==22.2.0
cchardet==2.1.7
chardet==5.1.0
# contourpy==1.0.7
# cycler==0.11.0
filelock==3.9.0
fonttools==4.38.0
frozenlist==1.3.3
huggingface-hub==0.14.1
importlib-resources==5.12.0
sqlparse==0.4.4
# kiwisolver==1.4.4
# matplotlib==3.7.1
multidict==6.0.4
packaging==23.0
psutil==5.9.4
# pycocotools==2.0.6
# pyparsing==3.0.9
python-dateutil==2.8.2
pyyaml==6.0
tokenizers==0.13.2
tqdm==4.64.1
transformers>=4.31.0
transformers_stream_generator
# timm==0.6.13
spacy==3.5.3
webdataset==0.2.48
yarl==1.8.2
zipp==3.14.0
omegaconf==2.3.0
opencv-python==4.7.0.72
iopath==0.1.10
tenacity==8.2.2
peft
# TODO remove pycocoevalcap
pycocoevalcap
cpm_kernels
umap-learn
# notebook
gradio==3.23
gradio-client==0.0.8
# wandb
# llama-index==0.5.27
# TODO move bitsandbytes to optional
# bitsandbytes
accelerate>=0.20.3
unstructured==0.6.3
gpt4all==0.3.0
diskcache==5.6.1
seaborn
auto-gpt-plugin-template
pymdown-extensions
gTTS==2.3.1
langchain>=0.0.286
nltk
python-dotenv==1.0.0
vcrpy
chromadb==0.3.22
markdown2
colorama
playsound
distro
pypdf
weaviate-client
bardapi==0.1.29
# database
# TODO moved to optional dependencies
pymysql
duckdb
duckdb-engine
# cli
prettytable
cachetools

View File

@ -1,4 +1,4 @@
# Testing dependencies
# Testing and dev dependencies
pytest
asynctest
pytest-asyncio
@ -7,4 +7,6 @@ pytest-cov
pytest-integration
pytest-mock
pytest-recording
pytesseract==0.3.10
pytesseract==0.3.10
# python code format
black

117
setup.py
View File

@ -10,7 +10,6 @@ from urllib.parse import urlparse, quote
import re
from pip._internal.utils.appdirs import user_cache_dir
import shutil
import tempfile
from setuptools import find_packages
with open("README.md", mode="r", encoding="utf-8") as fh:
@ -74,7 +73,6 @@ def cache_package(package_url: str, package_name: str, is_windows: bool = False)
local_path = os.path.join(cache_dir, filename)
if not os.path.exists(local_path):
# temp_file, temp_path = tempfile.mkstemp()
temp_path = local_path + ".tmp"
if os.path.exists(temp_path):
os.remove(temp_path)
@ -204,23 +202,16 @@ def torch_requires(
torchvision_version: str = "0.15.1",
torchaudio_version: str = "2.0.1",
):
torch_pkgs = []
torch_pkgs = [
f"torch=={torch_version}",
f"torchvision=={torchvision_version}",
f"torchaudio=={torchaudio_version}",
]
torch_cuda_pkgs = []
os_type, _ = get_cpu_avx_support()
if os_type == OSType.DARWIN:
torch_pkgs = [
f"torch=={torch_version}",
f"torchvision=={torchvision_version}",
f"torchaudio=={torchaudio_version}",
]
else:
if os_type != OSType.DARWIN:
cuda_version = get_cuda_version()
if not cuda_version:
torch_pkgs = [
f"torch=={torch_version}",
f"torchvision=={torchvision_version}",
f"torchaudio=={torchaudio_version}",
]
else:
if cuda_version:
supported_versions = ["11.7", "11.8"]
if cuda_version not in supported_versions:
print(
@ -238,12 +229,16 @@ def torch_requires(
torchvision_url_cached = cache_package(
torchvision_url, "torchvision", os_type == OSType.WINDOWS
)
torch_pkgs = [
torch_cuda_pkgs = [
f"torch @ {torch_url_cached}",
f"torchvision @ {torchvision_url_cached}",
f"torchaudio=={torchaudio_version}",
]
setup_spec.extras["torch"] = torch_pkgs
setup_spec.extras["torch_cpu"] = torch_pkgs
setup_spec.extras["torch_cuda"] = torch_cuda_pkgs
def llama_cpp_python_cuda_requires():
@ -274,6 +269,57 @@ def llama_cpp_python_cuda_requires():
setup_spec.extras["llama_cpp"].append(f"llama_cpp_python_cuda @ {extra_index_url}")
def core_requires():
"""
pip install db-gpt or pip install "db-gpt[core]"
"""
setup_spec.extras["core"] = [
"aiohttp==3.8.4",
"chardet==5.1.0",
"importlib-resources==5.12.0",
"psutil==5.9.4",
"python-dotenv==1.0.0",
"colorama",
"prettytable",
"cachetools",
]
setup_spec.extras["framework"] = [
"httpx",
"sqlparse==0.4.4",
"seaborn",
# https://github.com/eosphoros-ai/DB-GPT/issues/551
"pandas==2.0.3",
"auto-gpt-plugin-template",
"gTTS==2.3.1",
"langchain>=0.0.286",
"SQLAlchemy",
"pymysql",
"duckdb",
"duckdb-engine",
"jsonschema",
# TODO move transformers to default
"transformers>=4.31.0",
]
def knowledge_requires():
"""
pip install "db-gpt[knowledge]"
"""
setup_spec.extras["knowledge"] = [
"spacy==3.5.3",
# "chromadb==0.3.22",
"chromadb",
"markdown",
"bs4",
"python-pptx",
"python-docx",
"pypdf",
"python-multipart",
]
def llama_cpp_requires():
"""
pip install "db-gpt[llama_cpp]"
@ -309,6 +355,7 @@ def all_vector_store_requires():
setup_spec.extras["vstore"] = [
"grpcio==1.47.5", # maybe delete it
"pymilvus==2.2.1",
"weaviate-client",
]
@ -324,6 +371,31 @@ def openai_requires():
pip install "db-gpt[openai]"
"""
setup_spec.extras["openai"] = ["openai", "tiktoken"]
setup_spec.extras["openai"] += setup_spec.extras["framework"]
setup_spec.extras["openai"] += setup_spec.extras["knowledge"]
def gpt4all_requires():
"""
pip install "db-gpt[gpt4all]"
"""
setup_spec.extras["gpt4all"] = ["gpt4all"]
def default_requires():
"""
pip install "db-gpt[default]"
"""
setup_spec.extras["default"] = [
"tokenizers==0.13.2",
"accelerate>=0.20.3",
"sentence-transformers",
"protobuf==3.20.3",
]
setup_spec.extras["default"] += setup_spec.extras["framework"]
setup_spec.extras["default"] += setup_spec.extras["knowledge"]
setup_spec.extras["default"] += setup_spec.extras["torch"]
setup_spec.extras["default"] += setup_spec.extras["quantization"]
def all_requires():
@ -335,20 +407,23 @@ def all_requires():
def init_install_requires():
setup_spec.install_requires += parse_requirements("requirements.txt")
setup_spec.install_requires += setup_spec.extras["torch"]
setup_spec.install_requires += setup_spec.extras["quantization"]
setup_spec.install_requires += setup_spec.extras["core"]
print(f"Install requires: \n{','.join(setup_spec.install_requires)}")
core_requires()
torch_requires()
knowledge_requires()
llama_cpp_requires()
quantization_requires()
all_vector_store_requires()
all_datasource_requires()
openai_requires()
gpt4all_requires()
# must be last
default_requires()
all_requires()
init_install_requires()