From 162e2c9b1cdaeea3e3d2f5156b3711f9e01cfd8c Mon Sep 17 00:00:00 2001 From: Fangyin Cheng Date: Thu, 13 Jun 2024 09:43:34 +0800 Subject: [PATCH 1/2] chore(model): Update the default model to glm-4-9b-chat (#1629) --- .env.template | 4 +- dbgpt/_private/config.py | 2 +- dbgpt/agent/expand/resources/search_tool.py | 2 + docker-compose.yml | 2 +- docker/base/run_sqlite.sh | 2 +- .../cluster-docker-compose.yml | 4 +- .../advanced_usage/OpenAI_SDK_call.md | 4 +- .../advanced_usage/vLLM_inference.md | 10 ++- docs/docs/installation/docker.md | 28 +++--- .../installation/model_service/cluster.md | 10 +-- .../installation/model_service/stand_alone.md | 52 ++++++------ docs/docs/installation/sourcecode.md | 85 ++++++++++--------- docs/docs/quickstart.md | 72 +++++++++------- examples/agents/custom_tool_agent_example.py | 4 + scripts/setup_autodl_env.sh | 8 +- 15 files changed, 157 insertions(+), 132 deletions(-) diff --git a/.env.template b/.env.template index 38ec1c61f..313e027e1 100644 --- a/.env.template +++ b/.env.template @@ -17,7 +17,7 @@ #** LLM MODELS **# #*******************************************************************# # LLM_MODEL, see dbgpt/configs/model_config.LLM_MODEL_CONFIG -LLM_MODEL=vicuna-13b-v1.5 +LLM_MODEL=glm-4-9b-chat ## LLM model path, by default, DB-GPT will read the model path from LLM_MODEL_CONFIG based on the LLM_MODEL. ## Of course you can specify your model path according to LLM_MODEL_PATH ## In DB-GPT, the priority from high to low to read model path: @@ -25,7 +25,7 @@ LLM_MODEL=vicuna-13b-v1.5 ## 2. environment variable with key: MODEL_PATH ## 3. environment variable with key: LLM_MODEL_PATH ## 4. the config in dbgpt/configs/model_config.LLM_MODEL_CONFIG -# LLM_MODEL_PATH=/app/models/vicuna-13b-v1.5 +# LLM_MODEL_PATH=/app/models/glm-4-9b-chat # LLM_PROMPT_TEMPLATE=vicuna_v1.1 MODEL_SERVER=http://127.0.0.1:8000 LIMIT_MODEL_CONCURRENCY=5 diff --git a/dbgpt/_private/config.py b/dbgpt/_private/config.py index 7c0279a11..e8f2bb869 100644 --- a/dbgpt/_private/config.py +++ b/dbgpt/_private/config.py @@ -194,7 +194,7 @@ def __init__(self) -> None: self.CHAT_HISTORY_STORE_TYPE = os.getenv("CHAT_HISTORY_STORE_TYPE", "db") ### LLM Model Service Configuration - self.LLM_MODEL = os.getenv("LLM_MODEL", "vicuna-13b-v1.5") + self.LLM_MODEL = os.getenv("LLM_MODEL", "glm-4-9b-chat") self.LLM_MODEL_PATH = os.getenv("LLM_MODEL_PATH") ### Proxy llm backend, this configuration is only valid when "LLM_MODEL=proxyllm" diff --git a/dbgpt/agent/expand/resources/search_tool.py b/dbgpt/agent/expand/resources/search_tool.py index 8b948252d..63e64ba39 100644 --- a/dbgpt/agent/expand/resources/search_tool.py +++ b/dbgpt/agent/expand/resources/search_tool.py @@ -26,6 +26,8 @@ def baidu_search( "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:112.0) " "Gecko/20100101 Firefox/112.0" } + if num_results < 8: + num_results = 8 url = f"https://www.baidu.com/s?wd={query}&rn={num_results}" response = requests.get(url, headers=headers) response.encoding = "utf-8" diff --git a/docker-compose.yml b/docker-compose.yml index 8315d3b4f..1087c4708 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -24,7 +24,7 @@ services: - LOCAL_DB_HOST=db - LOCAL_DB_PASSWORD=aa123456 - ALLOWLISTED_PLUGINS=db_dashboard - - LLM_MODEL=vicuna-13b-v1.5 + - LLM_MODEL=glm-4-9b-chat depends_on: - db volumes: diff --git a/docker/base/run_sqlite.sh b/docker/base/run_sqlite.sh index 3915ac30c..8dec27205 100755 --- a/docker/base/run_sqlite.sh +++ b/docker/base/run_sqlite.sh @@ -4,7 +4,7 @@ docker run --ipc host --gpus all -d \ -p 5000:5000 \ -e LOCAL_DB_TYPE=sqlite \ -e LOCAL_DB_PATH=data/default_sqlite.db \ - -e LLM_MODEL=vicuna-13b-v1.5 \ + -e LLM_MODEL=glm-4-9b-chat \ -e LANGUAGE=zh \ -v /data:/data \ -v /data/models:/app/models \ diff --git a/docker/compose_examples/cluster-docker-compose.yml b/docker/compose_examples/cluster-docker-compose.yml index 0ad6be9ae..c15d011a4 100644 --- a/docker/compose_examples/cluster-docker-compose.yml +++ b/docker/compose_examples/cluster-docker-compose.yml @@ -19,7 +19,7 @@ services: - 8100:8100/tcp llm-worker: image: eosphorosai/dbgpt:latest - command: dbgpt start worker --model_name vicuna-13b-v1.5 --model_path /app/models/vicuna-13b-v1.5 --port 8001 --controller_addr http://controller:8000 + command: dbgpt start worker --model_name glm-4-9b-chat --model_path /app/models/glm-4-9b-chat --port 8001 --controller_addr http://controller:8000 environment: - DBGPT_LOG_LEVEL=DEBUG depends_on: @@ -66,7 +66,7 @@ services: - LOCAL_DB_PATH=data/default_sqlite.db - LOCAL_DB_TYPE=sqlite - ALLOWLISTED_PLUGINS=db_dashboard - - LLM_MODEL=vicuna-13b-v1.5 + - LLM_MODEL=glm-4-9b-chat - MODEL_SERVER=http://controller:8000 depends_on: - controller diff --git a/docs/docs/installation/advanced_usage/OpenAI_SDK_call.md b/docs/docs/installation/advanced_usage/OpenAI_SDK_call.md index a1a618eb1..ca24d950b 100644 --- a/docs/docs/installation/advanced_usage/OpenAI_SDK_call.md +++ b/docs/docs/installation/advanced_usage/OpenAI_SDK_call.md @@ -38,7 +38,7 @@ Chat curl http://127.0.0.1:8100/api/v1/chat/completions \ -H "Authorization: Bearer EMPTY" \ -H "Content-Type: application/json" \ --d '{"model": "vicuna-13b-v1.5", "messages": [{"role": "user", "content": "hello"}]}' +-d '{"model": "glm-4-9b-chat", "messages": [{"role": "user", "content": "hello"}]}' ``` :::tip @@ -61,7 +61,7 @@ curl http://127.0.0.1:8100/api/v1/embeddings \ import openai openai.api_key = "EMPTY" openai.api_base = "http://127.0.0.1:8100/api/v1" -model = "vicuna-13b-v1.5" +model = "glm-4-9b-chat" completion = openai.ChatCompletion.create( model=model, diff --git a/docs/docs/installation/advanced_usage/vLLM_inference.md b/docs/docs/installation/advanced_usage/vLLM_inference.md index 205235169..cb9783340 100644 --- a/docs/docs/installation/advanced_usage/vLLM_inference.md +++ b/docs/docs/installation/advanced_usage/vLLM_inference.md @@ -4,15 +4,17 @@ DB-GPT supports [vLLM](https://github.com/vllm-project/vllm) inference, a fast a ## Install dependencies `vLLM` is an optional dependency in DB-GPT. You can install it manually through the following command. -```python -$ pip install -e ".[vllm]" +```bash +pip install -e ".[vllm]" ``` ## Modify configuration file In the `.env` configuration file, modify the inference type of the model to start `vllm` inference. -```python -LLM_MODEL=vicuna-13b-v1.5 +```bash +LLM_MODEL=glm-4-9b-chat MODEL_TYPE=vllm +# modify the following configuration if you possess GPU resources +# gpu_memory_utilization=0.8 ``` For more information about the list of models supported by `vLLM`, please refer to the [vLLM supported model document](https://docs.vllm.ai/en/latest/models/supported_models.html#supported-models). diff --git a/docs/docs/installation/docker.md b/docs/docs/installation/docker.md index 93ebbbbfc..aac818209 100644 --- a/docs/docs/installation/docker.md +++ b/docs/docs/installation/docker.md @@ -5,15 +5,15 @@ There are two ways to prepare a Docker image. 1. Pull from the official image 2. Build locally. You can **choose any one** during actual use. 1.Pulled from the official image repository, [Eosphoros AI Docker Hub](https://hub.docker.com/u/eosphorosai) -```python +```bash docker pull eosphorosai/dbgpt:latest ``` 2.local build(optional) -```python +```bash bash docker/build_all_images.sh ``` Check the Docker image -```python +```bash # command docker images | grep "eosphorosai/dbgpt" @@ -24,12 +24,12 @@ eosphorosai/dbgpt latest eb3cdc5b4ead About a minute ago 1 ``` `eosphorosai/dbgpt` is the base image, which contains project dependencies and the sqlite database. The `eosphorosai/dbgpt-allinone` image is built from `eosphorosai/dbgpt`, which contains a MySQL database. Of course, in addition to pulling the Docker image, the project also provides Dockerfile files, which can be built directly through scripts in DB-GPT. Here are the build commands: -```python +```bash bash docker/build_all_images.sh ``` When using it, you need to specify specific parameters. The following is an example of specifying parameter construction: -```python +```bash bash docker/build_all_images.sh \ --base-image nvidia/cuda:11.8.0-runtime-ubuntu22.04 \ --pip-index-url https://pypi.tuna.tsinghua.edu.cn/simple \ @@ -42,12 +42,12 @@ You can view the specific usage through the command `bash docker/build_all_image ### Run through Sqlite database -```python +```bash docker run --ipc host --gpus all -d \ -p 5670:5670 \ -e LOCAL_DB_TYPE=sqlite \ -e LOCAL_DB_PATH=data/default_sqlite.db \ --e LLM_MODEL=vicuna-13b-v1.5 \ +-e LLM_MODEL=glm-4-9b-chat \ -e LANGUAGE=zh \ -v /data/models:/app/models \ --name dbgpt \ @@ -55,23 +55,23 @@ eosphorosai/dbgpt ``` Open the browser and visit [http://localhost:5670](http://localhost:5670) -- `-e LLM_MODEL=vicuna-13b-v1.5`, which means the base model uses `vicuna-13b-v1.5`. For more model usage, you can view the configuration in `/pilot/configs/model_config.LLM_MODEL_CONFIG`. +- `-e LLM_MODEL=glm-4-9b-chat`, which means the base model uses `glm-4-9b-chat`. For more model usage, you can view the configuration in `/pilot/configs/model_config.LLM_MODEL_CONFIG`. - `-v /data/models:/app/models`, specifies the model file to be mounted. The directory `/data/models` is mounted in `/app/models` of the container. Of course, it can be replaced with other paths. After the container is started, you can view the logs through the following command -```python +```bash docker logs dbgpt -f ``` ### Run through MySQL database -```python +```bash docker run --ipc host --gpus all -d -p 3306:3306 \ -p 5670:5670 \ -e LOCAL_DB_HOST=127.0.0.1 \ -e LOCAL_DB_PASSWORD=aa123456 \ -e MYSQL_ROOT_PASSWORD=aa123456 \ --e LLM_MODEL=vicuna-13b-v1.5 \ +-e LLM_MODEL=glm-4-9b-chat \ -e LANGUAGE=zh \ -v /data/models:/app/models \ --name db-gpt-allinone \ @@ -79,16 +79,16 @@ db-gpt-allinone ``` Open the browser and visit [http://localhost:5670](http://localhost:5670) -- `-e LLM_MODEL=vicuna-13b-v1.5`, which means the base model uses `vicuna-13b-v1.5`. For more model usage, you can view the configuration in `/pilot/configs/model_config.LLM_MODEL_CONFIG`. +- `-e LLM_MODEL=glm-4-9b-chat`, which means the base model uses `glm-4-9b-chat`. For more model usage, you can view the configuration in `/pilot/configs/model_config.LLM_MODEL_CONFIG`. - `-v /data/models:/app/models`, specifies the model file to be mounted. The directory `/data/models` is mounted in `/app/models` of the container. Of course, it can be replaced with other paths. After the container is started, you can view the logs through the following command -```python +```bash docker logs db-gpt-allinone -f ``` ### Run through the OpenAI proxy model -```python +```bash PROXY_API_KEY="You api key" PROXY_SERVER_URL="https://api.openai.com/v1/chat/completions" docker run --gpus all -d -p 3306:3306 \ diff --git a/docs/docs/installation/model_service/cluster.md b/docs/docs/installation/model_service/cluster.md index 11ee6e0b4..fea91a792 100644 --- a/docs/docs/installation/model_service/cluster.md +++ b/docs/docs/installation/model_service/cluster.md @@ -25,12 +25,12 @@ By default, `Model Server` will start on port `8000` ## Start Model Worker :::tip -Start `chatglm2-6b` model Worker +Start `glm-4-9b-chat` model Worker ::: ```shell -dbgpt start worker --model_name chatglm2-6b \ ---model_path /app/models/chatglm2-6b \ +dbgpt start worker --model_name glm-4-9b-chat \ +--model_path /app/models/glm-4-9b-chat \ --port 8001 \ --controller_addr http://127.0.0.1:8000 ``` @@ -92,7 +92,7 @@ $ dbgpt model list +-------------------+------------+------------+------+---------+---------+-----------------+----------------------------+ | Model Name | Model Type | Host | Port | Healthy | Enabled | Prompt Template | Last Heartbeat | +-------------------+------------+------------+------+---------+---------+-----------------+----------------------------+ -| chatglm2-6b | llm | 172.17.0.2 | 8001 | True | True | | 2023-09-12T23:04:31.287654 | +| glm-4-9b-chat | llm | 172.17.0.2 | 8001 | True | True | | 2023-09-12T23:04:31.287654 | | WorkerManager | service | 172.17.0.2 | 8001 | True | True | | 2023-09-12T23:04:31.286668 | | WorkerManager | service | 172.17.0.2 | 8003 | True | True | | 2023-09-12T23:04:29.845617 | | WorkerManager | service | 172.17.0.2 | 8002 | True | True | | 2023-09-12T23:04:24.598439 | @@ -124,7 +124,7 @@ MODEL_SERVER=http://127.0.0.1:8000 Or it can be started directly by command to formulate the model. ```shell -LLM_MODEL=chatglm2-6b dbgpt start webserver --light +LLM_MODEL=glm-4-9b-chat dbgpt start webserver --light ``` ## Command line usage diff --git a/docs/docs/installation/model_service/stand_alone.md b/docs/docs/installation/model_service/stand_alone.md index 911c9aa92..a97d98e6b 100644 --- a/docs/docs/installation/model_service/stand_alone.md +++ b/docs/docs/installation/model_service/stand_alone.md @@ -1,26 +1,26 @@ # Stand-alone Deployment ## Preparation -```python +```bash # download source code -$ git clone https://github.com/eosphoros-ai/DB-GPT.git +git clone https://github.com/eosphoros-ai/DB-GPT.git -$ cd DB-GPT +cd DB-GPT ``` ## Environment installation -```python +```bash # create a virtual environment -$ conda create -n dbgpt_env python=3.10 +conda create -n dbgpt_env python=3.10 # activate virtual environment -$ conda activate dbgpt_env +conda activate dbgpt_env ``` ## Install dependencies -```python +```bash pip install -e ".[default]" ``` @@ -34,11 +34,11 @@ Download LLM and Embedding model ::: -```python -$ mkdir models && cd models +```bash +mkdir models && cd models # download embedding model, eg: text2vec-large-chinese -$ git clone https://huggingface.co/GanymedeNil/text2vec-large-chinese +git clone https://huggingface.co/GanymedeNil/text2vec-large-chinese ``` :::tip @@ -46,7 +46,7 @@ $ git clone https://huggingface.co/GanymedeNil/text2vec-large-chinese Set up proxy API and modify `.env`configuration ::: -```python +```bash #set LLM_MODEL TYPE LLM_MODEL=proxyllm #set your Proxy Api key and Proxy Server url @@ -58,23 +58,23 @@ PROXY_SERVER_URL=https://api.openai.com/v1/chat/completions ⚠️ If you have GPU resources, you can use local models to deploy ::: -```python -$ mkdir models && cd models +```bash +mkdir models && cd models -# # download embedding model, eg: vicuna-13b-v1.5 or -$ git clone https://huggingface.co/lmsys/vicuna-13b-v1.5 +# # download embedding model, eg: glm-4-9b-chat or +git clone https://huggingface.co/THUDM/glm-4-9b-chat # download embedding model, eg: text2vec-large-chinese -$ git clone https://huggingface.co/GanymedeNil/text2vec-large-chinese +git clone https://huggingface.co/GanymedeNil/text2vec-large-chinese -$ popd +popd ``` ## Command line startup -```python -LLM_MODEL=vicuna-13b-v1.5 +```bash +LLM_MODEL=glm-4-9b-chat dbgpt start webserver --port 6006 ``` By default, the `dbgpt start webserver command` will start the `webserver`, `model controller`, and `model worker` through a single Python process. In the above command, port `6006` is specified. @@ -86,16 +86,16 @@ By default, the `dbgpt start webserver command` will start the `webserver`, `mod :::tip view and display all model services ::: -```python +```bash dbgpt model list ``` -```python +```bash # result +-----------------+------------+------------+------+---------+---------+-----------------+----------------------------+ | Model Name | Model Type | Host | Port | Healthy | Enabled | Prompt Template | Last Heartbeat | +-----------------+------------+------------+------+---------+---------+-----------------+----------------------------+ -| vicuna-13b-v1.5 | llm | 172.17.0.9 | 6006 | True | True | | 2023-10-16T19:49:59.201313 | +| glm-4-9b-chat | llm | 172.17.0.9 | 6006 | True | True | | 2023-10-16T19:49:59.201313 | | WorkerManager | service | 172.17.0.9 | 6006 | True | True | | 2023-10-16T19:49:59.246756 | +-----------------+------------+------------+------+---------+---------+-----------------+----------------------------+ @@ -105,14 +105,14 @@ Where `WorkerManager` is the management process of `Model Workers` :::tip check and verify model serving ::: -```python -dbgpt model chat --model_name vicuna-13b-v1.5 +```bash +dbgpt model chat --model_name glm-4-9b-chat ``` The above command will launch an interactive page that allows you to talk to the model through the terminal. -```python -Chatbot started with model vicuna-13b-v1.5. Type 'exit' to leave the chat. +```bash +Chatbot started with model glm-4-9b-chat. Type 'exit' to leave the chat. You: Hello diff --git a/docs/docs/installation/sourcecode.md b/docs/docs/installation/sourcecode.md index acd4177ac..e9ea95123 100644 --- a/docs/docs/installation/sourcecode.md +++ b/docs/docs/installation/sourcecode.md @@ -20,7 +20,7 @@ Download DB-GPT -```python +```bash git clone https://github.com/eosphoros-ai/DB-GPT.git ``` @@ -32,7 +32,7 @@ git clone https://github.com/eosphoros-ai/DB-GPT.git Create a Python virtual environment ::: -```python +```bash python >= 3.10 conda create -n dbgpt_env python=3.10 conda activate dbgpt_env @@ -44,7 +44,7 @@ pip install -e ".[default]" :::tip Copy environment variables ::: -```python +```bash cp .env.template .env ``` @@ -56,7 +56,7 @@ DB-GPT can be deployed on servers with lower hardware through proxy model, or as :::info note ⚠️ You need to ensure that git-lfs is installed -```python +```bash ● CentOS installation: yum install git-lfs ● Ubuntu installation: apt-get install git-lfs ● MacOS installation: brew install git-lfs @@ -79,13 +79,13 @@ import TabItem from '@theme/TabItem'; Install dependencies -```python +```bash pip install -e ".[openai]" ``` Download embedding model -```python +```bash cd DB-GPT mkdir models and cd models git clone https://huggingface.co/GanymedeNil/text2vec-large-chinese @@ -93,7 +93,7 @@ git clone https://huggingface.co/GanymedeNil/text2vec-large-chinese Configure the proxy and modify LLM_MODEL, PROXY_API_URL and API_KEY in the `.env`file -```python +```bash # .env LLM_MODEL=chatgpt_proxyllm PROXY_API_KEY={your-openai-sk} @@ -105,13 +105,13 @@ PROXY_SERVER_URL=https://api.openai.com/v1/chat/completions Install dependencies -```python +```bash pip install dashscope ``` Download embedding model -```python +```bash cd DB-GPT mkdir models and cd models @@ -123,7 +123,7 @@ git clone https://huggingface.co/moka-ai/m3e-large Configure the proxy and modify LLM_MODEL, PROXY_API_URL and API_KEY in the `.env`file -```python +```bash # .env # Aliyun tongyiqianwen LLM_MODEL=tongyi_proxyllm @@ -134,13 +134,13 @@ PROXY_SERVER_URL={your_service_url} Install dependencies -```python +```bash pip install zhipuai ``` Download embedding model -```python +```bash cd DB-GPT mkdir models and cd models @@ -152,7 +152,7 @@ git clone https://huggingface.co/moka-ai/m3e-large Configure the proxy and modify LLM_MODEL, PROXY_API_URL and API_KEY in the `.env`file -```python +```bash # .env LLM_MODEL=zhipu_proxyllm PROXY_SERVER_URL={your_service_url} @@ -165,7 +165,7 @@ ZHIPU_PROXY_API_KEY={your-zhipu-sk} Download embedding model -```python +```bash cd DB-GPT mkdir models and cd models @@ -177,7 +177,7 @@ git clone https://huggingface.co/moka-ai/m3e-large Configure the proxy and modify LLM_MODEL, MODEL_VERSION, API_KEY and API_SECRET in the `.env`file -```python +```bash # .env LLM_MODEL=wenxin_proxyllm WEN_XIN_MODEL_VERSION={version} # ERNIE-Bot or ERNIE-Bot-turbo @@ -190,7 +190,7 @@ WEN_XIN_API_SECRET={your-wenxin-sct} Yi's API is compatible with OpenAI's API, so you can use the same dependencies as OpenAI's API. -```python +```bash pip install -e ".[openai]" ``` @@ -225,9 +225,9 @@ YI_API_KEY={your-yi-api-key} @@ -241,7 +241,7 @@ YI_API_KEY={your-yi-api-key} ##### Download LLM -```python +```bash cd DB-GPT mkdir models and cd models @@ -255,7 +255,7 @@ git clone https://huggingface.co/lmsys/vicuna-13b-v1.5 ``` ##### Environment variable configuration, configure the LLM_MODEL parameter in the `.env` file -```python +```bash # .env LLM_MODEL=vicuna-13b-v1.5 ``` @@ -274,7 +274,7 @@ LLM_MODEL=vicuna-13b-v1.5 ##### Download LLM -```python +```bash cd DB-GPT mkdir models and cd models @@ -290,7 +290,7 @@ git clone https://huggingface.co/baichuan-inc/Baichuan2-13B-Chat ``` ##### Environment variable configuration, configure the LLM_MODEL parameter in the `.env` file -```python +```bash # .env LLM_MODEL=baichuan2-13b ``` @@ -299,16 +299,17 @@ LLM_MODEL=baichuan2-13b ##### Hardware requirements description -| Model | Quantize | VRAM Size | -|------------------ |--------------|----------------| -|ChatGLM-6b | 4-bit | 7GB | -|ChatGLM-6b | 8-bit | 9GB | -|ChatGLM-6b | FP16 | 14GB | +| Model | Quantize | VRAM Size | +|--------------------|-------------|----------------| +| glm-4-9b-chat | Not support | 16GB | +| ChatGLM-6b | 4-bit | 7GB | +| ChatGLM-6b | 8-bit | 9GB | +| ChatGLM-6b | FP16 | 14GB | ##### Download LLM -```python +```bash cd DB-GPT mkdir models and cd models @@ -318,13 +319,13 @@ or git clone https://huggingface.co/moka-ai/m3e-large # llm model -git clone https://huggingface.co/THUDM/chatglm2-6b +git clone https://huggingface.co/THUDM/glm-4-9b-chat ``` ##### Environment variable configuration, configure the LLM_MODEL parameter in the `.env` file -```python +```bash # .env -LLM_MODEL=chatglm2-6b +LLM_MODEL=glm-4-9b-chat ``` @@ -347,7 +348,7 @@ Method 1: Download the converted model ::: If you want to use [Vicuna-13b-v1.5](https://huggingface.co/lmsys/vicuna-13b-v1.5), you can download the converted file [TheBloke/vicuna-13B-v1.5-GGUF](https://huggingface.co/TheBloke/vicuna-13B-v1.5-GGUF), only this one file is needed. Download the file and put it in the model path. You need to rename the model to: `ggml-model-q4_0.gguf`. -```python +```bash wget https://huggingface.co/TheBloke/vicuna-13B-v1.5-GGUF/resolve/main/vicuna-13b-v1.5.Q4_K_M.gguf -O models/ggml-model-q4_0.gguf ``` @@ -360,7 +361,7 @@ During use, you can also convert the model file yourself according to the instru #### Install dependencies llama.cpp is an optional installation item in DB-GPT. You can install it with the following command. -```python +```bash pip install -e ".[llama_cpp]" ``` @@ -410,13 +411,13 @@ After version 0.4.7, we removed the automatic generation of MySQL database Schem 1. Frist, execute MySQL script to create database and tables. -```python +```bash $ mysql -h127.0.0.1 -uroot -p{your_password} < ./assets/schema/dbgpt.sql ``` 2. Second, set DB-GPT MySQL database settings in `.env` file. -```python +```bash LOCAL_DB_TYPE=mysql LOCAL_DB_USER= {your username} LOCAL_DB_PASSWORD={your_password} @@ -432,19 +433,19 @@ LOCAL_DB_PORT=3306 The DB-GPT project has a part of test data built-in by default, which can be loaded into the local database for testing through the following command - **Linux** -```python +```bash bash ./scripts/examples/load_examples.sh ``` - **Windows** -```python +```bash .\scripts\examples\load_examples.bat ``` ## Run service The DB-GPT service is packaged into a server, and the entire DB-GPT service can be started through the following command. -```python +```bash python dbgpt/app/dbgpt_server.py ``` :::info NOTE @@ -452,9 +453,17 @@ python dbgpt/app/dbgpt_server.py If you are running version v0.4.3 or earlier, please start with the following command: -```python +```bash python pilot/server/dbgpt_server.py ``` +### Run DB-GPT with command `dbgpt` + +If you want to run DB-GPT with the command `dbgpt`: + +```bash +dbgpt start webserver +``` + ::: ## Visit website diff --git a/docs/docs/quickstart.md b/docs/docs/quickstart.md index f7c451321..43e3f2d20 100644 --- a/docs/docs/quickstart.md +++ b/docs/docs/quickstart.md @@ -7,7 +7,7 @@ DB-GPT supports the installation and use of a variety of open source and closed :::info note - Detailed installation and deployment tutorials can be found in [Installation](/docs/installation). -- This page only introduces deployment based on ChatGPT proxy and local Vicuna model. +- This page only introduces deployment based on ChatGPT proxy and local glm model. ::: ## Environmental preparation @@ -20,7 +20,7 @@ Download DB-GPT -```python +```bash git clone https://github.com/eosphoros-ai/DB-GPT.git ``` @@ -32,7 +32,7 @@ git clone https://github.com/eosphoros-ai/DB-GPT.git Create a Python virtual environment ::: -```python +```bash python >= 3.10 conda create -n dbgpt_env python=3.10 conda activate dbgpt_env @@ -44,7 +44,7 @@ pip install -e ".[default]" :::tip Copy environment variables ::: -```python +```bash cp .env.template .env ``` @@ -61,8 +61,8 @@ import TabItem from '@theme/TabItem'; @@ -70,7 +70,7 @@ import TabItem from '@theme/TabItem'; :::info note ⚠️ You need to ensure that git-lfs is installed -```python +```bash ● CentOS installation: yum install git-lfs ● Ubuntu installation: apt-get install git-lfs ● MacOS installation: brew install git-lfs @@ -79,13 +79,13 @@ import TabItem from '@theme/TabItem'; #### Install dependencies -```python +```bash pip install -e ".[openai]" ``` #### Download embedding model -```python +```bash cd DB-GPT mkdir models and cd models git clone https://huggingface.co/GanymedeNil/text2vec-large-chinese @@ -93,7 +93,7 @@ git clone https://huggingface.co/GanymedeNil/text2vec-large-chinese #### Configure the proxy and modify LLM_MODEL, PROXY_API_URL and API_KEY in the `.env`file -```python +```bash # .env LLM_MODEL=chatgpt_proxyllm PROXY_API_KEY={your-openai-sk} @@ -101,35 +101,32 @@ PROXY_SERVER_URL=https://api.openai.com/v1/chat/completions ``` - + #### Hardware requirements description -| Model | Quantize | VRAM Size | -|:----------------------------------------:|--------------:|---------------| -|Vicuna-7b | 4-bit | 8GB | -|Vicuna-7b | 8-bit | 12GB | -|Vicuna-13b | 4-bit | 12GB | -|Vicuna-13b | 8-bit | 20GB | +| Model | GPU VRAM Size | +|:--------------:|-------------------| +| glm-4-9b | 16GB | #### Download LLM -```python +```bash cd DB-GPT mkdir models and cd models # embedding model git clone https://huggingface.co/GanymedeNil/text2vec-large-chinese -or -git clone https://huggingface.co/moka-ai/m3e-large +# also you can use m3e-large model, you can choose one of them according to your needs +# git clone https://huggingface.co/moka-ai/m3e-large -# llm model, if you use openai or Azure or tongyi llm api service, you don't need to download llm model -git clone https://huggingface.co/lmsys/vicuna-13b-v1.5 +# LLM model, if you use openai or Azure or tongyi llm api service, you don't need to download llm model +git clone https://huggingface.co/THUDM/glm-4-9b-chat ``` #### Environment variable configuration, configure the LLM_MODEL parameter in the `.env` file -```python +```bash # .env -LLM_MODEL=vicuna-13b-v1.5 +LLM_MODEL=glm-4-9b-chat ``` @@ -140,38 +137,49 @@ LLM_MODEL=vicuna-13b-v1.5 Load default test data into SQLite database - **Linux** -```python +```bash bash ./scripts/examples/load_examples.sh ``` - **Windows** -```python +```bash .\scripts\examples\load_examples.bat ``` ## Run service -```python +```bash python dbgpt/app/dbgpt_server.py ``` :::info NOTE -### Run service +### Run old service If you are running version v0.4.3 or earlier, please start with the following command: -```python +```bash python pilot/server/dbgpt_server.py ``` + +### Run DB-GPT with command `dbgpt` + +If you want to run DB-GPT with the command `dbgpt`: + +```bash +dbgpt start webserver +``` ::: ## Visit website -#### 1. Production model: Open the browser and visit [`http://localhost:5670`](http://localhost:5670) -#### 2. Development mode: -``` + +### (Optional) Run web front-end separately + +On the other hand, you can also run the web front-end separately. + +```bash cd web & npm install cp .env.template .env // set the API_BASE_URL to your DB-GPT server address, it usually is http://localhost:5670 diff --git a/examples/agents/custom_tool_agent_example.py b/examples/agents/custom_tool_agent_example.py index 1cd40c3fc..c49ef5924 100644 --- a/examples/agents/custom_tool_agent_example.py +++ b/examples/agents/custom_tool_agent_example.py @@ -19,6 +19,10 @@ @tool def simple_calculator(first_number: int, second_number: int, operator: str) -> float: """Simple calculator tool. Just support +, -, *, /.""" + if isinstance(first_number, str): + first_number = int(first_number) + if isinstance(second_number, str): + second_number = int(second_number) if operator == "+": return first_number + second_number elif operator == "-": diff --git a/scripts/setup_autodl_env.sh b/scripts/setup_autodl_env.sh index 5dc1f19eb..229e0f07c 100644 --- a/scripts/setup_autodl_env.sh +++ b/scripts/setup_autodl_env.sh @@ -34,15 +34,15 @@ install_sys_packages() { clone_repositories() { cd /root && git clone https://github.com/eosphoros-ai/DB-GPT.git mkdir -p /root/DB-GPT/models && cd /root/DB-GPT/models - git clone https://huggingface.co/GanymedeNil/text2vec-large-chinese - git clone https://huggingface.co/Qwen/Qwen-1_8B-Chat + git clone https://www.modelscope.cn/Jerry0/text2vec-large-chinese.git + git clone https://www.modelscope.cn/qwen/Qwen2-0.5B-Instruct.git rm -rf /root/DB-GPT/models/text2vec-large-chinese/.git - rm -rf /root/DB-GPT/models/Qwen-1_8B-Chat/.git + rm -rf /root/DB-GPT/models/Qwen2-0.5B-Instruct/.git } install_dbgpt_packages() { conda activate dbgpt && cd /root/DB-GPT && pip install -e ".[default]" && pip install transformers_stream_generator einops - cp .env.template .env && sed -i 's/LLM_MODEL=vicuna-13b-v1.5/LLM_MODEL=qwen-1.8b-chat/' .env + cp .env.template .env && sed -i 's/LLM_MODEL=glm-4-9b-chat/LLM_MODEL=qwen2-0.5b-instruct/' .env } clean_up() { From 58d08780d6c9a8b44d8b8427c331545b29fe4e4e Mon Sep 17 00:00:00 2001 From: Aries-ckt <916701291@qq.com> Date: Thu, 13 Jun 2024 13:49:17 +0800 Subject: [PATCH 2/2] feat(ChatKnowledge): ChatKnowledge Support Keyword Retrieve (#1624) Co-authored-by: Fangyin Cheng --- dbgpt/agent/core/memory/hybrid.py | 29 ++- dbgpt/agent/core/memory/long_term.py | 10 +- dbgpt/app/knowledge/api.py | 4 +- dbgpt/app/knowledge/service.py | 6 +- dbgpt/app/scene/chat_knowledge/v1/chat.py | 4 +- dbgpt/app/static/404.html | 2 +- dbgpt/app/static/404/index.html | 2 +- .../_buildManifest.js | 2 +- .../_ssgManifest.js | 0 ...fdee641af7.js => 4134.d59cf294103a4db2.js} | 2 +- ...4a861cac03.js => _app-ccb54464fb48754c.js} | 0 .../chunks/pages/index-0b2d61c1c6358f20.js | 1 + .../chunks/pages/index-9d77aed53ca78d15.js | 1 - .../pages/knowledge-223d50e9531bd961.js | 1 + .../pages/knowledge-244aee7ebbad3668.js | 1 - ...38129bd.js => webpack-392ef02c5aff6027.js} | 2 +- dbgpt/app/static/agent/index.html | 2 +- dbgpt/app/static/app/index.html | 2 +- dbgpt/app/static/chat/index.html | 2 +- dbgpt/app/static/database/index.html | 2 +- dbgpt/app/static/flow/canvas/index.html | 2 +- dbgpt/app/static/flow/index.html | 2 +- dbgpt/app/static/index.html | 2 +- dbgpt/app/static/knowledge/chunk/index.html | 2 +- dbgpt/app/static/knowledge/graph/index.html | 2 +- dbgpt/app/static/knowledge/index.html | 2 +- dbgpt/app/static/models/index.html | 2 +- dbgpt/app/static/models/knowledge-default.jpg | Bin 12229 -> 108470 bytes .../app/static/models/knowledge-full-text.jpg | Bin 0 -> 65860 bytes dbgpt/app/static/prompt/index.html | 2 +- dbgpt/rag/assembler/db_schema.py | 41 +--- dbgpt/rag/assembler/embedding.py | 64 +++-- .../tests/test_db_struct_assembler.py | 6 +- .../tests/test_embedding_assembler.py | 6 +- dbgpt/rag/index/base.py | 8 +- dbgpt/rag/operators/db_schema.py | 16 +- dbgpt/rag/operators/embedding.py | 20 +- dbgpt/rag/operators/schema_linking.py | 6 +- dbgpt/rag/retriever/base.py | 1 + dbgpt/rag/retriever/db_schema.py | 32 +-- dbgpt/rag/retriever/embedding.py | 22 +- dbgpt/rag/retriever/tests/test_db_struct.py | 2 +- dbgpt/rag/retriever/tests/test_embedding.py | 4 +- dbgpt/rag/retriever/time_weighted.py | 12 +- dbgpt/rag/schemalinker/schema_linking.py | 2 +- dbgpt/rag/summary/db_summary_client.py | 10 +- dbgpt/serve/datasource/service/service.py | 2 +- dbgpt/serve/prompt/api/endpoints.py | 36 +-- dbgpt/serve/prompt/tests/test_endpoints.py | 12 - .../vector_store => serve/rag}/connector.py | 32 +-- dbgpt/serve/rag/operators/knowledge_space.py | 2 +- dbgpt/serve/rag/retriever/knowledge_space.py | 2 +- dbgpt/serve/rag/service/service.py | 14 +- dbgpt/storage/full_text/__init__.py | 1 + dbgpt/storage/full_text/base.py | 69 ++++++ dbgpt/storage/full_text/elasticsearch.py | 227 ++++++++++++++++++ dbgpt/storage/full_text/opensearch.py | 63 +++++ dbgpt/storage/knowledge_graph/base.py | 4 +- dbgpt/storage/vector_store/__init__.py | 15 +- dbgpt/storage/vector_store/elastic_store.py | 2 +- dbgpt/storage/vector_store/milvus_store.py | 2 +- dbgpt/util/string_utils.py | 5 + .../docs/awel/cookbook/first_rag_with_awel.md | 34 ++- .../awel/cookbook/write_your_chat_database.md | 57 +++-- .../cookbook/rag/graph_rag_app_develop.md | 29 +-- .../cookbook/rag/keyword_rag_app_develop.md | 132 ++++++++++ docs/sidebars.js | 5 +- .../keyword_rag/create_keyword_rag.jpg | Bin 0 -> 230105 bytes .../keyword_rag/keyword_search_chat.jpg | Bin 0 -> 246417 bytes .../simple_nl_schema_sql_chart_example.py | 14 +- examples/rag/cross_encoder_rerank_example.py | 19 +- examples/rag/db_schema_rag_example.py | 19 +- examples/rag/embedding_rag_example.py | 18 +- examples/rag/graph_rag_example.py | 24 +- examples/rag/keyword_rag_example.py | 55 +++++ examples/rag/metadata_filter_example.py | 19 +- examples/rag/rag_embedding_api_example.py | 20 +- examples/rag/retriever_evaluation_example.py | 20 +- .../rag/simple_dbschema_retriever_example.py | 28 +-- examples/rag/simple_rag_embedding_example.py | 24 +- examples/rag/simple_rag_retriever_example.py | 25 +- examples/sdk/chat_data_with_awel.py | 18 +- web/components/knowledge/space-card.tsx | 2 +- web/components/knowledge/space-form.tsx | 1 + web/public/models/knowledge-default.jpg | Bin 12229 -> 108470 bytes web/public/models/knowledge-full-text.jpg | Bin 0 -> 65860 bytes 86 files changed, 951 insertions(+), 443 deletions(-) rename dbgpt/app/static/_next/static/{8e7nQm3nKO3WF7o-A_evd => Q_H6GwK11oUGrF3tq9O8x}/_buildManifest.js (65%) rename dbgpt/app/static/_next/static/{8e7nQm3nKO3WF7o-A_evd => Q_H6GwK11oUGrF3tq9O8x}/_ssgManifest.js (100%) rename dbgpt/app/static/_next/static/chunks/{4134.1f69d7fdee641af7.js => 4134.d59cf294103a4db2.js} (87%) rename dbgpt/app/static/_next/static/chunks/pages/{_app-7876cf4a861cac03.js => _app-ccb54464fb48754c.js} (100%) create mode 100644 dbgpt/app/static/_next/static/chunks/pages/index-0b2d61c1c6358f20.js delete mode 100644 dbgpt/app/static/_next/static/chunks/pages/index-9d77aed53ca78d15.js create mode 100644 dbgpt/app/static/_next/static/chunks/pages/knowledge-223d50e9531bd961.js delete mode 100644 dbgpt/app/static/_next/static/chunks/pages/knowledge-244aee7ebbad3668.js rename dbgpt/app/static/_next/static/chunks/{webpack-4e5527d8038129bd.js => webpack-392ef02c5aff6027.js} (98%) create mode 100644 dbgpt/app/static/models/knowledge-full-text.jpg rename dbgpt/{storage/vector_store => serve/rag}/connector.py (92%) create mode 100644 dbgpt/storage/full_text/__init__.py create mode 100644 dbgpt/storage/full_text/base.py create mode 100644 dbgpt/storage/full_text/elasticsearch.py create mode 100644 dbgpt/storage/full_text/opensearch.py create mode 100644 docs/docs/cookbook/rag/keyword_rag_app_develop.md create mode 100644 docs/static/img/chat_knowledge/keyword_rag/create_keyword_rag.jpg create mode 100644 docs/static/img/chat_knowledge/keyword_rag/keyword_search_chat.jpg create mode 100644 examples/rag/keyword_rag_example.py create mode 100644 web/public/models/knowledge-full-text.jpg diff --git a/dbgpt/agent/core/memory/hybrid.py b/dbgpt/agent/core/memory/hybrid.py index 0d7add35e..7316ca39c 100644 --- a/dbgpt/agent/core/memory/hybrid.py +++ b/dbgpt/agent/core/memory/hybrid.py @@ -8,9 +8,10 @@ import os.path from concurrent.futures import Executor, ThreadPoolExecutor from datetime import datetime -from typing import TYPE_CHECKING, Generic, List, Optional, Tuple, Type +from typing import Generic, List, Optional, Tuple, Type from dbgpt.core import Embeddings, LLMClient +from dbgpt.storage.vector_store.base import VectorStoreBase from dbgpt.util.annotations import immutable, mutable from .base import ( @@ -26,9 +27,6 @@ from .long_term import LongTermMemory from .short_term import EnhancedShortTermMemory -if TYPE_CHECKING: - from dbgpt.storage.vector_store.connector import VectorStoreConnector - class HybridMemory(Memory, Generic[T]): """Hybrid memory for the agent.""" @@ -81,8 +79,10 @@ def from_chroma( ): """Create a hybrid memory from Chroma vector store.""" from dbgpt.configs.model_config import DATA_DIR - from dbgpt.storage.vector_store.chroma_store import ChromaVectorConfig - from dbgpt.storage.vector_store.connector import VectorStoreConnector + from dbgpt.storage.vector_store.chroma_store import ( + ChromaStore, + ChromaVectorConfig, + ) if not embeddings: from dbgpt.rag.embedding import DefaultEmbeddingFactory @@ -91,16 +91,15 @@ def from_chroma( vstore_path = vstore_path or os.path.join(DATA_DIR, "agent_memory") - vector_store_connector = VectorStoreConnector.from_default( - vector_store_type="Chroma", - embedding_fn=embeddings, - vector_store_config=ChromaVectorConfig( + vector_store = ChromaStore( + ChromaVectorConfig( name=vstore_name, persist_path=vstore_path, - ), + embedding_fn=embeddings, + ) ) return cls.from_vstore( - vector_store_connector=vector_store_connector, + vector_store=vector_store, embeddings=embeddings, executor=executor, now=now, @@ -113,7 +112,7 @@ def from_chroma( @classmethod def from_vstore( cls, - vector_store_connector: "VectorStoreConnector", + vector_store: "VectorStoreBase", embeddings: Optional[Embeddings] = None, executor: Optional[Executor] = None, now: Optional[datetime] = None, @@ -124,7 +123,7 @@ def from_vstore( ): """Create a hybrid memory from vector store.""" if not embeddings: - embeddings = vector_store_connector.current_embeddings + raise ValueError("embeddings is required.") if not executor: executor = ThreadPoolExecutor() if not now: @@ -139,7 +138,7 @@ def from_vstore( if not long_term_memory: long_term_memory = LongTermMemory( executor, - vector_store_connector, + vector_store, now=now, ) return cls(now, sensory_memory, short_term_memory, long_term_memory, **kwargs) diff --git a/dbgpt/agent/core/memory/long_term.py b/dbgpt/agent/core/memory/long_term.py index b479f86df..441ce2b2d 100644 --- a/dbgpt/agent/core/memory/long_term.py +++ b/dbgpt/agent/core/memory/long_term.py @@ -6,7 +6,7 @@ from dbgpt.core import Chunk from dbgpt.rag.retriever.time_weighted import TimeWeightedEmbeddingRetriever -from dbgpt.storage.vector_store.connector import VectorStoreConnector +from dbgpt.storage.vector_store.base import VectorStoreBase from dbgpt.storage.vector_store.filters import MetadataFilters from dbgpt.util.annotations import immutable, mutable from dbgpt.util.executor_utils import blocking_func_to_async @@ -70,7 +70,7 @@ class LongTermMemory(Memory, Generic[T]): def __init__( self, executor: Executor, - vector_store_connector: VectorStoreConnector, + vector_store: VectorStoreBase, now: Optional[datetime] = None, reflection_threshold: Optional[float] = None, ): @@ -81,9 +81,9 @@ def __init__( self.forgetting: bool = False self.reflection_threshold: Optional[float] = reflection_threshold self.aggregate_importance: float = 0.0 - self._vector_store_connector = vector_store_connector + self._vector_store = vector_store self.memory_retriever = LongTermRetriever( - now=self.now, vector_store_connector=vector_store_connector + now=self.now, index_store=vector_store ) @immutable @@ -97,7 +97,7 @@ def structure_clone( m: LongTermMemory[T] = LongTermMemory( now=now, executor=self.executor, - vector_store_connector=self._vector_store_connector.new_connector(new_name), + vector_store=self._vector_store, reflection_threshold=self.reflection_threshold, ) m._copy_from(self) diff --git a/dbgpt/app/knowledge/api.py b/dbgpt/app/knowledge/api.py index 7f21188ab..d1d334372 100644 --- a/dbgpt/app/knowledge/api.py +++ b/dbgpt/app/knowledge/api.py @@ -33,9 +33,9 @@ from dbgpt.rag.knowledge.factory import KnowledgeFactory from dbgpt.rag.retriever.embedding import EmbeddingRetriever from dbgpt.serve.rag.api.schemas import KnowledgeSyncRequest +from dbgpt.serve.rag.connector import VectorStoreConnector from dbgpt.serve.rag.service.service import Service from dbgpt.storage.vector_store.base import VectorStoreConfig -from dbgpt.storage.vector_store.connector import VectorStoreConnector from dbgpt.util.tracer import SpanType, root_tracer logger = logging.getLogger(__name__) @@ -310,7 +310,7 @@ def similar_query(space_name: str, query_request: KnowledgeQueryRequest): vector_store_config=config, ) retriever = EmbeddingRetriever( - top_k=query_request.top_k, vector_store_connector=vector_store_connector + top_k=query_request.top_k, index_store=vector_store_connector.index_client ) chunks = retriever.retrieve(query_request.query) res = [ diff --git a/dbgpt/app/knowledge/service.py b/dbgpt/app/knowledge/service.py index 266e8405d..b0c8c16e4 100644 --- a/dbgpt/app/knowledge/service.py +++ b/dbgpt/app/knowledge/service.py @@ -12,7 +12,6 @@ ChunkQueryRequest, DocumentQueryRequest, DocumentSummaryRequest, - DocumentSyncRequest, KnowledgeDocumentRequest, KnowledgeSpaceRequest, SpaceArgumentRequest, @@ -24,19 +23,18 @@ ) from dbgpt.component import ComponentType from dbgpt.configs.model_config import EMBEDDING_MODEL_CONFIG -from dbgpt.core import Chunk, LLMClient +from dbgpt.core import LLMClient from dbgpt.model import DefaultLLMClient from dbgpt.model.cluster import WorkerManagerFactory -from dbgpt.rag.assembler.embedding import EmbeddingAssembler from dbgpt.rag.assembler.summary import SummaryAssembler from dbgpt.rag.chunk_manager import ChunkParameters from dbgpt.rag.embedding.embedding_factory import EmbeddingFactory from dbgpt.rag.knowledge.base import KnowledgeType from dbgpt.rag.knowledge.factory import KnowledgeFactory +from dbgpt.serve.rag.connector import VectorStoreConnector from dbgpt.serve.rag.models.models import KnowledgeSpaceDao, KnowledgeSpaceEntity from dbgpt.serve.rag.service.service import SyncStatus from dbgpt.storage.vector_store.base import VectorStoreConfig -from dbgpt.storage.vector_store.connector import VectorStoreConnector from dbgpt.util.executor_utils import ExecutorFactory, blocking_func_to_async from dbgpt.util.tracer import root_tracer, trace diff --git a/dbgpt/app/scene/chat_knowledge/v1/chat.py b/dbgpt/app/scene/chat_knowledge/v1/chat.py index 2cfef3eed..ccc7bf32e 100644 --- a/dbgpt/app/scene/chat_knowledge/v1/chat.py +++ b/dbgpt/app/scene/chat_knowledge/v1/chat.py @@ -69,7 +69,7 @@ def __init__(self, chat_param: Dict): "embedding_factory", EmbeddingFactory ) from dbgpt.rag.retriever.embedding import EmbeddingRetriever - from dbgpt.storage.vector_store.connector import VectorStoreConnector + from dbgpt.serve.rag.connector import VectorStoreConnector embedding_fn = embedding_factory.create( model_name=EMBEDDING_MODEL_CONFIG[CFG.EMBEDDING_MODEL] @@ -116,7 +116,7 @@ def __init__(self, chat_param: Dict): retriever_top_k = max(CFG.RERANK_TOP_K, 20) self.embedding_retriever = EmbeddingRetriever( top_k=retriever_top_k, - vector_store_connector=vector_store_connector, + index_store=vector_store_connector.index_client, query_rewrite=query_rewrite, rerank=reranker, ) diff --git a/dbgpt/app/static/404.html b/dbgpt/app/static/404.html index 5758947d7..007b5434c 100644 --- a/dbgpt/app/static/404.html +++ b/dbgpt/app/static/404.html @@ -1 +1 @@ -404: This page could not be found

404

This page could not be found.

\ No newline at end of file +404: This page could not be found

404

This page could not be found.

\ No newline at end of file diff --git a/dbgpt/app/static/404/index.html b/dbgpt/app/static/404/index.html index 5758947d7..007b5434c 100644 --- a/dbgpt/app/static/404/index.html +++ b/dbgpt/app/static/404/index.html @@ -1 +1 @@ -404: This page could not be found

404

This page could not be found.

\ No newline at end of file +404: This page could not be found

404

This page could not be found.

\ No newline at end of file diff --git a/dbgpt/app/static/_next/static/8e7nQm3nKO3WF7o-A_evd/_buildManifest.js b/dbgpt/app/static/_next/static/Q_H6GwK11oUGrF3tq9O8x/_buildManifest.js similarity index 65% rename from dbgpt/app/static/_next/static/8e7nQm3nKO3WF7o-A_evd/_buildManifest.js rename to dbgpt/app/static/_next/static/Q_H6GwK11oUGrF3tq9O8x/_buildManifest.js index 2c4bc0334..81d76bc06 100644 --- a/dbgpt/app/static/_next/static/8e7nQm3nKO3WF7o-A_evd/_buildManifest.js +++ b/dbgpt/app/static/_next/static/Q_H6GwK11oUGrF3tq9O8x/_buildManifest.js @@ -1 +1 @@ -self.__BUILD_MANIFEST=function(s,a,c,e,t,n,d,f,k,h,i,u,b,j,p,g,o,l,r,_){return{__rewrites:{beforeFiles:[],afterFiles:[],fallback:[]},"/":[p,s,a,e,c,d,h,f,g,"static/chunks/9305-f44429d5185a9fc7.js","static/chunks/1353-705aa47cc2b94999.js","static/chunks/pages/index-9d77aed53ca78d15.js"],"/_error":["static/chunks/pages/_error-8095ba9e1bf12f30.js"],"/agent":[s,a,c,t,h,n,"static/chunks/pages/agent-2be7990da37f5165.js"],"/app":[i,s,a,e,c,t,n,u,b,o,j,"static/chunks/pages/app-8154f6fcced2f743.js"],"/chat":["static/chunks/pages/chat-5794854c0948b84c.js"],"/database":[s,a,e,c,t,n,f,k,"static/chunks/3718-e111d727d432bdd2.js","static/chunks/pages/database-7384ab94b08f23ff.js"],"/flow":[i,s,a,c,u,b,o,j,"static/chunks/pages/flow-33fe9f396642fb4c.js"],"/flow/canvas":[p,i,s,a,e,c,d,f,u,k,b,l,g,"static/chunks/1425-6e94ae18b1ac5a70.js",j,"static/chunks/pages/flow/canvas-644b6ee718585173.js"],"/knowledge":[r,s,a,e,c,t,h,n,f,k,_,l,"static/chunks/5237-1d36a3742424b75e.js","static/chunks/pages/knowledge-244aee7ebbad3668.js"],"/knowledge/chunk":[s,e,t,d,n,"static/chunks/pages/knowledge/chunk-625a32aed5f380e2.js"],"/knowledge/graph":["static/chunks/90912e1b-ed32608ee46ab40f.js","static/chunks/193-5e83ce3fd4f165ef.js","static/chunks/pages/knowledge/graph-9fb1ec6bf06d5108.js"],"/models":[r,s,a,e,c,k,"static/chunks/3444-30181eacc7980e66.js","static/chunks/pages/models-446238c56e41aa1b.js"],"/prompt":[s,a,e,c,d,_,"static/chunks/7184-3ca3f58327a6986a.js","static/chunks/7869-1a99e25b182b3eaa.js","static/chunks/pages/prompt-c44ac718b4d637c9.js"],sortedPages:["/","/_app","/_error","/agent","/app","/chat","/database","/flow","/flow/canvas","/knowledge","/knowledge/chunk","/knowledge/graph","/models","/prompt"]}}("static/chunks/2185-30f9d0578fa0d631.js","static/chunks/5503-c65f6d730754acc7.js","static/chunks/9479-21f588e1fd4e6b6d.js","static/chunks/1009-4b2af86bde623424.js","static/chunks/785-c3544abc036fc97d.js","static/chunks/5813-c6244a8eba7ef4ae.js","static/chunks/1647-8683da4db89d68c1.js","static/chunks/411-b5d3e7f64bee2335.js","static/chunks/8928-0e78def492052d13.js","static/chunks/4553-61740188e6a650a8.js","static/chunks/971df74e-7436ff4085ebb785.js","static/chunks/7434-29506257e67e8077.js","static/chunks/9924-5bce555f07385e1f.js","static/css/b4846eed11c4725f.css","static/chunks/29107295-75edf0bf34e24b1e.js","static/chunks/2487-cda9d2a2fd712a15.js","static/chunks/6165-93d23bc520382b2c.js","static/chunks/2282-96412afca1591c9a.js","static/chunks/75fc9c18-1d6133135d3d283c.js","static/chunks/5733-7ef320ab0f876a5e.js"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB(); \ No newline at end of file +self.__BUILD_MANIFEST=function(s,c,a,e,t,n,f,d,k,h,i,u,b,j,p,g,o,l,r,_){return{__rewrites:{beforeFiles:[],afterFiles:[],fallback:[]},"/":[p,s,c,e,a,f,h,d,g,"static/chunks/9305-f44429d5185a9fc7.js","static/chunks/1353-705aa47cc2b94999.js","static/chunks/pages/index-0b2d61c1c6358f20.js"],"/_error":["static/chunks/pages/_error-8095ba9e1bf12f30.js"],"/agent":[s,c,a,t,h,n,"static/chunks/pages/agent-2be7990da37f5165.js"],"/app":[i,s,c,e,a,t,n,u,b,o,j,"static/chunks/pages/app-8154f6fcced2f743.js"],"/chat":["static/chunks/pages/chat-5794854c0948b84c.js"],"/database":[s,c,e,a,t,n,d,k,"static/chunks/3718-e111d727d432bdd2.js","static/chunks/pages/database-7384ab94b08f23ff.js"],"/flow":[i,s,c,a,u,b,o,j,"static/chunks/pages/flow-33fe9f396642fb4c.js"],"/flow/canvas":[p,i,s,c,e,a,f,d,u,k,b,l,g,"static/chunks/1425-6e94ae18b1ac5a70.js",j,"static/chunks/pages/flow/canvas-644b6ee718585173.js"],"/knowledge":[r,s,c,e,a,t,h,n,d,k,_,l,"static/chunks/5237-1d36a3742424b75e.js","static/chunks/pages/knowledge-223d50e9531bd961.js"],"/knowledge/chunk":[s,e,t,f,n,"static/chunks/pages/knowledge/chunk-625a32aed5f380e2.js"],"/knowledge/graph":["static/chunks/90912e1b-ed32608ee46ab40f.js","static/chunks/193-5e83ce3fd4f165ef.js","static/chunks/pages/knowledge/graph-9fb1ec6bf06d5108.js"],"/models":[r,s,c,e,a,k,"static/chunks/3444-30181eacc7980e66.js","static/chunks/pages/models-446238c56e41aa1b.js"],"/prompt":[s,c,e,a,f,_,"static/chunks/7184-3ca3f58327a6986a.js","static/chunks/7869-1a99e25b182b3eaa.js","static/chunks/pages/prompt-c44ac718b4d637c9.js"],sortedPages:["/","/_app","/_error","/agent","/app","/chat","/database","/flow","/flow/canvas","/knowledge","/knowledge/chunk","/knowledge/graph","/models","/prompt"]}}("static/chunks/2185-30f9d0578fa0d631.js","static/chunks/5503-c65f6d730754acc7.js","static/chunks/9479-21f588e1fd4e6b6d.js","static/chunks/1009-4b2af86bde623424.js","static/chunks/785-c3544abc036fc97d.js","static/chunks/5813-c6244a8eba7ef4ae.js","static/chunks/1647-8683da4db89d68c1.js","static/chunks/411-b5d3e7f64bee2335.js","static/chunks/8928-0e78def492052d13.js","static/chunks/4553-61740188e6a650a8.js","static/chunks/971df74e-7436ff4085ebb785.js","static/chunks/7434-29506257e67e8077.js","static/chunks/9924-5bce555f07385e1f.js","static/css/b4846eed11c4725f.css","static/chunks/29107295-75edf0bf34e24b1e.js","static/chunks/2487-cda9d2a2fd712a15.js","static/chunks/6165-93d23bc520382b2c.js","static/chunks/2282-96412afca1591c9a.js","static/chunks/75fc9c18-1d6133135d3d283c.js","static/chunks/5733-7ef320ab0f876a5e.js"),self.__BUILD_MANIFEST_CB&&self.__BUILD_MANIFEST_CB(); \ No newline at end of file diff --git a/dbgpt/app/static/_next/static/8e7nQm3nKO3WF7o-A_evd/_ssgManifest.js b/dbgpt/app/static/_next/static/Q_H6GwK11oUGrF3tq9O8x/_ssgManifest.js similarity index 100% rename from dbgpt/app/static/_next/static/8e7nQm3nKO3WF7o-A_evd/_ssgManifest.js rename to dbgpt/app/static/_next/static/Q_H6GwK11oUGrF3tq9O8x/_ssgManifest.js diff --git a/dbgpt/app/static/_next/static/chunks/4134.1f69d7fdee641af7.js b/dbgpt/app/static/_next/static/chunks/4134.d59cf294103a4db2.js similarity index 87% rename from dbgpt/app/static/_next/static/chunks/4134.1f69d7fdee641af7.js rename to dbgpt/app/static/_next/static/chunks/4134.d59cf294103a4db2.js index 6cd94a020..c67f73a44 100644 --- a/dbgpt/app/static/_next/static/chunks/4134.1f69d7fdee641af7.js +++ b/dbgpt/app/static/_next/static/chunks/4134.d59cf294103a4db2.js @@ -1 +1 @@ -"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4134],{12545:function(e,t,l){l.r(t),l.d(t,{default:function(){return eF}});var a=l(85893),s=l(67294),r=l(2093),n=l(43446),o=l(39332),c=l(74434),i=l(24019),d=l(50888),u=l(97937),m=l(63606),x=l(50228),h=l(87547),p=l(89035),g=l(92975),v=l(12767),f=l(94184),j=l.n(f),b=l(66309),y=l(81799),w=l(41468),N=l(29158),_=l(98165),Z=l(14079),k=l(38426),C=l(45396),S=l(44442),P=l(55241),E=l(39156),R=l(71577),D=l(2453),O=l(57132),I=l(36096),M=l(79166),q=l(93179),A=l(20640),J=l.n(A);function L(e){let{code:t,light:l,dark:r,language:n,customStyle:o}=e,{mode:c}=(0,s.useContext)(w.p);return(0,a.jsxs)("div",{className:"relative",children:[(0,a.jsx)(R.ZP,{className:"absolute right-3 top-2 text-gray-300 hover:!text-gray-200 bg-gray-700",type:"text",icon:(0,a.jsx)(O.Z,{}),onClick:()=>{let e=J()(t);D.ZP[e?"success":"error"](e?"Copy success":"Copy failed")}}),(0,a.jsx)(q.Z,{customStyle:o,language:n,style:"dark"===c?null!=r?r:I.Z:null!=l?l:M.Z,children:t})]})}var F=l(14313),z=l(47221),T=function(e){let{data:t}=e;return t&&t.length?(0,a.jsx)(z.Z,{bordered:!0,className:"my-3",expandIcon:e=>{let{isActive:t}=e;return(0,a.jsx)(F.Z,{rotate:t?90:0})},items:t.map((e,t)=>({key:t,label:(0,a.jsxs)("div",{className:"whitespace-normal",children:[(0,a.jsxs)("span",{children:[e.name," - ",e.agent]}),"complete"===e.status?(0,a.jsx)(m.Z,{className:"!text-green-500 ml-2"}):(0,a.jsx)(i.Z,{className:"!text-gray-500 ml-2"})]}),children:(0,a.jsx)(g.D,{components:en,children:e.markdown})}))}):null},G=l(32198),$=function(e){let{data:t}=e;return t&&t.length?(0,a.jsx)(a.Fragment,{children:t.map((e,t)=>(0,a.jsxs)("div",{className:"rounded my-4 md:my-6",children:[(0,a.jsxs)("div",{className:"flex items-center mb-3 text-sm",children:[e.model?(0,y.A)(e.model):(0,a.jsx)("div",{className:"rounded-full w-6 h-6 bg-gray-100"}),(0,a.jsxs)("div",{className:"ml-2 opacity-70",children:[e.sender,(0,a.jsx)(G.Z,{className:"mx-2 text-base"}),e.receiver]})]}),(0,a.jsx)("div",{className:"whitespace-normal text-sm",children:(0,a.jsx)(g.D,{components:en,children:e.markdown})})]},t))}):null},V=l(62418),H=function(e){let{data:t}=e;return(0,a.jsxs)("div",{className:"rounded overflow-hidden",children:[(0,a.jsx)("div",{className:"p-3 text-white bg-red-500 whitespace-normal",children:t.display_type}),(0,a.jsxs)("div",{className:"p-3 bg-red-50",children:[(0,a.jsx)("div",{className:"mb-2 whitespace-normal",children:t.thought}),(0,a.jsx)(L,{code:(0,V._m)(t.sql),language:"sql"})]})]})},U=l(8497),B=function(e){var t;let{data:l,type:s,sql:r}=e,n=(null==l?void 0:l[0])?null===(t=Object.keys(null==l?void 0:l[0]))||void 0===t?void 0:t.map(e=>({title:e,dataIndex:e,key:e})):[],o={key:"chart",label:"Chart",children:(0,a.jsx)(U._,{data:l,chartType:(0,U.a)(s)})},c={key:"sql",label:"SQL",children:(0,a.jsx)(L,{language:"sql",code:(0,V._m)(r)})},i={key:"data",label:"Data",children:(0,a.jsx)(C.Z,{dataSource:l,columns:n,scroll:{x:"auto"}})},d="response_table"===s?[i,c]:[o,c,i];return(0,a.jsx)(S.Z,{defaultActiveKey:"response_table"===s?"data":"chart",items:d,size:"small"})},Q=function(e){let{data:t}=e;return(0,a.jsx)(B,{data:t.data,type:t.type,sql:t.sql})};let W=[[2],[1,2],[1,3],[2,1,2],[2,1,3],[3,1,3],[3,2,3]];var K=function(e){let{data:t}=e,l=(0,s.useMemo)(()=>{if(t.chart_count>1){let e=W[t.chart_count-2],l=0;return e.map(e=>{let a=t.data.slice(l,l+e);return l=e,a})}return[t.data]},[t.data,t.chart_count]);return(0,a.jsx)("div",{className:"flex flex-col gap-3",children:l.map((e,t)=>(0,a.jsx)("div",{className:"flex gap-3",children:e.map((e,t)=>(0,a.jsxs)("div",{className:"flex flex-1 flex-col justify-between p-4 rounded border border-gray-200 dark:border-gray-500 whitespace-normal",children:[(0,a.jsxs)("div",{children:[e.title&&(0,a.jsx)("div",{className:"mb-2 text-lg",children:e.title}),e.describe&&(0,a.jsx)("div",{className:"mb-4 text-sm text-gray-500",children:e.describe})]}),(0,a.jsx)(E._z,{data:e.data,chartType:(0,E.aG)(e.type)})]},"chart-".concat(t)))},"row-".concat(t)))})};let X={todo:{bgClass:"bg-gray-500",icon:(0,a.jsx)(i.Z,{className:"ml-2"})},runing:{bgClass:"bg-blue-500",icon:(0,a.jsx)(d.Z,{className:"ml-2"})},failed:{bgClass:"bg-red-500",icon:(0,a.jsx)(u.Z,{className:"ml-2"})},complete:{bgClass:"bg-green-500",icon:(0,a.jsx)(m.Z,{className:"ml-2"})}};var Y=function(e){var t,l;let{data:s}=e,{bgClass:r,icon:n}=null!==(t=X[s.status])&&void 0!==t?t:{};return(0,a.jsxs)("div",{className:"bg-theme-light dark:bg-theme-dark-container rounded overflow-hidden my-2 flex flex-col lg:max-w-[80%]",children:[(0,a.jsxs)("div",{className:j()("flex px-4 md:px-6 py-2 items-center text-white text-sm",r),children:[s.name,n]}),s.result?(0,a.jsx)("div",{className:"px-4 md:px-6 py-4 text-sm whitespace-normal",children:(0,a.jsx)(g.D,{components:en,rehypePlugins:[v.Z],children:null!==(l=s.result)&&void 0!==l?l:""})}):(0,a.jsx)("div",{className:"px-4 md:px-6 py-4 text-sm",children:s.err_msg})]})},ee=l(76199),et=l(67421),el=l(24136),ea=function(e){let{data:t}=e,{t:l}=(0,et.$G)(),[r,n]=(0,s.useState)(0);return(0,a.jsxs)("div",{className:"bg-[#EAEAEB] rounded overflow-hidden border border-theme-primary dark:bg-theme-dark text-sm",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"flex",children:t.code.map((e,t)=>(0,a.jsxs)("div",{className:j()("px-4 py-2 text-[#121417] dark:text-white cursor-pointer",{"bg-white dark:bg-theme-dark-container":t===r}),onClick:()=>{n(t)},children:["CODE ",t+1,": ",e[0]]},t))}),t.code.length&&(0,a.jsx)(L,{language:t.code[r][0],code:t.code[r][1],customStyle:{maxHeight:300,margin:0},light:el.Z,dark:M.Z})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"flex",children:(0,a.jsxs)("div",{className:"bg-white dark:bg-theme-dark-container px-4 py-2 text-[#121417] dark:text-white",children:[l("Terminal")," ",t.exit_success?(0,a.jsx)(m.Z,{className:"text-green-600"}):(0,a.jsx)(u.Z,{className:"text-red-600"})]})}),(0,a.jsx)("div",{className:"p-4 max-h-72 overflow-y-auto whitespace-normal bg-white dark:dark:bg-theme-dark",children:(0,a.jsx)(g.D,{components:en,remarkPlugins:[ee.Z],children:t.log})})]})]})};let es=["custom-view","chart-view","references","summary"],er={code(e){let{inline:t,node:l,className:s,children:r,style:n,...o}=e,c=String(r),{context:i,matchValues:d}=function(e){let t=es.reduce((t,l)=>{let a=RegExp("<".concat(l,"[^>]*/?>"),"gi");return e=e.replace(a,e=>(t.push(e),"")),t},[]);return{context:e,matchValues:t}}(c),u=(null==s?void 0:s.replace("language-",""))||"javascript";if("agent-plans"===u)try{let e=JSON.parse(c);return(0,a.jsx)(T,{data:e})}catch(e){return(0,a.jsx)(L,{language:u,code:c})}if("agent-messages"===u)try{let e=JSON.parse(c);return(0,a.jsx)($,{data:e})}catch(e){return(0,a.jsx)(L,{language:u,code:c})}if("vis-convert-error"===u)try{let e=JSON.parse(c);return(0,a.jsx)(H,{data:e})}catch(e){return(0,a.jsx)(L,{language:u,code:c})}if("vis-dashboard"===u)try{let e=JSON.parse(c);return(0,a.jsx)(K,{data:e})}catch(e){return(0,a.jsx)(L,{language:u,code:c})}if("vis-chart"===u)try{let e=JSON.parse(c);return(0,a.jsx)(Q,{data:e})}catch(e){return(0,a.jsx)(L,{language:u,code:c})}if("vis-plugin"===u)try{let e=JSON.parse(c);return(0,a.jsx)(Y,{data:e})}catch(e){return(0,a.jsx)(L,{language:u,code:c})}if("vis-code"===u)try{let e=JSON.parse(c);return(0,a.jsx)(ea,{data:e})}catch(e){return(0,a.jsx)(L,{language:u,code:c})}return(0,a.jsxs)(a.Fragment,{children:[t?(0,a.jsx)("code",{...o,style:n,className:"p-1 mx-1 rounded bg-theme-light dark:bg-theme-dark text-sm",children:r}):(0,a.jsx)(L,{code:i,language:u}),(0,a.jsx)(g.D,{components:er,rehypePlugins:[v.Z],children:d.join("\n")})]})},ul(e){let{children:t}=e;return(0,a.jsx)("ul",{className:"py-1",children:t})},ol(e){let{children:t}=e;return(0,a.jsx)("ol",{className:"py-1",children:t})},li(e){let{children:t,ordered:l}=e;return(0,a.jsx)("li",{className:"text-sm leading-7 ml-5 pl-2 text-gray-600 dark:text-gray-300 ".concat(l?"list-decimal":"list-disc"),children:t})},table(e){let{children:t}=e;return(0,a.jsx)("table",{className:"my-2 rounded-tl-md rounded-tr-md max-w-full bg-white dark:bg-gray-800 text-sm rounded-lg overflow-hidden",children:t})},thead(e){let{children:t}=e;return(0,a.jsx)("thead",{className:"bg-[#fafafa] dark:bg-black font-semibold",children:t})},th(e){let{children:t}=e;return(0,a.jsx)("th",{className:"!text-left p-4",children:t})},td(e){let{children:t}=e;return(0,a.jsx)("td",{className:"p-4 border-t border-[#f0f0f0] dark:border-gray-700",children:t})},h1(e){let{children:t}=e;return(0,a.jsx)("h3",{className:"text-2xl font-bold my-4 border-b border-slate-300 pb-4",children:t})},h2(e){let{children:t}=e;return(0,a.jsx)("h3",{className:"text-xl font-bold my-3",children:t})},h3(e){let{children:t}=e;return(0,a.jsx)("h3",{className:"text-lg font-semibold my-2",children:t})},h4(e){let{children:t}=e;return(0,a.jsx)("h3",{className:"text-base font-semibold my-1",children:t})},a(e){let{children:t,href:l}=e;return(0,a.jsxs)("div",{className:"inline-block text-blue-600 dark:text-blue-400",children:[(0,a.jsx)(N.Z,{className:"mr-1"}),(0,a.jsx)("a",{href:l,target:"_blank",children:t})]})},img(e){let{src:t,alt:l}=e;return(0,a.jsx)("div",{children:(0,a.jsx)(k.Z,{className:"min-h-[1rem] max-w-full max-h-full border rounded",src:t,alt:l,placeholder:(0,a.jsx)(b.Z,{icon:(0,a.jsx)(_.Z,{spin:!0}),color:"processing",children:"Image Loading..."}),fallback:"/images/fallback.png"})})},blockquote(e){let{children:t}=e;return(0,a.jsx)("blockquote",{className:"py-4 px-6 border-l-4 border-blue-600 rounded bg-white my-2 text-gray-500 dark:bg-slate-800 dark:text-gray-200 dark:border-white shadow-sm",children:t})},"chart-view":function(e){var t,l,s;let r,{content:n,children:o}=e;try{r=JSON.parse(n)}catch(e){console.log(e,n),r={type:"response_table",sql:"",data:[]}}let c=(null==r?void 0:null===(t=r.data)||void 0===t?void 0:t[0])?null===(l=Object.keys(null==r?void 0:null===(s=r.data)||void 0===s?void 0:s[0]))||void 0===l?void 0:l.map(e=>({title:e,dataIndex:e,key:e})):[],i={key:"chart",label:"Chart",children:(0,a.jsx)(E._z,{data:null==r?void 0:r.data,chartType:(0,E.aG)(null==r?void 0:r.type)})},d={key:"sql",label:"SQL",children:(0,a.jsx)(L,{code:(0,V._m)(null==r?void 0:r.sql,"mysql"),language:"sql"})},u={key:"data",label:"Data",children:(0,a.jsx)(C.Z,{dataSource:null==r?void 0:r.data,columns:c})},m=(null==r?void 0:r.type)==="response_table"?[u,d]:[i,d,u];return(0,a.jsxs)("div",{children:[(0,a.jsx)(S.Z,{defaultActiveKey:(null==r?void 0:r.type)==="response_table"?"data":"chart",items:m,size:"small"}),o]})},references:function(e){let t,{title:l,references:s,children:r}=e;if(r)try{l=(t=JSON.parse(r)).title,s=t.references}catch(e){return console.log("parse references failed",e),(0,a.jsx)("p",{className:"text-sm text-red-500",children:"Render Reference Error!"})}else try{s=JSON.parse(s)}catch(e){return console.log("parse references failed",e),(0,a.jsx)("p",{className:"text-sm text-red-500",children:"Render Reference Error!"})}return!s||(null==s?void 0:s.length)<1?null:(0,a.jsxs)("div",{className:"border-t-[1px] border-gray-300 mt-3 py-2",children:[(0,a.jsxs)("p",{className:"text-sm text-gray-500 dark:text-gray-400 mb-2",children:[(0,a.jsx)(N.Z,{className:"mr-2"}),(0,a.jsx)("span",{className:"font-semibold",children:l})]}),s.map((e,t)=>{var l;return(0,a.jsxs)("div",{className:"text-sm font-normal block ml-2 h-6 leading-6 overflow-hidden",children:[(0,a.jsxs)("span",{className:"inline-block w-6",children:["[",t+1,"]"]}),(0,a.jsx)("span",{className:"mr-2 lg:mr-4 text-blue-400",children:e.name}),null==e?void 0:null===(l=e.chunks)||void 0===l?void 0:l.map((t,l)=>(0,a.jsxs)("span",{children:["object"==typeof t?(0,a.jsx)(P.Z,{content:(0,a.jsxs)("div",{className:"max-w-4xl",children:[(0,a.jsx)("p",{className:"mt-2 font-bold mr-2 border-t border-gray-500 pt-2",children:"Content:"}),(0,a.jsx)("p",{children:(null==t?void 0:t.content)||"No Content"}),(0,a.jsx)("p",{className:"mt-2 font-bold mr-2 border-t border-gray-500 pt-2",children:"MetaData:"}),(0,a.jsx)("p",{children:(null==t?void 0:t.meta_info)||"No MetaData"}),(0,a.jsx)("p",{className:"mt-2 font-bold mr-2 border-t border-gray-500 pt-2",children:"Score:"}),(0,a.jsx)("p",{children:(null==t?void 0:t.recall_score)||""})]}),title:"Chunk Information",children:(0,a.jsx)("span",{className:"cursor-pointer text-blue-500 ml-2",children:null==t?void 0:t.id},"chunk_content_".concat(null==t?void 0:t.id))}):(0,a.jsx)("span",{className:"cursor-pointer text-blue-500 ml-2",children:t},"chunk_id_".concat(t)),l<(null==e?void 0:e.chunks.length)-1&&(0,a.jsx)("span",{children:","},"chunk_comma_".concat(l))]},"chunk_".concat(l)))]},"file_".concat(t))})]})},summary:function(e){let{children:t}=e;return(0,a.jsxs)("div",{children:[(0,a.jsxs)("p",{className:"mb-2",children:[(0,a.jsx)(Z.Z,{className:"mr-2"}),(0,a.jsx)("span",{className:"font-semibold",children:"Document Summary"})]}),(0,a.jsx)("div",{children:t})]})}};var en=er;let eo={todo:{bgClass:"bg-gray-500",icon:(0,a.jsx)(i.Z,{className:"ml-2"})},runing:{bgClass:"bg-blue-500",icon:(0,a.jsx)(d.Z,{className:"ml-2"})},failed:{bgClass:"bg-red-500",icon:(0,a.jsx)(u.Z,{className:"ml-2"})},completed:{bgClass:"bg-green-500",icon:(0,a.jsx)(m.Z,{className:"ml-2"})}};function ec(e){return e.replaceAll("\\n","\n").replace(/]+)>/gi,"").replace(/]+)>/gi,"")}var ei=(0,s.memo)(function(e){let{children:t,content:l,isChartChat:r,onLinkClick:n}=e,{scene:o}=(0,s.useContext)(w.p),{context:c,model_name:i,role:d}=l,u="view"===d,{relations:m,value:f,cachePluginContext:N}=(0,s.useMemo)(()=>{if("string"!=typeof c)return{relations:[],value:"",cachePluginContext:[]};let[e,t]=c.split(" relations:"),l=t?t.split(","):[],a=[],s=0,r=e.replace(/]*>[^<]*<\/dbgpt-view>/gi,e=>{try{var t;let l=e.replaceAll("\n","\\n").replace(/<[^>]*>|<\/[^>]*>/gm,""),r=JSON.parse(l),n="".concat(s,"");return a.push({...r,result:ec(null!==(t=r.result)&&void 0!==t?t:"")}),s++,n}catch(t){return console.log(t.message,t),e}});return{relations:l,cachePluginContext:a,value:r}},[c]),_=(0,s.useMemo)(()=>({"custom-view"(e){var t;let{children:l}=e,s=+l.toString();if(!N[s])return l;let{name:r,status:n,err_msg:o,result:c}=N[s],{bgClass:i,icon:d}=null!==(t=eo[n])&&void 0!==t?t:{};return(0,a.jsxs)("div",{className:"bg-white dark:bg-[#212121] rounded-lg overflow-hidden my-2 flex flex-col lg:max-w-[80%]",children:[(0,a.jsxs)("div",{className:j()("flex px-4 md:px-6 py-2 items-center text-white text-sm",i),children:[r,d]}),c?(0,a.jsx)("div",{className:"px-4 md:px-6 py-4 text-sm",children:(0,a.jsx)(g.D,{components:en,rehypePlugins:[v.Z],children:null!=c?c:""})}):(0,a.jsx)("div",{className:"px-4 md:px-6 py-4 text-sm",children:o})]})}}),[c,N]);return u||c?(0,a.jsxs)("div",{className:j()("relative flex flex-wrap w-full p-2 md:p-4 rounded-xl break-words",{"bg-white dark:bg-[#232734]":u,"lg:w-full xl:w-full pl-0":["chat_with_db_execute","chat_dashboard"].includes(o)}),children:[(0,a.jsx)("div",{className:"mr-2 flex flex-shrink-0 items-center justify-center h-7 w-7 rounded-full text-lg sm:mr-4",children:u?(0,y.A)(i)||(0,a.jsx)(x.Z,{}):(0,a.jsx)(h.Z,{})}),(0,a.jsxs)("div",{className:"flex-1 overflow-hidden items-center text-md leading-8 pb-2",children:[!u&&"string"==typeof c&&c,u&&r&&"object"==typeof c&&(0,a.jsxs)("div",{children:["[".concat(c.template_name,"]: "),(0,a.jsxs)("span",{className:"text-theme-primary cursor-pointer",onClick:n,children:[(0,a.jsx)(p.Z,{className:"mr-1"}),c.template_introduce||"More Details"]})]}),u&&"string"==typeof c&&(0,a.jsx)(g.D,{components:{...en,..._},rehypePlugins:[v.Z],children:ec(f)}),!!(null==m?void 0:m.length)&&(0,a.jsx)("div",{className:"flex flex-wrap mt-2",children:null==m?void 0:m.map((e,t)=>(0,a.jsx)(b.Z,{color:"#108ee9",children:e},e+t))})]}),t]}):(0,a.jsx)("div",{className:"h-12"})}),ed=l(59301),eu=l(41132),em=l(74312),ex=l(3414),eh=l(72868),ep=l(59562),eg=l(14553),ev=l(25359),ef=l(7203),ej=l(48665),eb=l(26047),ey=l(99056),ew=l(57814),eN=l(63955),e_=l(33028),eZ=l(40911),ek=l(66478),eC=l(83062),eS=l(89182),eP=e=>{var t;let{conv_index:l,question:r,knowledge_space:n,select_param:o}=e,{t:c}=(0,et.$G)(),{chatId:i}=(0,s.useContext)(w.p),[d,u]=(0,s.useState)(""),[m,x]=(0,s.useState)(4),[h,p]=(0,s.useState)(""),g=(0,s.useRef)(null),[v,f]=D.ZP.useMessage(),j=(0,s.useCallback)((e,t)=>{t?(0,eS.Vx)((0,eS.Eb)(i,l)).then(e=>{var t,l,a,s;let r=null!==(t=e[1])&&void 0!==t?t:{};u(null!==(l=r.ques_type)&&void 0!==l?l:""),x(parseInt(null!==(a=r.score)&&void 0!==a?a:"4")),p(null!==(s=r.messages)&&void 0!==s?s:"")}).catch(e=>{console.log(e)}):(u(""),x(4),p(""))},[i,l]),b=(0,em.Z)(ex.Z)(e=>{let{theme:t}=e;return{backgroundColor:"dark"===t.palette.mode?"#FBFCFD":"#0E0E10",...t.typography["body-sm"],padding:t.spacing(1),display:"flex",alignItems:"center",justifyContent:"center",borderRadius:4,width:"100%",height:"100%"}});return(0,a.jsxs)(eh.L,{onOpenChange:j,children:[f,(0,a.jsx)(eC.Z,{title:c("Rating"),children:(0,a.jsx)(ep.Z,{slots:{root:eg.ZP},slotProps:{root:{variant:"plain",color:"primary"}},sx:{borderRadius:40},children:(0,a.jsx)(ed.Z,{})})}),(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ef.Z,{disabled:!0,sx:{minHeight:0}}),(0,a.jsx)(ej.Z,{sx:{width:"100%",maxWidth:350,display:"grid",gap:3,padding:1},children:(0,a.jsx)("form",{onSubmit:e=>{e.preventDefault();let t={conv_uid:i,conv_index:l,question:r,knowledge_space:n,score:m,ques_type:d,messages:h};console.log(t),(0,eS.Vx)((0,eS.VC)({data:t})).then(e=>{v.open({type:"success",content:"save success"})}).catch(e=>{v.open({type:"error",content:"save error"})})},children:(0,a.jsxs)(eb.Z,{container:!0,spacing:.5,columns:13,sx:{flexGrow:1},children:[(0,a.jsx)(eb.Z,{xs:3,children:(0,a.jsx)(b,{children:c("Q_A_Category")})}),(0,a.jsx)(eb.Z,{xs:10,children:(0,a.jsx)(ey.Z,{action:g,value:d,placeholder:"Choose one…",onChange:(e,t)=>u(null!=t?t:""),...d&&{endDecorator:(0,a.jsx)(eg.ZP,{size:"sm",variant:"plain",color:"neutral",onMouseDown:e=>{e.stopPropagation()},onClick:()=>{var e;u(""),null===(e=g.current)||void 0===e||e.focusVisible()},children:(0,a.jsx)(eu.Z,{})}),indicator:null},sx:{width:"100%"},children:o&&(null===(t=Object.keys(o))||void 0===t?void 0:t.map(e=>(0,a.jsx)(ew.Z,{value:e,children:o[e]},e)))})}),(0,a.jsx)(eb.Z,{xs:3,children:(0,a.jsx)(b,{children:(0,a.jsx)(eC.Z,{title:(0,a.jsx)(ej.Z,{children:(0,a.jsx)("div",{children:c("feed_back_desc")})}),variant:"solid",placement:"left",children:c("Q_A_Rating")})})}),(0,a.jsx)(eb.Z,{xs:10,sx:{pl:0,ml:0},children:(0,a.jsx)(eN.Z,{"aria-label":"Custom",step:1,min:0,max:5,valueLabelFormat:function(e){return({0:c("Lowest"),1:c("Missed"),2:c("Lost"),3:c("Incorrect"),4:c("Verbose"),5:c("Best")})[e]},valueLabelDisplay:"on",marks:[{value:0,label:"0"},{value:1,label:"1"},{value:2,label:"2"},{value:3,label:"3"},{value:4,label:"4"},{value:5,label:"5"}],sx:{width:"90%",pt:3,m:2,ml:1},onChange:e=>{var t;return x(null===(t=e.target)||void 0===t?void 0:t.value)},value:m})}),(0,a.jsx)(eb.Z,{xs:13,children:(0,a.jsx)(e_.Z,{placeholder:c("Please_input_the_text"),value:h,onChange:e=>p(e.target.value),minRows:2,maxRows:4,endDecorator:(0,a.jsx)(eZ.ZP,{level:"body-xs",sx:{ml:"auto"},children:c("input_count")+h.length+c("input_unit")}),sx:{width:"100%",fontSize:14}})}),(0,a.jsx)(eb.Z,{xs:13,children:(0,a.jsx)(ek.Z,{type:"submit",variant:"outlined",sx:{width:"100%",height:"100%"},children:c("submit")})})]})})})]})]})},eE=l(36147),eR=l(96486),eD=l(19409),eO=l(87740),eI=l(80573),eM=(0,s.memo)(function(e){let{content:t}=e,{scene:l}=(0,s.useContext)(w.p),r="view"===t.role;return(0,a.jsx)("div",{className:j()("relative w-full p-2 md:p-4 rounded-xl break-words",{"bg-white dark:bg-[#232734]":r,"lg:w-full xl:w-full pl-0":["chat_with_db_execute","chat_dashboard"].includes(l)}),children:r?(0,a.jsx)(g.D,{components:en,rehypePlugins:[v.Z],children:t.context.replace(/]+)>/gi,"
").replace(/]+)>/gi,"")}):(0,a.jsx)("div",{className:"",children:t.context})})}),eq=l(91085),eA=e=>{var t,l;let{messages:n,onSubmit:i}=e,{dbParam:d,currentDialogue:u,scene:m,model:x,refreshDialogList:h,chatId:p,agent:g,docId:v}=(0,s.useContext)(w.p),{t:f}=(0,et.$G)(),b=(0,o.useSearchParams)(),N=null!==(t=b&&b.get("select_param"))&&void 0!==t?t:"",_=null!==(l=b&&b.get("spaceNameOriginal"))&&void 0!==l?l:"",[Z,k]=(0,s.useState)(!1),[C,S]=(0,s.useState)(!1),[P,E]=(0,s.useState)(n),[R,I]=(0,s.useState)(""),[M,q]=(0,s.useState)(),A=(0,s.useRef)(null),L=(0,s.useMemo)(()=>"chat_dashboard"===m,[m]),F=(0,eI.Z)(),z=(0,s.useMemo)(()=>{switch(m){case"chat_agent":return g;case"chat_excel":return null==u?void 0:u.select_param;case"chat_flow":return N;default:return _||d}},[m,g,u,d,_,N]),T=async e=>{if(!Z&&e.trim()){if("chat_agent"===m&&!g){D.ZP.warning(f("choice_agent_tip"));return}try{k(!0),await i(e,{select_param:null!=z?z:""})}finally{k(!1)}}},G=e=>{try{return JSON.parse(e)}catch(t){return e}},[$,H]=D.ZP.useMessage(),U=async e=>{let t=null==e?void 0:e.replace(/\trelations:.*/g,""),l=J()(t);l?t?$.open({type:"success",content:f("Copy_success")}):$.open({type:"warning",content:f("Copy_nothing")}):$.open({type:"error",content:f("Copry_error")})},B=async()=>{!Z&&v&&(k(!0),await F(v),k(!1))};return(0,r.Z)(async()=>{let e=(0,V.a_)();e&&e.id===p&&(await T(e.message),h(),localStorage.removeItem(V.rU))},[p]),(0,s.useEffect)(()=>{let e=n;L&&(e=(0,eR.cloneDeep)(n).map(e=>((null==e?void 0:e.role)==="view"&&"string"==typeof(null==e?void 0:e.context)&&(e.context=G(null==e?void 0:e.context)),e))),E(e.filter(e=>["view","human"].includes(e.role)))},[L,n]),(0,s.useEffect)(()=>{(0,eS.Vx)((0,eS.Lu)()).then(e=>{var t;q(null!==(t=e[1])&&void 0!==t?t:{})}).catch(e=>{console.log(e)})},[]),(0,s.useEffect)(()=>{setTimeout(()=>{var e;null===(e=A.current)||void 0===e||e.scrollTo(0,A.current.scrollHeight)},50)},[n]),(0,a.jsxs)(a.Fragment,{children:[H,(0,a.jsx)("div",{ref:A,className:"flex flex-1 overflow-y-auto pb-8 w-full flex-col",children:(0,a.jsx)("div",{className:"flex items-center flex-1 flex-col text-sm leading-6 text-slate-900 dark:text-slate-300 sm:text-base sm:leading-7",children:P.length?P.map((e,t)=>{var l;return"chat_agent"===m?(0,a.jsx)(eM,{content:e},t):(0,a.jsx)(ei,{content:e,isChartChat:L,onLinkClick:()=>{S(!0),I(JSON.stringify(null==e?void 0:e.context,null,2))},children:"view"===e.role&&(0,a.jsxs)("div",{className:"flex w-full border-t border-gray-200 dark:border-theme-dark",children:["chat_knowledge"===m&&e.retry?(0,a.jsxs)(ek.Z,{onClick:B,slots:{root:eg.ZP},slotProps:{root:{variant:"plain",color:"primary"}},children:[(0,a.jsx)(eO.Z,{}),"\xa0",(0,a.jsx)("span",{className:"text-sm",children:f("Retry")})]}):null,(0,a.jsxs)("div",{className:"flex w-full flex-row-reverse",children:[(0,a.jsx)(eP,{select_param:M,conv_index:Math.ceil((t+1)/2),question:null===(l=null==P?void 0:P.filter(t=>(null==t?void 0:t.role)==="human"&&(null==t?void 0:t.order)===e.order)[0])||void 0===l?void 0:l.context,knowledge_space:_||d||""}),(0,a.jsx)(eC.Z,{title:f("Copy"),children:(0,a.jsx)(ek.Z,{onClick:()=>U(null==e?void 0:e.context),slots:{root:eg.ZP},slotProps:{root:{variant:"plain",color:"primary"}},sx:{borderRadius:40},children:(0,a.jsx)(O.Z,{})})})]})]})},t)}):(0,a.jsx)(eq.Z,{description:"Start a conversation"})})}),(0,a.jsx)("div",{className:j()("relative after:absolute after:-top-8 after:h-8 after:w-full after:bg-gradient-to-t after:from-theme-light after:to-transparent dark:after:from-theme-dark",{"cursor-not-allowed":"chat_excel"===m&&!(null==u?void 0:u.select_param)}),children:(0,a.jsxs)("div",{className:"flex flex-wrap w-full py-2 sm:pt-6 sm:pb-10 items-center",children:[x&&(0,a.jsx)("div",{className:"mr-2 flex",children:(0,y.A)(x)}),(0,a.jsx)(eD.Z,{loading:Z,onSubmit:T,handleFinish:k})]})}),(0,a.jsx)(eE.default,{title:"JSON Editor",open:C,width:"60%",cancelButtonProps:{hidden:!0},onOk:()=>{S(!1)},onCancel:()=>{S(!1)},children:(0,a.jsx)(c.Z,{className:"w-full h-[500px]",language:"json",value:R})})]})},eJ=l(67772),eL=l(45247),eF=()=>{var e;let t=(0,o.useSearchParams)(),{scene:l,chatId:c,model:i,agent:d,setModel:u,history:m,setHistory:x}=(0,s.useContext)(w.p),h=(0,n.Z)({}),p=null!==(e=t&&t.get("initMessage"))&&void 0!==e?e:"",[g,v]=(0,s.useState)(!1),[f,b]=(0,s.useState)(),y=async()=>{v(!0);let[,e]=await (0,eS.Vx)((0,eS.$i)(c));x(null!=e?e:[]),v(!1)},N=e=>{var t;let l=null===(t=e[e.length-1])||void 0===t?void 0:t.context;if(l)try{let e="string"==typeof l?JSON.parse(l):l;b((null==e?void 0:e.template_name)==="report"?null==e?void 0:e.charts:void 0)}catch(e){b(void 0)}};(0,r.Z)(async()=>{let e=(0,V.a_)();e&&e.id===c||await y()},[p,c]),(0,s.useEffect)(()=>{var e,t;if(!m.length)return;let l=null===(e=null===(t=m.filter(e=>"view"===e.role))||void 0===t?void 0:t.slice(-1))||void 0===e?void 0:e[0];(null==l?void 0:l.model_name)&&u(l.model_name),N(m)},[m.length]),(0,s.useEffect)(()=>()=>{x([])},[]);let _=(0,s.useCallback)((e,t)=>new Promise(a=>{let s=[...m,{role:"human",context:e,model_name:i,order:0,time_stamp:0},{role:"view",context:"",model_name:i,order:0,time_stamp:0}],r=s.length-1;x([...s]),h({data:{...t,chat_mode:l||"chat_normal",model_name:i,user_input:e},chatId:c,onMessage:e=>{(null==t?void 0:t.incremental)?s[r].context+=e:s[r].context=e,x([...s])},onDone:()=>{N(s),a()},onClose:()=>{N(s),a()},onError:e=>{s[r].context=e,x([...s]),a()}})}),[m,h,c,i,d,l]);return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(eL.Z,{visible:g}),(0,a.jsx)(eJ.Z,{refreshHistory:y,modelChange:e=>{u(e)}}),(0,a.jsxs)("div",{className:"px-4 flex flex-1 flex-wrap overflow-hidden relative",children:[!!(null==f?void 0:f.length)&&(0,a.jsx)("div",{className:"w-full pb-4 xl:w-3/4 h-1/2 xl:pr-4 xl:h-full overflow-y-auto",children:(0,a.jsx)(E.ZP,{chartsData:f})}),!(null==f?void 0:f.length)&&"chat_dashboard"===l&&(0,a.jsx)(eq.Z,{className:"w-full xl:w-3/4 h-1/2 xl:h-full"}),(0,a.jsx)("div",{className:j()("flex flex-1 flex-col overflow-hidden",{"px-0 xl:pl-4 h-1/2 w-full xl:w-auto xl:h-full border-t xl:border-t-0 xl:border-l dark:border-gray-800":"chat_dashboard"===l,"h-full lg:px-8":"chat_dashboard"!==l}),children:(0,a.jsx)(eA,{messages:m,onSubmit:_})})]})]})}},19409:function(e,t,l){l.d(t,{Z:function(){return D}});var a=l(85893),s=l(27496),r=l(79531),n=l(71577),o=l(67294),c=l(2487),i=l(83062),d=l(2453),u=l(46735),m=l(55241),x=l(39479),h=l(51009),p=l(58299),g=l(56155),v=l(30119),f=l(67421);let j=e=>{let{data:t,loading:l,submit:s,close:r}=e,{t:n}=(0,f.$G)(),o=e=>()=>{s(e),r()};return(0,a.jsx)("div",{style:{maxHeight:400,overflow:"auto"},children:(0,a.jsx)(c.Z,{dataSource:null==t?void 0:t.data,loading:l,rowKey:e=>e.prompt_name,renderItem:e=>(0,a.jsx)(c.Z.Item,{onClick:o(e.content),children:(0,a.jsx)(i.Z,{title:e.content,children:(0,a.jsx)(c.Z.Item.Meta,{style:{cursor:"copy"},title:e.prompt_name,description:n("Prompt_Info_Scene")+":".concat(e.chat_scene,",")+n("Prompt_Info_Sub_Scene")+":".concat(e.sub_chat_scene)})})},e.prompt_name)})})};var b=e=>{let{submit:t}=e,{t:l}=(0,f.$G)(),[s,r]=(0,o.useState)(!1),[n,c]=(0,o.useState)("common"),{data:b,loading:y}=(0,g.Z)(()=>(0,v.PR)("/prompt/list",{prompt_type:n}),{refreshDeps:[n],onError:e=>{d.ZP.error(null==e?void 0:e.message)}});return(0,a.jsx)(u.ZP,{theme:{components:{Popover:{minWidth:250}}},children:(0,a.jsx)(m.Z,{title:(0,a.jsx)(x.Z.Item,{label:"Prompt "+l("Type"),children:(0,a.jsx)(h.default,{style:{width:150},value:n,onChange:e=>{c(e)},options:[{label:l("Public")+" Prompts",value:"common"},{label:l("Private")+" Prompts",value:"private"}]})}),content:(0,a.jsx)(j,{data:b,loading:y,submit:t,close:()=>{r(!1)}}),placement:"topRight",trigger:"click",open:s,onOpenChange:e=>{r(e)},children:(0,a.jsx)(i.Z,{title:l("Click_Select")+" Prompt",children:(0,a.jsx)(p.Z,{className:"bottom-[30%]"})})})})},y=l(41468),w=l(89182),N=l(80573),_=l(5392),Z=l(84553);function k(e){let{dbParam:t,setDocId:l}=(0,o.useContext)(y.p),{onUploadFinish:s,handleFinish:r}=e,c=(0,N.Z)(),[i,d]=(0,o.useState)(!1),u=async e=>{d(!0);let a=new FormData;a.append("doc_name",e.file.name),a.append("doc_file",e.file),a.append("doc_type","DOCUMENT");let n=await (0,w.Vx)((0,w.iG)(t||"default",a));if(!n[1]){d(!1);return}l(n[1]),s(),d(!1),null==r||r(!0),await c(n[1]),null==r||r(!1)};return(0,a.jsx)(Z.default,{customRequest:u,showUploadList:!1,maxCount:1,multiple:!1,className:"absolute z-10 top-2 left-2",accept:".pdf,.ppt,.pptx,.xls,.xlsx,.doc,.docx,.txt,.md",children:(0,a.jsx)(n.ZP,{loading:i,size:"small",shape:"circle",icon:(0,a.jsx)(_.Z,{})})})}var C=l(11163),S=l(82353),P=l(1051);function E(e){let{document:t}=e;switch(t.status){case"RUNNING":return(0,a.jsx)(S.Rp,{});case"FINISHED":default:return(0,a.jsx)(S.s2,{});case"FAILED":return(0,a.jsx)(P.Z,{})}}function R(e){let{documents:t,dbParam:l}=e,s=(0,C.useRouter)(),r=e=>{s.push("/knowledge/chunk/?spaceName=".concat(l,"&id=").concat(e))};return(null==t?void 0:t.length)?(0,a.jsx)("div",{className:"absolute flex overflow-scroll h-12 top-[-35px] w-full z-10",children:t.map(e=>{let t;switch(e.status){case"RUNNING":t="#2db7f5";break;case"FINISHED":default:t="#87d068";break;case"FAILED":t="#f50"}return(0,a.jsx)(i.Z,{title:e.result,children:(0,a.jsxs)(n.ZP,{style:{color:t},onClick:()=>{r(e.id)},className:"shrink flex items-center mr-3",children:[(0,a.jsx)(E,{document:e}),e.doc_name]})},e.id)})}):null}var D=function(e){let{children:t,loading:l,onSubmit:c,handleFinish:i,...d}=e,{dbParam:u,scene:m}=(0,o.useContext)(y.p),[x,h]=(0,o.useState)(""),p=(0,o.useMemo)(()=>"chat_knowledge"===m,[m]),[g,v]=(0,o.useState)([]),f=(0,o.useRef)(0);async function j(){if(!u)return null;let[e,t]=await (0,w.Vx)((0,w._Q)(u,{page:1,page_size:f.current}));v(null==t?void 0:t.data)}(0,o.useEffect)(()=>{p&&j()},[u]);let N=async()=>{f.current+=1,await j()};return(0,a.jsxs)("div",{className:"flex-1 relative",children:[(0,a.jsx)(R,{documents:g,dbParam:u}),p&&(0,a.jsx)(k,{handleFinish:i,onUploadFinish:N,className:"absolute z-10 top-2 left-2"}),(0,a.jsx)(r.default.TextArea,{className:"flex-1 ".concat(p?"pl-10":""," pr-10"),size:"large",value:x,autoSize:{minRows:1,maxRows:4},...d,onPressEnter:e=>{if(x.trim()&&13===e.keyCode){if(e.shiftKey){h(e=>e+"\n");return}c(x),setTimeout(()=>{h("")},0)}},onChange:e=>{if("number"==typeof d.maxLength){h(e.target.value.substring(0,d.maxLength));return}h(e.target.value)}}),(0,a.jsx)(n.ZP,{className:"ml-2 flex items-center justify-center absolute right-0 bottom-0",size:"large",type:"text",loading:l,icon:(0,a.jsx)(s.Z,{}),onClick:()=>{c(x)}}),(0,a.jsx)(b,{submit:e=>{h(x+e)}}),t]})}},45247:function(e,t,l){var a=l(85893),s=l(50888);t.Z=function(e){let{visible:t}=e;return t?(0,a.jsx)("div",{className:"absolute w-full h-full top-0 left-0 flex justify-center items-center z-10 bg-white dark:bg-black bg-opacity-50 dark:bg-opacity-50 backdrop-blur-sm text-3xl animate-fade animate-duration-200",children:(0,a.jsx)(s.Z,{})}):null}},43446:function(e,t,l){var a=l(1375),s=l(2453),r=l(67294),n=l(36353),o=l(41468),c=l(83454);t.Z=e=>{let{queryAgentURL:t="/api/v1/chat/completions"}=e,l=(0,r.useMemo)(()=>new AbortController,[]),{scene:i}=(0,r.useContext)(o.p),d=(0,r.useCallback)(async e=>{let{data:r,chatId:o,onMessage:d,onClose:u,onDone:m,onError:x}=e;if(!(null==r?void 0:r.user_input)&&!(null==r?void 0:r.doc_id)){s.ZP.warning(n.Z.t("no_context_tip"));return}let h={...r,conv_uid:o};if(!h.conv_uid){s.ZP.error("conv_uid 不存在,请刷新后重试");return}try{var p;await (0,a.L)("".concat(null!==(p=c.env.API_BASE_URL)&&void 0!==p?p:"").concat(t),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(h),signal:l.signal,openWhenHidden:!0,async onopen(e){if(e.ok&&e.headers.get("content-type")===a.a)return},onclose(){l.abort(),null==u||u()},onerror(e){throw Error(e)},onmessage:e=>{let t=e.data;try{t="chat_agent"===i?JSON.parse(t).vis:JSON.parse(t)}catch(e){t.replaceAll("\\n","\n")}"string"==typeof t?"[DONE]"===t?null==m||m():(null==t?void 0:t.startsWith("[ERROR]"))?null==x||x(null==t?void 0:t.replace("[ERROR]","")):null==d||d(t):(null==d||d(t),null==m||m())}})}catch(e){l.abort(),null==x||x("Sorry, We meet some error, please try agin later.",e)}},[t]);return(0,r.useEffect)(()=>()=>{l.abort()},[]),d}},80573:function(e,t,l){var a=l(41468),s=l(67294),r=l(43446),n=l(89182);t.Z=()=>{let{history:e,setHistory:t,chatId:l,model:o,docId:c}=(0,s.useContext)(a.p),i=(0,r.Z)({queryAgentURL:"/knowledge/document/summary"}),d=(0,s.useCallback)(async e=>{let[,a]=await (0,n.Vx)((0,n.$i)(l)),s=[...a,{role:"human",context:"",model_name:o,order:0,time_stamp:0},{role:"view",context:"",model_name:o,order:0,time_stamp:0,retry:!0}],r=s.length-1;t([...s]),await i({data:{doc_id:e||c,model_name:o},chatId:l,onMessage:e=>{s[r].context=e,t([...s])}})},[e,o,c,l]);return d}}}]); \ No newline at end of file +"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[4134],{12545:function(e,t,l){l.r(t),l.d(t,{default:function(){return eF}});var a=l(85893),s=l(67294),r=l(2093),n=l(43446),o=l(39332),c=l(74434),i=l(24019),d=l(50888),u=l(97937),m=l(63606),x=l(50228),h=l(87547),p=l(89035),g=l(92975),v=l(12767),f=l(94184),j=l.n(f),b=l(66309),y=l(81799),w=l(41468),N=l(29158),_=l(98165),Z=l(14079),k=l(38426),C=l(45396),S=l(44442),P=l(55241),D=l(39156),E=l(71577),R=l(2453),O=l(57132),I=l(36096),M=l(79166),q=l(93179),A=l(20640),J=l.n(A);function L(e){let{code:t,light:l,dark:r,language:n,customStyle:o}=e,{mode:c}=(0,s.useContext)(w.p);return(0,a.jsxs)("div",{className:"relative",children:[(0,a.jsx)(E.ZP,{className:"absolute right-3 top-2 text-gray-300 hover:!text-gray-200 bg-gray-700",type:"text",icon:(0,a.jsx)(O.Z,{}),onClick:()=>{let e=J()(t);R.ZP[e?"success":"error"](e?"Copy success":"Copy failed")}}),(0,a.jsx)(q.Z,{customStyle:o,language:n,style:"dark"===c?null!=r?r:I.Z:null!=l?l:M.Z,children:t})]})}var F=l(14313),z=l(47221),T=function(e){let{data:t}=e;return t&&t.length?(0,a.jsx)(z.Z,{bordered:!0,className:"my-3",expandIcon:e=>{let{isActive:t}=e;return(0,a.jsx)(F.Z,{rotate:t?90:0})},items:t.map((e,t)=>({key:t,label:(0,a.jsxs)("div",{className:"whitespace-normal",children:[(0,a.jsxs)("span",{children:[e.name," - ",e.agent]}),"complete"===e.status?(0,a.jsx)(m.Z,{className:"!text-green-500 ml-2"}):(0,a.jsx)(i.Z,{className:"!text-gray-500 ml-2"})]}),children:(0,a.jsx)(g.D,{components:en,children:e.markdown})}))}):null},G=l(32198),$=function(e){let{data:t}=e;return t&&t.length?(0,a.jsx)(a.Fragment,{children:t.map((e,t)=>(0,a.jsxs)("div",{className:"rounded my-4 md:my-6",children:[(0,a.jsxs)("div",{className:"flex items-center mb-3 text-sm",children:[e.model?(0,y.A)(e.model):(0,a.jsx)("div",{className:"rounded-full w-6 h-6 bg-gray-100"}),(0,a.jsxs)("div",{className:"ml-2 opacity-70",children:[e.sender,(0,a.jsx)(G.Z,{className:"mx-2 text-base"}),e.receiver]})]}),(0,a.jsx)("div",{className:"whitespace-normal text-sm",children:(0,a.jsx)(g.D,{components:en,children:e.markdown})})]},t))}):null},V=l(62418),H=function(e){let{data:t}=e;return(0,a.jsxs)("div",{className:"rounded overflow-hidden",children:[(0,a.jsx)("div",{className:"p-3 text-white bg-red-500 whitespace-normal",children:t.display_type}),(0,a.jsxs)("div",{className:"p-3 bg-red-50",children:[(0,a.jsx)("div",{className:"mb-2 whitespace-normal",children:t.thought}),(0,a.jsx)(L,{code:(0,V._m)(t.sql),language:"sql"})]})]})},U=l(8497),B=function(e){var t;let{data:l,type:s,sql:r}=e,n=(null==l?void 0:l[0])?null===(t=Object.keys(null==l?void 0:l[0]))||void 0===t?void 0:t.map(e=>({title:e,dataIndex:e,key:e})):[],o={key:"chart",label:"Chart",children:(0,a.jsx)(U._,{data:l,chartType:(0,U.a)(s)})},c={key:"sql",label:"SQL",children:(0,a.jsx)(L,{language:"sql",code:(0,V._m)(r)})},i={key:"data",label:"Data",children:(0,a.jsx)(C.Z,{dataSource:l,columns:n,scroll:{x:"auto"}})},d="response_table"===s?[i,c]:[o,c,i];return(0,a.jsx)(S.Z,{defaultActiveKey:"response_table"===s?"data":"chart",items:d,size:"small"})},Q=function(e){let{data:t}=e;return(0,a.jsx)(B,{data:t.data,type:t.type,sql:t.sql})};let W=[[2],[1,2],[1,3],[2,1,2],[2,1,3],[3,1,3],[3,2,3]];var K=function(e){let{data:t}=e,l=(0,s.useMemo)(()=>{if(t.chart_count>1){let e=W[t.chart_count-2],l=0;return e.map(e=>{let a=t.data.slice(l,l+e);return l=e,a})}return[t.data]},[t.data,t.chart_count]);return(0,a.jsx)("div",{className:"flex flex-col gap-3",children:l.map((e,t)=>(0,a.jsx)("div",{className:"flex gap-3",children:e.map((e,t)=>(0,a.jsxs)("div",{className:"flex flex-1 flex-col justify-between p-4 rounded border border-gray-200 dark:border-gray-500 whitespace-normal",children:[(0,a.jsxs)("div",{children:[e.title&&(0,a.jsx)("div",{className:"mb-2 text-lg",children:e.title}),e.describe&&(0,a.jsx)("div",{className:"mb-4 text-sm text-gray-500",children:e.describe})]}),(0,a.jsx)(D._z,{data:e.data,chartType:(0,D.aG)(e.type)})]},"chart-".concat(t)))},"row-".concat(t)))})};let X={todo:{bgClass:"bg-gray-500",icon:(0,a.jsx)(i.Z,{className:"ml-2"})},runing:{bgClass:"bg-blue-500",icon:(0,a.jsx)(d.Z,{className:"ml-2"})},failed:{bgClass:"bg-red-500",icon:(0,a.jsx)(u.Z,{className:"ml-2"})},complete:{bgClass:"bg-green-500",icon:(0,a.jsx)(m.Z,{className:"ml-2"})}};var Y=function(e){var t,l;let{data:s}=e,{bgClass:r,icon:n}=null!==(t=X[s.status])&&void 0!==t?t:{};return(0,a.jsxs)("div",{className:"bg-theme-light dark:bg-theme-dark-container rounded overflow-hidden my-2 flex flex-col lg:max-w-[80%]",children:[(0,a.jsxs)("div",{className:j()("flex px-4 md:px-6 py-2 items-center text-white text-sm",r),children:[s.name,n]}),s.result?(0,a.jsx)("div",{className:"px-4 md:px-6 py-4 text-sm whitespace-normal",children:(0,a.jsx)(g.D,{components:en,rehypePlugins:[v.Z],children:null!==(l=s.result)&&void 0!==l?l:""})}):(0,a.jsx)("div",{className:"px-4 md:px-6 py-4 text-sm",children:s.err_msg})]})},ee=l(76199),et=l(67421),el=l(24136),ea=function(e){let{data:t}=e,{t:l}=(0,et.$G)(),[r,n]=(0,s.useState)(0);return(0,a.jsxs)("div",{className:"bg-[#EAEAEB] rounded overflow-hidden border border-theme-primary dark:bg-theme-dark text-sm",children:[(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"flex",children:t.code.map((e,t)=>(0,a.jsxs)("div",{className:j()("px-4 py-2 text-[#121417] dark:text-white cursor-pointer",{"bg-white dark:bg-theme-dark-container":t===r}),onClick:()=>{n(t)},children:["CODE ",t+1,": ",e[0]]},t))}),t.code.length&&(0,a.jsx)(L,{language:t.code[r][0],code:t.code[r][1],customStyle:{maxHeight:300,margin:0},light:el.Z,dark:M.Z})]}),(0,a.jsxs)("div",{children:[(0,a.jsx)("div",{className:"flex",children:(0,a.jsxs)("div",{className:"bg-white dark:bg-theme-dark-container px-4 py-2 text-[#121417] dark:text-white",children:[l("Terminal")," ",t.exit_success?(0,a.jsx)(m.Z,{className:"text-green-600"}):(0,a.jsx)(u.Z,{className:"text-red-600"})]})}),(0,a.jsx)("div",{className:"p-4 max-h-72 overflow-y-auto whitespace-normal bg-white dark:dark:bg-theme-dark",children:(0,a.jsx)(g.D,{components:en,remarkPlugins:[ee.Z],children:t.log})})]})]})};let es=["custom-view","chart-view","references","summary"],er={code(e){let{inline:t,node:l,className:s,children:r,style:n,...o}=e,c=String(r),{context:i,matchValues:d}=function(e){let t=es.reduce((t,l)=>{let a=RegExp("<".concat(l,"[^>]*/?>"),"gi");return e=e.replace(a,e=>(t.push(e),"")),t},[]);return{context:e,matchValues:t}}(c),u=(null==s?void 0:s.replace("language-",""))||"javascript";if("agent-plans"===u)try{let e=JSON.parse(c);return(0,a.jsx)(T,{data:e})}catch(e){return(0,a.jsx)(L,{language:u,code:c})}if("agent-messages"===u)try{let e=JSON.parse(c);return(0,a.jsx)($,{data:e})}catch(e){return(0,a.jsx)(L,{language:u,code:c})}if("vis-convert-error"===u)try{let e=JSON.parse(c);return(0,a.jsx)(H,{data:e})}catch(e){return(0,a.jsx)(L,{language:u,code:c})}if("vis-dashboard"===u)try{let e=JSON.parse(c);return(0,a.jsx)(K,{data:e})}catch(e){return(0,a.jsx)(L,{language:u,code:c})}if("vis-chart"===u)try{let e=JSON.parse(c);return(0,a.jsx)(Q,{data:e})}catch(e){return(0,a.jsx)(L,{language:u,code:c})}if("vis-plugin"===u)try{let e=JSON.parse(c);return(0,a.jsx)(Y,{data:e})}catch(e){return(0,a.jsx)(L,{language:u,code:c})}if("vis-code"===u)try{let e=JSON.parse(c);return(0,a.jsx)(ea,{data:e})}catch(e){return(0,a.jsx)(L,{language:u,code:c})}return(0,a.jsxs)(a.Fragment,{children:[t?(0,a.jsx)("code",{...o,style:n,className:"p-1 mx-1 rounded bg-theme-light dark:bg-theme-dark text-sm",children:r}):(0,a.jsx)(L,{code:i,language:u}),(0,a.jsx)(g.D,{components:er,rehypePlugins:[v.Z],children:d.join("\n")})]})},ul(e){let{children:t}=e;return(0,a.jsx)("ul",{className:"py-1",children:t})},ol(e){let{children:t}=e;return(0,a.jsx)("ol",{className:"py-1",children:t})},li(e){let{children:t,ordered:l}=e;return(0,a.jsx)("li",{className:"text-sm leading-7 ml-5 pl-2 text-gray-600 dark:text-gray-300 ".concat(l?"list-decimal":"list-disc"),children:t})},table(e){let{children:t}=e;return(0,a.jsx)("table",{className:"my-2 rounded-tl-md rounded-tr-md max-w-full bg-white dark:bg-gray-800 text-sm rounded-lg overflow-hidden",children:t})},thead(e){let{children:t}=e;return(0,a.jsx)("thead",{className:"bg-[#fafafa] dark:bg-black font-semibold",children:t})},th(e){let{children:t}=e;return(0,a.jsx)("th",{className:"!text-left p-4",children:t})},td(e){let{children:t}=e;return(0,a.jsx)("td",{className:"p-4 border-t border-[#f0f0f0] dark:border-gray-700",children:t})},h1(e){let{children:t}=e;return(0,a.jsx)("h3",{className:"text-2xl font-bold my-4 border-b border-slate-300 pb-4",children:t})},h2(e){let{children:t}=e;return(0,a.jsx)("h3",{className:"text-xl font-bold my-3",children:t})},h3(e){let{children:t}=e;return(0,a.jsx)("h3",{className:"text-lg font-semibold my-2",children:t})},h4(e){let{children:t}=e;return(0,a.jsx)("h3",{className:"text-base font-semibold my-1",children:t})},a(e){let{children:t,href:l}=e;return(0,a.jsxs)("div",{className:"inline-block text-blue-600 dark:text-blue-400",children:[(0,a.jsx)(N.Z,{className:"mr-1"}),(0,a.jsx)("a",{href:l,target:"_blank",children:t})]})},img(e){let{src:t,alt:l}=e;return(0,a.jsx)("div",{children:(0,a.jsx)(k.Z,{className:"min-h-[1rem] max-w-full max-h-full border rounded",src:t,alt:l,placeholder:(0,a.jsx)(b.Z,{icon:(0,a.jsx)(_.Z,{spin:!0}),color:"processing",children:"Image Loading..."}),fallback:"/images/fallback.png"})})},blockquote(e){let{children:t}=e;return(0,a.jsx)("blockquote",{className:"py-4 px-6 border-l-4 border-blue-600 rounded bg-white my-2 text-gray-500 dark:bg-slate-800 dark:text-gray-200 dark:border-white shadow-sm",children:t})},"chart-view":function(e){var t,l,s;let r,{content:n,children:o}=e;try{r=JSON.parse(n)}catch(e){console.log(e,n),r={type:"response_table",sql:"",data:[]}}let c=(null==r?void 0:null===(t=r.data)||void 0===t?void 0:t[0])?null===(l=Object.keys(null==r?void 0:null===(s=r.data)||void 0===s?void 0:s[0]))||void 0===l?void 0:l.map(e=>({title:e,dataIndex:e,key:e})):[],i={key:"chart",label:"Chart",children:(0,a.jsx)(D._z,{data:null==r?void 0:r.data,chartType:(0,D.aG)(null==r?void 0:r.type)})},d={key:"sql",label:"SQL",children:(0,a.jsx)(L,{code:(0,V._m)(null==r?void 0:r.sql,"mysql"),language:"sql"})},u={key:"data",label:"Data",children:(0,a.jsx)(C.Z,{dataSource:null==r?void 0:r.data,columns:c})},m=(null==r?void 0:r.type)==="response_table"?[u,d]:[i,d,u];return(0,a.jsxs)("div",{children:[(0,a.jsx)(S.Z,{defaultActiveKey:(null==r?void 0:r.type)==="response_table"?"data":"chart",items:m,size:"small"}),o]})},references:function(e){let t,{title:l,references:s,children:r}=e;if(r)try{l=(t=JSON.parse(r)).title,s=t.references}catch(e){return console.log("parse references failed",e),(0,a.jsx)("p",{className:"text-sm text-red-500",children:"Render Reference Error!"})}else try{s=JSON.parse(s)}catch(e){return console.log("parse references failed",e),(0,a.jsx)("p",{className:"text-sm text-red-500",children:"Render Reference Error!"})}return!s||(null==s?void 0:s.length)<1?null:(0,a.jsxs)("div",{className:"border-t-[1px] border-gray-300 mt-3 py-2",children:[(0,a.jsxs)("p",{className:"text-sm text-gray-500 dark:text-gray-400 mb-2",children:[(0,a.jsx)(N.Z,{className:"mr-2"}),(0,a.jsx)("span",{className:"font-semibold",children:l})]}),s.map((e,t)=>{var l;return(0,a.jsxs)("div",{className:"text-sm font-normal block ml-2 h-6 leading-6 overflow-hidden",children:[(0,a.jsxs)("span",{className:"inline-block w-6",children:["[",t+1,"]"]}),(0,a.jsx)("span",{className:"mr-2 lg:mr-4 text-blue-400",children:e.name}),null==e?void 0:null===(l=e.chunks)||void 0===l?void 0:l.map((t,l)=>(0,a.jsxs)("span",{children:["object"==typeof t?(0,a.jsx)(P.Z,{content:(0,a.jsxs)("div",{className:"max-w-4xl",children:[(0,a.jsx)("p",{className:"mt-2 font-bold mr-2 border-t border-gray-500 pt-2",children:"Content:"}),(0,a.jsx)("p",{children:(null==t?void 0:t.content)||"No Content"}),(0,a.jsx)("p",{className:"mt-2 font-bold mr-2 border-t border-gray-500 pt-2",children:"MetaData:"}),(0,a.jsx)("p",{children:(null==t?void 0:t.meta_info)||"No MetaData"}),(0,a.jsx)("p",{className:"mt-2 font-bold mr-2 border-t border-gray-500 pt-2",children:"Score:"}),(0,a.jsx)("p",{children:(null==t?void 0:t.recall_score)||""})]}),title:"Chunk Information",children:(0,a.jsx)("span",{className:"cursor-pointer text-blue-500 ml-2",children:null==t?void 0:t.id},"chunk_content_".concat(null==t?void 0:t.id))}):(0,a.jsx)("span",{className:"cursor-pointer text-blue-500 ml-2",children:t},"chunk_id_".concat(t)),l<(null==e?void 0:e.chunks.length)-1&&(0,a.jsx)("span",{children:","},"chunk_comma_".concat(l))]},"chunk_".concat(l)))]},"file_".concat(t))})]})},summary:function(e){let{children:t}=e;return(0,a.jsxs)("div",{children:[(0,a.jsxs)("p",{className:"mb-2",children:[(0,a.jsx)(Z.Z,{className:"mr-2"}),(0,a.jsx)("span",{className:"font-semibold",children:"Document Summary"})]}),(0,a.jsx)("div",{children:t})]})}};var en=er;let eo={todo:{bgClass:"bg-gray-500",icon:(0,a.jsx)(i.Z,{className:"ml-2"})},runing:{bgClass:"bg-blue-500",icon:(0,a.jsx)(d.Z,{className:"ml-2"})},failed:{bgClass:"bg-red-500",icon:(0,a.jsx)(u.Z,{className:"ml-2"})},completed:{bgClass:"bg-green-500",icon:(0,a.jsx)(m.Z,{className:"ml-2"})}};function ec(e){return e.replaceAll("\\n","\n").replace(/]+)>/gi,"
").replace(/]+)>/gi,"")}var ei=(0,s.memo)(function(e){let{children:t,content:l,isChartChat:r,onLinkClick:n}=e,{scene:o}=(0,s.useContext)(w.p),{context:c,model_name:i,role:d}=l,u="view"===d,{relations:m,value:f,cachePluginContext:N}=(0,s.useMemo)(()=>{if("string"!=typeof c)return{relations:[],value:"",cachePluginContext:[]};let[e,t]=c.split(" relations:"),l=t?t.split(","):[],a=[],s=0,r=e.replace(/]*>[^<]*<\/dbgpt-view>/gi,e=>{try{var t;let l=e.replaceAll("\n","\\n").replace(/<[^>]*>|<\/[^>]*>/gm,""),r=JSON.parse(l),n="".concat(s,"");return a.push({...r,result:ec(null!==(t=r.result)&&void 0!==t?t:"")}),s++,n}catch(t){return console.log(t.message,t),e}});return{relations:l,cachePluginContext:a,value:r}},[c]),_=(0,s.useMemo)(()=>({"custom-view"(e){var t;let{children:l}=e,s=+l.toString();if(!N[s])return l;let{name:r,status:n,err_msg:o,result:c}=N[s],{bgClass:i,icon:d}=null!==(t=eo[n])&&void 0!==t?t:{};return(0,a.jsxs)("div",{className:"bg-white dark:bg-[#212121] rounded-lg overflow-hidden my-2 flex flex-col lg:max-w-[80%]",children:[(0,a.jsxs)("div",{className:j()("flex px-4 md:px-6 py-2 items-center text-white text-sm",i),children:[r,d]}),c?(0,a.jsx)("div",{className:"px-4 md:px-6 py-4 text-sm",children:(0,a.jsx)(g.D,{components:en,rehypePlugins:[v.Z],children:null!=c?c:""})}):(0,a.jsx)("div",{className:"px-4 md:px-6 py-4 text-sm",children:o})]})}}),[c,N]);return u||c?(0,a.jsxs)("div",{className:j()("relative flex flex-wrap w-full p-2 md:p-4 rounded-xl break-words",{"bg-white dark:bg-[#232734]":u,"lg:w-full xl:w-full pl-0":["chat_with_db_execute","chat_dashboard"].includes(o)}),children:[(0,a.jsx)("div",{className:"mr-2 flex flex-shrink-0 items-center justify-center h-7 w-7 rounded-full text-lg sm:mr-4",children:u?(0,y.A)(i)||(0,a.jsx)(x.Z,{}):(0,a.jsx)(h.Z,{})}),(0,a.jsxs)("div",{className:"flex-1 overflow-hidden items-center text-md leading-8 pb-2",children:[!u&&"string"==typeof c&&c,u&&r&&"object"==typeof c&&(0,a.jsxs)("div",{children:["[".concat(c.template_name,"]: "),(0,a.jsxs)("span",{className:"text-theme-primary cursor-pointer",onClick:n,children:[(0,a.jsx)(p.Z,{className:"mr-1"}),c.template_introduce||"More Details"]})]}),u&&"string"==typeof c&&(0,a.jsx)(g.D,{components:{...en,..._},rehypePlugins:[v.Z],children:ec(f)}),!!(null==m?void 0:m.length)&&(0,a.jsx)("div",{className:"flex flex-wrap mt-2",children:null==m?void 0:m.map((e,t)=>(0,a.jsx)(b.Z,{color:"#108ee9",children:e},e+t))})]}),t]}):(0,a.jsx)("div",{className:"h-12"})}),ed=l(59301),eu=l(41132),em=l(74312),ex=l(3414),eh=l(72868),ep=l(59562),eg=l(14553),ev=l(25359),ef=l(7203),ej=l(48665),eb=l(26047),ey=l(99056),ew=l(57814),eN=l(63955),e_=l(33028),eZ=l(40911),ek=l(66478),eC=l(83062),eS=l(89182),eP=e=>{var t;let{conv_index:l,question:r,knowledge_space:n,select_param:o}=e,{t:c}=(0,et.$G)(),{chatId:i}=(0,s.useContext)(w.p),[d,u]=(0,s.useState)(""),[m,x]=(0,s.useState)(4),[h,p]=(0,s.useState)(""),g=(0,s.useRef)(null),[v,f]=R.ZP.useMessage(),j=(0,s.useCallback)((e,t)=>{t?(0,eS.Vx)((0,eS.Eb)(i,l)).then(e=>{var t,l,a,s;let r=null!==(t=e[1])&&void 0!==t?t:{};u(null!==(l=r.ques_type)&&void 0!==l?l:""),x(parseInt(null!==(a=r.score)&&void 0!==a?a:"4")),p(null!==(s=r.messages)&&void 0!==s?s:"")}).catch(e=>{console.log(e)}):(u(""),x(4),p(""))},[i,l]),b=(0,em.Z)(ex.Z)(e=>{let{theme:t}=e;return{backgroundColor:"dark"===t.palette.mode?"#FBFCFD":"#0E0E10",...t.typography["body-sm"],padding:t.spacing(1),display:"flex",alignItems:"center",justifyContent:"center",borderRadius:4,width:"100%",height:"100%"}});return(0,a.jsxs)(eh.L,{onOpenChange:j,children:[f,(0,a.jsx)(eC.Z,{title:c("Rating"),children:(0,a.jsx)(ep.Z,{slots:{root:eg.ZP},slotProps:{root:{variant:"plain",color:"primary"}},sx:{borderRadius:40},children:(0,a.jsx)(ed.Z,{})})}),(0,a.jsxs)(ev.Z,{children:[(0,a.jsx)(ef.Z,{disabled:!0,sx:{minHeight:0}}),(0,a.jsx)(ej.Z,{sx:{width:"100%",maxWidth:350,display:"grid",gap:3,padding:1},children:(0,a.jsx)("form",{onSubmit:e=>{e.preventDefault();let t={conv_uid:i,conv_index:l,question:r,knowledge_space:n,score:m,ques_type:d,messages:h};console.log(t),(0,eS.Vx)((0,eS.VC)({data:t})).then(e=>{v.open({type:"success",content:"save success"})}).catch(e=>{v.open({type:"error",content:"save error"})})},children:(0,a.jsxs)(eb.Z,{container:!0,spacing:.5,columns:13,sx:{flexGrow:1},children:[(0,a.jsx)(eb.Z,{xs:3,children:(0,a.jsx)(b,{children:c("Q_A_Category")})}),(0,a.jsx)(eb.Z,{xs:10,children:(0,a.jsx)(ey.Z,{action:g,value:d,placeholder:"Choose one…",onChange:(e,t)=>u(null!=t?t:""),...d&&{endDecorator:(0,a.jsx)(eg.ZP,{size:"sm",variant:"plain",color:"neutral",onMouseDown:e=>{e.stopPropagation()},onClick:()=>{var e;u(""),null===(e=g.current)||void 0===e||e.focusVisible()},children:(0,a.jsx)(eu.Z,{})}),indicator:null},sx:{width:"100%"},children:o&&(null===(t=Object.keys(o))||void 0===t?void 0:t.map(e=>(0,a.jsx)(ew.Z,{value:e,children:o[e]},e)))})}),(0,a.jsx)(eb.Z,{xs:3,children:(0,a.jsx)(b,{children:(0,a.jsx)(eC.Z,{title:(0,a.jsx)(ej.Z,{children:(0,a.jsx)("div",{children:c("feed_back_desc")})}),variant:"solid",placement:"left",children:c("Q_A_Rating")})})}),(0,a.jsx)(eb.Z,{xs:10,sx:{pl:0,ml:0},children:(0,a.jsx)(eN.Z,{"aria-label":"Custom",step:1,min:0,max:5,valueLabelFormat:function(e){return({0:c("Lowest"),1:c("Missed"),2:c("Lost"),3:c("Incorrect"),4:c("Verbose"),5:c("Best")})[e]},valueLabelDisplay:"on",marks:[{value:0,label:"0"},{value:1,label:"1"},{value:2,label:"2"},{value:3,label:"3"},{value:4,label:"4"},{value:5,label:"5"}],sx:{width:"90%",pt:3,m:2,ml:1},onChange:e=>{var t;return x(null===(t=e.target)||void 0===t?void 0:t.value)},value:m})}),(0,a.jsx)(eb.Z,{xs:13,children:(0,a.jsx)(e_.Z,{placeholder:c("Please_input_the_text"),value:h,onChange:e=>p(e.target.value),minRows:2,maxRows:4,endDecorator:(0,a.jsx)(eZ.ZP,{level:"body-xs",sx:{ml:"auto"},children:c("input_count")+h.length+c("input_unit")}),sx:{width:"100%",fontSize:14}})}),(0,a.jsx)(eb.Z,{xs:13,children:(0,a.jsx)(ek.Z,{type:"submit",variant:"outlined",sx:{width:"100%",height:"100%"},children:c("submit")})})]})})})]})]})},eD=l(36147),eE=l(96486),eR=l(19409),eO=l(87740),eI=l(80573),eM=(0,s.memo)(function(e){let{content:t}=e,{scene:l}=(0,s.useContext)(w.p),r="view"===t.role;return(0,a.jsx)("div",{className:j()("relative w-full p-2 md:p-4 rounded-xl break-words",{"bg-white dark:bg-[#232734]":r,"lg:w-full xl:w-full pl-0":["chat_with_db_execute","chat_dashboard"].includes(l)}),children:r?(0,a.jsx)(g.D,{components:en,rehypePlugins:[v.Z],children:t.context.replace(/]+)>/gi,"
").replace(/]+)>/gi,"")}):(0,a.jsx)("div",{className:"",children:t.context})})}),eq=l(91085),eA=e=>{var t,l;let{messages:n,onSubmit:i}=e,{dbParam:d,currentDialogue:u,scene:m,model:x,refreshDialogList:h,chatId:p,agent:g,docId:v}=(0,s.useContext)(w.p),{t:f}=(0,et.$G)(),b=(0,o.useSearchParams)(),N=null!==(t=b&&b.get("select_param"))&&void 0!==t?t:"",_=null!==(l=b&&b.get("spaceNameOriginal"))&&void 0!==l?l:"",[Z,k]=(0,s.useState)(!1),[C,S]=(0,s.useState)(!1),[P,D]=(0,s.useState)(n),[E,I]=(0,s.useState)(""),[M,q]=(0,s.useState)(),A=(0,s.useRef)(null),L=(0,s.useMemo)(()=>"chat_dashboard"===m,[m]),F=(0,eI.Z)(),z=(0,s.useMemo)(()=>{switch(m){case"chat_agent":return g;case"chat_excel":return null==u?void 0:u.select_param;case"chat_flow":return N;default:return _||d}},[m,g,u,d,_,N]),T=async e=>{if(!Z&&e.trim()){if("chat_agent"===m&&!g){R.ZP.warning(f("choice_agent_tip"));return}try{k(!0),await i(e,{select_param:null!=z?z:""})}finally{k(!1)}}},G=e=>{try{return JSON.parse(e)}catch(t){return e}},[$,H]=R.ZP.useMessage(),U=async e=>{let t=null==e?void 0:e.replace(/\trelations:.*/g,""),l=J()(t);l?t?$.open({type:"success",content:f("Copy_success")}):$.open({type:"warning",content:f("Copy_nothing")}):$.open({type:"error",content:f("Copry_error")})},B=async()=>{!Z&&v&&(k(!0),await F(v),k(!1))};return(0,r.Z)(async()=>{let e=(0,V.a_)();e&&e.id===p&&(await T(e.message),h(),localStorage.removeItem(V.rU))},[p]),(0,s.useEffect)(()=>{let e=n;L&&(e=(0,eE.cloneDeep)(n).map(e=>((null==e?void 0:e.role)==="view"&&"string"==typeof(null==e?void 0:e.context)&&(e.context=G(null==e?void 0:e.context)),e))),D(e.filter(e=>["view","human"].includes(e.role)))},[L,n]),(0,s.useEffect)(()=>{(0,eS.Vx)((0,eS.Lu)()).then(e=>{var t;q(null!==(t=e[1])&&void 0!==t?t:{})}).catch(e=>{console.log(e)})},[]),(0,s.useEffect)(()=>{setTimeout(()=>{var e;null===(e=A.current)||void 0===e||e.scrollTo(0,A.current.scrollHeight)},50)},[n]),(0,a.jsxs)(a.Fragment,{children:[H,(0,a.jsx)("div",{ref:A,className:"flex flex-1 overflow-y-auto pb-8 w-full flex-col",children:(0,a.jsx)("div",{className:"flex items-center flex-1 flex-col text-sm leading-6 text-slate-900 dark:text-slate-300 sm:text-base sm:leading-7",children:P.length?P.map((e,t)=>{var l;return"chat_agent"===m?(0,a.jsx)(eM,{content:e},t):(0,a.jsx)(ei,{content:e,isChartChat:L,onLinkClick:()=>{S(!0),I(JSON.stringify(null==e?void 0:e.context,null,2))},children:"view"===e.role&&(0,a.jsxs)("div",{className:"flex w-full border-t border-gray-200 dark:border-theme-dark",children:["chat_knowledge"===m&&e.retry?(0,a.jsxs)(ek.Z,{onClick:B,slots:{root:eg.ZP},slotProps:{root:{variant:"plain",color:"primary"}},children:[(0,a.jsx)(eO.Z,{}),"\xa0",(0,a.jsx)("span",{className:"text-sm",children:f("Retry")})]}):null,(0,a.jsxs)("div",{className:"flex w-full flex-row-reverse",children:[(0,a.jsx)(eP,{select_param:M,conv_index:Math.ceil((t+1)/2),question:null===(l=null==P?void 0:P.filter(t=>(null==t?void 0:t.role)==="human"&&(null==t?void 0:t.order)===e.order)[0])||void 0===l?void 0:l.context,knowledge_space:_||d||""}),(0,a.jsx)(eC.Z,{title:f("Copy"),children:(0,a.jsx)(ek.Z,{onClick:()=>U(null==e?void 0:e.context),slots:{root:eg.ZP},slotProps:{root:{variant:"plain",color:"primary"}},sx:{borderRadius:40},children:(0,a.jsx)(O.Z,{})})})]})]})},t)}):(0,a.jsx)(eq.Z,{description:"Start a conversation"})})}),(0,a.jsx)("div",{className:j()("relative after:absolute after:-top-8 after:h-8 after:w-full after:bg-gradient-to-t after:from-theme-light after:to-transparent dark:after:from-theme-dark",{"cursor-not-allowed":"chat_excel"===m&&!(null==u?void 0:u.select_param)}),children:(0,a.jsxs)("div",{className:"flex flex-wrap w-full py-2 sm:pt-6 sm:pb-10 items-center",children:[x&&(0,a.jsx)("div",{className:"mr-2 flex",children:(0,y.A)(x)}),(0,a.jsx)(eR.Z,{loading:Z,onSubmit:T,handleFinish:k})]})}),(0,a.jsx)(eD.default,{title:"JSON Editor",open:C,width:"60%",cancelButtonProps:{hidden:!0},onOk:()=>{S(!1)},onCancel:()=>{S(!1)},children:(0,a.jsx)(c.Z,{className:"w-full h-[500px]",language:"json",value:E})})]})},eJ=l(67772),eL=l(45247),eF=()=>{var e;let t=(0,o.useSearchParams)(),{scene:l,chatId:c,model:i,agent:d,setModel:u,history:m,setHistory:x}=(0,s.useContext)(w.p),h=(0,n.Z)({}),p=null!==(e=t&&t.get("initMessage"))&&void 0!==e?e:"",[g,v]=(0,s.useState)(!1),[f,b]=(0,s.useState)(),y=async()=>{v(!0);let[,e]=await (0,eS.Vx)((0,eS.$i)(c));x(null!=e?e:[]),v(!1)},N=e=>{var t;let l=null===(t=e[e.length-1])||void 0===t?void 0:t.context;if(l)try{let e="string"==typeof l?JSON.parse(l):l;b((null==e?void 0:e.template_name)==="report"?null==e?void 0:e.charts:void 0)}catch(e){b(void 0)}};(0,r.Z)(async()=>{let e=(0,V.a_)();e&&e.id===c||await y()},[p,c]),(0,s.useEffect)(()=>{var e,t;if(!m.length)return;let l=null===(e=null===(t=m.filter(e=>"view"===e.role))||void 0===t?void 0:t.slice(-1))||void 0===e?void 0:e[0];(null==l?void 0:l.model_name)&&u(l.model_name),N(m)},[m.length]),(0,s.useEffect)(()=>()=>{x([])},[]);let _=(0,s.useCallback)((e,t)=>new Promise(a=>{let s=[...m,{role:"human",context:e,model_name:i,order:0,time_stamp:0},{role:"view",context:"",model_name:i,order:0,time_stamp:0}],r=s.length-1;x([...s]),h({data:{...t,chat_mode:l||"chat_normal",model_name:i,user_input:e},chatId:c,onMessage:e=>{(null==t?void 0:t.incremental)?s[r].context+=e:s[r].context=e,x([...s])},onDone:()=>{N(s),a()},onClose:()=>{N(s),a()},onError:e=>{s[r].context=e,x([...s]),a()}})}),[m,h,c,i,d,l]);return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(eL.Z,{visible:g}),(0,a.jsx)(eJ.Z,{refreshHistory:y,modelChange:e=>{u(e)}}),(0,a.jsxs)("div",{className:"px-4 flex flex-1 flex-wrap overflow-hidden relative",children:[!!(null==f?void 0:f.length)&&(0,a.jsx)("div",{className:"w-full pb-4 xl:w-3/4 h-1/2 xl:pr-4 xl:h-full overflow-y-auto",children:(0,a.jsx)(D.ZP,{chartsData:f})}),!(null==f?void 0:f.length)&&"chat_dashboard"===l&&(0,a.jsx)(eq.Z,{className:"w-full xl:w-3/4 h-1/2 xl:h-full"}),(0,a.jsx)("div",{className:j()("flex flex-1 flex-col overflow-hidden",{"px-0 xl:pl-4 h-1/2 w-full xl:w-auto xl:h-full border-t xl:border-t-0 xl:border-l dark:border-gray-800":"chat_dashboard"===l,"h-full lg:px-8":"chat_dashboard"!==l}),children:(0,a.jsx)(eA,{messages:m,onSubmit:_})})]})]})}},19409:function(e,t,l){l.d(t,{Z:function(){return R}});var a=l(85893),s=l(27496),r=l(79531),n=l(71577),o=l(67294),c=l(2487),i=l(83062),d=l(2453),u=l(46735),m=l(55241),x=l(39479),h=l(51009),p=l(58299),g=l(56155),v=l(30119),f=l(67421);let j=e=>{let{data:t,loading:l,submit:s,close:r}=e,{t:n}=(0,f.$G)(),o=e=>()=>{s(e),r()};return(0,a.jsx)("div",{style:{maxHeight:400,overflow:"auto"},children:(0,a.jsx)(c.Z,{dataSource:null==t?void 0:t.data,loading:l,rowKey:e=>e.prompt_name,renderItem:e=>(0,a.jsx)(c.Z.Item,{onClick:o(e.content),children:(0,a.jsx)(i.Z,{title:e.content,children:(0,a.jsx)(c.Z.Item.Meta,{style:{cursor:"copy"},title:e.prompt_name,description:n("Prompt_Info_Scene")+":".concat(e.chat_scene,",")+n("Prompt_Info_Sub_Scene")+":".concat(e.sub_chat_scene)})})},e.prompt_name)})})};var b=e=>{let{submit:t}=e,{t:l}=(0,f.$G)(),[s,r]=(0,o.useState)(!1),[n,c]=(0,o.useState)("common"),{data:b,loading:y}=(0,g.Z)(()=>(0,v.PR)("/prompt/list",{prompt_type:n}),{refreshDeps:[n],onError:e=>{d.ZP.error(null==e?void 0:e.message)}});return(0,a.jsx)(u.ZP,{theme:{components:{Popover:{minWidth:250}}},children:(0,a.jsx)(m.Z,{title:(0,a.jsx)(x.Z.Item,{label:"Prompt "+l("Type"),children:(0,a.jsx)(h.default,{style:{width:150},value:n,onChange:e=>{c(e)},options:[{label:l("Public")+" Prompts",value:"common"},{label:l("Private")+" Prompts",value:"private"}]})}),content:(0,a.jsx)(j,{data:b,loading:y,submit:t,close:()=>{r(!1)}}),placement:"topRight",trigger:"click",open:s,onOpenChange:e=>{r(e)},children:(0,a.jsx)(i.Z,{title:l("Click_Select")+" Prompt",children:(0,a.jsx)(p.Z,{className:"bottom-[30%]"})})})})},y=l(41468),w=l(89182),N=l(80573),_=l(5392),Z=l(84553);function k(e){let{dbParam:t,setDocId:l}=(0,o.useContext)(y.p),{onUploadFinish:s,handleFinish:r}=e,c=(0,N.Z)(),[i,d]=(0,o.useState)(!1),u=async e=>{d(!0);let a=new FormData;a.append("doc_name",e.file.name),a.append("doc_file",e.file),a.append("doc_type","DOCUMENT");let n=await (0,w.Vx)((0,w.iG)(t||"default",a));if(!n[1]){d(!1);return}l(n[1]),s(),d(!1),null==r||r(!0),await c(n[1]),null==r||r(!1)};return(0,a.jsx)(Z.default,{customRequest:u,showUploadList:!1,maxCount:1,multiple:!1,className:"absolute z-10 top-2 left-2",accept:".pdf,.ppt,.pptx,.xls,.xlsx,.doc,.docx,.txt,.md",children:(0,a.jsx)(n.ZP,{loading:i,size:"small",shape:"circle",icon:(0,a.jsx)(_.Z,{})})})}var C=l(11163),S=l(82353),P=l(1051);function D(e){let{document:t}=e;switch(t.status){case"RUNNING":return(0,a.jsx)(S.Rp,{});case"FINISHED":default:return(0,a.jsx)(S.s2,{});case"FAILED":return(0,a.jsx)(P.Z,{})}}function E(e){let{documents:t,dbParam:l}=e,s=(0,C.useRouter)(),r=e=>{s.push("/knowledge/chunk/?spaceName=".concat(l,"&id=").concat(e))};return(null==t?void 0:t.length)?(0,a.jsx)("div",{className:"absolute flex overflow-scroll h-12 top-[-35px] w-full z-10",children:t.map(e=>{let t;switch(e.status){case"RUNNING":t="#2db7f5";break;case"FINISHED":default:t="#87d068";break;case"FAILED":t="#f50"}return(0,a.jsx)(i.Z,{title:e.result,children:(0,a.jsxs)(n.ZP,{style:{color:t},onClick:()=>{r(e.id)},className:"shrink flex items-center mr-3",children:[(0,a.jsx)(D,{document:e}),e.doc_name]})},e.id)})}):null}var R=function(e){let{children:t,loading:l,onSubmit:c,handleFinish:i,...d}=e,{dbParam:u,scene:m}=(0,o.useContext)(y.p),[x,h]=(0,o.useState)(""),p=(0,o.useMemo)(()=>"chat_knowledge"===m,[m]),[g,v]=(0,o.useState)([]),f=(0,o.useRef)(0);async function j(){if(!u)return null;let[e,t]=await (0,w.Vx)((0,w._Q)(u,{page:1,page_size:f.current}));v(null==t?void 0:t.data)}(0,o.useEffect)(()=>{p&&j()},[u]);let N=async()=>{f.current+=1,await j()};return(0,a.jsxs)("div",{className:"flex-1 relative",children:[(0,a.jsx)(E,{documents:g,dbParam:u}),p&&(0,a.jsx)(k,{handleFinish:i,onUploadFinish:N,className:"absolute z-10 top-2 left-2"}),(0,a.jsx)(r.default.TextArea,{className:"flex-1 ".concat(p?"pl-10":""," pr-10"),size:"large",value:x,autoSize:{minRows:1,maxRows:4},...d,onPressEnter:e=>{if(x.trim()&&13===e.keyCode){if(e.shiftKey){e.preventDefault(),h(e=>e+"\n");return}c(x),setTimeout(()=>{h("")},0)}},onChange:e=>{if("number"==typeof d.maxLength){h(e.target.value.substring(0,d.maxLength));return}h(e.target.value)}}),(0,a.jsx)(n.ZP,{className:"ml-2 flex items-center justify-center absolute right-0 bottom-0",size:"large",type:"text",loading:l,icon:(0,a.jsx)(s.Z,{}),onClick:()=>{c(x)}}),(0,a.jsx)(b,{submit:e=>{h(x+e)}}),t]})}},45247:function(e,t,l){var a=l(85893),s=l(50888);t.Z=function(e){let{visible:t}=e;return t?(0,a.jsx)("div",{className:"absolute w-full h-full top-0 left-0 flex justify-center items-center z-10 bg-white dark:bg-black bg-opacity-50 dark:bg-opacity-50 backdrop-blur-sm text-3xl animate-fade animate-duration-200",children:(0,a.jsx)(s.Z,{})}):null}},43446:function(e,t,l){var a=l(1375),s=l(2453),r=l(67294),n=l(36353),o=l(41468),c=l(83454);t.Z=e=>{let{queryAgentURL:t="/api/v1/chat/completions"}=e,l=(0,r.useMemo)(()=>new AbortController,[]),{scene:i}=(0,r.useContext)(o.p),d=(0,r.useCallback)(async e=>{let{data:r,chatId:o,onMessage:d,onClose:u,onDone:m,onError:x}=e;if(!(null==r?void 0:r.user_input)&&!(null==r?void 0:r.doc_id)){s.ZP.warning(n.Z.t("no_context_tip"));return}let h={...r,conv_uid:o};if(!h.conv_uid){s.ZP.error("conv_uid 不存在,请刷新后重试");return}try{var p;await (0,a.L)("".concat(null!==(p=c.env.API_BASE_URL)&&void 0!==p?p:"").concat(t),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(h),signal:l.signal,openWhenHidden:!0,async onopen(e){if(e.ok&&e.headers.get("content-type")===a.a)return},onclose(){l.abort(),null==u||u()},onerror(e){throw Error(e)},onmessage:e=>{let t=e.data;try{t="chat_agent"===i?JSON.parse(t).vis:JSON.parse(t)}catch(e){t.replaceAll("\\n","\n")}"string"==typeof t?"[DONE]"===t?null==m||m():(null==t?void 0:t.startsWith("[ERROR]"))?null==x||x(null==t?void 0:t.replace("[ERROR]","")):null==d||d(t):(null==d||d(t),null==m||m())}})}catch(e){l.abort(),null==x||x("Sorry, We meet some error, please try agin later.",e)}},[t]);return(0,r.useEffect)(()=>()=>{l.abort()},[]),d}},80573:function(e,t,l){var a=l(41468),s=l(67294),r=l(43446),n=l(89182);t.Z=()=>{let{history:e,setHistory:t,chatId:l,model:o,docId:c}=(0,s.useContext)(a.p),i=(0,r.Z)({queryAgentURL:"/knowledge/document/summary"}),d=(0,s.useCallback)(async e=>{let[,a]=await (0,n.Vx)((0,n.$i)(l)),s=[...a,{role:"human",context:"",model_name:o,order:0,time_stamp:0},{role:"view",context:"",model_name:o,order:0,time_stamp:0,retry:!0}],r=s.length-1;t([...s]),await i({data:{doc_id:e||c,model_name:o},chatId:l,onMessage:e=>{s[r].context=e,t([...s])}})},[e,o,c,l]);return d}}}]); \ No newline at end of file diff --git a/dbgpt/app/static/_next/static/chunks/pages/_app-7876cf4a861cac03.js b/dbgpt/app/static/_next/static/chunks/pages/_app-ccb54464fb48754c.js similarity index 100% rename from dbgpt/app/static/_next/static/chunks/pages/_app-7876cf4a861cac03.js rename to dbgpt/app/static/_next/static/chunks/pages/_app-ccb54464fb48754c.js diff --git a/dbgpt/app/static/_next/static/chunks/pages/index-0b2d61c1c6358f20.js b/dbgpt/app/static/_next/static/chunks/pages/index-0b2d61c1c6358f20.js new file mode 100644 index 000000000..c72cc5925 --- /dev/null +++ b/dbgpt/app/static/_next/static/chunks/pages/index-0b2d61c1c6358f20.js @@ -0,0 +1 @@ +(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5405],{48312:function(e,t,n){(window.__NEXT_P=window.__NEXT_P||[]).push(["/",function(){return n(57464)}])},81799:function(e,t,n){"use strict";n.d(t,{A:function(){return d}});var a=n(85893),s=n(41468),l=n(51009),r=n(19284),c=n(25675),o=n.n(c),i=n(67294),u=n(67421);function d(e,t){var n;let{width:s,height:l}=t||{};return e?(0,a.jsx)(o(),{className:"rounded-full border border-gray-200 object-contain bg-white inline-block",width:s||24,height:l||24,src:(null===(n=r.H[e])||void 0===n?void 0:n.icon)||"/models/huggingface.svg",alt:"llm"}):null}t.Z=function(e){let{onChange:t}=e,{t:n}=(0,u.$G)(),{modelList:c,model:o}=(0,i.useContext)(s.p);return!c||c.length<=0?null:(0,a.jsx)(l.default,{value:o,placeholder:n("choose_model"),className:"w-52",onChange:e=>{null==t||t(e)},children:c.map(e=>{var t;return(0,a.jsx)(l.default.Option,{children:(0,a.jsxs)("div",{className:"flex items-center",children:[d(e),(0,a.jsx)("span",{className:"ml-2",children:(null===(t=r.H[e])||void 0===t?void 0:t.label)||e})]})},e)})})}},19409:function(e,t,n){"use strict";n.d(t,{Z:function(){return I}});var a=n(85893),s=n(27496),l=n(79531),r=n(71577),c=n(67294),o=n(2487),i=n(83062),u=n(2453),d=n(46735),m=n(55241),h=n(39479),p=n(51009),x=n(58299),f=n(56155),_=n(30119),v=n(67421);let j=e=>{let{data:t,loading:n,submit:s,close:l}=e,{t:r}=(0,v.$G)(),c=e=>()=>{s(e),l()};return(0,a.jsx)("div",{style:{maxHeight:400,overflow:"auto"},children:(0,a.jsx)(o.Z,{dataSource:null==t?void 0:t.data,loading:n,rowKey:e=>e.prompt_name,renderItem:e=>(0,a.jsx)(o.Z.Item,{onClick:c(e.content),children:(0,a.jsx)(i.Z,{title:e.content,children:(0,a.jsx)(o.Z.Item.Meta,{style:{cursor:"copy"},title:e.prompt_name,description:r("Prompt_Info_Scene")+":".concat(e.chat_scene,",")+r("Prompt_Info_Sub_Scene")+":".concat(e.sub_chat_scene)})})},e.prompt_name)})})};var w=e=>{let{submit:t}=e,{t:n}=(0,v.$G)(),[s,l]=(0,c.useState)(!1),[r,o]=(0,c.useState)("common"),{data:w,loading:g}=(0,f.Z)(()=>(0,_.PR)("/prompt/list",{prompt_type:r}),{refreshDeps:[r],onError:e=>{u.ZP.error(null==e?void 0:e.message)}});return(0,a.jsx)(d.ZP,{theme:{components:{Popover:{minWidth:250}}},children:(0,a.jsx)(m.Z,{title:(0,a.jsx)(h.Z.Item,{label:"Prompt "+n("Type"),children:(0,a.jsx)(p.default,{style:{width:150},value:r,onChange:e=>{o(e)},options:[{label:n("Public")+" Prompts",value:"common"},{label:n("Private")+" Prompts",value:"private"}]})}),content:(0,a.jsx)(j,{data:w,loading:g,submit:t,close:()=>{l(!1)}}),placement:"topRight",trigger:"click",open:s,onOpenChange:e=>{l(e)},children:(0,a.jsx)(i.Z,{title:n("Click_Select")+" Prompt",children:(0,a.jsx)(x.Z,{className:"bottom-[30%]"})})})})},g=n(41468),b=n(89182),N=n(80573),y=n(5392),Z=n(84553);function P(e){let{dbParam:t,setDocId:n}=(0,c.useContext)(g.p),{onUploadFinish:s,handleFinish:l}=e,o=(0,N.Z)(),[i,u]=(0,c.useState)(!1),d=async e=>{u(!0);let a=new FormData;a.append("doc_name",e.file.name),a.append("doc_file",e.file),a.append("doc_type","DOCUMENT");let r=await (0,b.Vx)((0,b.iG)(t||"default",a));if(!r[1]){u(!1);return}n(r[1]),s(),u(!1),null==l||l(!0),await o(r[1]),null==l||l(!1)};return(0,a.jsx)(Z.default,{customRequest:d,showUploadList:!1,maxCount:1,multiple:!1,className:"absolute z-10 top-2 left-2",accept:".pdf,.ppt,.pptx,.xls,.xlsx,.doc,.docx,.txt,.md",children:(0,a.jsx)(r.ZP,{loading:i,size:"small",shape:"circle",icon:(0,a.jsx)(y.Z,{})})})}var k=n(11163),C=n(82353),S=n(1051);function R(e){let{document:t}=e;switch(t.status){case"RUNNING":return(0,a.jsx)(C.Rp,{});case"FINISHED":default:return(0,a.jsx)(C.s2,{});case"FAILED":return(0,a.jsx)(S.Z,{})}}function E(e){let{documents:t,dbParam:n}=e,s=(0,k.useRouter)(),l=e=>{s.push("/knowledge/chunk/?spaceName=".concat(n,"&id=").concat(e))};return(null==t?void 0:t.length)?(0,a.jsx)("div",{className:"absolute flex overflow-scroll h-12 top-[-35px] w-full z-10",children:t.map(e=>{let t;switch(e.status){case"RUNNING":t="#2db7f5";break;case"FINISHED":default:t="#87d068";break;case"FAILED":t="#f50"}return(0,a.jsx)(i.Z,{title:e.result,children:(0,a.jsxs)(r.ZP,{style:{color:t},onClick:()=>{l(e.id)},className:"shrink flex items-center mr-3",children:[(0,a.jsx)(R,{document:e}),e.doc_name]})},e.id)})}):null}var I=function(e){let{children:t,loading:n,onSubmit:o,handleFinish:i,...u}=e,{dbParam:d,scene:m}=(0,c.useContext)(g.p),[h,p]=(0,c.useState)(""),x=(0,c.useMemo)(()=>"chat_knowledge"===m,[m]),[f,_]=(0,c.useState)([]),v=(0,c.useRef)(0);async function j(){if(!d)return null;let[e,t]=await (0,b.Vx)((0,b._Q)(d,{page:1,page_size:v.current}));_(null==t?void 0:t.data)}(0,c.useEffect)(()=>{x&&j()},[d]);let N=async()=>{v.current+=1,await j()};return(0,a.jsxs)("div",{className:"flex-1 relative",children:[(0,a.jsx)(E,{documents:f,dbParam:d}),x&&(0,a.jsx)(P,{handleFinish:i,onUploadFinish:N,className:"absolute z-10 top-2 left-2"}),(0,a.jsx)(l.default.TextArea,{className:"flex-1 ".concat(x?"pl-10":""," pr-10"),size:"large",value:h,autoSize:{minRows:1,maxRows:4},...u,onPressEnter:e=>{if(h.trim()&&13===e.keyCode){if(e.shiftKey){e.preventDefault(),p(e=>e+"\n");return}o(h),setTimeout(()=>{p("")},0)}},onChange:e=>{if("number"==typeof u.maxLength){p(e.target.value.substring(0,u.maxLength));return}p(e.target.value)}}),(0,a.jsx)(r.ZP,{className:"ml-2 flex items-center justify-center absolute right-0 bottom-0",size:"large",type:"text",loading:n,icon:(0,a.jsx)(s.Z,{}),onClick:()=>{o(h)}}),(0,a.jsx)(w,{submit:e=>{p(h+e)}}),t]})}},43446:function(e,t,n){"use strict";var a=n(1375),s=n(2453),l=n(67294),r=n(36353),c=n(41468),o=n(83454);t.Z=e=>{let{queryAgentURL:t="/api/v1/chat/completions"}=e,n=(0,l.useMemo)(()=>new AbortController,[]),{scene:i}=(0,l.useContext)(c.p),u=(0,l.useCallback)(async e=>{let{data:l,chatId:c,onMessage:u,onClose:d,onDone:m,onError:h}=e;if(!(null==l?void 0:l.user_input)&&!(null==l?void 0:l.doc_id)){s.ZP.warning(r.Z.t("no_context_tip"));return}let p={...l,conv_uid:c};if(!p.conv_uid){s.ZP.error("conv_uid 不存在,请刷新后重试");return}try{var x;await (0,a.L)("".concat(null!==(x=o.env.API_BASE_URL)&&void 0!==x?x:"").concat(t),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(p),signal:n.signal,openWhenHidden:!0,async onopen(e){if(e.ok&&e.headers.get("content-type")===a.a)return},onclose(){n.abort(),null==d||d()},onerror(e){throw Error(e)},onmessage:e=>{let t=e.data;try{t="chat_agent"===i?JSON.parse(t).vis:JSON.parse(t)}catch(e){t.replaceAll("\\n","\n")}"string"==typeof t?"[DONE]"===t?null==m||m():(null==t?void 0:t.startsWith("[ERROR]"))?null==h||h(null==t?void 0:t.replace("[ERROR]","")):null==u||u(t):(null==u||u(t),null==m||m())}})}catch(e){n.abort(),null==h||h("Sorry, We meet some error, please try agin later.",e)}},[t]);return(0,l.useEffect)(()=>()=>{n.abort()},[]),u}},80573:function(e,t,n){"use strict";var a=n(41468),s=n(67294),l=n(43446),r=n(89182);t.Z=()=>{let{history:e,setHistory:t,chatId:n,model:c,docId:o}=(0,s.useContext)(a.p),i=(0,l.Z)({queryAgentURL:"/knowledge/document/summary"}),u=(0,s.useCallback)(async e=>{let[,a]=await (0,r.Vx)((0,r.$i)(n)),s=[...a,{role:"human",context:"",model_name:c,order:0,time_stamp:0},{role:"view",context:"",model_name:c,order:0,time_stamp:0,retry:!0}],l=s.length-1;t([...s]),await i({data:{doc_id:e||o,model_name:c},chatId:n,onMessage:e=>{s[l].context=e,t([...s])}})},[e,c,o,n]);return u}},57464:function(e,t,n){"use strict";n.r(t);var a=n(85893),s=n(56155),l=n(67294),r=n(96074),c=n(75081),o=n(66309),i=n(39332),u=n(25675),d=n.n(u),m=n(89182),h=n(81799),p=n(41468),x=n(19409),f=n(67421),_=n(62418),v=n(53014),j=n(82353),w=n(94184),g=n.n(w);t.default=()=>{let e=(0,i.useRouter)(),{model:t,setModel:n}=(0,l.useContext)(p.p),{t:u}=(0,f.$G)(),[w,b]=(0,l.useState)(!1),[N,y]=(0,l.useState)(!1),{data:Z=[]}=(0,s.Z)(async()=>{y(!0);let[,e]=await (0,m.Vx)((0,m.CU)());return y(!1),null!=e?e:[]}),P=async n=>{b(!0);let[,a]=await (0,m.Vx)((0,m.sW)({chat_mode:"chat_normal"}));a&&(localStorage.setItem(_.rU,JSON.stringify({id:a.conv_uid,message:n})),e.push("/chat/?scene=chat_normal&id=".concat(a.conv_uid).concat(t?"&model=".concat(t):""))),b(!1)},k=async n=>{if(n.show_disable)return;let[,a]=await (0,m.Vx)((0,m.sW)({chat_mode:"chat_normal"}));a&&e.push("/chat?scene=".concat(n.chat_scene,"&id=").concat(a.conv_uid).concat(t?"&model=".concat(t):""))};return(0,a.jsx)("div",{className:"px-4 h-screen flex flex-col justify-center items-center overflow-hidden",children:(0,a.jsxs)("div",{className:"max-w-3xl max-h-screen overflow-y-auto",children:[(0,a.jsx)(d(),{src:"/LOGO.png",alt:"Revolutionizing Database Interactions with Private LLM Technology",width:856,height:160,className:"w-full mt-4",unoptimized:!0}),(0,a.jsx)(r.Z,{className:"!text-[#878c93] !my-6",plain:!0,children:u("Quick_Start")}),(0,a.jsx)(c.Z,{spinning:N,children:(0,a.jsx)("div",{className:"flex flex-wrap -m-1 md:-m-2",children:Z.map(e=>(0,a.jsx)("div",{className:"w-full sm:w-1/2 p-1 md:p-2",onClick:()=>{k(e)},children:(0,a.jsxs)("div",{className:g()("flex flex-row justify-center h-[102px] min-h-min bg-white dark:bg-[#232734] dark:text-white rounded p-4 cursor-pointer hover:-translate-y-1 transition-[transform_shadow] duration-300 hover:shadow-[0_14px_20px_-10px_rgba(100,100,100,.1)]",{"grayscale !cursor-no-drop":e.show_disable}),children:[function(e){switch(e){case"chat_knowledge":return(0,a.jsx)(v.Z,{className:"w-10 h-10 mr-4 p-1",component:j.je});case"chat_with_db_execute":return(0,a.jsx)(v.Z,{className:"w-10 h-10 mr-4 p-1",component:j.zM});case"chat_excel":return(0,a.jsx)(v.Z,{className:"w-10 h-10 mr-4 p-1",component:j.DL});case"chat_with_db_qa":return(0,a.jsx)(v.Z,{className:"w-10 h-10 mr-4 p-1",component:j.RD});case"chat_dashboard":return(0,a.jsx)(v.Z,{className:"w-10 h-10 mr-4 p-1",component:j.In});case"chat_agent":return(0,a.jsx)(v.Z,{className:"w-10 h-10 mr-4 p-1",component:j.si});case"dbgpt_chat":return(0,a.jsx)(v.Z,{className:"w-10 h-10 mr-4 p-1",component:j.O7});default:return null}}(e.chat_scene),(0,a.jsxs)("div",{className:"flex flex-col flex-1",children:[(0,a.jsxs)("h2",{className:"flex items-center text-lg font-sans font-semibold",children:[e.scene_name,e.show_disable&&(0,a.jsx)(o.Z,{className:"ml-2",children:"Comming soon"})]}),(0,a.jsx)("p",{className:"opacity-80 line-clamp-2",children:e.scene_describe})]})]})},e.chat_scene))})}),(0,a.jsx)("div",{className:"mt-8 mb-2",children:(0,a.jsx)(h.Z,{onChange:e=>{n(e)}})}),(0,a.jsx)("div",{className:"flex flex-1 w-full mb-4",children:(0,a.jsx)(x.Z,{loading:w,onSubmit:P})})]})})}},30119:function(e,t,n){"use strict";n.d(t,{Tk:function(){return o},PR:function(){return i}});var a=n(2453),s=n(6154),l=n(83454);let r=s.default.create({baseURL:l.env.API_BASE_URL});r.defaults.timeout=1e4,r.interceptors.response.use(e=>e.data,e=>Promise.reject(e)),n(96486);let c={"content-type":"application/json"},o=(e,t)=>{if(t){let n=Object.keys(t).filter(e=>void 0!==t[e]&&""!==t[e]).map(e=>"".concat(e,"=").concat(t[e])).join("&");n&&(e+="?".concat(n))}return r.get("/api"+e,{headers:c}).then(e=>e).catch(e=>{a.ZP.error(e),Promise.reject(e)})},i=(e,t)=>r.post(e,t,{headers:c}).then(e=>e).catch(e=>{a.ZP.error(e),Promise.reject(e)})}},function(e){e.O(0,[3662,2185,5503,1009,9479,1647,4553,411,2487,9305,1353,9774,2888,179],function(){return e(e.s=48312)}),_N_E=e.O()}]); \ No newline at end of file diff --git a/dbgpt/app/static/_next/static/chunks/pages/index-9d77aed53ca78d15.js b/dbgpt/app/static/_next/static/chunks/pages/index-9d77aed53ca78d15.js deleted file mode 100644 index 2e68bd74b..000000000 --- a/dbgpt/app/static/_next/static/chunks/pages/index-9d77aed53ca78d15.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5405],{48312:function(e,t,n){(window.__NEXT_P=window.__NEXT_P||[]).push(["/",function(){return n(57464)}])},81799:function(e,t,n){"use strict";n.d(t,{A:function(){return d}});var a=n(85893),s=n(41468),l=n(51009),r=n(19284),c=n(25675),o=n.n(c),i=n(67294),u=n(67421);function d(e,t){var n;let{width:s,height:l}=t||{};return e?(0,a.jsx)(o(),{className:"rounded-full border border-gray-200 object-contain bg-white inline-block",width:s||24,height:l||24,src:(null===(n=r.H[e])||void 0===n?void 0:n.icon)||"/models/huggingface.svg",alt:"llm"}):null}t.Z=function(e){let{onChange:t}=e,{t:n}=(0,u.$G)(),{modelList:c,model:o}=(0,i.useContext)(s.p);return!c||c.length<=0?null:(0,a.jsx)(l.default,{value:o,placeholder:n("choose_model"),className:"w-52",onChange:e=>{null==t||t(e)},children:c.map(e=>{var t;return(0,a.jsx)(l.default.Option,{children:(0,a.jsxs)("div",{className:"flex items-center",children:[d(e),(0,a.jsx)("span",{className:"ml-2",children:(null===(t=r.H[e])||void 0===t?void 0:t.label)||e})]})},e)})})}},19409:function(e,t,n){"use strict";n.d(t,{Z:function(){return I}});var a=n(85893),s=n(27496),l=n(79531),r=n(71577),c=n(67294),o=n(2487),i=n(83062),u=n(2453),d=n(46735),m=n(55241),h=n(39479),p=n(51009),x=n(58299),f=n(56155),_=n(30119),j=n(67421);let v=e=>{let{data:t,loading:n,submit:s,close:l}=e,{t:r}=(0,j.$G)(),c=e=>()=>{s(e),l()};return(0,a.jsx)("div",{style:{maxHeight:400,overflow:"auto"},children:(0,a.jsx)(o.Z,{dataSource:null==t?void 0:t.data,loading:n,rowKey:e=>e.prompt_name,renderItem:e=>(0,a.jsx)(o.Z.Item,{onClick:c(e.content),children:(0,a.jsx)(i.Z,{title:e.content,children:(0,a.jsx)(o.Z.Item.Meta,{style:{cursor:"copy"},title:e.prompt_name,description:r("Prompt_Info_Scene")+":".concat(e.chat_scene,",")+r("Prompt_Info_Sub_Scene")+":".concat(e.sub_chat_scene)})})},e.prompt_name)})})};var w=e=>{let{submit:t}=e,{t:n}=(0,j.$G)(),[s,l]=(0,c.useState)(!1),[r,o]=(0,c.useState)("common"),{data:w,loading:g}=(0,f.Z)(()=>(0,_.PR)("/prompt/list",{prompt_type:r}),{refreshDeps:[r],onError:e=>{u.ZP.error(null==e?void 0:e.message)}});return(0,a.jsx)(d.ZP,{theme:{components:{Popover:{minWidth:250}}},children:(0,a.jsx)(m.Z,{title:(0,a.jsx)(h.Z.Item,{label:"Prompt "+n("Type"),children:(0,a.jsx)(p.default,{style:{width:150},value:r,onChange:e=>{o(e)},options:[{label:n("Public")+" Prompts",value:"common"},{label:n("Private")+" Prompts",value:"private"}]})}),content:(0,a.jsx)(v,{data:w,loading:g,submit:t,close:()=>{l(!1)}}),placement:"topRight",trigger:"click",open:s,onOpenChange:e=>{l(e)},children:(0,a.jsx)(i.Z,{title:n("Click_Select")+" Prompt",children:(0,a.jsx)(x.Z,{className:"bottom-[30%]"})})})})},g=n(41468),b=n(89182),N=n(80573),y=n(5392),Z=n(84553);function P(e){let{dbParam:t,setDocId:n}=(0,c.useContext)(g.p),{onUploadFinish:s,handleFinish:l}=e,o=(0,N.Z)(),[i,u]=(0,c.useState)(!1),d=async e=>{u(!0);let a=new FormData;a.append("doc_name",e.file.name),a.append("doc_file",e.file),a.append("doc_type","DOCUMENT");let r=await (0,b.Vx)((0,b.iG)(t||"default",a));if(!r[1]){u(!1);return}n(r[1]),s(),u(!1),null==l||l(!0),await o(r[1]),null==l||l(!1)};return(0,a.jsx)(Z.default,{customRequest:d,showUploadList:!1,maxCount:1,multiple:!1,className:"absolute z-10 top-2 left-2",accept:".pdf,.ppt,.pptx,.xls,.xlsx,.doc,.docx,.txt,.md",children:(0,a.jsx)(r.ZP,{loading:i,size:"small",shape:"circle",icon:(0,a.jsx)(y.Z,{})})})}var k=n(11163),C=n(82353),S=n(1051);function R(e){let{document:t}=e;switch(t.status){case"RUNNING":return(0,a.jsx)(C.Rp,{});case"FINISHED":default:return(0,a.jsx)(C.s2,{});case"FAILED":return(0,a.jsx)(S.Z,{})}}function E(e){let{documents:t,dbParam:n}=e,s=(0,k.useRouter)(),l=e=>{s.push("/knowledge/chunk/?spaceName=".concat(n,"&id=").concat(e))};return(null==t?void 0:t.length)?(0,a.jsx)("div",{className:"absolute flex overflow-scroll h-12 top-[-35px] w-full z-10",children:t.map(e=>{let t;switch(e.status){case"RUNNING":t="#2db7f5";break;case"FINISHED":default:t="#87d068";break;case"FAILED":t="#f50"}return(0,a.jsx)(i.Z,{title:e.result,children:(0,a.jsxs)(r.ZP,{style:{color:t},onClick:()=>{l(e.id)},className:"shrink flex items-center mr-3",children:[(0,a.jsx)(R,{document:e}),e.doc_name]})},e.id)})}):null}var I=function(e){let{children:t,loading:n,onSubmit:o,handleFinish:i,...u}=e,{dbParam:d,scene:m}=(0,c.useContext)(g.p),[h,p]=(0,c.useState)(""),x=(0,c.useMemo)(()=>"chat_knowledge"===m,[m]),[f,_]=(0,c.useState)([]),j=(0,c.useRef)(0);async function v(){if(!d)return null;let[e,t]=await (0,b.Vx)((0,b._Q)(d,{page:1,page_size:j.current}));_(null==t?void 0:t.data)}(0,c.useEffect)(()=>{x&&v()},[d]);let N=async()=>{j.current+=1,await v()};return(0,a.jsxs)("div",{className:"flex-1 relative",children:[(0,a.jsx)(E,{documents:f,dbParam:d}),x&&(0,a.jsx)(P,{handleFinish:i,onUploadFinish:N,className:"absolute z-10 top-2 left-2"}),(0,a.jsx)(l.default.TextArea,{className:"flex-1 ".concat(x?"pl-10":""," pr-10"),size:"large",value:h,autoSize:{minRows:1,maxRows:4},...u,onPressEnter:e=>{if(h.trim()&&13===e.keyCode){if(e.shiftKey){p(e=>e+"\n");return}o(h),setTimeout(()=>{p("")},0)}},onChange:e=>{if("number"==typeof u.maxLength){p(e.target.value.substring(0,u.maxLength));return}p(e.target.value)}}),(0,a.jsx)(r.ZP,{className:"ml-2 flex items-center justify-center absolute right-0 bottom-0",size:"large",type:"text",loading:n,icon:(0,a.jsx)(s.Z,{}),onClick:()=>{o(h)}}),(0,a.jsx)(w,{submit:e=>{p(h+e)}}),t]})}},43446:function(e,t,n){"use strict";var a=n(1375),s=n(2453),l=n(67294),r=n(36353),c=n(41468),o=n(83454);t.Z=e=>{let{queryAgentURL:t="/api/v1/chat/completions"}=e,n=(0,l.useMemo)(()=>new AbortController,[]),{scene:i}=(0,l.useContext)(c.p),u=(0,l.useCallback)(async e=>{let{data:l,chatId:c,onMessage:u,onClose:d,onDone:m,onError:h}=e;if(!(null==l?void 0:l.user_input)&&!(null==l?void 0:l.doc_id)){s.ZP.warning(r.Z.t("no_context_tip"));return}let p={...l,conv_uid:c};if(!p.conv_uid){s.ZP.error("conv_uid 不存在,请刷新后重试");return}try{var x;await (0,a.L)("".concat(null!==(x=o.env.API_BASE_URL)&&void 0!==x?x:"").concat(t),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(p),signal:n.signal,openWhenHidden:!0,async onopen(e){if(e.ok&&e.headers.get("content-type")===a.a)return},onclose(){n.abort(),null==d||d()},onerror(e){throw Error(e)},onmessage:e=>{let t=e.data;try{t="chat_agent"===i?JSON.parse(t).vis:JSON.parse(t)}catch(e){t.replaceAll("\\n","\n")}"string"==typeof t?"[DONE]"===t?null==m||m():(null==t?void 0:t.startsWith("[ERROR]"))?null==h||h(null==t?void 0:t.replace("[ERROR]","")):null==u||u(t):(null==u||u(t),null==m||m())}})}catch(e){n.abort(),null==h||h("Sorry, We meet some error, please try agin later.",e)}},[t]);return(0,l.useEffect)(()=>()=>{n.abort()},[]),u}},80573:function(e,t,n){"use strict";var a=n(41468),s=n(67294),l=n(43446),r=n(89182);t.Z=()=>{let{history:e,setHistory:t,chatId:n,model:c,docId:o}=(0,s.useContext)(a.p),i=(0,l.Z)({queryAgentURL:"/knowledge/document/summary"}),u=(0,s.useCallback)(async e=>{let[,a]=await (0,r.Vx)((0,r.$i)(n)),s=[...a,{role:"human",context:"",model_name:c,order:0,time_stamp:0},{role:"view",context:"",model_name:c,order:0,time_stamp:0,retry:!0}],l=s.length-1;t([...s]),await i({data:{doc_id:e||o,model_name:c},chatId:n,onMessage:e=>{s[l].context=e,t([...s])}})},[e,c,o,n]);return u}},57464:function(e,t,n){"use strict";n.r(t);var a=n(85893),s=n(56155),l=n(67294),r=n(96074),c=n(75081),o=n(66309),i=n(39332),u=n(25675),d=n.n(u),m=n(89182),h=n(81799),p=n(41468),x=n(19409),f=n(67421),_=n(62418),j=n(53014),v=n(82353),w=n(94184),g=n.n(w);t.default=()=>{let e=(0,i.useRouter)(),{model:t,setModel:n}=(0,l.useContext)(p.p),{t:u}=(0,f.$G)(),[w,b]=(0,l.useState)(!1),[N,y]=(0,l.useState)(!1),{data:Z=[]}=(0,s.Z)(async()=>{y(!0);let[,e]=await (0,m.Vx)((0,m.CU)());return y(!1),null!=e?e:[]}),P=async n=>{b(!0);let[,a]=await (0,m.Vx)((0,m.sW)({chat_mode:"chat_normal"}));a&&(localStorage.setItem(_.rU,JSON.stringify({id:a.conv_uid,message:n})),e.push("/chat/?scene=chat_normal&id=".concat(a.conv_uid).concat(t?"&model=".concat(t):""))),b(!1)},k=async n=>{if(n.show_disable)return;let[,a]=await (0,m.Vx)((0,m.sW)({chat_mode:"chat_normal"}));a&&e.push("/chat?scene=".concat(n.chat_scene,"&id=").concat(a.conv_uid).concat(t?"&model=".concat(t):""))};return(0,a.jsx)("div",{className:"px-4 h-screen flex flex-col justify-center items-center overflow-hidden",children:(0,a.jsxs)("div",{className:"max-w-3xl max-h-screen overflow-y-auto",children:[(0,a.jsx)(d(),{src:"/LOGO.png",alt:"Revolutionizing Database Interactions with Private LLM Technology",width:856,height:160,className:"w-full mt-4",unoptimized:!0}),(0,a.jsx)(r.Z,{className:"!text-[#878c93] !my-6",plain:!0,children:u("Quick_Start")}),(0,a.jsx)(c.Z,{spinning:N,children:(0,a.jsx)("div",{className:"flex flex-wrap -m-1 md:-m-2",children:Z.map(e=>(0,a.jsx)("div",{className:"w-full sm:w-1/2 p-1 md:p-2",onClick:()=>{k(e)},children:(0,a.jsxs)("div",{className:g()("flex flex-row justify-center h-[102px] min-h-min bg-white dark:bg-[#232734] dark:text-white rounded p-4 cursor-pointer hover:-translate-y-1 transition-[transform_shadow] duration-300 hover:shadow-[0_14px_20px_-10px_rgba(100,100,100,.1)]",{"grayscale !cursor-no-drop":e.show_disable}),children:[function(e){switch(e){case"chat_knowledge":return(0,a.jsx)(j.Z,{className:"w-10 h-10 mr-4 p-1",component:v.je});case"chat_with_db_execute":return(0,a.jsx)(j.Z,{className:"w-10 h-10 mr-4 p-1",component:v.zM});case"chat_excel":return(0,a.jsx)(j.Z,{className:"w-10 h-10 mr-4 p-1",component:v.DL});case"chat_with_db_qa":return(0,a.jsx)(j.Z,{className:"w-10 h-10 mr-4 p-1",component:v.RD});case"chat_dashboard":return(0,a.jsx)(j.Z,{className:"w-10 h-10 mr-4 p-1",component:v.In});case"chat_agent":return(0,a.jsx)(j.Z,{className:"w-10 h-10 mr-4 p-1",component:v.si});case"dbgpt_chat":return(0,a.jsx)(j.Z,{className:"w-10 h-10 mr-4 p-1",component:v.O7});default:return null}}(e.chat_scene),(0,a.jsxs)("div",{className:"flex flex-col flex-1",children:[(0,a.jsxs)("h2",{className:"flex items-center text-lg font-sans font-semibold",children:[e.scene_name,e.show_disable&&(0,a.jsx)(o.Z,{className:"ml-2",children:"Comming soon"})]}),(0,a.jsx)("p",{className:"opacity-80 line-clamp-2",children:e.scene_describe})]})]})},e.chat_scene))})}),(0,a.jsx)("div",{className:"mt-8 mb-2",children:(0,a.jsx)(h.Z,{onChange:e=>{n(e)}})}),(0,a.jsx)("div",{className:"flex flex-1 w-full mb-4",children:(0,a.jsx)(x.Z,{loading:w,onSubmit:P})})]})})}},30119:function(e,t,n){"use strict";n.d(t,{Tk:function(){return o},PR:function(){return i}});var a=n(2453),s=n(6154),l=n(83454);let r=s.default.create({baseURL:l.env.API_BASE_URL});r.defaults.timeout=1e4,r.interceptors.response.use(e=>e.data,e=>Promise.reject(e)),n(96486);let c={"content-type":"application/json"},o=(e,t)=>{if(t){let n=Object.keys(t).filter(e=>void 0!==t[e]&&""!==t[e]).map(e=>"".concat(e,"=").concat(t[e])).join("&");n&&(e+="?".concat(n))}return r.get("/api"+e,{headers:c}).then(e=>e).catch(e=>{a.ZP.error(e),Promise.reject(e)})},i=(e,t)=>r.post(e,t,{headers:c}).then(e=>e).catch(e=>{a.ZP.error(e),Promise.reject(e)})}},function(e){e.O(0,[3662,2185,5503,1009,9479,1647,4553,411,2487,9305,1353,9774,2888,179],function(){return e(e.s=48312)}),_N_E=e.O()}]); \ No newline at end of file diff --git a/dbgpt/app/static/_next/static/chunks/pages/knowledge-223d50e9531bd961.js b/dbgpt/app/static/_next/static/chunks/pages/knowledge-223d50e9531bd961.js new file mode 100644 index 000000000..8a24e3280 --- /dev/null +++ b/dbgpt/app/static/_next/static/chunks/pages/knowledge-223d50e9531bd961.js @@ -0,0 +1 @@ +(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8662],{54681:function(e,t,a){(window.__NEXT_P=window.__NEXT_P||[]).push(["/knowledge",function(){return a(18671)}])},26892:function(e,t,a){"use strict";var l=a(85893),s=a(67294),n=a(66309),r=a(83062),i=a(94184),c=a.n(i),o=a(25675),d=a.n(o);t.Z=(0,s.memo)(function(e){let{icon:t,iconBorder:a=!0,title:i,desc:o,tags:m,children:u,disabled:x,operations:h,className:p,..._}=e,j=(0,s.useMemo)(()=>t?"string"==typeof t?(0,l.jsx)(d(),{className:c()("w-11 h-11 rounded-full mr-4 object-contain bg-white",{"border border-gray-200":a}),width:48,height:48,src:t,alt:i}):t:null,[t]),f=(0,s.useMemo)(()=>m&&m.length?(0,l.jsx)("div",{className:"flex items-center mt-1 flex-wrap",children:m.map((e,t)=>{var a;return"string"==typeof e?(0,l.jsx)(n.Z,{className:"text-xs",bordered:!1,color:"default",children:e},t):(0,l.jsx)(n.Z,{className:"text-xs",bordered:null!==(a=e.border)&&void 0!==a&&a,color:e.color,children:e.text},t)})}):null,[m]);return(0,l.jsxs)("div",{className:c()("group/card relative flex flex-col w-72 rounded justify-between text-black bg-white shadow-[0_8px_16px_-10px_rgba(100,100,100,.08)] hover:shadow-[0_14px_20px_-10px_rgba(100,100,100,.15)] dark:bg-[#232734] dark:text-white dark:hover:border-white transition-[transfrom_shadow] duration-300 hover:-translate-y-1 min-h-fit",{"grayscale cursor-no-drop":x,"cursor-pointer":!x&&!!_.onClick},p),..._,children:[(0,l.jsxs)("div",{className:"p-4",children:[(0,l.jsxs)("div",{className:"flex items-center",children:[j,(0,l.jsxs)("div",{className:"flex flex-col",children:[(0,l.jsx)("h2",{className:"text-sm font-semibold",children:i}),f]})]}),o&&(0,l.jsx)(r.Z,{title:o,children:(0,l.jsx)("p",{className:"mt-2 text-sm text-gray-500 font-normal line-clamp-2",children:o})})]}),(0,l.jsxs)("div",{children:[u,h&&!!h.length&&(0,l.jsx)("div",{className:"flex flex-wrap items-center justify-center border-t border-solid border-gray-100 dark:border-theme-dark",children:h.map((e,t)=>(0,l.jsx)(r.Z,{title:e.label,children:(0,l.jsxs)("div",{className:"relative flex flex-1 items-center justify-center h-11 text-gray-400 hover:text-blue-500 transition-colors duration-300 cursor-pointer",onClick:t=>{var a;t.stopPropagation(),null===(a=e.onClick)||void 0===a||a.call(e)},children:[e.children,t{let[e,a]=await (0,C.Vx)((0,C.Tu)(t.name));d(a)};(0,n.useEffect)(()=>{x()},[t.name]);let h=[{key:"Embedding",label:(0,s.jsxs)("div",{children:[(0,s.jsx)(G.Z,{}),r("Embedding")]}),children:(0,s.jsxs)(F.Z,{gutter:24,children:[(0,s.jsx)(A.Z,{span:12,offset:0,children:(0,s.jsx)(U.Z.Item,{tooltip:r("the_top_k_vectors"),rules:[{required:!0}],label:r("topk"),name:["embedding","topk"],children:(0,s.jsx)(D.default,{className:"mb-5 h-12"})})}),(0,s.jsx)(A.Z,{span:12,children:(0,s.jsx)(U.Z.Item,{tooltip:r("Set_a_threshold_score"),rules:[{required:!0}],label:r("recall_score"),name:["embedding","recall_score"],children:(0,s.jsx)(D.default,{className:"mb-5 h-12",placeholder:r("Please_input_the_owner")})})}),(0,s.jsx)(A.Z,{span:12,children:(0,s.jsx)(U.Z.Item,{tooltip:r("recall_type"),rules:[{required:!0}],label:r("recall_type"),name:["embedding","recall_type"],children:(0,s.jsx)(D.default,{className:"mb-5 h-12"})})}),(0,s.jsx)(A.Z,{span:12,children:(0,s.jsx)(U.Z.Item,{tooltip:r("A_model_used"),rules:[{required:!0}],label:r("model"),name:["embedding","model"],children:(0,s.jsx)(D.default,{className:"mb-5 h-12"})})}),(0,s.jsx)(A.Z,{span:12,children:(0,s.jsx)(U.Z.Item,{tooltip:r("The_size_of_the_data_chunks"),rules:[{required:!0}],label:r("chunk_size"),name:["embedding","chunk_size"],children:(0,s.jsx)(D.default,{className:"mb-5 h-12"})})}),(0,s.jsx)(A.Z,{span:12,children:(0,s.jsx)(U.Z.Item,{tooltip:r("The_amount_of_overlap"),rules:[{required:!0}],label:r("chunk_overlap"),name:["embedding","chunk_overlap"],children:(0,s.jsx)(D.default,{className:"mb-5 h-12",placeholder:r("Please_input_the_description")})})})]})},{key:"Prompt",label:(0,s.jsxs)("div",{children:[(0,s.jsx)(q.Z,{}),r("Prompt")]}),children:(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(U.Z.Item,{tooltip:r("A_contextual_parameter"),label:r("scene"),name:["prompt","scene"],children:(0,s.jsx)(M,{rows:4,className:"mb-2"})}),(0,s.jsx)(U.Z.Item,{tooltip:r("structure_or_format"),label:r("template"),name:["prompt","template"],children:(0,s.jsx)(M,{rows:7,className:"mb-2"})}),(0,s.jsx)(U.Z.Item,{tooltip:r("The_maximum_number_of_tokens"),label:r("max_token"),name:["prompt","max_token"],children:(0,s.jsx)(D.default,{className:"mb-2"})})]})},{key:"Summary",label:(0,s.jsxs)("div",{children:[(0,s.jsx)(z.Z,{}),r("Summary")]}),children:(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(U.Z.Item,{rules:[{required:!0}],label:r("max_iteration"),name:["summary","max_iteration"],children:(0,s.jsx)(D.default,{className:"mb-2"})}),(0,s.jsx)(U.Z.Item,{rules:[{required:!0}],label:r("concurrency_limit"),name:["summary","concurrency_limit"],children:(0,s.jsx)(D.default,{className:"mb-2"})})]})}],p=async e=>{u(!0);let[a,s,n]=await (0,C.Vx)((0,C.iH)(t.name,{argument:JSON.stringify(e)}));u(!1),(null==n?void 0:n.success)&&l(!1)};return(0,s.jsx)(c.default,{width:850,open:a,onCancel:()=>{l(!1)},footer:null,children:(0,s.jsx)(w.Z,{spinning:m,children:(0,s.jsxs)(U.Z,{size:"large",className:"mt-4",layout:"vertical",name:"basic",initialValues:{...o},autoComplete:"off",onFinish:p,children:[(0,s.jsx)(V.Z,{items:h}),(0,s.jsxs)("div",{className:"mt-3 mb-3",children:[(0,s.jsx)(i.ZP,{htmlType:"submit",type:"primary",className:"mr-6",children:r("Submit")}),(0,s.jsx)(i.ZP,{onClick:()=>{l(!1)},children:r("close")})]})]})})})}var L=a(47207);let{confirm:H}=c.default;function K(e){let{space:t}=e,{t:a}=(0,O.$G)(),l=(0,x.useRouter)(),[c,o]=(0,n.useState)(!1),[d,m]=(0,n.useState)([]),[u,p]=(0,n.useState)(!1),[_,j]=(0,n.useState)(0),I=(0,n.useRef)(1),D=(0,n.useMemo)(()=>d.length<_,[d.length,_]),F=e=>{H({title:a("Tips"),icon:(0,s.jsx)(h.Z,{}),content:"".concat(a("Del_Document_Tips"),"?"),okText:"Yes",okType:"danger",cancelText:"No",async onOk(){await G(e)}})};async function A(){o(!0);let[e,a]=await (0,C.Vx)((0,C._Q)(t.name,{page:I.current,page_size:18}));m(null==a?void 0:a.data),j((null==a?void 0:a.total)||0),o(!1)}let U=async()=>{if(!D)return;o(!0),I.current+=1;let[e,a]=await (0,C.Vx)((0,C._Q)(t.name,{page:I.current,page_size:18}));m([...d,...a.data]),o(!1)},V=async(e,t)=>{await (0,C.Vx)((0,C.Hx)(e,{doc_ids:[t]}))},G=async a=>{await (0,C.Vx)((0,C.n3)(t.name,{doc_name:a.doc_name})),A(),e.onDeleteDoc()},q=()=>{e.onAddDoc(t.name)},z=(e,t)=>{let a;switch(e){case"TODO":a="gold";break;case"RUNNING":a="#2db7f5";break;case"FINISHED":a="cyan";break;default:a="red"}return(0,s.jsx)(g.Z,{title:t,children:(0,s.jsx)(b.Z,{color:a,children:e})})};return(0,n.useEffect)(()=>{A()},[t]),(0,s.jsxs)("div",{className:"collapse-container pt-2 px-4",children:[(0,s.jsxs)(v.Z,{children:[(0,s.jsx)(i.ZP,{size:"middle",type:"primary",className:"flex items-center",icon:(0,s.jsx)(r.Z,{}),onClick:q,children:a("Add_Datasource")}),(0,s.jsx)(i.ZP,{size:"middle",className:"flex items-center mx-2",icon:(0,s.jsx)(P.Z,{}),onClick:()=>{p(!0)},children:"Arguments"}),"KnowledgeGraph"===t.vector_type&&(0,s.jsx)(i.ZP,{size:"middle",className:"flex items-center mx-2",icon:(0,s.jsx)(S.Z,{}),onClick:()=>{l.push("/knowledge/graph/?spaceName=".concat(t.name))},children:a("View_Graph")})]}),(0,s.jsx)(y.Z,{}),(0,s.jsx)(w.Z,{spinning:c,children:(null==d?void 0:d.length)>0?(0,s.jsxs)("div",{className:"max-h-96 overflow-auto max-w-3/4",children:[(0,s.jsx)("div",{className:"mt-3 grid grid-cols-1 gap-x-6 gap-y-5 sm:grid-cols-2 lg:grid-cols-3 xl:gap-x-5",children:d.map(e=>(0,s.jsxs)(N.Z,{className:" dark:bg-[#484848] relative shrink-0 grow-0 cursor-pointer rounded-[10px] border border-gray-200 border-solid w-full",title:(0,s.jsx)(g.Z,{title:e.doc_name,children:(0,s.jsxs)("div",{className:"truncate ",children:[(0,s.jsx)(L.Z,{type:e.doc_type}),(0,s.jsx)("span",{children:e.doc_name})]})}),extra:(0,s.jsxs)("div",{className:"mx-3",children:[(0,s.jsx)(g.Z,{title:"detail",children:(0,s.jsx)(k.Z,{className:"mr-2 !text-lg",style:{color:"#1b7eff",fontSize:"20px"},onClick:()=>{l.push("/knowledge/chunk/?spaceName=".concat(t.name,"&id=").concat(e.id))}})}),(0,s.jsx)(g.Z,{title:"Sync",children:(0,s.jsx)(T.Z,{className:"mr-2 !text-lg",style:{color:"#1b7eff",fontSize:"20px"},onClick:()=>{V(t.name,e.id)}})}),(0,s.jsx)(g.Z,{title:"Delete",children:(0,s.jsx)(f.Z,{className:"text-[#ff1b2e] !text-lg",onClick:()=>{F(e)}})})]}),children:[(0,s.jsxs)("p",{className:"mt-2 font-semibold ",children:[a("Size"),":"]}),(0,s.jsxs)("p",{children:[e.chunk_size," chunks"]}),(0,s.jsxs)("p",{className:"mt-2 font-semibold ",children:[a("Last_Sync"),":"]}),(0,s.jsx)("p",{children:E()(e.last_sync).format("YYYY-MM-DD HH:MM:SS")}),(0,s.jsx)("p",{className:"mt-2 mb-2",children:z(e.status,e.result)})]},e.id))}),D&&(0,s.jsx)(y.Z,{children:(0,s.jsx)("span",{className:"cursor-pointer",onClick:U,children:a("Load_more")})})]}):(0,s.jsx)(Z.Z,{image:Z.Z.PRESENTED_IMAGE_DEFAULT,children:(0,s.jsx)(i.ZP,{type:"primary",className:"flex items-center mx-auto",icon:(0,s.jsx)(r.Z,{}),onClick:q,children:"Create Now"})})}),(0,s.jsx)(R,{space:t,argumentsShow:u,setArgumentsShow:p})]})}var Y=a(26892);let{confirm:X}=c.default;function $(e){let t=(0,x.useRouter)(),{t:a}=(0,O.$G)(),{space:l,getSpaces:n}=e,r=()=>{X({title:a("Tips"),icon:(0,s.jsx)(h.Z,{}),content:"".concat(a("Del_Knowledge_Tips"),"?"),okText:"Yes",okType:"danger",cancelText:"No",async onOk(){await (0,C.Vx)((0,C.XK)({name:null==l?void 0:l.name})),n()}})},i=async()=>{let[e,a]=await (0,C.Vx)((0,C.sW)({chat_mode:"chat_knowledge"}));(null==a?void 0:a.conv_uid)&&t.push("/chat?scene=chat_knowledge&id=".concat(null==a?void 0:a.conv_uid,"&db_param=").concat(l.name))};return(0,s.jsx)(d.ZP,{theme:{components:{Popover:{zIndexPopup:90}}},children:(0,s.jsx)(m.Z,{className:"cursor-pointer",placement:"bottom",trigger:"click",content:(0,s.jsx)(K,{space:l,onAddDoc:e.onAddDoc,onDeleteDoc:function(){n()}}),children:(0,s.jsx)(u.Z,{className:"mb-4 min-w-[200px] sm:w-60 lg:w-72",count:l.docs||0,children:(0,s.jsx)(Y.Z,{title:l.name,desc:l.desc,icon:"KnowledgeGraph"===l.vector_type?"/models/knowledge-graph.png":"FullText"===l.vector_type?"/models/knowledge-full-text.jpg":"/models/knowledge-default.jpg",iconBorder:!1,tags:[{text:(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(p.Z,{className:"mr-1"}),null==l?void 0:l.owner]})},{text:(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(_.Z,{className:"mr-1"}),E()(l.gmt_modified).format("YYYY-MM-DD")]})}],operations:[{label:a("Chat"),children:(0,s.jsx)(j.Z,{}),onClick:i},{label:a("Delete"),children:(0,s.jsx)(f.Z,{}),onClick:()=>{r()}}]})})})})}var W=a(84553),B=a(2453),Q=a(64082),J=a(94184),ee=a.n(J);let{Dragger:et}=W.default,{TextArea:ea}=D.default;function el(e){let{className:t,handleStepChange:a,spaceName:l,docType:r}=e,{t:c}=(0,O.$G)(),[o]=U.Z.useForm(),[d,m]=(0,n.useState)(!1),[u,x]=(0,n.useState)([]),h=async e=>{let t;let{docName:s,textSource:n,text:i,webPageUrl:c}=e;switch(m(!0),r){case"URL":[,t]=await (0,C.Vx)((0,C.H_)(l,{doc_name:s,content:c,doc_type:"URL"}));break;case"TEXT":[,t]=await (0,C.Vx)((0,C.H_)(l,{doc_name:s,source:n,content:i,doc_type:"TEXT"}))}return(m(!1),"DOCUMENT"===r&&u.length<1)?B.ZP.error("Upload failed, please re-upload."):"DOCUMENT"===r||t?void a({label:"forward",files:"DOCUMENT"===r?u:[{name:s,doc_id:t||-1}]}):B.ZP.error("Upload failed, please re-upload.")},p=e=>{let{file:t,fileList:a}=e;0===a.length&&o.setFieldValue("originFileObj",null)},_=async e=>{let{onSuccess:t,onError:a,file:s}=e,n=new FormData,r=null==s?void 0:s.name;n.append("doc_name",r),n.append("doc_file",s),n.append("doc_type","DOCUMENT");let[,i]=await (0,C.Vx)((0,C.iG)(l,n));Number.isInteger(i)?(t&&t(i||0),x(e=>(e.push({name:r,doc_id:i||-1}),e))):a&&a({name:"",message:""})},j=()=>(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(U.Z.Item,{label:"".concat(c("Name"),":"),name:"docName",rules:[{required:!0,message:c("Please_input_the_name")}],children:(0,s.jsx)(D.default,{className:"mb-5 h-12",placeholder:c("Please_input_the_name")})}),(0,s.jsx)(U.Z.Item,{label:"".concat(c("Text_Source"),":"),name:"textSource",rules:[{required:!0,message:c("Please_input_the_text_source")}],children:(0,s.jsx)(D.default,{className:"mb-5 h-12",placeholder:c("Please_input_the_text_source")})}),(0,s.jsx)(U.Z.Item,{label:"".concat(c("Text"),":"),name:"text",rules:[{required:!0,message:c("Please_input_the_description")}],children:(0,s.jsx)(ea,{rows:4})})]}),f=()=>(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(U.Z.Item,{label:"".concat(c("Name"),":"),name:"docName",rules:[{required:!0,message:c("Please_input_the_name")}],children:(0,s.jsx)(D.default,{className:"mb-5 h-12",placeholder:c("Please_input_the_name")})}),(0,s.jsx)(U.Z.Item,{label:"".concat(c("Web_Page_URL"),":"),name:"webPageUrl",rules:[{required:!0,message:c("Please_input_the_Web_Page_URL")}],children:(0,s.jsx)(D.default,{className:"mb-5 h-12",placeholder:c("Please_input_the_Web_Page_URL")})})]}),g=()=>(0,s.jsx)(s.Fragment,{children:(0,s.jsx)(U.Z.Item,{name:"originFileObj",rules:[{required:!0,message:c("Please_select_file")}],children:(0,s.jsxs)(et,{multiple:!0,onChange:p,maxCount:10,accept:".pdf,.ppt,.pptx,.xls,.xlsx,.doc,.docx,.txt,.md",customRequest:_,children:[(0,s.jsx)("p",{className:"ant-upload-drag-icon",children:(0,s.jsx)(Q.Z,{})}),(0,s.jsx)("p",{style:{color:"rgb(22, 108, 255)",fontSize:"20px"},children:c("Select_or_Drop_file")}),(0,s.jsx)("p",{className:"ant-upload-hint",style:{color:"rgb(22, 108, 255)"},children:"PDF, PowerPoint, Excel, Word, Text, Markdown,"})]})})});return(0,s.jsx)(w.Z,{spinning:d,children:(0,s.jsxs)(U.Z,{form:o,size:"large",className:ee()("mt-4",t),layout:"vertical",name:"basic",initialValues:{remember:!0},autoComplete:"off",onFinish:h,children:[(()=>{switch(r){case"URL":return f();case"DOCUMENT":return g();default:return j()}})(),(0,s.jsxs)(U.Z.Item,{children:[(0,s.jsx)(i.ZP,{onClick:()=>{a({label:"back"})},className:"mr-4",children:"".concat(c("Back"))}),(0,s.jsx)(i.ZP,{type:"primary",loading:d,htmlType:"submit",children:c("Next")})]})]})})}var es=a(51009);function en(e){let{t}=(0,O.$G)(),{handleStepChange:a}=e,[l,r]=(0,n.useState)(!1),c=async e=>{let{spaceName:t,owner:l,description:s,storage:n}=e;r(!0);let[i,c,o]=await (0,C.Vx)((0,C.be)({name:t,vector_type:n,owner:l,desc:s}));r(!1),(null==o?void 0:o.success)&&a({label:"forward",spaceName:t})};return(0,s.jsx)(w.Z,{spinning:l,children:(0,s.jsxs)(U.Z,{size:"large",className:"mt-4",layout:"vertical",name:"basic",initialValues:{remember:!0},autoComplete:"off",onFinish:c,children:[(0,s.jsx)(U.Z.Item,{label:t("Knowledge_Space_Name"),name:"spaceName",rules:[{required:!0,message:t("Please_input_the_name")},()=>({validator:(e,a)=>/[^\u4e00-\u9fa50-9a-zA-Z_-]/.test(a)?Promise.reject(Error(t("the_name_can_only_contain"))):Promise.resolve()})],children:(0,s.jsx)(D.default,{className:"mb-5 h-12",placeholder:t("Please_input_the_name")})}),(0,s.jsx)(U.Z.Item,{label:t("Owner"),name:"owner",rules:[{required:!0,message:t("Please_input_the_owner")}],children:(0,s.jsx)(D.default,{className:"mb-5 h-12",placeholder:t("Please_input_the_owner")})}),(0,s.jsx)(U.Z.Item,{label:t("Storage"),name:"storage",rules:[{required:!0,message:t("Please_select_the_storage")}],children:(0,s.jsxs)(es.default,{className:"mb-5 h-12",placeholder:t("Please_select_the_storage"),children:[(0,s.jsx)(es.default.Option,{value:"VectorStore",children:"Vector Store"}),(0,s.jsx)(es.default.Option,{value:"KnowledgeGraph",children:"Knowledge Graph"}),(0,s.jsx)(es.default.Option,{value:"FullText",children:"Full Text"})]})}),(0,s.jsx)(U.Z.Item,{label:t("Description"),name:"description",rules:[{required:!0,message:t("Please_input_the_description")}],children:(0,s.jsx)(D.default,{className:"mb-5 h-12",placeholder:t("Please_input_the_description")})}),(0,s.jsx)(U.Z.Item,{children:(0,s.jsx)(i.ZP,{type:"primary",htmlType:"submit",children:t("Next")})})]})})}function er(e){let{t}=(0,O.$G)(),{handleStepChange:a}=e,l=[{type:"TEXT",title:t("Text"),subTitle:t("Fill your raw text"),iconType:"TEXT"},{type:"URL",title:t("URL"),subTitle:t("Fetch_the_content_of_a_URL"),iconType:"WEBPAGE"},{type:"DOCUMENT",title:t("Document"),subTitle:t("Upload_a_document"),iconType:"DOCUMENT"}];return(0,s.jsx)(s.Fragment,{children:l.map((e,t)=>(0,s.jsxs)(N.Z,{className:"mt-4 mb-4 cursor-pointer",onClick:()=>{a({label:"forward",docType:e.type})},children:[(0,s.jsxs)("div",{className:"font-semibold",children:[(0,s.jsx)(L.Z,{type:e.iconType}),e.title]}),(0,s.jsx)("div",{children:e.subTitle})]},t))})}var ei=a(38925),ec=a(47221),eo=a(16165),ed=a(48928),em=a(84567),eu=a(78045);let{TextArea:ex}=D.default;function eh(e){let{strategies:t,docType:a,fileName:l,field:r}=e,[i,c]=(0,n.useState)(),o="";if("DOCUMENT"===a){let e=l.split(".");o=e[e.length-1]}let d=o?t.filter(e=>e.suffix.indexOf(o)>-1):t,{t:m}=(0,O.$G)(),u={strategy:"Automatic",name:m("Automatic"),desc:m("Automatic_desc")};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(U.Z.Item,{name:[r.name,"chunk_parameters","chunk_strategy"],initialValue:u.strategy,children:(0,s.jsxs)(eu.ZP.Group,{style:{marginTop:16},onChange:function(e){c(e.target.value)},children:[(0,s.jsx)(eu.ZP,{value:u.strategy,children:u.name}),d.map(e=>(0,s.jsx)(eu.ZP,{value:e.strategy,children:e.name},"strategy_radio_".concat(e.strategy)))]})}),function(){if(!i)return null;if(i===u.strategy)return(0,s.jsx)("p",{className:"my-4",children:u.desc});let e=null==d?void 0:d.filter(e=>e.strategy===i)[0].parameters;return e&&e.length?(0,s.jsx)("div",{className:"mt-2",children:null==e?void 0:e.map(e=>(0,s.jsx)(U.Z.Item,{label:e.param_name,name:[r.name,"chunk_parameters",e.param_name],rules:[{required:!0,message:m("Please_input_the_name")}],initialValue:e.default_value,valuePropName:"boolean"===e.param_type?"checked":"value",tooltip:e.description,children:function(e){switch(e){case"int":return(0,s.jsx)(ed.Z,{className:"w-full",min:1});case"string":return(0,s.jsx)(ex,{className:"w-full",rows:2});case"boolean":return(0,s.jsx)(em.Z,{})}}(e.param_type)},"param_".concat(e.param_name)))}):(0,s.jsx)(ei.Z,{className:"my-2",type:"warning",message:m("No_parameter")})}()]})}var ep=a(82353);function e_(e){let{spaceName:t,docType:a,uploadFiles:r,handleStepChange:c}=e,{t:o}=(0,O.$G)(),[d]=U.Z.useForm(),[m,u]=(0,n.useState)(r),[x,h]=(0,n.useState)(),[p,_]=(0,n.useState)([]),[j,f]=(0,n.useState)("");async function g(){var e;h(!0);let[,t]=await (0,C.Vx)((0,C.iZ)());h(!1),_(null===(e=t||[])||void 0===e?void 0:e.filter(e=>e.type.indexOf(a)>-1))}(0,n.useEffect)(()=>(g(),()=>{l&&clearInterval(l)}),[]);let b=async e=>{if(function(e){let t=!0;"RUNNING"===j&&(t=!1,B.ZP.warning("The task is still running, do not submit it again."));let{fileStrategies:a}=e;return a.map(e=>{var t,a;let l=null==e?void 0:null===(t=e.chunk_parameters)||void 0===t?void 0:t.chunk_strategy;l||(e.chunk_parameters={chunk_strategy:"Automatic"});let s=p.filter(e=>e.strategy===l)[0],n={chunk_strategy:null==e?void 0:null===(a=e.chunk_parameters)||void 0===a?void 0:a.chunk_strategy};s&&s.parameters&&s.parameters.forEach(t=>{let a=t.param_name;n[a]=(null==e?void 0:e.chunk_parameters)[a]}),e.chunk_parameters=n}),t}(e)){var a;h(!0);let[,s]=await (0,C.Vx)((0,C.KL)(t,e.fileStrategies));if(h(!1),(null==s?void 0:s.tasks)&&(null==s?void 0:null===(a=s.tasks)||void 0===a?void 0:a.length)>0){B.ZP.success("Segemation task start successfully. task id: ".concat(null==s?void 0:s.tasks.join(","))),f("RUNNING");let t=e.fileStrategies.map(e=>e.doc_id);l=setInterval(async()=>{let e=await N(t);"FINISHED"===e&&(clearInterval(l),f("FINISHED"),B.ZP.success("Congratulation, All files sync successfully."),c({label:"finish"}))},3e3)}}};async function N(e){let[,a]=await (0,C.Vx)((0,C._Q)(t,{doc_ids:e}));if((null==a?void 0:a.data)&&(null==a?void 0:a.data.length)>0){let e=[...m];if(null==a||a.data.map(t=>{var a;let l=null===(a=null==e?void 0:e.filter(e=>e.doc_id===t.id))||void 0===a?void 0:a[0];l&&(l.status=t.status)}),u(e),null==a?void 0:a.data.every(e=>"FINISHED"===e.status||"FAILED"===e.status))return"FINISHED"}}return(0,s.jsx)(w.Z,{spinning:x,children:(0,s.jsxs)(U.Z,{labelCol:{span:6},wrapperCol:{span:18},labelAlign:"right",form:d,size:"large",className:"mt-4",layout:"horizontal",name:"basic",autoComplete:"off",initialValues:{fileStrategies:m},onFinish:b,children:[p&&p.length?(0,s.jsx)(U.Z.List,{name:"fileStrategies",children:e=>{switch(a){case"TEXT":case"URL":return null==e?void 0:e.map(e=>(0,s.jsx)(eh,{strategies:p,docType:a,fileName:m[e.name].name,field:e}));case"DOCUMENT":return(0,s.jsx)(ec.Z,{defaultActiveKey:0,size:m.length>5?"small":"middle",children:null==e?void 0:e.map(e=>(0,s.jsx)(ec.Z.Panel,{header:"".concat(e.name+1,". ").concat(m[e.name].name),extra:function(e){let t=m[e].status;switch(t){case"FINISHED":return(0,s.jsx)(eo.Z,{component:ep.qw});case"RUNNING":return(0,s.jsx)(eo.Z,{className:"animate-spin animate-infinite",component:ep.bn});case"FAILED":return(0,s.jsx)(eo.Z,{component:ep.FE});default:return(0,s.jsx)(eo.Z,{component:ep.tu})}}(e.name),children:(0,s.jsx)(eh,{strategies:p,docType:a,fileName:m[e.name].name,field:e})},e.key))})}}}):(0,s.jsx)(ei.Z,{message:"Cannot find one strategy for ".concat(a," type knowledge."),type:"warning"}),(0,s.jsxs)(U.Z.Item,{className:"mt-4",children:[(0,s.jsx)(i.ZP,{onClick:()=>{c({label:"back"})},className:"mr-4",children:"".concat(o("Back"))}),(0,s.jsx)(i.ZP,{type:"primary",htmlType:"submit",loading:x||"RUNNING"===j,children:o("Process")})]})]})})}var ej=()=>{let[e,t]=(0,n.useState)([]),[a,l]=(0,n.useState)(!1),[d,m]=(0,n.useState)(0),[u,x]=(0,n.useState)(""),[h,p]=(0,n.useState)([]),[_,j]=(0,n.useState)(""),{t:f}=(0,O.$G)(),g=[{title:f("Knowledge_Space_Config")},{title:f("Choose_a_Datasource_type")},{title:f("Upload")},{title:f("Segmentation")}];async function b(){let[e,a]=await (0,C.Vx)((0,C.Vm)());t(a)}(0,n.useEffect)(()=>{b()},[]);let N=e=>{let{label:t,spaceName:a,docType:s,files:n}=e;"finish"===t?(l(!1),b(),x(""),j(""),b()):"forward"===t?(0===d&&b(),m(e=>e+1)):m(e=>e-1),n&&p(n),a&&x(a),s&&j(s)};function y(e){x(e),m(1),l(!0)}return(0,s.jsxs)("div",{className:"bg-[#FAFAFA] dark:bg-transparent w-full h-full",children:[(0,s.jsxs)("div",{className:"page-body p-4 md:p-6 h-full overflow-auto",children:[(0,s.jsx)(i.ZP,{type:"primary",className:"flex items-center",icon:(0,s.jsx)(r.Z,{}),onClick:()=>{l(!0)},children:"Create"}),(0,s.jsx)("div",{className:"flex flex-wrap mt-4 gap-2 md:gap-4",children:null==e?void 0:e.map(e=>(0,s.jsx)($,{space:e,onAddDoc:y,getSpaces:b},e.id))})]}),(0,s.jsxs)(c.default,{title:"Add Knowledge",centered:!0,open:a,destroyOnClose:!0,onCancel:()=>{l(!1)},width:1e3,afterClose:()=>{m(0),b()},footer:null,children:[(0,s.jsx)(o.Z,{current:d,items:g}),0===d&&(0,s.jsx)(en,{handleStepChange:N}),1===d&&(0,s.jsx)(er,{handleStepChange:N}),(0,s.jsx)(el,{className:ee()({hidden:2!==d}),spaceName:u,docType:_,handleStepChange:N}),3===d&&(0,s.jsx)(e_,{spaceName:u,docType:_,uploadFiles:h,handleStepChange:N})]})]})}}},function(e){e.O(0,[4885,2185,5503,1009,9479,785,4553,5813,411,8928,5733,2282,5237,9774,2888,179],function(){return e(e.s=54681)}),_N_E=e.O()}]); \ No newline at end of file diff --git a/dbgpt/app/static/_next/static/chunks/pages/knowledge-244aee7ebbad3668.js b/dbgpt/app/static/_next/static/chunks/pages/knowledge-244aee7ebbad3668.js deleted file mode 100644 index 84ad3d362..000000000 --- a/dbgpt/app/static/_next/static/chunks/pages/knowledge-244aee7ebbad3668.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8662],{54681:function(e,t,a){(window.__NEXT_P=window.__NEXT_P||[]).push(["/knowledge",function(){return a(18671)}])},26892:function(e,t,a){"use strict";var l=a(85893),s=a(67294),n=a(66309),r=a(83062),i=a(94184),c=a.n(i),o=a(25675),d=a.n(o);t.Z=(0,s.memo)(function(e){let{icon:t,iconBorder:a=!0,title:i,desc:o,tags:m,children:u,disabled:x,operations:h,className:p,..._}=e,j=(0,s.useMemo)(()=>t?"string"==typeof t?(0,l.jsx)(d(),{className:c()("w-11 h-11 rounded-full mr-4 object-contain bg-white",{"border border-gray-200":a}),width:48,height:48,src:t,alt:i}):t:null,[t]),f=(0,s.useMemo)(()=>m&&m.length?(0,l.jsx)("div",{className:"flex items-center mt-1 flex-wrap",children:m.map((e,t)=>{var a;return"string"==typeof e?(0,l.jsx)(n.Z,{className:"text-xs",bordered:!1,color:"default",children:e},t):(0,l.jsx)(n.Z,{className:"text-xs",bordered:null!==(a=e.border)&&void 0!==a&&a,color:e.color,children:e.text},t)})}):null,[m]);return(0,l.jsxs)("div",{className:c()("group/card relative flex flex-col w-72 rounded justify-between text-black bg-white shadow-[0_8px_16px_-10px_rgba(100,100,100,.08)] hover:shadow-[0_14px_20px_-10px_rgba(100,100,100,.15)] dark:bg-[#232734] dark:text-white dark:hover:border-white transition-[transfrom_shadow] duration-300 hover:-translate-y-1 min-h-fit",{"grayscale cursor-no-drop":x,"cursor-pointer":!x&&!!_.onClick},p),..._,children:[(0,l.jsxs)("div",{className:"p-4",children:[(0,l.jsxs)("div",{className:"flex items-center",children:[j,(0,l.jsxs)("div",{className:"flex flex-col",children:[(0,l.jsx)("h2",{className:"text-sm font-semibold",children:i}),f]})]}),o&&(0,l.jsx)(r.Z,{title:o,children:(0,l.jsx)("p",{className:"mt-2 text-sm text-gray-500 font-normal line-clamp-2",children:o})})]}),(0,l.jsxs)("div",{children:[u,h&&!!h.length&&(0,l.jsx)("div",{className:"flex flex-wrap items-center justify-center border-t border-solid border-gray-100 dark:border-theme-dark",children:h.map((e,t)=>(0,l.jsx)(r.Z,{title:e.label,children:(0,l.jsxs)("div",{className:"relative flex flex-1 items-center justify-center h-11 text-gray-400 hover:text-blue-500 transition-colors duration-300 cursor-pointer",onClick:t=>{var a;t.stopPropagation(),null===(a=e.onClick)||void 0===a||a.call(e)},children:[e.children,t{let[e,a]=await (0,C.Vx)((0,C.Tu)(t.name));d(a)};(0,n.useEffect)(()=>{x()},[t.name]);let h=[{key:"Embedding",label:(0,s.jsxs)("div",{children:[(0,s.jsx)(G.Z,{}),r("Embedding")]}),children:(0,s.jsxs)(F.Z,{gutter:24,children:[(0,s.jsx)(A.Z,{span:12,offset:0,children:(0,s.jsx)(U.Z.Item,{tooltip:r("the_top_k_vectors"),rules:[{required:!0}],label:r("topk"),name:["embedding","topk"],children:(0,s.jsx)(D.default,{className:"mb-5 h-12"})})}),(0,s.jsx)(A.Z,{span:12,children:(0,s.jsx)(U.Z.Item,{tooltip:r("Set_a_threshold_score"),rules:[{required:!0}],label:r("recall_score"),name:["embedding","recall_score"],children:(0,s.jsx)(D.default,{className:"mb-5 h-12",placeholder:r("Please_input_the_owner")})})}),(0,s.jsx)(A.Z,{span:12,children:(0,s.jsx)(U.Z.Item,{tooltip:r("recall_type"),rules:[{required:!0}],label:r("recall_type"),name:["embedding","recall_type"],children:(0,s.jsx)(D.default,{className:"mb-5 h-12"})})}),(0,s.jsx)(A.Z,{span:12,children:(0,s.jsx)(U.Z.Item,{tooltip:r("A_model_used"),rules:[{required:!0}],label:r("model"),name:["embedding","model"],children:(0,s.jsx)(D.default,{className:"mb-5 h-12"})})}),(0,s.jsx)(A.Z,{span:12,children:(0,s.jsx)(U.Z.Item,{tooltip:r("The_size_of_the_data_chunks"),rules:[{required:!0}],label:r("chunk_size"),name:["embedding","chunk_size"],children:(0,s.jsx)(D.default,{className:"mb-5 h-12"})})}),(0,s.jsx)(A.Z,{span:12,children:(0,s.jsx)(U.Z.Item,{tooltip:r("The_amount_of_overlap"),rules:[{required:!0}],label:r("chunk_overlap"),name:["embedding","chunk_overlap"],children:(0,s.jsx)(D.default,{className:"mb-5 h-12",placeholder:r("Please_input_the_description")})})})]})},{key:"Prompt",label:(0,s.jsxs)("div",{children:[(0,s.jsx)(q.Z,{}),r("Prompt")]}),children:(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(U.Z.Item,{tooltip:r("A_contextual_parameter"),label:r("scene"),name:["prompt","scene"],children:(0,s.jsx)(M,{rows:4,className:"mb-2"})}),(0,s.jsx)(U.Z.Item,{tooltip:r("structure_or_format"),label:r("template"),name:["prompt","template"],children:(0,s.jsx)(M,{rows:7,className:"mb-2"})}),(0,s.jsx)(U.Z.Item,{tooltip:r("The_maximum_number_of_tokens"),label:r("max_token"),name:["prompt","max_token"],children:(0,s.jsx)(D.default,{className:"mb-2"})})]})},{key:"Summary",label:(0,s.jsxs)("div",{children:[(0,s.jsx)(z.Z,{}),r("Summary")]}),children:(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(U.Z.Item,{rules:[{required:!0}],label:r("max_iteration"),name:["summary","max_iteration"],children:(0,s.jsx)(D.default,{className:"mb-2"})}),(0,s.jsx)(U.Z.Item,{rules:[{required:!0}],label:r("concurrency_limit"),name:["summary","concurrency_limit"],children:(0,s.jsx)(D.default,{className:"mb-2"})})]})}],p=async e=>{u(!0);let[a,s,n]=await (0,C.Vx)((0,C.iH)(t.name,{argument:JSON.stringify(e)}));u(!1),(null==n?void 0:n.success)&&l(!1)};return(0,s.jsx)(c.default,{width:850,open:a,onCancel:()=>{l(!1)},footer:null,children:(0,s.jsx)(w.Z,{spinning:m,children:(0,s.jsxs)(U.Z,{size:"large",className:"mt-4",layout:"vertical",name:"basic",initialValues:{...o},autoComplete:"off",onFinish:p,children:[(0,s.jsx)(V.Z,{items:h}),(0,s.jsxs)("div",{className:"mt-3 mb-3",children:[(0,s.jsx)(i.ZP,{htmlType:"submit",type:"primary",className:"mr-6",children:r("Submit")}),(0,s.jsx)(i.ZP,{onClick:()=>{l(!1)},children:r("close")})]})]})})})}var L=a(47207);let{confirm:H}=c.default;function K(e){let{space:t}=e,{t:a}=(0,O.$G)(),l=(0,x.useRouter)(),[c,o]=(0,n.useState)(!1),[d,m]=(0,n.useState)([]),[u,p]=(0,n.useState)(!1),[_,j]=(0,n.useState)(0),I=(0,n.useRef)(1),D=(0,n.useMemo)(()=>d.length<_,[d.length,_]),F=e=>{H({title:a("Tips"),icon:(0,s.jsx)(h.Z,{}),content:"".concat(a("Del_Document_Tips"),"?"),okText:"Yes",okType:"danger",cancelText:"No",async onOk(){await G(e)}})};async function A(){o(!0);let[e,a]=await (0,C.Vx)((0,C._Q)(t.name,{page:I.current,page_size:18}));m(null==a?void 0:a.data),j((null==a?void 0:a.total)||0),o(!1)}let U=async()=>{if(!D)return;o(!0),I.current+=1;let[e,a]=await (0,C.Vx)((0,C._Q)(t.name,{page:I.current,page_size:18}));m([...d,...a.data]),o(!1)},V=async(e,t)=>{await (0,C.Vx)((0,C.Hx)(e,{doc_ids:[t]}))},G=async a=>{await (0,C.Vx)((0,C.n3)(t.name,{doc_name:a.doc_name})),A(),e.onDeleteDoc()},q=()=>{e.onAddDoc(t.name)},z=(e,t)=>{let a;switch(e){case"TODO":a="gold";break;case"RUNNING":a="#2db7f5";break;case"FINISHED":a="cyan";break;default:a="red"}return(0,s.jsx)(g.Z,{title:t,children:(0,s.jsx)(b.Z,{color:a,children:e})})};return(0,n.useEffect)(()=>{A()},[t]),(0,s.jsxs)("div",{className:"collapse-container pt-2 px-4",children:[(0,s.jsxs)(v.Z,{children:[(0,s.jsx)(i.ZP,{size:"middle",type:"primary",className:"flex items-center",icon:(0,s.jsx)(r.Z,{}),onClick:q,children:a("Add_Datasource")}),(0,s.jsx)(i.ZP,{size:"middle",className:"flex items-center mx-2",icon:(0,s.jsx)(P.Z,{}),onClick:()=>{p(!0)},children:"Arguments"}),"KnowledgeGraph"===t.vector_type&&(0,s.jsx)(i.ZP,{size:"middle",className:"flex items-center mx-2",icon:(0,s.jsx)(S.Z,{}),onClick:()=>{l.push("/knowledge/graph/?spaceName=".concat(t.name))},children:a("View_Graph")})]}),(0,s.jsx)(y.Z,{}),(0,s.jsx)(w.Z,{spinning:c,children:(null==d?void 0:d.length)>0?(0,s.jsxs)("div",{className:"max-h-96 overflow-auto max-w-3/4",children:[(0,s.jsx)("div",{className:"mt-3 grid grid-cols-1 gap-x-6 gap-y-5 sm:grid-cols-2 lg:grid-cols-3 xl:gap-x-5",children:d.map(e=>(0,s.jsxs)(N.Z,{className:" dark:bg-[#484848] relative shrink-0 grow-0 cursor-pointer rounded-[10px] border border-gray-200 border-solid w-full",title:(0,s.jsx)(g.Z,{title:e.doc_name,children:(0,s.jsxs)("div",{className:"truncate ",children:[(0,s.jsx)(L.Z,{type:e.doc_type}),(0,s.jsx)("span",{children:e.doc_name})]})}),extra:(0,s.jsxs)("div",{className:"mx-3",children:[(0,s.jsx)(g.Z,{title:"detail",children:(0,s.jsx)(k.Z,{className:"mr-2 !text-lg",style:{color:"#1b7eff",fontSize:"20px"},onClick:()=>{l.push("/knowledge/chunk/?spaceName=".concat(t.name,"&id=").concat(e.id))}})}),(0,s.jsx)(g.Z,{title:"Sync",children:(0,s.jsx)(T.Z,{className:"mr-2 !text-lg",style:{color:"#1b7eff",fontSize:"20px"},onClick:()=>{V(t.name,e.id)}})}),(0,s.jsx)(g.Z,{title:"Delete",children:(0,s.jsx)(f.Z,{className:"text-[#ff1b2e] !text-lg",onClick:()=>{F(e)}})})]}),children:[(0,s.jsxs)("p",{className:"mt-2 font-semibold ",children:[a("Size"),":"]}),(0,s.jsxs)("p",{children:[e.chunk_size," chunks"]}),(0,s.jsxs)("p",{className:"mt-2 font-semibold ",children:[a("Last_Sync"),":"]}),(0,s.jsx)("p",{children:E()(e.last_sync).format("YYYY-MM-DD HH:MM:SS")}),(0,s.jsx)("p",{className:"mt-2 mb-2",children:z(e.status,e.result)})]},e.id))}),D&&(0,s.jsx)(y.Z,{children:(0,s.jsx)("span",{className:"cursor-pointer",onClick:U,children:a("Load_more")})})]}):(0,s.jsx)(Z.Z,{image:Z.Z.PRESENTED_IMAGE_DEFAULT,children:(0,s.jsx)(i.ZP,{type:"primary",className:"flex items-center mx-auto",icon:(0,s.jsx)(r.Z,{}),onClick:q,children:"Create Now"})})}),(0,s.jsx)(R,{space:t,argumentsShow:u,setArgumentsShow:p})]})}var Y=a(26892);let{confirm:X}=c.default;function $(e){let t=(0,x.useRouter)(),{t:a}=(0,O.$G)(),{space:l,getSpaces:n}=e,r=()=>{X({title:a("Tips"),icon:(0,s.jsx)(h.Z,{}),content:"".concat(a("Del_Knowledge_Tips"),"?"),okText:"Yes",okType:"danger",cancelText:"No",async onOk(){await (0,C.Vx)((0,C.XK)({name:null==l?void 0:l.name})),n()}})},i=async()=>{let[e,a]=await (0,C.Vx)((0,C.sW)({chat_mode:"chat_knowledge"}));(null==a?void 0:a.conv_uid)&&t.push("/chat?scene=chat_knowledge&id=".concat(null==a?void 0:a.conv_uid,"&db_param=").concat(l.name))};return(0,s.jsx)(d.ZP,{theme:{components:{Popover:{zIndexPopup:90}}},children:(0,s.jsx)(m.Z,{className:"cursor-pointer",placement:"bottom",trigger:"click",content:(0,s.jsx)(K,{space:l,onAddDoc:e.onAddDoc,onDeleteDoc:function(){n()}}),children:(0,s.jsx)(u.Z,{className:"mb-4 min-w-[200px] sm:w-60 lg:w-72",count:l.docs||0,children:(0,s.jsx)(Y.Z,{title:l.name,desc:l.desc,icon:"KnowledgeGraph"===l.vector_type?"/models/knowledge-graph.png":"/models/knowledge-default.jpg",iconBorder:!1,tags:[{text:(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(p.Z,{className:"mr-1"}),null==l?void 0:l.owner]})},{text:(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(_.Z,{className:"mr-1"}),E()(l.gmt_modified).format("YYYY-MM-DD")]})}],operations:[{label:a("Chat"),children:(0,s.jsx)(j.Z,{}),onClick:i},{label:a("Delete"),children:(0,s.jsx)(f.Z,{}),onClick:()=>{r()}}]})})})})}var W=a(84553),B=a(2453),Q=a(64082),J=a(94184),ee=a.n(J);let{Dragger:et}=W.default,{TextArea:ea}=D.default;function el(e){let{className:t,handleStepChange:a,spaceName:l,docType:r}=e,{t:c}=(0,O.$G)(),[o]=U.Z.useForm(),[d,m]=(0,n.useState)(!1),[u,x]=(0,n.useState)([]),h=async e=>{let t;let{docName:s,textSource:n,text:i,webPageUrl:c}=e;switch(m(!0),r){case"URL":[,t]=await (0,C.Vx)((0,C.H_)(l,{doc_name:s,content:c,doc_type:"URL"}));break;case"TEXT":[,t]=await (0,C.Vx)((0,C.H_)(l,{doc_name:s,source:n,content:i,doc_type:"TEXT"}))}return(m(!1),"DOCUMENT"===r&&u.length<1)?B.ZP.error("Upload failed, please re-upload."):"DOCUMENT"===r||t?void a({label:"forward",files:"DOCUMENT"===r?u:[{name:s,doc_id:t||-1}]}):B.ZP.error("Upload failed, please re-upload.")},p=e=>{let{file:t,fileList:a}=e;0===a.length&&o.setFieldValue("originFileObj",null)},_=async e=>{let{onSuccess:t,onError:a,file:s}=e,n=new FormData,r=null==s?void 0:s.name;n.append("doc_name",r),n.append("doc_file",s),n.append("doc_type","DOCUMENT");let[,i]=await (0,C.Vx)((0,C.iG)(l,n));Number.isInteger(i)?(t&&t(i||0),x(e=>(e.push({name:r,doc_id:i||-1}),e))):a&&a({name:"",message:""})},j=()=>(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(U.Z.Item,{label:"".concat(c("Name"),":"),name:"docName",rules:[{required:!0,message:c("Please_input_the_name")}],children:(0,s.jsx)(D.default,{className:"mb-5 h-12",placeholder:c("Please_input_the_name")})}),(0,s.jsx)(U.Z.Item,{label:"".concat(c("Text_Source"),":"),name:"textSource",rules:[{required:!0,message:c("Please_input_the_text_source")}],children:(0,s.jsx)(D.default,{className:"mb-5 h-12",placeholder:c("Please_input_the_text_source")})}),(0,s.jsx)(U.Z.Item,{label:"".concat(c("Text"),":"),name:"text",rules:[{required:!0,message:c("Please_input_the_description")}],children:(0,s.jsx)(ea,{rows:4})})]}),f=()=>(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(U.Z.Item,{label:"".concat(c("Name"),":"),name:"docName",rules:[{required:!0,message:c("Please_input_the_name")}],children:(0,s.jsx)(D.default,{className:"mb-5 h-12",placeholder:c("Please_input_the_name")})}),(0,s.jsx)(U.Z.Item,{label:"".concat(c("Web_Page_URL"),":"),name:"webPageUrl",rules:[{required:!0,message:c("Please_input_the_Web_Page_URL")}],children:(0,s.jsx)(D.default,{className:"mb-5 h-12",placeholder:c("Please_input_the_Web_Page_URL")})})]}),g=()=>(0,s.jsx)(s.Fragment,{children:(0,s.jsx)(U.Z.Item,{name:"originFileObj",rules:[{required:!0,message:c("Please_select_file")}],children:(0,s.jsxs)(et,{multiple:!0,onChange:p,maxCount:10,accept:".pdf,.ppt,.pptx,.xls,.xlsx,.doc,.docx,.txt,.md",customRequest:_,children:[(0,s.jsx)("p",{className:"ant-upload-drag-icon",children:(0,s.jsx)(Q.Z,{})}),(0,s.jsx)("p",{style:{color:"rgb(22, 108, 255)",fontSize:"20px"},children:c("Select_or_Drop_file")}),(0,s.jsx)("p",{className:"ant-upload-hint",style:{color:"rgb(22, 108, 255)"},children:"PDF, PowerPoint, Excel, Word, Text, Markdown,"})]})})});return(0,s.jsx)(w.Z,{spinning:d,children:(0,s.jsxs)(U.Z,{form:o,size:"large",className:ee()("mt-4",t),layout:"vertical",name:"basic",initialValues:{remember:!0},autoComplete:"off",onFinish:h,children:[(()=>{switch(r){case"URL":return f();case"DOCUMENT":return g();default:return j()}})(),(0,s.jsxs)(U.Z.Item,{children:[(0,s.jsx)(i.ZP,{onClick:()=>{a({label:"back"})},className:"mr-4",children:"".concat(c("Back"))}),(0,s.jsx)(i.ZP,{type:"primary",loading:d,htmlType:"submit",children:c("Next")})]})]})})}var es=a(51009);function en(e){let{t}=(0,O.$G)(),{handleStepChange:a}=e,[l,r]=(0,n.useState)(!1),c=async e=>{let{spaceName:t,owner:l,description:s,storage:n}=e;r(!0);let[i,c,o]=await (0,C.Vx)((0,C.be)({name:t,vector_type:n,owner:l,desc:s}));r(!1),(null==o?void 0:o.success)&&a({label:"forward",spaceName:t})};return(0,s.jsx)(w.Z,{spinning:l,children:(0,s.jsxs)(U.Z,{size:"large",className:"mt-4",layout:"vertical",name:"basic",initialValues:{remember:!0},autoComplete:"off",onFinish:c,children:[(0,s.jsx)(U.Z.Item,{label:t("Knowledge_Space_Name"),name:"spaceName",rules:[{required:!0,message:t("Please_input_the_name")},()=>({validator:(e,a)=>/[^\u4e00-\u9fa50-9a-zA-Z_-]/.test(a)?Promise.reject(Error(t("the_name_can_only_contain"))):Promise.resolve()})],children:(0,s.jsx)(D.default,{className:"mb-5 h-12",placeholder:t("Please_input_the_name")})}),(0,s.jsx)(U.Z.Item,{label:t("Owner"),name:"owner",rules:[{required:!0,message:t("Please_input_the_owner")}],children:(0,s.jsx)(D.default,{className:"mb-5 h-12",placeholder:t("Please_input_the_owner")})}),(0,s.jsx)(U.Z.Item,{label:t("Storage"),name:"storage",rules:[{required:!0,message:t("Please_select_the_storage")}],children:(0,s.jsxs)(es.default,{className:"mb-5 h-12",placeholder:t("Please_select_the_storage"),children:[(0,s.jsx)(es.default.Option,{value:"VectorStore",children:"Vector Store"}),(0,s.jsx)(es.default.Option,{value:"KnowledgeGraph",children:"Knowledge Graph"})]})}),(0,s.jsx)(U.Z.Item,{label:t("Description"),name:"description",rules:[{required:!0,message:t("Please_input_the_description")}],children:(0,s.jsx)(D.default,{className:"mb-5 h-12",placeholder:t("Please_input_the_description")})}),(0,s.jsx)(U.Z.Item,{children:(0,s.jsx)(i.ZP,{type:"primary",htmlType:"submit",children:t("Next")})})]})})}function er(e){let{t}=(0,O.$G)(),{handleStepChange:a}=e,l=[{type:"TEXT",title:t("Text"),subTitle:t("Fill your raw text"),iconType:"TEXT"},{type:"URL",title:t("URL"),subTitle:t("Fetch_the_content_of_a_URL"),iconType:"WEBPAGE"},{type:"DOCUMENT",title:t("Document"),subTitle:t("Upload_a_document"),iconType:"DOCUMENT"}];return(0,s.jsx)(s.Fragment,{children:l.map((e,t)=>(0,s.jsxs)(N.Z,{className:"mt-4 mb-4 cursor-pointer",onClick:()=>{a({label:"forward",docType:e.type})},children:[(0,s.jsxs)("div",{className:"font-semibold",children:[(0,s.jsx)(L.Z,{type:e.iconType}),e.title]}),(0,s.jsx)("div",{children:e.subTitle})]},t))})}var ei=a(38925),ec=a(47221),eo=a(16165),ed=a(48928),em=a(84567),eu=a(78045);let{TextArea:ex}=D.default;function eh(e){let{strategies:t,docType:a,fileName:l,field:r}=e,[i,c]=(0,n.useState)(),o="";if("DOCUMENT"===a){let e=l.split(".");o=e[e.length-1]}let d=o?t.filter(e=>e.suffix.indexOf(o)>-1):t,{t:m}=(0,O.$G)(),u={strategy:"Automatic",name:m("Automatic"),desc:m("Automatic_desc")};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(U.Z.Item,{name:[r.name,"chunk_parameters","chunk_strategy"],initialValue:u.strategy,children:(0,s.jsxs)(eu.ZP.Group,{style:{marginTop:16},onChange:function(e){c(e.target.value)},children:[(0,s.jsx)(eu.ZP,{value:u.strategy,children:u.name}),d.map(e=>(0,s.jsx)(eu.ZP,{value:e.strategy,children:e.name},"strategy_radio_".concat(e.strategy)))]})}),function(){if(!i)return null;if(i===u.strategy)return(0,s.jsx)("p",{className:"my-4",children:u.desc});let e=null==d?void 0:d.filter(e=>e.strategy===i)[0].parameters;return e&&e.length?(0,s.jsx)("div",{className:"mt-2",children:null==e?void 0:e.map(e=>(0,s.jsx)(U.Z.Item,{label:e.param_name,name:[r.name,"chunk_parameters",e.param_name],rules:[{required:!0,message:m("Please_input_the_name")}],initialValue:e.default_value,valuePropName:"boolean"===e.param_type?"checked":"value",tooltip:e.description,children:function(e){switch(e){case"int":return(0,s.jsx)(ed.Z,{className:"w-full",min:1});case"string":return(0,s.jsx)(ex,{className:"w-full",rows:2});case"boolean":return(0,s.jsx)(em.Z,{})}}(e.param_type)},"param_".concat(e.param_name)))}):(0,s.jsx)(ei.Z,{className:"my-2",type:"warning",message:m("No_parameter")})}()]})}var ep=a(82353);function e_(e){let{spaceName:t,docType:a,uploadFiles:r,handleStepChange:c}=e,{t:o}=(0,O.$G)(),[d]=U.Z.useForm(),[m,u]=(0,n.useState)(r),[x,h]=(0,n.useState)(),[p,_]=(0,n.useState)([]),[j,f]=(0,n.useState)("");async function g(){var e;h(!0);let[,t]=await (0,C.Vx)((0,C.iZ)());h(!1),_(null===(e=t||[])||void 0===e?void 0:e.filter(e=>e.type.indexOf(a)>-1))}(0,n.useEffect)(()=>(g(),()=>{l&&clearInterval(l)}),[]);let b=async e=>{if(function(e){let t=!0;"RUNNING"===j&&(t=!1,B.ZP.warning("The task is still running, do not submit it again."));let{fileStrategies:a}=e;return a.map(e=>{var t,a;let l=null==e?void 0:null===(t=e.chunk_parameters)||void 0===t?void 0:t.chunk_strategy;l||(e.chunk_parameters={chunk_strategy:"Automatic"});let s=p.filter(e=>e.strategy===l)[0],n={chunk_strategy:null==e?void 0:null===(a=e.chunk_parameters)||void 0===a?void 0:a.chunk_strategy};s&&s.parameters&&s.parameters.forEach(t=>{let a=t.param_name;n[a]=(null==e?void 0:e.chunk_parameters)[a]}),e.chunk_parameters=n}),t}(e)){var a;h(!0);let[,s]=await (0,C.Vx)((0,C.KL)(t,e.fileStrategies));if(h(!1),(null==s?void 0:s.tasks)&&(null==s?void 0:null===(a=s.tasks)||void 0===a?void 0:a.length)>0){B.ZP.success("Segemation task start successfully. task id: ".concat(null==s?void 0:s.tasks.join(","))),f("RUNNING");let t=e.fileStrategies.map(e=>e.doc_id);l=setInterval(async()=>{let e=await N(t);"FINISHED"===e&&(clearInterval(l),f("FINISHED"),B.ZP.success("Congratulation, All files sync successfully."),c({label:"finish"}))},3e3)}}};async function N(e){let[,a]=await (0,C.Vx)((0,C._Q)(t,{doc_ids:e}));if((null==a?void 0:a.data)&&(null==a?void 0:a.data.length)>0){let e=[...m];if(null==a||a.data.map(t=>{var a;let l=null===(a=null==e?void 0:e.filter(e=>e.doc_id===t.id))||void 0===a?void 0:a[0];l&&(l.status=t.status)}),u(e),null==a?void 0:a.data.every(e=>"FINISHED"===e.status||"FAILED"===e.status))return"FINISHED"}}return(0,s.jsx)(w.Z,{spinning:x,children:(0,s.jsxs)(U.Z,{labelCol:{span:6},wrapperCol:{span:18},labelAlign:"right",form:d,size:"large",className:"mt-4",layout:"horizontal",name:"basic",autoComplete:"off",initialValues:{fileStrategies:m},onFinish:b,children:[p&&p.length?(0,s.jsx)(U.Z.List,{name:"fileStrategies",children:e=>{switch(a){case"TEXT":case"URL":return null==e?void 0:e.map(e=>(0,s.jsx)(eh,{strategies:p,docType:a,fileName:m[e.name].name,field:e}));case"DOCUMENT":return(0,s.jsx)(ec.Z,{defaultActiveKey:0,size:m.length>5?"small":"middle",children:null==e?void 0:e.map(e=>(0,s.jsx)(ec.Z.Panel,{header:"".concat(e.name+1,". ").concat(m[e.name].name),extra:function(e){let t=m[e].status;switch(t){case"FINISHED":return(0,s.jsx)(eo.Z,{component:ep.qw});case"RUNNING":return(0,s.jsx)(eo.Z,{className:"animate-spin animate-infinite",component:ep.bn});case"FAILED":return(0,s.jsx)(eo.Z,{component:ep.FE});default:return(0,s.jsx)(eo.Z,{component:ep.tu})}}(e.name),children:(0,s.jsx)(eh,{strategies:p,docType:a,fileName:m[e.name].name,field:e})},e.key))})}}}):(0,s.jsx)(ei.Z,{message:"Cannot find one strategy for ".concat(a," type knowledge."),type:"warning"}),(0,s.jsxs)(U.Z.Item,{className:"mt-4",children:[(0,s.jsx)(i.ZP,{onClick:()=>{c({label:"back"})},className:"mr-4",children:"".concat(o("Back"))}),(0,s.jsx)(i.ZP,{type:"primary",htmlType:"submit",loading:x||"RUNNING"===j,children:o("Process")})]})]})})}var ej=()=>{let[e,t]=(0,n.useState)([]),[a,l]=(0,n.useState)(!1),[d,m]=(0,n.useState)(0),[u,x]=(0,n.useState)(""),[h,p]=(0,n.useState)([]),[_,j]=(0,n.useState)(""),{t:f}=(0,O.$G)(),g=[{title:f("Knowledge_Space_Config")},{title:f("Choose_a_Datasource_type")},{title:f("Upload")},{title:f("Segmentation")}];async function b(){let[e,a]=await (0,C.Vx)((0,C.Vm)());t(a)}(0,n.useEffect)(()=>{b()},[]);let N=e=>{let{label:t,spaceName:a,docType:s,files:n}=e;"finish"===t?(l(!1),b(),x(""),j(""),b()):"forward"===t?(0===d&&b(),m(e=>e+1)):m(e=>e-1),n&&p(n),a&&x(a),s&&j(s)};function y(e){x(e),m(1),l(!0)}return(0,s.jsxs)("div",{className:"bg-[#FAFAFA] dark:bg-transparent w-full h-full",children:[(0,s.jsxs)("div",{className:"page-body p-4 md:p-6 h-full overflow-auto",children:[(0,s.jsx)(i.ZP,{type:"primary",className:"flex items-center",icon:(0,s.jsx)(r.Z,{}),onClick:()=>{l(!0)},children:"Create"}),(0,s.jsx)("div",{className:"flex flex-wrap mt-4 gap-2 md:gap-4",children:null==e?void 0:e.map(e=>(0,s.jsx)($,{space:e,onAddDoc:y,getSpaces:b},e.id))})]}),(0,s.jsxs)(c.default,{title:"Add Knowledge",centered:!0,open:a,destroyOnClose:!0,onCancel:()=>{l(!1)},width:1e3,afterClose:()=>{m(0),b()},footer:null,children:[(0,s.jsx)(o.Z,{current:d,items:g}),0===d&&(0,s.jsx)(en,{handleStepChange:N}),1===d&&(0,s.jsx)(er,{handleStepChange:N}),(0,s.jsx)(el,{className:ee()({hidden:2!==d}),spaceName:u,docType:_,handleStepChange:N}),3===d&&(0,s.jsx)(e_,{spaceName:u,docType:_,uploadFiles:h,handleStepChange:N})]})]})}}},function(e){e.O(0,[4885,2185,5503,1009,9479,785,4553,5813,411,8928,5733,2282,5237,9774,2888,179],function(){return e(e.s=54681)}),_N_E=e.O()}]); \ No newline at end of file diff --git a/dbgpt/app/static/_next/static/chunks/webpack-4e5527d8038129bd.js b/dbgpt/app/static/_next/static/chunks/webpack-392ef02c5aff6027.js similarity index 98% rename from dbgpt/app/static/_next/static/chunks/webpack-4e5527d8038129bd.js rename to dbgpt/app/static/_next/static/chunks/webpack-392ef02c5aff6027.js index 304e72e0a..28fa6e965 100644 --- a/dbgpt/app/static/_next/static/chunks/webpack-4e5527d8038129bd.js +++ b/dbgpt/app/static/_next/static/chunks/webpack-392ef02c5aff6027.js @@ -1 +1 @@ -!function(){"use strict";var e,t,c,a,n,f,r,d,o,b,u,i,s={},l={};function h(e){var t=l[e];if(void 0!==t)return t.exports;var c=l[e]={id:e,loaded:!1,exports:{}},a=!0;try{s[e].call(c.exports,c,c.exports,h),a=!1}finally{a&&delete l[e]}return c.loaded=!0,c.exports}h.m=s,h.amdO={},e=[],h.O=function(t,c,a,n){if(c){n=n||0;for(var f=e.length;f>0&&e[f-1][2]>n;f--)e[f]=e[f-1];e[f]=[c,a,n];return}for(var r=1/0,f=0;f=n&&Object.keys(h.O).every(function(e){return h.O[e](c[o])})?c.splice(o--,1):(d=!1,n0&&e[f-1][2]>n;f--)e[f]=e[f-1];e[f]=[c,a,n];return}for(var r=1/0,f=0;f=n&&Object.keys(h.O).every(function(e){return h.O[e](c[o])})?c.splice(o--,1):(d=!1,n
\ No newline at end of file +
\ No newline at end of file diff --git a/dbgpt/app/static/app/index.html b/dbgpt/app/static/app/index.html index 7c5dbc200..19880b258 100644 --- a/dbgpt/app/static/app/index.html +++ b/dbgpt/app/static/app/index.html @@ -1 +1 @@ -
\ No newline at end of file +
\ No newline at end of file diff --git a/dbgpt/app/static/chat/index.html b/dbgpt/app/static/chat/index.html index 1ccce8162..4d84a700f 100644 --- a/dbgpt/app/static/chat/index.html +++ b/dbgpt/app/static/chat/index.html @@ -1 +1 @@ -
\ No newline at end of file +
\ No newline at end of file diff --git a/dbgpt/app/static/database/index.html b/dbgpt/app/static/database/index.html index eec2d935a..df61974ce 100644 --- a/dbgpt/app/static/database/index.html +++ b/dbgpt/app/static/database/index.html @@ -1 +1 @@ -
MySQL

MySQL

Fast, reliable, scalable open-source relational database management system.

MSSQL

MSSQL

Powerful, scalable, secure relational database system by Microsoft.

DuckDB

DuckDB

In-memory analytical database with efficient query processing.

Sqlite

Sqlite

Lightweight embedded relational database with simplicity and portability.

ClickHouse

ClickHouse

Columnar database for high-performance analytics and real-time queries.

Oracle

Oracle

Robust, scalable, secure relational database widely used in enterprises.

Access

Access

Easy-to-use relational database for small-scale applications by Microsoft.

MongoDB

MongoDB

Flexible, scalable NoSQL document database for web and mobile apps.

ApacheDoris

ApacheDoris

A new-generation open-source real-time data warehouse.

StarRocks

StarRocks

An Open-Source, High-Performance Analytical Database.

DB2

DB2

Scalable, secure relational database system developed by IBM.

HBase

HBase

Distributed, scalable NoSQL database for large structured/semi-structured data.

Redis

Redis

Fast, versatile in-memory data structure store as cache, DB, or broker.

Cassandra

Cassandra

Scalable, fault-tolerant distributed NoSQL database for large data.

Couchbase

Couchbase

High-performance NoSQL document database with distributed architecture.

PostgreSQL

PostgreSQL

Powerful open-source relational database with extensibility and SQL standards.

Vertica

Vertica

Vertica is a strongly consistent, ACID-compliant, SQL data warehouse, built for the scale and complexity of today’s data-driven world.

Spark

Spark

Unified engine for large-scale data analytics.

Hive

Hive

A distributed fault-tolerant data warehouse system.

Space

Space

knowledge analytics.

TuGraph

TuGraph

TuGraph is a high-performance graph database jointly developed by Ant Group and Tsinghua University.

\ No newline at end of file +
MySQL

MySQL

Fast, reliable, scalable open-source relational database management system.

MSSQL

MSSQL

Powerful, scalable, secure relational database system by Microsoft.

DuckDB

DuckDB

In-memory analytical database with efficient query processing.

Sqlite

Sqlite

Lightweight embedded relational database with simplicity and portability.

ClickHouse

ClickHouse

Columnar database for high-performance analytics and real-time queries.

Oracle

Oracle

Robust, scalable, secure relational database widely used in enterprises.

Access

Access

Easy-to-use relational database for small-scale applications by Microsoft.

MongoDB

MongoDB

Flexible, scalable NoSQL document database for web and mobile apps.

ApacheDoris

ApacheDoris

A new-generation open-source real-time data warehouse.

StarRocks

StarRocks

An Open-Source, High-Performance Analytical Database.

DB2

DB2

Scalable, secure relational database system developed by IBM.

HBase

HBase

Distributed, scalable NoSQL database for large structured/semi-structured data.

Redis

Redis

Fast, versatile in-memory data structure store as cache, DB, or broker.

Cassandra

Cassandra

Scalable, fault-tolerant distributed NoSQL database for large data.

Couchbase

Couchbase

High-performance NoSQL document database with distributed architecture.

PostgreSQL

PostgreSQL

Powerful open-source relational database with extensibility and SQL standards.

Vertica

Vertica

Vertica is a strongly consistent, ACID-compliant, SQL data warehouse, built for the scale and complexity of today’s data-driven world.

Spark

Spark

Unified engine for large-scale data analytics.

Hive

Hive

A distributed fault-tolerant data warehouse system.

Space

Space

knowledge analytics.

TuGraph

TuGraph

TuGraph is a high-performance graph database jointly developed by Ant Group and Tsinghua University.

\ No newline at end of file diff --git a/dbgpt/app/static/flow/canvas/index.html b/dbgpt/app/static/flow/canvas/index.html index 6e1aa438c..11cb608be 100644 --- a/dbgpt/app/static/flow/canvas/index.html +++ b/dbgpt/app/static/flow/canvas/index.html @@ -1 +1 @@ -
\ No newline at end of file +
\ No newline at end of file diff --git a/dbgpt/app/static/flow/index.html b/dbgpt/app/static/flow/index.html index b4757c8c3..0e57bcd3c 100644 --- a/dbgpt/app/static/flow/index.html +++ b/dbgpt/app/static/flow/index.html @@ -1 +1 @@ -
\ No newline at end of file +
\ No newline at end of file diff --git a/dbgpt/app/static/index.html b/dbgpt/app/static/index.html index 41b6dbeb5..8d4dd1924 100644 --- a/dbgpt/app/static/index.html +++ b/dbgpt/app/static/index.html @@ -1 +1 @@ -
\ No newline at end of file +
\ No newline at end of file diff --git a/dbgpt/app/static/knowledge/chunk/index.html b/dbgpt/app/static/knowledge/chunk/index.html index d13d0b241..21631b8f3 100644 --- a/dbgpt/app/static/knowledge/chunk/index.html +++ b/dbgpt/app/static/knowledge/chunk/index.html @@ -1 +1 @@ -
\ No newline at end of file +
\ No newline at end of file diff --git a/dbgpt/app/static/knowledge/graph/index.html b/dbgpt/app/static/knowledge/graph/index.html index 51bc38f3c..f2a630bcb 100644 --- a/dbgpt/app/static/knowledge/graph/index.html +++ b/dbgpt/app/static/knowledge/graph/index.html @@ -1 +1 @@ -
\ No newline at end of file +
\ No newline at end of file diff --git a/dbgpt/app/static/knowledge/index.html b/dbgpt/app/static/knowledge/index.html index a755ebe8c..5c5dad6b9 100644 --- a/dbgpt/app/static/knowledge/index.html +++ b/dbgpt/app/static/knowledge/index.html @@ -1 +1 @@ -
\ No newline at end of file +
\ No newline at end of file diff --git a/dbgpt/app/static/models/index.html b/dbgpt/app/static/models/index.html index 6bf15b681..ed536cd3c 100644 --- a/dbgpt/app/static/models/index.html +++ b/dbgpt/app/static/models/index.html @@ -1 +1 @@ -
\ No newline at end of file +
\ No newline at end of file diff --git a/dbgpt/app/static/models/knowledge-default.jpg b/dbgpt/app/static/models/knowledge-default.jpg index 312b49a118733de7df968c5a6348fd3b55bf7b98..226bd405b198c5ba188019ed4fb048d920100f97 100644 GIT binary patch literal 108470 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 C!_N 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
!>- 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 z z*h5GR|7<)7`B|y+J4Aus2_AR>d}cfQxi^ElNQCfimycWm=Sy)#h~Wl@sHoXIV(kcU zN#B4Ya_(F)-vrZED^Q&qzXv?OWkU)WL8mPpM6C-{&6TBHv(=R$E+Act3}+|D3s_hI z#O>(2CKsh#(&n@c)t5-wL9B~yjJScem_bTZxj-=nr*q@$ZKPB|1X6GMU z5oDhK$lC13rvLWB@%6iyI~toT{192XWl486I7fY5Ag@LE<;RkmnM3Eu*2)SN9M#U$bS?W7sZH4yS- zh{M?FQ9IZ`(8KRWAfUU}FxxI}&_q)JmdK&m<=X;rOH2UvZYQDfENBC1@>oRNB(-7I z?7q=_hrIPefX#~6Z1h}7)<>3rg~{hq9UTD9Mg7=jWg z=Vsw11r8wrTjg8}`hzY}7hK9lwoZ==?5^7qk1hgYB<*=7fxUd%Pel>iFQ47VG@OkH zs$ps&9#{f=?vMLVfGe<_3pGGR-X^0+;YzEh`c4_>NmzauA4xV2wb=|K9?S>Z6U%yn$ZWG=F3|asc zUcjL-O-u5Gl_?Y+NvcW%61J*Df3Wm`_Yl?M>wUnH}1qU)`y2&Wr0NKVsV~Z7E;u zKjg}0PPP(k&)Dgf^SV`Or9;p3UjM@$-i#DbG8|k{lG5|9&tkwo^yd`I zXX0K5|FwdI=gbhNKgjX^vJL;SC;r6+HD=ulzLCf~;{G`7W(Lt`3gxuF!S13CjscK&%r_h}tL~@`q5yP^u7DvHb==aUXhi*M$ z>#S??^6H;=HQTF_rtNSL*bd%(J0J2(qqT{C=YA;ke5d6u-IiuqX)!U?tDU6tirKW7_gOUJC}H4TlN$cGGu*;bk&DD2?UWkO}&@L#J*&pf)-Clpv=|6>hcG z=k+QOAeg-W1#|2^m8=!3y6f1CH;fK5mOHv8?s6N9tNsp=m-bTAUO*EVxMsfDGT}AP z#&Q}LKd8HP9{z%GoNw*zrWlyvu1s2{SkIp%&OFq%#kP}_1Oi}7+`zF-k1h*Yu3@f_ z!%;N|-MXgPV|^G*2Bs6>7M;_;>&!MdB6TFR3BLTW#ZcrfbpcJ&=Qqn}kwkH8F2%?u z=*Lh-&o9GTxtw5b&+TENn&inZa`XXzB1HRBx6>{2Rn=&R4v5!XWStsvN)wAAKCzue zgv9QFok1yI<^wv687OruJP?_r_l4zwbO6G zS%pK+UC+@9h$^<+x;RXkat^tgW>5*XM&m!WhHGd2P`e&FaPUx3inz}}qfjWLne7c< zgQr!v-TrA&$3&QV2C-3DPE>JKB}e2hhu*%e<*-lcebA&gSa5lEQPUWq3vsHi85QDa z%{^
NameSceneSub SceneContentOperation
No data
\ No newline at end of file +
NameSceneSub SceneContentOperation
No data
\ No newline at end of file diff --git a/dbgpt/rag/assembler/db_schema.py b/dbgpt/rag/assembler/db_schema.py index 18c78c333..209b8d9a3 100644 --- a/dbgpt/rag/assembler/db_schema.py +++ b/dbgpt/rag/assembler/db_schema.py @@ -1,13 +1,12 @@ """DBSchemaAssembler.""" from typing import Any, List, Optional -from dbgpt.core import Chunk, Embeddings +from dbgpt.core import Chunk from dbgpt.datasource.base import BaseConnector -from dbgpt.storage.vector_store.connector import VectorStoreConnector from ..assembler.base import BaseAssembler from ..chunk_manager import ChunkParameters -from ..embedding.embedding_factory import DefaultEmbeddingFactory +from ..index.base import IndexStoreBase from ..knowledge.datasource import DatasourceKnowledge from ..retriever.db_schema import DBSchemaRetriever @@ -36,36 +35,22 @@ class DBSchemaAssembler(BaseAssembler): def __init__( self, connector: BaseConnector, - vector_store_connector: VectorStoreConnector, + index_store: IndexStoreBase, chunk_parameters: Optional[ChunkParameters] = None, - embedding_model: Optional[str] = None, - embeddings: Optional[Embeddings] = None, **kwargs: Any, ) -> None: """Initialize with Embedding Assembler arguments. Args: connector: (BaseConnector) BaseConnector connection. - vector_store_connector: (VectorStoreConnector) VectorStoreConnector to use. + index_store: (IndexStoreBase) IndexStoreBase to use. chunk_manager: (Optional[ChunkManager]) ChunkManager to use for chunking. embedding_model: (Optional[str]) Embedding model to use. embeddings: (Optional[Embeddings]) Embeddings to use. """ knowledge = DatasourceKnowledge(connector) self._connector = connector - self._vector_store_connector = vector_store_connector - - self._embedding_model = embedding_model - if self._embedding_model and not embeddings: - embeddings = DefaultEmbeddingFactory( - default_model_name=self._embedding_model - ).create(self._embedding_model) - - if ( - embeddings - and self._vector_store_connector.vector_store_config.embedding_fn is None - ): - self._vector_store_connector.vector_store_config.embedding_fn = embeddings + self._index_store = index_store super().__init__( knowledge=knowledge, @@ -77,29 +62,23 @@ def __init__( def load_from_connection( cls, connector: BaseConnector, - vector_store_connector: VectorStoreConnector, + index_store: IndexStoreBase, chunk_parameters: Optional[ChunkParameters] = None, - embedding_model: Optional[str] = None, - embeddings: Optional[Embeddings] = None, ) -> "DBSchemaAssembler": """Load document embedding into vector store from path. Args: connector: (BaseConnector) BaseConnector connection. - vector_store_connector: (VectorStoreConnector) VectorStoreConnector to use. + index_store: (IndexStoreBase) IndexStoreBase to use. chunk_parameters: (Optional[ChunkParameters]) ChunkManager to use for chunking. - embedding_model: (Optional[str]) Embedding model to use. - embeddings: (Optional[Embeddings]) Embeddings to use. Returns: DBSchemaAssembler """ return cls( connector=connector, - vector_store_connector=vector_store_connector, - embedding_model=embedding_model, + index_store=index_store, chunk_parameters=chunk_parameters, - embeddings=embeddings, ) def get_chunks(self) -> List[Chunk]: @@ -112,7 +91,7 @@ def persist(self) -> List[str]: Returns: List[str]: List of chunk ids. """ - return self._vector_store_connector.load_document(self._chunks) + return self._index_store.load_document(self._chunks) def _extract_info(self, chunks) -> List[Chunk]: """Extract info from chunks.""" @@ -131,5 +110,5 @@ def as_retriever(self, top_k: int = 4, **kwargs) -> DBSchemaRetriever: top_k=top_k, connector=self._connector, is_embeddings=True, - vector_store_connector=self._vector_store_connector, + index_store=self._index_store, ) diff --git a/dbgpt/rag/assembler/embedding.py b/dbgpt/rag/assembler/embedding.py index 095408c3e..57162e469 100644 --- a/dbgpt/rag/assembler/embedding.py +++ b/dbgpt/rag/assembler/embedding.py @@ -3,13 +3,13 @@ from typing import Any, List, Optional from dbgpt.core import Chunk, Embeddings -from dbgpt.storage.vector_store.connector import VectorStoreConnector from ...util.executor_utils import blocking_func_to_async from ..assembler.base import BaseAssembler from ..chunk_manager import ChunkParameters -from ..embedding.embedding_factory import DefaultEmbeddingFactory +from ..index.base import IndexStoreBase from ..knowledge.base import Knowledge +from ..retriever import BaseRetriever, RetrieverStrategy from ..retriever.embedding import EmbeddingRetriever @@ -32,37 +32,26 @@ class EmbeddingAssembler(BaseAssembler): def __init__( self, knowledge: Knowledge, - vector_store_connector: VectorStoreConnector, + index_store: IndexStoreBase, chunk_parameters: Optional[ChunkParameters] = None, - embedding_model: Optional[str] = None, - embeddings: Optional[Embeddings] = None, + retrieve_strategy: Optional[RetrieverStrategy] = RetrieverStrategy.EMBEDDING, **kwargs: Any, ) -> None: """Initialize with Embedding Assembler arguments. Args: knowledge: (Knowledge) Knowledge datasource. - vector_store_connector: (VectorStoreConnector) VectorStoreConnector to use. + index_store: (IndexStoreBase) IndexStoreBase to use. chunk_parameters: (Optional[ChunkParameters]) ChunkManager to use for chunking. + keyword_store: (Optional[IndexStoreBase]) IndexStoreBase to use. embedding_model: (Optional[str]) Embedding model to use. embeddings: (Optional[Embeddings]) Embeddings to use. """ if knowledge is None: raise ValueError("knowledge datasource must be provided.") - self._vector_store_connector = vector_store_connector - - self._embedding_model = embedding_model - if self._embedding_model and not embeddings: - embeddings = DefaultEmbeddingFactory( - default_model_name=self._embedding_model - ).create(self._embedding_model) - - if ( - embeddings - and self._vector_store_connector.vector_store_config.embedding_fn is None - ): - self._vector_store_connector.vector_store_config.embedding_fn = embeddings + self._index_store = index_store + self._retrieve_strategy = retrieve_strategy super().__init__( knowledge=knowledge, @@ -74,52 +63,53 @@ def __init__( def load_from_knowledge( cls, knowledge: Knowledge, - vector_store_connector: VectorStoreConnector, + index_store: IndexStoreBase, chunk_parameters: Optional[ChunkParameters] = None, embedding_model: Optional[str] = None, embeddings: Optional[Embeddings] = None, + retrieve_strategy: Optional[RetrieverStrategy] = RetrieverStrategy.EMBEDDING, ) -> "EmbeddingAssembler": """Load document embedding into vector store from path. Args: knowledge: (Knowledge) Knowledge datasource. - vector_store_connector: (VectorStoreConnector) VectorStoreConnector to use. + index_store: (IndexStoreBase) IndexStoreBase to use. chunk_parameters: (Optional[ChunkParameters]) ChunkManager to use for chunking. embedding_model: (Optional[str]) Embedding model to use. embeddings: (Optional[Embeddings]) Embeddings to use. + retrieve_strategy: (Optional[RetrieverStrategy]) Retriever strategy. Returns: EmbeddingAssembler """ return cls( knowledge=knowledge, - vector_store_connector=vector_store_connector, + index_store=index_store, chunk_parameters=chunk_parameters, embedding_model=embedding_model, embeddings=embeddings, + retrieve_strategy=retrieve_strategy, ) @classmethod async def aload_from_knowledge( cls, knowledge: Knowledge, - vector_store_connector: VectorStoreConnector, + index_store: IndexStoreBase, chunk_parameters: Optional[ChunkParameters] = None, - embedding_model: Optional[str] = None, - embeddings: Optional[Embeddings] = None, executor: Optional[ThreadPoolExecutor] = None, + retrieve_strategy: Optional[RetrieverStrategy] = RetrieverStrategy.EMBEDDING, ) -> "EmbeddingAssembler": """Load document embedding into vector store from path. Args: knowledge: (Knowledge) Knowledge datasource. - vector_store_connector: (VectorStoreConnector) VectorStoreConnector to use. chunk_parameters: (Optional[ChunkParameters]) ChunkManager to use for chunking. - embedding_model: (Optional[str]) Embedding model to use. - embeddings: (Optional[Embeddings]) Embeddings to use. + index_store: (IndexStoreBase) Index store to use. executor: (Optional[ThreadPoolExecutor) ThreadPoolExecutor to use. + retrieve_strategy: (Optional[RetrieverStrategy]) Retriever strategy. Returns: EmbeddingAssembler @@ -129,19 +119,18 @@ async def aload_from_knowledge( executor, cls, knowledge, - vector_store_connector, + index_store, chunk_parameters, - embedding_model, - embeddings, + retrieve_strategy, ) def persist(self) -> List[str]: - """Persist chunks into vector store. + """Persist chunks into store. Returns: List[str]: List of chunk ids. """ - return self._vector_store_connector.load_document(self._chunks) + return self._index_store.load_document(self._chunks) async def apersist(self) -> List[str]: """Persist chunks into store. @@ -149,13 +138,14 @@ async def apersist(self) -> List[str]: Returns: List[str]: List of chunk ids. """ - return await self._vector_store_connector.aload_document(self._chunks) + # persist chunks into vector store + return await self._index_store.aload_document(self._chunks) def _extract_info(self, chunks) -> List[Chunk]: """Extract info from chunks.""" return [] - def as_retriever(self, top_k: int = 4, **kwargs) -> EmbeddingRetriever: + def as_retriever(self, top_k: int = 4, **kwargs) -> BaseRetriever: """Create a retriever. Args: @@ -165,5 +155,7 @@ def as_retriever(self, top_k: int = 4, **kwargs) -> EmbeddingRetriever: EmbeddingRetriever """ return EmbeddingRetriever( - top_k=top_k, vector_store_connector=self._vector_store_connector + top_k=top_k, + index_store=self._index_store, + retrieve_strategy=self._retrieve_strategy, ) diff --git a/dbgpt/rag/assembler/tests/test_db_struct_assembler.py b/dbgpt/rag/assembler/tests/test_db_struct_assembler.py index 6bb2d4986..84638b692 100644 --- a/dbgpt/rag/assembler/tests/test_db_struct_assembler.py +++ b/dbgpt/rag/assembler/tests/test_db_struct_assembler.py @@ -8,7 +8,7 @@ from dbgpt.rag.embedding.embedding_factory import EmbeddingFactory from dbgpt.rag.knowledge.base import Knowledge from dbgpt.rag.text_splitter.text_splitter import CharacterTextSplitter -from dbgpt.storage.vector_store.connector import VectorStoreConnector +from dbgpt.storage.vector_store.chroma_store import ChromaStore @pytest.fixture @@ -48,7 +48,7 @@ def mock_embedding_factory(): @pytest.fixture def mock_vector_store_connector(): - return MagicMock(spec=VectorStoreConnector) + return MagicMock(spec=ChromaStore) @pytest.fixture @@ -70,7 +70,7 @@ def test_load_knowledge( knowledge=mock_knowledge, chunk_parameters=mock_chunk_parameters, embeddings=mock_embedding_factory.create(), - vector_store_connector=mock_vector_store_connector, + index_store=mock_vector_store_connector, ) assembler.load_knowledge(knowledge=mock_knowledge) assert len(assembler._chunks) == 0 diff --git a/dbgpt/rag/assembler/tests/test_embedding_assembler.py b/dbgpt/rag/assembler/tests/test_embedding_assembler.py index 4921b8359..350ccad39 100644 --- a/dbgpt/rag/assembler/tests/test_embedding_assembler.py +++ b/dbgpt/rag/assembler/tests/test_embedding_assembler.py @@ -7,7 +7,7 @@ from dbgpt.rag.chunk_manager import ChunkParameters, SplitterType from dbgpt.rag.embedding.embedding_factory import EmbeddingFactory from dbgpt.rag.text_splitter.text_splitter import CharacterTextSplitter -from dbgpt.storage.vector_store.connector import VectorStoreConnector +from dbgpt.storage.vector_store.chroma_store import ChromaStore @pytest.fixture @@ -47,7 +47,7 @@ def mock_embedding_factory(): @pytest.fixture def mock_vector_store_connector(): - return MagicMock(spec=VectorStoreConnector) + return MagicMock(spec=ChromaStore) def test_load_knowledge( @@ -63,6 +63,6 @@ def test_load_knowledge( connector=mock_db_connection, chunk_parameters=mock_chunk_parameters, embeddings=mock_embedding_factory.create(), - vector_store_connector=mock_vector_store_connector, + index_store=mock_vector_store_connector, ) assert len(assembler._chunks) == 1 diff --git a/dbgpt/rag/index/base.py b/dbgpt/rag/index/base.py index e33509c82..a48d6dad4 100644 --- a/dbgpt/rag/index/base.py +++ b/dbgpt/rag/index/base.py @@ -2,7 +2,7 @@ import logging import time from abc import ABC, abstractmethod -from concurrent.futures import ThreadPoolExecutor +from concurrent.futures import Executor, ThreadPoolExecutor from typing import Any, Dict, List, Optional from dbgpt._private.pydantic import BaseModel, ConfigDict, Field, model_to_dict @@ -47,7 +47,7 @@ def to_dict(self, **kwargs) -> Dict[str, Any]: class IndexStoreBase(ABC): """Index store base class.""" - def __init__(self, executor: Optional[ThreadPoolExecutor] = None): + def __init__(self, executor: Optional[Executor] = None): """Init index store.""" self._executor = executor or ThreadPoolExecutor() @@ -63,7 +63,7 @@ def load_document(self, chunks: List[Chunk]) -> List[str]: """ @abstractmethod - def aload_document(self, chunks: List[Chunk]) -> List[str]: + async def aload_document(self, chunks: List[Chunk]) -> List[str]: """Load document in index database. Args: @@ -94,7 +94,7 @@ def similar_search_with_scores( """ @abstractmethod - def delete_by_ids(self, ids: str): + def delete_by_ids(self, ids: str) -> List[str]: """Delete docs. Args: diff --git a/dbgpt/rag/operators/db_schema.py b/dbgpt/rag/operators/db_schema.py index 59d592d12..d0a7c0d9f 100644 --- a/dbgpt/rag/operators/db_schema.py +++ b/dbgpt/rag/operators/db_schema.py @@ -5,10 +5,10 @@ from dbgpt.core import Chunk from dbgpt.core.interface.operators.retriever import RetrieverOperator from dbgpt.datasource.base import BaseConnector -from dbgpt.storage.vector_store.connector import VectorStoreConnector from ..assembler.db_schema import DBSchemaAssembler from ..chunk_manager import ChunkParameters +from ..index.base import IndexStoreBase from ..retriever.db_schema import DBSchemaRetriever from .assembler import AssemblerOperator @@ -19,13 +19,13 @@ class DBSchemaRetrieverOperator(RetrieverOperator[str, List[Chunk]]): Args: connector (BaseConnector): The connection. top_k (int, optional): The top k. Defaults to 4. - vector_store_connector (VectorStoreConnector, optional): The vector store + index_store (IndexStoreBase, optional): The vector store connector. Defaults to None. """ def __init__( self, - vector_store_connector: VectorStoreConnector, + index_store: IndexStoreBase, top_k: int = 4, connector: Optional[BaseConnector] = None, **kwargs @@ -35,7 +35,7 @@ def __init__( self._retriever = DBSchemaRetriever( top_k=top_k, connector=connector, - vector_store_connector=vector_store_connector, + index_store=index_store, ) def retrieve(self, query: str) -> List[Chunk]: @@ -53,7 +53,7 @@ class DBSchemaAssemblerOperator(AssemblerOperator[BaseConnector, List[Chunk]]): def __init__( self, connector: BaseConnector, - vector_store_connector: VectorStoreConnector, + index_store: IndexStoreBase, chunk_parameters: Optional[ChunkParameters] = None, **kwargs ): @@ -61,14 +61,14 @@ def __init__( Args: connector (BaseConnector): The connection. - vector_store_connector (VectorStoreConnector): The vector store connector. + index_store (IndexStoreBase): The Storage IndexStoreBase. chunk_parameters (Optional[ChunkParameters], optional): The chunk parameters. """ if not chunk_parameters: chunk_parameters = ChunkParameters(chunk_strategy="CHUNK_BY_SIZE") self._chunk_parameters = chunk_parameters - self._vector_store_connector = vector_store_connector + self._index_store = index_store self._connector = connector super().__init__(**kwargs) @@ -84,7 +84,7 @@ def assemble(self, dummy_value) -> List[Chunk]: assembler = DBSchemaAssembler.load_from_connection( connector=self._connector, chunk_parameters=self._chunk_parameters, - vector_store_connector=self._vector_store_connector, + index_store=self._index_store, ) assembler.persist() return assembler.get_chunks() diff --git a/dbgpt/rag/operators/embedding.py b/dbgpt/rag/operators/embedding.py index c8fab8107..7054f4a04 100644 --- a/dbgpt/rag/operators/embedding.py +++ b/dbgpt/rag/operators/embedding.py @@ -6,11 +6,11 @@ from dbgpt.core import Chunk from dbgpt.core.awel.flow import IOField, OperatorCategory, Parameter, ViewMetadata from dbgpt.core.interface.operators.retriever import RetrieverOperator -from dbgpt.storage.vector_store.connector import VectorStoreConnector from dbgpt.util.i18n_utils import _ from ..assembler.embedding import EmbeddingAssembler from ..chunk_manager import ChunkParameters +from ..index.base import IndexStoreBase from ..knowledge import Knowledge from ..retriever.embedding import EmbeddingRetriever from ..retriever.rerank import Ranker @@ -28,9 +28,9 @@ class EmbeddingRetrieverOperator(RetrieverOperator[Union[str, List[str]], List[C category=OperatorCategory.RAG, parameters=[ Parameter.build_from( - _("Vector Store Connector"), + _("Storage Index Store"), "vector_store_connector", - VectorStoreConnector, + IndexStoreBase, description=_("The vector store connector."), ), Parameter.build_from( @@ -88,7 +88,7 @@ class EmbeddingRetrieverOperator(RetrieverOperator[Union[str, List[str]], List[C def __init__( self, - vector_store_connector: VectorStoreConnector, + index_store: IndexStoreBase, top_k: int, score_threshold: float = 0.3, query_rewrite: Optional[QueryRewrite] = None, @@ -99,7 +99,7 @@ def __init__( super().__init__(**kwargs) self._score_threshold = score_threshold self._retriever = EmbeddingRetriever( - vector_store_connector=vector_store_connector, + index_store=index_store, top_k=top_k, query_rewrite=query_rewrite, rerank=rerank, @@ -129,7 +129,7 @@ class EmbeddingAssemblerOperator(AssemblerOperator[Knowledge, List[Chunk]]): Parameter.build_from( _("Vector Store Connector"), "vector_store_connector", - VectorStoreConnector, + IndexStoreBase, description=_("The vector store connector."), ), Parameter.build_from( @@ -164,21 +164,21 @@ class EmbeddingAssemblerOperator(AssemblerOperator[Knowledge, List[Chunk]]): def __init__( self, - vector_store_connector: VectorStoreConnector, + index_store: IndexStoreBase, chunk_parameters: Optional[ChunkParameters] = None, **kwargs ): """Create a new EmbeddingAssemblerOperator. Args: - vector_store_connector (VectorStoreConnector): The vector store connector. + index_store (IndexStoreBase): The index storage. chunk_parameters (Optional[ChunkParameters], optional): The chunk parameters. Defaults to ChunkParameters(chunk_strategy="CHUNK_BY_SIZE"). """ if not chunk_parameters: chunk_parameters = ChunkParameters(chunk_strategy="CHUNK_BY_SIZE") self._chunk_parameters = chunk_parameters - self._vector_store_connector = vector_store_connector + self._index_store = index_store super().__init__(**kwargs) def assemble(self, knowledge: Knowledge) -> List[Chunk]: @@ -186,7 +186,7 @@ def assemble(self, knowledge: Knowledge) -> List[Chunk]: assembler = EmbeddingAssembler.load_from_knowledge( knowledge=knowledge, chunk_parameters=self._chunk_parameters, - vector_store_connector=self._vector_store_connector, + index_store=self._index_store, ) assembler.persist() return assembler.get_chunks() diff --git a/dbgpt/rag/operators/schema_linking.py b/dbgpt/rag/operators/schema_linking.py index 0bf432edb..d1d14ed6a 100644 --- a/dbgpt/rag/operators/schema_linking.py +++ b/dbgpt/rag/operators/schema_linking.py @@ -8,8 +8,8 @@ from dbgpt.core import LLMClient from dbgpt.core.awel import MapOperator from dbgpt.datasource.base import BaseConnector +from dbgpt.rag.index.base import IndexStoreBase from dbgpt.rag.schemalinker.schema_linking import SchemaLinking -from dbgpt.storage.vector_store.connector import VectorStoreConnector class SchemaLinkingOperator(MapOperator[Any, Any]): @@ -21,7 +21,7 @@ def __init__( model_name: str, llm: LLMClient, top_k: int = 5, - vector_store_connector: Optional[VectorStoreConnector] = None, + index_store: Optional[IndexStoreBase] = None, **kwargs ): """Create the schema linking operator. @@ -37,7 +37,7 @@ def __init__( connector=connector, llm=llm, model_name=model_name, - vector_store_connector=vector_store_connector, + index_store=index_store, ) async def map(self, query: str) -> str: diff --git a/dbgpt/rag/retriever/base.py b/dbgpt/rag/retriever/base.py index 14647c089..759b6e242 100644 --- a/dbgpt/rag/retriever/base.py +++ b/dbgpt/rag/retriever/base.py @@ -17,6 +17,7 @@ class RetrieverStrategy(str, Enum): """ EMBEDDING = "embedding" + GRAPH = "graph" KEYWORD = "keyword" HYBRID = "hybrid" diff --git a/dbgpt/rag/retriever/db_schema.py b/dbgpt/rag/retriever/db_schema.py index eccf6d733..3c2b1d079 100644 --- a/dbgpt/rag/retriever/db_schema.py +++ b/dbgpt/rag/retriever/db_schema.py @@ -4,10 +4,10 @@ from dbgpt.core import Chunk from dbgpt.datasource.base import BaseConnector +from dbgpt.rag.index.base import IndexStoreBase from dbgpt.rag.retriever.base import BaseRetriever from dbgpt.rag.retriever.rerank import DefaultRanker, Ranker from dbgpt.rag.summary.rdbms_db_summary import _parse_db_summary -from dbgpt.storage.vector_store.connector import VectorStoreConnector from dbgpt.storage.vector_store.filters import MetadataFilters from dbgpt.util.chat_util import run_async_tasks @@ -17,7 +17,7 @@ class DBSchemaRetriever(BaseRetriever): def __init__( self, - vector_store_connector: VectorStoreConnector, + index_store: IndexStoreBase, top_k: int = 4, connector: Optional[BaseConnector] = None, query_rewrite: bool = False, @@ -27,7 +27,7 @@ def __init__( """Create DBSchemaRetriever. Args: - vector_store_connector (VectorStoreConnector): vector store connector + index_store(IndexStore): index connector top_k (int): top k connector (Optional[BaseConnector]): RDBMSConnector. query_rewrite (bool): query rewrite @@ -67,18 +67,22 @@ def _create_temporary_connection(): connector = _create_temporary_connection() - vector_store_config = ChromaVectorConfig(name="vector_store_name") - embedding_model_path = "{your_embedding_model_path}" embedding_fn = embedding_factory.create(model_name=embedding_model_path) - vector_connector = VectorStoreConnector.from_default( - "Chroma", - vector_store_config=vector_store_config, - embedding_fn=embedding_fn, + config = ChromaVectorConfig( + persist_path=PILOT_PATH, + name="dbschema_rag_test", + embedding_fn=DefaultEmbeddingFactory( + default_model_name=os.path.join( + MODEL_PATH, "text2vec-large-chinese" + ), + ).create(), ) + + vector_store = ChromaStore(config) # get db struct retriever retriever = DBSchemaRetriever( top_k=3, - vector_store_connector=vector_connector, + index_store=vector_store, connector=connector, ) chunks = retriever.retrieve("show columns from table") @@ -88,9 +92,9 @@ def _create_temporary_connection(): self._top_k = top_k self._connector = connector self._query_rewrite = query_rewrite - self._vector_store_connector = vector_store_connector + self._index_store = index_store self._need_embeddings = False - if self._vector_store_connector: + if self._index_store: self._need_embeddings = True self._rerank = rerank or DefaultRanker(self._top_k) @@ -109,7 +113,7 @@ def _retrieve( if self._need_embeddings: queries = [query] candidates = [ - self._vector_store_connector.similar_search(query, self._top_k, filters) + self._index_store.similar_search(query, self._top_k, filters) for query in queries ] return cast(List[Chunk], reduce(lambda x, y: x + y, candidates)) @@ -185,7 +189,7 @@ async def _similarity_search( self, query, filters: Optional[MetadataFilters] = None ) -> List[Chunk]: """Similar search.""" - return self._vector_store_connector.similar_search(query, self._top_k, filters) + return self._index_store.similar_search(query, self._top_k, filters) async def _aparse_db_summary(self) -> List[str]: """Similar search.""" diff --git a/dbgpt/rag/retriever/embedding.py b/dbgpt/rag/retriever/embedding.py index c54eb0d09..ddd161e17 100644 --- a/dbgpt/rag/retriever/embedding.py +++ b/dbgpt/rag/retriever/embedding.py @@ -4,10 +4,10 @@ from typing import Any, Dict, List, Optional, cast from dbgpt.core import Chunk -from dbgpt.rag.retriever.base import BaseRetriever +from dbgpt.rag.index.base import IndexStoreBase +from dbgpt.rag.retriever.base import BaseRetriever, RetrieverStrategy from dbgpt.rag.retriever.rerank import DefaultRanker, Ranker from dbgpt.rag.retriever.rewrite import QueryRewrite -from dbgpt.storage.vector_store.connector import VectorStoreConnector from dbgpt.storage.vector_store.filters import MetadataFilters from dbgpt.util.chat_util import run_async_tasks from dbgpt.util.tracer import root_tracer @@ -18,18 +18,19 @@ class EmbeddingRetriever(BaseRetriever): def __init__( self, - vector_store_connector: VectorStoreConnector, + index_store: IndexStoreBase, top_k: int = 4, query_rewrite: Optional[QueryRewrite] = None, rerank: Optional[Ranker] = None, + retrieve_strategy: Optional[RetrieverStrategy] = RetrieverStrategy.EMBEDDING, ): """Create EmbeddingRetriever. Args: + index_store(IndexStore): vector store connector top_k (int): top k query_rewrite (Optional[QueryRewrite]): query rewrite rerank (Ranker): rerank - vector_store_connector (VectorStoreConnector): vector store connector Examples: .. code-block:: python @@ -64,8 +65,9 @@ def __init__( """ self._top_k = top_k self._query_rewrite = query_rewrite - self._vector_store_connector = vector_store_connector + self._index_store = index_store self._rerank = rerank or DefaultRanker(self._top_k) + self._retrieve_strategy = retrieve_strategy def load_document(self, chunks: List[Chunk], **kwargs: Dict[str, Any]) -> List[str]: """Load document in vector database. @@ -75,7 +77,7 @@ def load_document(self, chunks: List[Chunk], **kwargs: Dict[str, Any]) -> List[s Return: List[str]: chunk ids. """ - return self._vector_store_connector.load_document(chunks) + return self._index_store.load_document(chunks) def _retrieve( self, query: str, filters: Optional[MetadataFilters] = None @@ -90,7 +92,7 @@ def _retrieve( """ queries = [query] candidates = [ - self._vector_store_connector.similar_search(query, self._top_k, filters) + self._index_store.similar_search(query, self._top_k, filters) for query in queries ] res_candidates = cast(List[Chunk], reduce(lambda x, y: x + y, candidates)) @@ -113,7 +115,7 @@ def _retrieve_with_score( """ queries = [query] candidates_with_score = [ - self._vector_store_connector.similar_search_with_scores( + self._index_store.similar_search_with_scores( query, self._top_k, score_threshold, filters ) for query in queries @@ -217,7 +219,7 @@ async def _similarity_search( self, query, filters: Optional[MetadataFilters] = None ) -> List[Chunk]: """Similar search.""" - return self._vector_store_connector.similar_search(query, self._top_k, filters) + return self._index_store.similar_search(query, self._top_k, filters) async def _run_async_tasks(self, tasks) -> List[Chunk]: """Run async tasks.""" @@ -229,6 +231,6 @@ async def _similarity_search_with_score( self, query, score_threshold, filters: Optional[MetadataFilters] = None ) -> List[Chunk]: """Similar search with score.""" - return await self._vector_store_connector.asimilar_search_with_scores( + return await self._index_store.asimilar_search_with_scores( query, self._top_k, score_threshold, filters ) diff --git a/dbgpt/rag/retriever/tests/test_db_struct.py b/dbgpt/rag/retriever/tests/test_db_struct.py index 5138d8510..4cda20365 100644 --- a/dbgpt/rag/retriever/tests/test_db_struct.py +++ b/dbgpt/rag/retriever/tests/test_db_struct.py @@ -25,7 +25,7 @@ def mock_vector_store_connector(): def dbstruct_retriever(mock_db_connection, mock_vector_store_connector): return DBSchemaRetriever( connector=mock_db_connection, - vector_store_connector=mock_vector_store_connector, + index_store=mock_vector_store_connector, ) diff --git a/dbgpt/rag/retriever/tests/test_embedding.py b/dbgpt/rag/retriever/tests/test_embedding.py index 14e278285..9a95a6f3d 100644 --- a/dbgpt/rag/retriever/tests/test_embedding.py +++ b/dbgpt/rag/retriever/tests/test_embedding.py @@ -25,8 +25,8 @@ def mock_vector_store_connector(): def embedding_retriever(top_k, mock_vector_store_connector): return EmbeddingRetriever( top_k=top_k, - query_rewrite=False, - vector_store_connector=mock_vector_store_connector, + query_rewrite=None, + index_store=mock_vector_store_connector, ) diff --git a/dbgpt/rag/retriever/time_weighted.py b/dbgpt/rag/retriever/time_weighted.py index 722db6c69..a544de396 100644 --- a/dbgpt/rag/retriever/time_weighted.py +++ b/dbgpt/rag/retriever/time_weighted.py @@ -7,9 +7,9 @@ from dbgpt.core import Chunk from dbgpt.rag.retriever.rerank import Ranker from dbgpt.rag.retriever.rewrite import QueryRewrite -from dbgpt.storage.vector_store.connector import VectorStoreConnector from dbgpt.storage.vector_store.filters import MetadataFilters +from ..index.base import IndexStoreBase from .embedding import EmbeddingRetriever @@ -23,7 +23,7 @@ class TimeWeightedEmbeddingRetriever(EmbeddingRetriever): def __init__( self, - vector_store_connector: VectorStoreConnector, + index_store: IndexStoreBase, top_k: int = 100, query_rewrite: Optional[QueryRewrite] = None, rerank: Optional[Ranker] = None, @@ -32,13 +32,13 @@ def __init__( """Initialize TimeWeightedEmbeddingRetriever. Args: - vector_store_connector (VectorStoreConnector): vector store connector + index_store (IndexStoreBase): vector store connector top_k (int): top k query_rewrite (Optional[QueryRewrite]): query rewrite rerank (Ranker): rerank """ super().__init__( - vector_store_connector=vector_store_connector, + index_store=index_store, top_k=top_k, query_rewrite=query_rewrite, rerank=rerank, @@ -69,7 +69,7 @@ def load_document(self, chunks: List[Chunk], **kwargs: Dict[str, Any]) -> List[s doc.metadata["created_at"] = current_time doc.metadata["buffer_idx"] = len(self.memory_stream) + i self.memory_stream.extend(dup_docs) - return self._vector_store_connector.load_document(dup_docs) + return self._index_store.load_document(dup_docs) def _retrieve( self, query: str, filters: Optional[MetadataFilters] = None @@ -125,7 +125,7 @@ def _get_combined_score( def get_salient_docs(self, query: str) -> Dict[int, Tuple[Chunk, float]]: """Return documents that are salient to the query.""" docs_and_scores: List[Chunk] - docs_and_scores = self._vector_store_connector.similar_search_with_scores( + docs_and_scores = self._index_store.similar_search_with_scores( query, topk=self._top_k, score_threshold=0 ) results = {} diff --git a/dbgpt/rag/schemalinker/schema_linking.py b/dbgpt/rag/schemalinker/schema_linking.py index a83c5ca17..4bfd3f6ed 100644 --- a/dbgpt/rag/schemalinker/schema_linking.py +++ b/dbgpt/rag/schemalinker/schema_linking.py @@ -13,7 +13,7 @@ from dbgpt.datasource.base import BaseConnector from dbgpt.rag.schemalinker.base_linker import BaseSchemaLinker from dbgpt.rag.summary.rdbms_db_summary import _parse_db_summary -from dbgpt.storage.vector_store.connector import VectorStoreConnector +from dbgpt.serve.rag.connector import VectorStoreConnector from dbgpt.util.chat_util import run_async_tasks INSTRUCTION = """ diff --git a/dbgpt/rag/summary/db_summary_client.py b/dbgpt/rag/summary/db_summary_client.py index e77560477..de5ee83ff 100644 --- a/dbgpt/rag/summary/db_summary_client.py +++ b/dbgpt/rag/summary/db_summary_client.py @@ -48,8 +48,8 @@ def db_summary_embedding(self, dbname, db_type): def get_db_summary(self, dbname, query, topk): """Get user query related tables info.""" + from dbgpt.serve.rag.connector import VectorStoreConnector from dbgpt.storage.vector_store.base import VectorStoreConfig - from dbgpt.storage.vector_store.connector import VectorStoreConnector vector_store_config = VectorStoreConfig(name=dbname + "_profile") vector_connector = VectorStoreConnector.from_default( @@ -60,7 +60,7 @@ def get_db_summary(self, dbname, query, topk): from dbgpt.rag.retriever.db_schema import DBSchemaRetriever retriever = DBSchemaRetriever( - top_k=topk, vector_store_connector=vector_connector + top_k=topk, index_store=vector_connector.index_client ) table_docs = retriever.retrieve(query) ans = [d.content for d in table_docs] @@ -88,8 +88,8 @@ def init_db_profile(self, db_summary_client, dbname): dbname(str): dbname """ vector_store_name = dbname + "_profile" + from dbgpt.serve.rag.connector import VectorStoreConnector from dbgpt.storage.vector_store.base import VectorStoreConfig - from dbgpt.storage.vector_store.connector import VectorStoreConnector vector_store_config = VectorStoreConfig(name=vector_store_name) vector_connector = VectorStoreConnector.from_default( @@ -102,7 +102,7 @@ def init_db_profile(self, db_summary_client, dbname): db_assembler = DBSchemaAssembler.load_from_connection( connector=db_summary_client.db, - vector_store_connector=vector_connector, + index_store=vector_connector.index_client, ) if len(db_assembler.get_chunks()) > 0: @@ -114,8 +114,8 @@ def init_db_profile(self, db_summary_client, dbname): def delete_db_profile(self, dbname): """Delete db profile.""" vector_store_name = dbname + "_profile" + from dbgpt.serve.rag.connector import VectorStoreConnector from dbgpt.storage.vector_store.base import VectorStoreConfig - from dbgpt.storage.vector_store.connector import VectorStoreConnector vector_store_config = VectorStoreConfig(name=vector_store_name) vector_connector = VectorStoreConnector.from_default( diff --git a/dbgpt/serve/datasource/service/service.py b/dbgpt/serve/datasource/service/service.py index 44c9c8274..fa3778326 100644 --- a/dbgpt/serve/datasource/service/service.py +++ b/dbgpt/serve/datasource/service/service.py @@ -13,10 +13,10 @@ ConnectConfigEntity, ) from dbgpt.serve.core import BaseService +from dbgpt.serve.rag.connector import VectorStoreConnector from dbgpt.storage.metadata import BaseDao from dbgpt.storage.schema import DBType from dbgpt.storage.vector_store.base import VectorStoreConfig -from dbgpt.storage.vector_store.connector import VectorStoreConnector from dbgpt.util.executor_utils import ExecutorFactory from ..api.schemas import DatasourceServeRequest, DatasourceServeResponse diff --git a/dbgpt/serve/prompt/api/endpoints.py b/dbgpt/serve/prompt/api/endpoints.py index 2da890eb8..87e1ac3a9 100644 --- a/dbgpt/serve/prompt/api/endpoints.py +++ b/dbgpt/serve/prompt/api/endpoints.py @@ -66,24 +66,24 @@ async def check_api_key( if request.url.path.startswith(f"/api/v1"): return None - if service.config.api_keys: - api_keys = _parse_api_keys(service.config.api_keys) - if auth is None or (token := auth.credentials) not in api_keys: - raise HTTPException( - status_code=401, - detail={ - "error": { - "message": "", - "type": "invalid_request_error", - "param": None, - "code": "invalid_api_key", - } - }, - ) - return token - else: - # api_keys not set; allow all - return None + # if service.config.api_keys: + # api_keys = _parse_api_keys(service.config.api_keys) + # if auth is None or (token := auth.credentials) not in api_keys: + # raise HTTPException( + # status_code=401, + # detail={ + # "error": { + # "message": "", + # "type": "invalid_request_error", + # "param": None, + # "code": "invalid_api_key", + # } + # }, + # ) + # return token + # else: + # # api_keys not set; allow all + # return None @router.get("/health") diff --git a/dbgpt/serve/prompt/tests/test_endpoints.py b/dbgpt/serve/prompt/tests/test_endpoints.py index 9bde556b8..f9fd1db74 100644 --- a/dbgpt/serve/prompt/tests/test_endpoints.py +++ b/dbgpt/serve/prompt/tests/test_endpoints.py @@ -78,18 +78,6 @@ async def test_api_health(client: AsyncClient, asystem_app, has_auth: bool): if has_auth: assert response.status_code == 200 assert response.json() == {"status": "ok"} - else: - assert response.status_code == 401 - assert response.json() == { - "detail": { - "error": { - "message": "", - "type": "invalid_request_error", - "param": None, - "code": "invalid_api_key", - } - } - } @pytest.mark.asyncio diff --git a/dbgpt/storage/vector_store/connector.py b/dbgpt/serve/rag/connector.py similarity index 92% rename from dbgpt/storage/vector_store/connector.py rename to dbgpt/serve/rag/connector.py index 4cd5bddd3..cb621b56c 100644 --- a/dbgpt/storage/vector_store/connector.py +++ b/dbgpt/serve/rag/connector.py @@ -60,20 +60,20 @@ def _load_vector_options() -> List[OptionValue]: class VectorStoreConnector: """The connector for vector store. - VectorStoreConnector, can connect different vector db provided load document api_v1 - and similar search api_v1. - - 1.load_document:knowledge document source into vector store.(Chroma, Milvus, - Weaviate). - 2.similar_search: similarity search from vector_store. - 3.similar_search_with_scores: similarity search with similarity score from - vector_store - - code example: - >>> from dbgpt.storage.vector_store.connector import VectorStoreConnector - - >>> vector_store_config = VectorStoreConfig - >>> vector_store_connector = VectorStoreConnector(vector_store_type="Chroma") + VectorStoreConnector, can connect different vector db provided load document api_v1 + and similar search api_v1. + + 1.load_document:knowledge document source into vector store.(Chroma, Milvus, + Weaviate). + 2.similar_search: similarity search from vector_store. + 3.similar_search_with_scores: similarity search with similarity score from + vector_store + + code example: + >>> from dbgpt.serve.rag.connector import VectorStoreConnector + l + >>> vector_store_config = VectorStoreConfig + >>> vector_store_connector = VectorStoreConnector(vector_store_type="Chroma") """ def __init__( @@ -140,6 +140,10 @@ def from_default( real_vector_store_type = cast(str, vector_store_type) return cls(real_vector_store_type, vector_store_config) + @property + def index_client(self): + return self.client + def load_document(self, chunks: List[Chunk]) -> List[str]: """Load document in vector database. diff --git a/dbgpt/serve/rag/operators/knowledge_space.py b/dbgpt/serve/rag/operators/knowledge_space.py index 52cb2eeb4..c37495ed5 100644 --- a/dbgpt/serve/rag/operators/knowledge_space.py +++ b/dbgpt/serve/rag/operators/knowledge_space.py @@ -25,8 +25,8 @@ from dbgpt.core.interface.operators.prompt_operator import BasePromptBuilderOperator from dbgpt.rag.embedding.embedding_factory import EmbeddingFactory from dbgpt.rag.retriever.embedding import EmbeddingRetriever +from dbgpt.serve.rag.connector import VectorStoreConnector from dbgpt.storage.vector_store.base import VectorStoreConfig -from dbgpt.storage.vector_store.connector import VectorStoreConnector from dbgpt.util.function_utils import rearrange_args_by_type from dbgpt.util.i18n_utils import _ diff --git a/dbgpt/serve/rag/retriever/knowledge_space.py b/dbgpt/serve/rag/retriever/knowledge_space.py index 6f2e3899e..6711c36db 100644 --- a/dbgpt/serve/rag/retriever/knowledge_space.py +++ b/dbgpt/serve/rag/retriever/knowledge_space.py @@ -6,7 +6,7 @@ from dbgpt.core import Chunk from dbgpt.rag.embedding.embedding_factory import EmbeddingFactory from dbgpt.rag.retriever.base import BaseRetriever -from dbgpt.storage.vector_store.connector import VectorStoreConnector +from dbgpt.serve.rag.connector import VectorStoreConnector from dbgpt.storage.vector_store.filters import MetadataFilters from dbgpt.util.executor_utils import ExecutorFactory, blocking_func_to_async diff --git a/dbgpt/serve/rag/service/service.py b/dbgpt/serve/rag/service/service.py index 8d7f55fc5..f18f4feaa 100644 --- a/dbgpt/serve/rag/service/service.py +++ b/dbgpt/serve/rag/service/service.py @@ -22,7 +22,7 @@ EMBEDDING_MODEL_CONFIG, KNOWLEDGE_UPLOAD_ROOT_PATH, ) -from dbgpt.core import Chunk, LLMClient +from dbgpt.core import LLMClient from dbgpt.core.awel.dag.dag_manager import DAGManager from dbgpt.model import DefaultLLMClient from dbgpt.model.cluster import WorkerManagerFactory @@ -31,12 +31,11 @@ from dbgpt.rag.embedding import EmbeddingFactory from dbgpt.rag.knowledge import ChunkStrategy, KnowledgeFactory, KnowledgeType from dbgpt.serve.core import BaseService +from dbgpt.serve.rag.connector import VectorStoreConnector from dbgpt.storage.metadata import BaseDao from dbgpt.storage.metadata._base_dao import QUERY_SPEC from dbgpt.storage.vector_store.base import VectorStoreConfig -from dbgpt.storage.vector_store.connector import VectorStoreConnector from dbgpt.util.dbgpts.loader import DBGPTsLoader -from dbgpt.util.executor_utils import ExecutorFactory from dbgpt.util.pagination_utils import PaginationResult from dbgpt.util.tracer import root_tracer, trace @@ -481,7 +480,6 @@ async def _sync_knowledge_document( ) ) logger.info(f"begin save document chunks, doc:{doc.doc_name}") - # return chunk_docs @trace("async_doc_embedding") async def async_doc_embedding( @@ -495,7 +493,7 @@ async def async_doc_embedding( - doc: doc """ - logger.info(f"async doc embedding sync, doc:{doc.doc_name}") + logger.info(f"async doc persist sync, doc:{doc.doc_name}") try: with root_tracer.start_span( "app.knowledge.assembler.persist", @@ -503,17 +501,17 @@ async def async_doc_embedding( ): assembler = await EmbeddingAssembler.aload_from_knowledge( knowledge=knowledge, + index_store=vector_store_connector.index_client, chunk_parameters=chunk_parameters, - vector_store_connector=vector_store_connector, ) chunk_docs = assembler.get_chunks() doc.chunk_size = len(chunk_docs) vector_ids = await assembler.apersist() doc.status = SyncStatus.FINISHED.name - doc.result = "document embedding success" + doc.result = "document persist into index store success" if vector_ids is not None: doc.vector_ids = ",".join(vector_ids) - logger.info(f"async document embedding, success:{doc.doc_name}") + logger.info(f"async document persist index store success:{doc.doc_name}") # save chunk details chunk_entities = [ DocumentChunkEntity( diff --git a/dbgpt/storage/full_text/__init__.py b/dbgpt/storage/full_text/__init__.py new file mode 100644 index 000000000..bb4066441 --- /dev/null +++ b/dbgpt/storage/full_text/__init__.py @@ -0,0 +1 @@ +"""Full Text Store Module.""" diff --git a/dbgpt/storage/full_text/base.py b/dbgpt/storage/full_text/base.py new file mode 100644 index 000000000..6643f2373 --- /dev/null +++ b/dbgpt/storage/full_text/base.py @@ -0,0 +1,69 @@ +"""Full text store base class.""" +import logging +from abc import abstractmethod +from concurrent.futures import Executor +from typing import List, Optional + +from dbgpt.core import Chunk +from dbgpt.rag.index.base import IndexStoreBase +from dbgpt.storage.vector_store.filters import MetadataFilters +from dbgpt.util.executor_utils import blocking_func_to_async + +logger = logging.getLogger(__name__) + + +class FullTextStoreBase(IndexStoreBase): + """Graph store base class.""" + + def __init__(self, executor: Optional[Executor] = None): + """Initialize vector store.""" + super().__init__(executor) + + @abstractmethod + def load_document(self, chunks: List[Chunk]) -> List[str]: + """Load document in index database. + + Args: + chunks(List[Chunk]): document chunks. + Return: + List[str]: chunk ids. + """ + + async def aload_document(self, chunks: List[Chunk]) -> List[str]: + """Async load document in index database. + + Args: + chunks(List[Chunk]): document chunks. + Return: + List[str]: chunk ids. + """ + return await blocking_func_to_async(self._executor, self.load_document, chunks) + + @abstractmethod + def similar_search_with_scores( + self, + text, + topk, + score_threshold: float, + filters: Optional[MetadataFilters] = None, + ) -> List[Chunk]: + """Similar search with scores in index database. + + Args: + text(str): The query text. + topk(int): The number of similar documents to return. + score_threshold(int): score_threshold: Optional, a floating point value + between 0 to 1 + filters(Optional[MetadataFilters]): metadata filters. + """ + + @abstractmethod + def delete_by_ids(self, ids: str) -> List[str]: + """Delete docs. + + Args: + ids(str): The vector ids to delete, separated by comma. + """ + + def delete_vector_name(self, index_name: str): + """Delete name.""" diff --git a/dbgpt/storage/full_text/elasticsearch.py b/dbgpt/storage/full_text/elasticsearch.py new file mode 100644 index 000000000..bfa8dd7a5 --- /dev/null +++ b/dbgpt/storage/full_text/elasticsearch.py @@ -0,0 +1,227 @@ +"""Elasticsearch document store.""" +import json +import os +from concurrent.futures import Executor, ThreadPoolExecutor +from typing import List, Optional + +from dbgpt.core import Chunk +from dbgpt.rag.index.base import logger +from dbgpt.storage.full_text.base import FullTextStoreBase +from dbgpt.storage.vector_store.elastic_store import ElasticsearchVectorConfig +from dbgpt.storage.vector_store.filters import MetadataFilters +from dbgpt.util import string_utils +from dbgpt.util.executor_utils import blocking_func_to_async + + +class ElasticDocumentConfig(ElasticsearchVectorConfig): + """Elasticsearch document store config.""" + + k1: Optional[float] = 2.0 + b: Optional[float] = 0.75 + + +class ElasticDocumentStore(FullTextStoreBase): + """Elasticsearch index store.""" + + def __init__( + self, es_config: ElasticDocumentConfig, executor: Optional[Executor] = None + ): + """Init elasticsearch index store. + + refer https://www.elastic.co/guide/en/elasticsearch/reference/8.9/index- + modules-similarity.html + TF/IDF based similarity that has built-in tf normalization and is supposed to + work better for short fields (like names). See Okapi_BM25 for more details. + This similarity has the following options: + """ + super().__init__() + from elasticsearch import Elasticsearch + + self._es_config = es_config + self._es_url = es_config.uri or os.getenv("ELASTICSEARCH_URL", "localhost") + self._es_port = es_config.port or os.getenv("ELASTICSEARCH_PORT", "9200") + self._es_username = es_config.user or os.getenv("ELASTICSEARCH_USER", "elastic") + self._es_password = es_config.password or os.getenv( + "ELASTICSEARCH_PASSWORD", "dbgpt" + ) + self._index_name = es_config.name.lower() + if string_utils.contains_chinese(es_config.name): + bytes_str = es_config.name.encode("utf-8") + hex_str = bytes_str.hex() + self._index_name = "dbgpt_" + hex_str + # k1 (Optional[float]): Controls non-linear term frequency normalization + # (saturation). The default value is 2.0. + self._k1 = es_config.k1 or 2.0 + # b (Optional[float]): Controls to what degree document length normalizes + # tf values. The default value is 0.75. + self._b = es_config.b or 0.75 + if self._es_username and self._es_password: + self._es_client = Elasticsearch( + hosts=[f"http://{self._es_url}:{self._es_port}"], + basic_auth=(self._es_username, self._es_password), + ) + else: + self._es_client = Elasticsearch( + hosts=[f"http://{self._es_url}:{self._es_port}"], + ) + self._es_index_settings = { + "analysis": {"analyzer": {"default": {"type": "standard"}}}, + "similarity": { + "custom_bm25": { + "type": "BM25", + "k1": self._k1, + "b": self._b, + } + }, + } + self._es_mappings = { + "properties": { + "content": { + "type": "text", + "similarity": "custom_bm25", + }, + "metadata": { + "type": "keyword", + }, + } + } + + if not self._es_client.indices.exists(index=self._index_name): + self._es_client.indices.create( + index=self._index_name, + mappings=self._es_mappings, + settings=self._es_index_settings, + ) + self._executor = executor or ThreadPoolExecutor() + + def load_document(self, chunks: List[Chunk]) -> List[str]: + """Load document in elasticsearch. + + Args: + chunks(List[Chunk]): document chunks. + + Return: + List[str]: chunk ids. + """ + try: + from elasticsearch.helpers import bulk + except ImportError: + raise ValueError("Please install package `pip install elasticsearch`.") + es_requests = [] + ids = [] + contents = [chunk.content for chunk in chunks] + metadatas = [json.dumps(chunk.metadata) for chunk in chunks] + chunk_ids = [chunk.chunk_id for chunk in chunks] + for i, content in enumerate(contents): + es_request = { + "_op_type": "index", + "_index": self._index_name, + "content": content, + "metadata": metadatas[i], + "_id": chunk_ids[i], + } + ids.append(chunk_ids[i]) + es_requests.append(es_request) + bulk(self._es_client, es_requests) + self._es_client.indices.refresh(index=self._index_name) + return ids + + def similar_search( + self, text: str, topk: int, filters: Optional[MetadataFilters] = None + ) -> List[Chunk]: + """Search similar text. + + Args: + text(str): text. + topk(int): topk. + filters(MetadataFilters): filters. + + Return: + List[Chunk]: similar text. + """ + es_query = {"query": {"match": {"content": text}}} + res = self._es_client.search(index=self._index_name, body=es_query) + + chunks = [] + for r in res["hits"]["hits"]: + chunks.append( + Chunk( + chunk_id=r["_id"], + content=r["_source"]["content"], + metadata=json.loads(r["_source"]["metadata"]), + ) + ) + return chunks[:topk] + + def similar_search_with_scores( + self, + text, + top_k: int = 10, + score_threshold: float = 0.3, + filters: Optional[MetadataFilters] = None, + ) -> List[Chunk]: + """Search similar text with scores. + + Args: + text(str): text. + top_k(int): top k. + min_score(float): min score. + filters(MetadataFilters): filters. + + Return: + List[Tuple[str, float]]: similar text with scores. + """ + es_query = {"query": {"match": {"content": text}}} + res = self._es_client.search(index=self._index_name, body=es_query) + + chunks_with_scores = [] + for r in res["hits"]["hits"]: + if r["_score"] >= score_threshold: + chunks_with_scores.append( + Chunk( + chunk_id=r["_id"], + content=r["_source"]["content"], + metadata=json.loads(r["_source"]["metadata"]), + score=r["_score"], + ) + ) + if score_threshold is not None and len(chunks_with_scores) == 0: + logger.warning( + "No relevant docs were retrieved using the relevance score" + f" threshold {score_threshold}" + ) + return chunks_with_scores[:top_k] + + async def aload_document(self, chunks: List[Chunk]) -> List[str]: + """Async load document in elasticsearch. + + Args: + chunks(List[Chunk]): document chunks. + Return: + List[str]: chunk ids. + """ + return await blocking_func_to_async(self._executor, self.load_document, chunks) + + def delete_by_ids(self, ids: str) -> List[str]: + """Delete document by ids. + + Args: + ids(List[str]): document ids. + Return: + return ids. + """ + id_list = ids.split(",") + bulk_body = [ + {"delete": {"_index": self._index_name, "_id": doc_id}} + for doc_id in id_list + ] + self._es_client.bulk(body=bulk_body) + return id_list + + def delete_vector_name(self, index_name: str): + """Delete index by name. + + Args: + index_name(str): The name of index to delete. + """ + self._es_client.indices.delete(index=self._index_name) diff --git a/dbgpt/storage/full_text/opensearch.py b/dbgpt/storage/full_text/opensearch.py new file mode 100644 index 000000000..d9a6ec378 --- /dev/null +++ b/dbgpt/storage/full_text/opensearch.py @@ -0,0 +1,63 @@ +"""OpenSearch index store.""" +from typing import List, Optional + +from dbgpt.core import Chunk +from dbgpt.rag.index.base import IndexStoreBase +from dbgpt.storage.vector_store.filters import MetadataFilters + + +class OpenSearch(IndexStoreBase): + """OpenSearch index store.""" + + def load_document(self, chunks: List[Chunk]) -> List[str]: + """Load document in index database. + + Args: + chunks(List[Chunk]): document chunks. + Return: + List[str]: chunk ids. + """ + pass + + def aload_document(self, chunks: List[Chunk]) -> List[str]: + """Async load document in index database. + + Args: + chunks(List[Chunk]): document chunks. + Return: + List[str]: chunk ids. + """ + pass + + def similar_search_with_scores( + self, + text, + topk, + score_threshold: float, + filters: Optional[MetadataFilters] = None, + ) -> List[Chunk]: + """Similar search with scores in index database. + + Args: + text(str): The query text. + topk(int): The number of similar documents to return. + score_threshold(int): score_threshold: Optional, a floating point value + between 0 to 1 + filters(Optional[MetadataFilters]): metadata filters. + Return: + List[Chunk]: The similar documents. + """ + pass + + def delete_by_ids(self, ids: str): + """Delete docs. + + Args: + ids(str): The vector ids to delete, separated by comma. + + """ + pass + + def delete_vector_name(self, index_name: str): + """Delete name.""" + pass diff --git a/dbgpt/storage/knowledge_graph/base.py b/dbgpt/storage/knowledge_graph/base.py index 55dda8a35..c10cb63de 100644 --- a/dbgpt/storage/knowledge_graph/base.py +++ b/dbgpt/storage/knowledge_graph/base.py @@ -1,7 +1,7 @@ """Knowledge graph base class.""" import logging from abc import ABC, abstractmethod -from typing import Optional +from typing import List, Optional from dbgpt._private.pydantic import ConfigDict from dbgpt.rag.index.base import IndexStoreBase, IndexStoreConfig @@ -23,6 +23,6 @@ class KnowledgeGraphBase(IndexStoreBase, ABC): def query_graph(self, limit: Optional[int] = None) -> Graph: """Get graph data.""" - def delete_by_ids(self, ids: str): + def delete_by_ids(self, ids: str) -> List[str]: """Delete document by ids.""" raise Exception("Delete document not supported by knowledge graph") diff --git a/dbgpt/storage/vector_store/__init__.py b/dbgpt/storage/vector_store/__init__.py index 8314e4a4f..cce559267 100644 --- a/dbgpt/storage/vector_store/__init__.py +++ b/dbgpt/storage/vector_store/__init__.py @@ -62,6 +62,15 @@ def _import_openspg() -> Tuple[Type, Type]: return OpenSPG, OpenSPGConfig +def _import_full_text() -> Tuple[Type, Type]: + from dbgpt.storage.full_text.elasticsearch import ( + ElasticDocumentConfig, + ElasticDocumentStore, + ) + + return ElasticDocumentStore, ElasticDocumentConfig + + def __getattr__(name: str) -> Tuple[Type, Type]: if name == "Chroma": return _import_chroma() @@ -79,6 +88,8 @@ def __getattr__(name: str) -> Tuple[Type, Type]: return _import_builtin_knowledge_graph() elif name == "OpenSPG": return _import_openspg() + elif name == "FullText": + return _import_full_text() else: raise AttributeError(f"Could not find: {name}") @@ -94,4 +105,6 @@ def __getattr__(name: str) -> Tuple[Type, Type]: __knowledge_graph__ = ["KnowledgeGraph", "OpenSPG"] -__all__ = __vector_store__ + __knowledge_graph__ +__document_store__ = ["FullText"] + +__all__ = __vector_store__ + __knowledge_graph__ + __document_store__ diff --git a/dbgpt/storage/vector_store/elastic_store.py b/dbgpt/storage/vector_store/elastic_store.py index 328af163b..dac79d9e8 100644 --- a/dbgpt/storage/vector_store/elastic_store.py +++ b/dbgpt/storage/vector_store/elastic_store.py @@ -145,7 +145,7 @@ def __init__(self, vector_store_config: ElasticsearchVectorConfig) -> None: elasticsearch_vector_config.get("name") or vector_store_config.name ) # name to hex - if string_utils.is_all_chinese(self.collection_name): + if string_utils.contains_chinese(self.collection_name): bytes_str = self.collection_name.encode("utf-8") hex_str = bytes_str.hex() self.collection_name = hex_str diff --git a/dbgpt/storage/vector_store/milvus_store.py b/dbgpt/storage/vector_store/milvus_store.py index 1e0a612b6..b8b036770 100644 --- a/dbgpt/storage/vector_store/milvus_store.py +++ b/dbgpt/storage/vector_store/milvus_store.py @@ -174,7 +174,7 @@ def __init__(self, vector_store_config: MilvusVectorConfig) -> None: self.collection_name = ( milvus_vector_config.get("name") or vector_store_config.name ) - if string_utils.is_all_chinese(self.collection_name): + if string_utils.contains_chinese(self.collection_name): bytes_str = self.collection_name.encode("utf-8") hex_str = bytes_str.hex() self.collection_name = hex_str diff --git a/dbgpt/util/string_utils.py b/dbgpt/util/string_utils.py index e32eb1288..b7534bb50 100644 --- a/dbgpt/util/string_utils.py +++ b/dbgpt/util/string_utils.py @@ -9,6 +9,11 @@ def is_all_chinese(text): return match is not None +def contains_chinese(text): + """Check if the text contains Chinese characters.""" + return re.search(r"[\u4e00-\u9fa5]", text) is not None + + def is_number_chinese(text): ### Determine whether the string is numbers and Chinese pattern = re.compile(r"^[\d一-龥]+$") diff --git a/docs/docs/awel/cookbook/first_rag_with_awel.md b/docs/docs/awel/cookbook/first_rag_with_awel.md index a2f0757ae..aa4da6dec 100644 --- a/docs/docs/awel/cookbook/first_rag_with_awel.md +++ b/docs/docs/awel/cookbook/first_rag_with_awel.md @@ -76,14 +76,12 @@ from dbgpt.core.awel import DAG from dbgpt.rag import ChunkParameters from dbgpt.rag.knowledge import KnowledgeType from dbgpt.rag.operators import EmbeddingAssemblerOperator, KnowledgeOperator -from dbgpt.storage.vector_store.chroma_store import ChromaVectorConfig -from dbgpt.storage.vector_store.connector import VectorStoreConnector +from dbgpt.storage.vector_store.chroma_store import ChromaStore, ChromaVectorConfig # Delete old vector store directory(/tmp/awel_rag_test_vector_store) shutil.rmtree("/tmp/awel_rag_test_vector_store", ignore_errors=True) -vector_connector = VectorStoreConnector.from_default( - "Chroma", +vector_store = ChromaStore( vector_store_config=ChromaVectorConfig( name="test_vstore", persist_path="/tmp/awel_rag_test_vector_store", @@ -95,7 +93,7 @@ with DAG("load_knowledge_dag") as knowledge_dag: # Load knowledge from URL knowledge_task = KnowledgeOperator(knowledge_type=KnowledgeType.URL.name) assembler_task = EmbeddingAssemblerOperator( - vector_store_connector=vector_connector, + index_store=vector_store, chunk_parameters=ChunkParameters(chunk_strategy="CHUNK_BY_SIZE") ) knowledge_task >> assembler_task @@ -116,7 +114,7 @@ from dbgpt.rag.operators import EmbeddingRetrieverOperator with DAG("retriever_dag") as retriever_dag: retriever_task = EmbeddingRetrieverOperator( top_k=3, - vector_store_connector=vector_connector, + index_store=vector_store, ) content_task = MapOperator(lambda cks: "\n".join(c.content for c in cks)) retriever_task >> content_task @@ -218,7 +216,7 @@ with DAG("llm_rag_dag") as rag_dag: input_task = InputOperator(input_source=InputSource.from_callable()) retriever_task = EmbeddingRetrieverOperator( top_k=3, - vector_store_connector=vector_connector, + index_store=vector_store, ) content_task = MapOperator(lambda cks: "\n".join(c.content for c in cks)) @@ -256,10 +254,10 @@ from dbgpt.core.awel import DAG, MapOperator, InputOperator, JoinOperator, Input from dbgpt.core.operators import PromptBuilderOperator, RequestBuilderOperator from dbgpt.rag import ChunkParameters from dbgpt.rag.knowledge import KnowledgeType -from dbgpt.rag.operators import EmbeddingAssemblerOperator, KnowledgeOperator, EmbeddingRetrieverOperator +from dbgpt.rag.operators import EmbeddingAssemblerOperator, KnowledgeOperator, + EmbeddingRetrieverOperator from dbgpt.rag.embedding import DefaultEmbeddingFactory -from dbgpt.storage.vector_store.chroma_store import ChromaVectorConfig -from dbgpt.storage.vector_store.connector import VectorStoreConnector +from dbgpt.storage.vector_store.chroma_store import ChromaStore, ChromaVectorConfig from dbgpt.model.operators import LLMOperator from dbgpt.model.proxy import OpenAILLMClient @@ -273,8 +271,7 @@ llm_client = OpenAILLMClient() # Delete old vector store directory(/tmp/awel_rag_test_vector_store) shutil.rmtree("/tmp/awel_rag_test_vector_store", ignore_errors=True) -vector_connector = VectorStoreConnector.from_default( - "Chroma", +vector_store = ChromaStore( vector_store_config=ChromaVectorConfig( name="test_vstore", persist_path="/tmp/awel_rag_test_vector_store", @@ -286,7 +283,7 @@ with DAG("load_knowledge_dag") as knowledge_dag: # Load knowledge from URL knowledge_task = KnowledgeOperator(knowledge_type=KnowledgeType.URL.name) assembler_task = EmbeddingAssemblerOperator( - vector_store_connector=vector_connector, + index_store=vector_store, chunk_parameters=ChunkParameters(chunk_strategy="CHUNK_BY_SIZE") ) knowledge_task >> assembler_task @@ -294,7 +291,6 @@ with DAG("load_knowledge_dag") as knowledge_dag: chunks = asyncio.run(assembler_task.call("https://docs.dbgpt.site/docs/latest/awel/")) print(f"Chunk length: {len(chunks)}\n") - prompt = """Based on the known information below, provide users with professional and concise answers to their questions. If the answer cannot be obtained from the provided content, please say: "The information provided in the knowledge base is not sufficient to answer this question.". @@ -305,17 +301,17 @@ It is forbidden to make up information randomly. When answering, it is best to s {question} """ - with DAG("llm_rag_dag") as rag_dag: input_task = InputOperator(input_source=InputSource.from_callable()) retriever_task = EmbeddingRetrieverOperator( top_k=3, - vector_store_connector=vector_connector, + index_store=vector_store, ) content_task = MapOperator(lambda cks: "\n".join(c.content for c in cks)) - - merge_task = JoinOperator(lambda context, question: {"context": context, "question": question}) - + + merge_task = JoinOperator( + lambda context, question: {"context": context, "question": question}) + prompt_task = PromptBuilderOperator(prompt) # The model is gpt-3.5-turbo, you can replace it with other models. req_build_task = RequestBuilderOperator(model="gpt-3.5-turbo") diff --git a/docs/docs/awel/cookbook/write_your_chat_database.md b/docs/docs/awel/cookbook/write_your_chat_database.md index c6d9af996..1e9e9d26d 100644 --- a/docs/docs/awel/cookbook/write_your_chat_database.md +++ b/docs/docs/awel/cookbook/write_your_chat_database.md @@ -84,19 +84,19 @@ import shutil from dbgpt.core.awel import DAG, InputOperator from dbgpt.rag import ChunkParameters from dbgpt.rag.operators import DBSchemaAssemblerOperator -from dbgpt.storage.vector_store.chroma_store import ChromaVectorConfig -from dbgpt.storage.vector_store.connector import VectorStoreConnector +from dbgpt.storage.vector_store.chroma_store import ChromaVectorConfig, ChromaStore # Delete old vector store directory(/tmp/awel_with_data_vector_store) shutil.rmtree("/tmp/awel_with_data_vector_store", ignore_errors=True) -vector_connector = VectorStoreConnector.from_default( - "Chroma", - vector_store_config=ChromaVectorConfig( - name="db_schema_vector_store", - persist_path="/tmp/awel_with_data_vector_store", - ), - embedding_fn=embeddings +vector_store = ChromaStore( + ChromaVectorConfig( + embedding_fn=embeddings, + vector_store_config=ChromaVectorConfig( + name="db_schema_vector_store", + persist_path="/tmp/awel_with_data_vector_store", + ), + ) ) with DAG("load_schema_dag") as load_schema_dag: @@ -104,7 +104,7 @@ with DAG("load_schema_dag") as load_schema_dag: # Load database schema to vector store assembler_task = DBSchemaAssemblerOperator( connector=db_conn, - vector_store_connector=vector_connector, + index_store=vector_store, chunk_parameters=ChunkParameters(chunk_strategy="CHUNK_BY_SIZE") ) input_task >> assembler_task @@ -124,7 +124,7 @@ with DAG("retrieve_schema_dag") as retrieve_schema_dag: # Retrieve database schema from vector store retriever_task = DBSchemaRetrieverOperator( top_k=1, - vector_store_connector=vector_connector, + index_store=vector_store, ) input_task >> retriever_task @@ -244,7 +244,7 @@ with DAG("chat_data_dag") as chat_data_dag: input_task = InputOperator(input_source=InputSource.from_callable()) retriever_task = DBSchemaRetrieverOperator( top_k=1, - vector_store_connector=vector_connector, + index_store=vector_store, ) content_task = MapOperator(lambda cks: [c.content for c in cks]) merge_task = JoinOperator(lambda table_info, ext_dict: {"table_info": table_info, **ext_dict}) @@ -456,8 +456,7 @@ from dbgpt.model.proxy import OpenAILLMClient from dbgpt.rag import ChunkParameters from dbgpt.rag.embedding import DefaultEmbeddingFactory from dbgpt.rag.operators import DBSchemaAssemblerOperator, DBSchemaRetrieverOperator -from dbgpt.storage.vector_store.chroma_store import ChromaVectorConfig -from dbgpt.storage.vector_store.connector import VectorStoreConnector +from dbgpt.storage.vector_store.chroma_store import ChromaVectorConfig, ChromaStore # Delete old vector store directory(/tmp/awel_with_data_vector_store) shutil.rmtree("/tmp/awel_with_data_vector_store", ignore_errors=True) @@ -488,13 +487,14 @@ db_conn.create_temp_tables( } ) -vector_connector = VectorStoreConnector.from_default( - "Chroma", - vector_store_config=ChromaVectorConfig( - name="db_schema_vector_store", - persist_path="/tmp/awel_with_data_vector_store", - ), - embedding_fn=embeddings, +vector_store = ChromaStore( + ChromaVectorConfig( + embedding_fn=embeddings, + vector_store_config=ChromaVectorConfig( + name="db_schema_vector_store", + persist_path="/tmp/awel_with_data_vector_store", + ), + ) ) antv_charts = [ @@ -627,7 +627,7 @@ with DAG("load_schema_dag") as load_schema_dag: # Load database schema to vector store assembler_task = DBSchemaAssemblerOperator( connector=db_conn, - vector_store_connector=vector_connector, + index_store=vector_store, chunk_parameters=ChunkParameters(chunk_strategy="CHUNK_BY_SIZE"), ) input_task >> assembler_task @@ -635,12 +635,11 @@ with DAG("load_schema_dag") as load_schema_dag: chunks = asyncio.run(assembler_task.call()) print(chunks) - with DAG("chat_data_dag") as chat_data_dag: input_task = InputOperator(input_source=InputSource.from_callable()) retriever_task = DBSchemaRetrieverOperator( top_k=1, - vector_store_connector=vector_connector, + index_store=vector_store, ) content_task = MapOperator(lambda cks: [c.content for c in cks]) merge_task = JoinOperator( @@ -653,11 +652,11 @@ with DAG("chat_data_dag") as chat_data_dag: db_query_task = DatasourceOperator(connector=db_conn) ( - input_task - >> MapOperator(lambda x: x["user_input"]) - >> retriever_task - >> content_task - >> merge_task + input_task + >> MapOperator(lambda x: x["user_input"]) + >> retriever_task + >> content_task + >> merge_task ) input_task >> merge_task merge_task >> prompt_task >> req_build_task >> llm_task >> sql_parse_task diff --git a/docs/docs/cookbook/rag/graph_rag_app_develop.md b/docs/docs/cookbook/rag/graph_rag_app_develop.md index 18d5682a0..d0a690beb 100644 --- a/docs/docs/cookbook/rag/graph_rag_app_develop.md +++ b/docs/docs/cookbook/rag/graph_rag_app_develop.md @@ -129,19 +129,20 @@ To maintain compatibility with existing conventional RAG frameworks, we continue ```python from dbgpt.model.proxy.llms.chatgpt import OpenAILLMClient -from dbgpt.storage.vector_store.base import VectorStoreConfig -from dbgpt.storage.vector_store.connector import VectorStoreConnector - -def _create_vector_connector(): - """Create vector connector.""" - return VectorStoreConnector( - vector_store_type="KnowledgeGraph", - vector_store_config=VectorStoreConfig( - name="graph_rag_test_kg", +from dbgpt.storage.knowledge_graph.knowledge_graph import ( + BuiltinKnowledgeGraph, + BuiltinKnowledgeGraphConfig, +) + +def _create_kg_connector(): + """Create knowledge graph connector.""" + return BuiltinKnowledgeGraph( + config=BuiltinKnowledgeGraphConfig( + name="graph_rag_test", embedding_fn=None, llm_client=OpenAILLMClient(), - model_name="gpt-4" - ) + model_name="gpt-4", + ), ) ``` @@ -162,13 +163,13 @@ from dbgpt.rag.knowledge import KnowledgeFactory async def main(): file_path = os.path.join(ROOT_PATH, "examples/test_files/tranformers_story.md") knowledge = KnowledgeFactory.from_file_path(file_path) - vector_connector = _create_kg_connector() + graph_store = _create_kg_connector() chunk_parameters = ChunkParameters(chunk_strategy="CHUNK_BY_SIZE") # get embedding assembler assembler = EmbeddingAssembler.load_from_knowledge( knowledge=knowledge, chunk_parameters=chunk_parameters, - vector_store_connector=vector_connector, + index_store=graph_store, ) assembler.persist() # get embeddings retriever @@ -178,7 +179,7 @@ async def main(): score_threshold=0.3 ) print(f"embedding rag example results:{chunks}") - vector_connector.delete_vector_name("graph_rag_test") + graph_store.delete_vector_name("graph_rag_test") ``` diff --git a/docs/docs/cookbook/rag/keyword_rag_app_develop.md b/docs/docs/cookbook/rag/keyword_rag_app_develop.md new file mode 100644 index 000000000..e02c89466 --- /dev/null +++ b/docs/docs/cookbook/rag/keyword_rag_app_develop.md @@ -0,0 +1,132 @@ +# Keyword Search RAG User Manual + +In this example, we will show how to use the Full Text Search RAG framework in DB-GPT. Using traditional full-text search to implement RAG can, to some extent, alleviate the uncertainty and interpretability issues brought about by vector database retrieval. + +You can refer to the python example file `DB-GPT/examples/rag/keyword_rag_example.py` in the source code. This example demonstrates how to load knowledge from a document and persist it in a full text store. Subsequently, it recalls knowledge relevant to your question by searching for keywords in the full text store. + +### The Constraints of Vector Retrieve +Vector Retrieve offers clear advantages, the technology does have some constraints: +- Computationally Intensive - Generating vectors for entire corpora of documents and querying based on vector similarity requires significantly more processing power than keyword indexing and matching. Latency can be an issue if systems are not properly optimized. +- Requires Massive Training Data - The semantic connections made by models like BERT rely on being trained on massive, diverse datasets over long periods. This data may not be readily available for specialized corpora, limiting the quality of vectors. +- Less Effective for Precise Keyword Queries - Vector search adds little benefit when queries contain clear, precise keywords and intent. Searching for "apple fruit" would likely return poorer results than just "apple" because the vector focuses on overall meaning more than keywords. + +### How to choose Between Vector Retrieve and Keyword Retrieve ? +When is vector search preferable over keyword search, and vice versa? Here are some best practices on when to use each: + +When to Use Vector Search + +Early stage research when query intent is vague or broad +Need to grasp concepts and subject matter more than keywords +Exploring a topic with loose information needs +User search queries are more conversational +The semantic capabilities of vector search allow it to shine for these use cases. It can point users in the right direction even with limited keywords or understanding of a topic. + +When to Use Keyword Search: + +- Looking for something ultra-specific and already understand the topic +- Research is narrowly focused with clear objectives +- Queries contain unique proper nouns like brand names +- Needs require fast results more than exhaustive relevancy +For precise or time-sensitive queries, keyword search will target the exact terms efficiently. Vector search may meander with unnecessary semantic expansion. + +The search method should align with the user's intent and specificity needs. Vector search for exploration, keyword search for precision. With both available, users get the best of both worlds. + +### Install Dependencies + +First, you need to install the `dbgpt` library. + +```bash +pip install "dbgpt[rag]>=0.5.8" +```` + +### Prepare Full Text Search Engine + +`Elasticsearch` is the distributed search and analytics engine at the heart of the Elastic Stack. Logstash and Beats facilitate collecting, aggregating, and enriching your data and storing it in Elasticsearch. Kibana enables you to interactively explore, visualize, and share insights into your data and manage and monitor the stack. Elasticsearch is where the indexing, search, and analysis magic happens. +refer https://www.elastic.co/guide/en/elasticsearch/reference/current/elasticsearch-intro.html + +Install Elasticsearch refer https://www.elastic.co/guide/en/elasticsearch/reference/current/install-elasticsearch.html + +### Keyword Search Configuration + +Set variables below in `.env` file, let DB-GPT know how to connect to Full Text Search Engine Storage. + +``` +ELASTICSEARCH_URL=localhost +ELASTICSEARCH_PORT=9200 +ELASTICSEARCH_USERNAME=elastic +ELASTICSEARCH_PASSWORD=dbgpt +``` + + + +### Load into Full Text Search Engine + +When using a `Elaticsearch` full text engine as the underlying knowledge storage platform, it is necessary to build document inverted index to facilitate the archiving and retrieval of documents. + +The following code demonstrates how to create a connection to the Elasticsearch search engine. +```python +from dbgpt.storage.full_text.elasticsearch import ElasticDocumentConfig, \ + ElasticDocumentStore +def _create_es_connector(): + """Create es connector.""" + config = ElasticDocumentConfig( + name="keyword_rag_test", + uri="localhost", + port="9200", + user="elastic", + password="dbgpt", + ) + + return ElasticDocumentStore(config) +``` + + + +### Keyword Retrieve from Full Text Search Engine + +Keyword Retrieve is a simple and efficient way to retrieve relevant information from a large number of documents. It is based on the full-text search engine Elasticsearch. The user can input a query and retrieve the most relevant documents based on the query. +```python +import os + +from dbgpt.configs.model_config import ROOT_PATH +from dbgpt.rag import ChunkParameters +from dbgpt.rag.assembler import EmbeddingAssembler +from dbgpt.rag.knowledge import KnowledgeFactory + +async def main(): + file_path = os.path.join(ROOT_PATH, "docs/docs/awel/awel.md") + knowledge = KnowledgeFactory.from_file_path(file_path) + keyword_store = _create_es_connector() + chunk_parameters = ChunkParameters(chunk_strategy="CHUNK_BY_SIZE") + # get embedding assembler + assembler = EmbeddingAssembler.load_from_knowledge( + knowledge=knowledge, + chunk_parameters=chunk_parameters, + index_store=keyword_store, + ) + assembler.persist() + # get embeddings retriever + retriever = assembler.as_retriever(3) + chunks = await retriever.aretrieve_with_scores("what is awel talk about", 0.3) + print(f"keyword rag example results:{chunks}") +``` + + + + +### Chat Knowledge via Keyword RAG + +Here we demonstrate how to achieve chat knowledge through Keyword RAG on web page. + +First, create a knowledge base using the `Full Text` type. Upload the knowledge documents and wait for the slicing to complete. + + +

+ +

+ + +Start chat to knowledge based on Keyword RAG. +

+ +

diff --git a/docs/sidebars.js b/docs/sidebars.js index 07d7b0c93..164b662ac 100755 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -477,7 +477,10 @@ const sidebars = { { type: 'doc', id: 'cookbook/rag/graph_rag_app_develop', - } + },{ + type: 'doc', + id: 'cookbook/rag/keyword_rag_app_develop', + }, ], }, { diff --git a/docs/static/img/chat_knowledge/keyword_rag/create_keyword_rag.jpg b/docs/static/img/chat_knowledge/keyword_rag/create_keyword_rag.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3a5132bf41f4717e731c65030e4a2f1dd40aa8c8 GIT binary patch literal 230105 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

2OR8RX|;nDs;AFtWNo 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

2V~QpV*0$hOWb=6+N~UZqpokuUmGI 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 VectorStoreConnector: +def _create_vector_connector(embeddings: Embeddings): """Create vector connector.""" - return VectorStoreConnector.from_default( - "Chroma", - vector_store_config=ChromaVectorConfig( - name=space_name, - persist_path=os.path.join(PILOT_PATH, "data"), - ), + config = ChromaVectorConfig( + persist_path=PILOT_PATH, + name="embedding_rag_test", embedding_fn=embeddings, ) + return ChromaStore(config) + async def main(): file_path = os.path.join(ROOT_PATH, "docs/docs/awel/awel.md") @@ -52,7 +48,7 @@ async def main(): assembler = EmbeddingAssembler.load_from_knowledge( knowledge=knowledge, chunk_parameters=chunk_parameters, - vector_store_connector=vector_connector, + index_store=vector_connector, ) assembler.persist() diff --git a/examples/rag/simple_dbschema_retriever_example.py b/examples/rag/simple_dbschema_retriever_example.py index 0b524cab5..c159e6b39 100644 --- a/examples/rag/simple_dbschema_retriever_example.py +++ b/examples/rag/simple_dbschema_retriever_example.py @@ -11,7 +11,7 @@ retriever_task = DBSchemaRetrieverOperator( connector=_create_temporary_connection() top_k=1, - vector_store_connector=vector_store_connector + index_store=vector_store_connector ) ``` @@ -27,31 +27,29 @@ from dbgpt._private.config import Config from dbgpt._private.pydantic import BaseModel, Field -from dbgpt.configs.model_config import EMBEDDING_MODEL_CONFIG, PILOT_PATH +from dbgpt.configs.model_config import MODEL_PATH, PILOT_PATH from dbgpt.core import Chunk -from dbgpt.core.awel import DAG, HttpTrigger, InputOperator, JoinOperator, MapOperator +from dbgpt.core.awel import DAG, HttpTrigger, JoinOperator, MapOperator from dbgpt.datasource.rdbms.conn_sqlite import SQLiteTempConnector from dbgpt.rag.embedding import DefaultEmbeddingFactory from dbgpt.rag.operators import DBSchemaAssemblerOperator, DBSchemaRetrieverOperator -from dbgpt.storage.vector_store.chroma_store import ChromaVectorConfig -from dbgpt.storage.vector_store.connector import VectorStoreConnector +from dbgpt.storage.vector_store.chroma_store import ChromaStore, ChromaVectorConfig CFG = Config() def _create_vector_connector(): """Create vector connector.""" - return VectorStoreConnector.from_default( - "Chroma", - vector_store_config=ChromaVectorConfig( - name="vector_name", - persist_path=os.path.join(PILOT_PATH, "data"), - ), + config = ChromaVectorConfig( + persist_path=os.path.join(PILOT_PATH, "data"), + name="vector_name", embedding_fn=DefaultEmbeddingFactory( - default_model_name=EMBEDDING_MODEL_CONFIG[CFG.EMBEDDING_MODEL], + default_model_name=os.path.join(MODEL_PATH, "text2vec-large-chinese"), ).create(), ) + return ChromaStore(config) + def _create_temporary_connection(): """Create a temporary database connection for testing.""" @@ -104,17 +102,17 @@ async def map(self, input_value: TriggerReqBody) -> Dict: ) request_handle_task = RequestHandleOperator() query_operator = MapOperator(lambda request: request["query"]) - vector_store_connector = _create_vector_connector() + index_store = _create_vector_connector() connector = _create_temporary_connection() assembler_task = DBSchemaAssemblerOperator( connector=connector, - vector_store_connector=vector_store_connector, + index_store=index_store, ) join_operator = JoinOperator(combine_function=_join_fn) retriever_task = DBSchemaRetrieverOperator( connector=_create_temporary_connection(), top_k=1, - vector_store_connector=vector_store_connector, + index_store=index_store, ) result_parse_task = MapOperator(lambda chunks: [chunk.content for chunk in chunks]) trigger >> assembler_task >> join_operator diff --git a/examples/rag/simple_rag_embedding_example.py b/examples/rag/simple_rag_embedding_example.py index 56d9dcc7e..15b14f419 100644 --- a/examples/rag/simple_rag_embedding_example.py +++ b/examples/rag/simple_rag_embedding_example.py @@ -16,30 +16,28 @@ from dbgpt._private.config import Config from dbgpt._private.pydantic import BaseModel, Field -from dbgpt.configs.model_config import EMBEDDING_MODEL_CONFIG, PILOT_PATH +from dbgpt.configs.model_config import EMBEDDING_MODEL_CONFIG, MODEL_PATH, PILOT_PATH from dbgpt.core.awel import DAG, HttpTrigger, MapOperator from dbgpt.rag.embedding import DefaultEmbeddingFactory from dbgpt.rag.knowledge import KnowledgeType from dbgpt.rag.operators import EmbeddingAssemblerOperator, KnowledgeOperator -from dbgpt.storage.vector_store.chroma_store import ChromaVectorConfig -from dbgpt.storage.vector_store.connector import VectorStoreConnector +from dbgpt.storage.vector_store.chroma_store import ChromaStore, ChromaVectorConfig CFG = Config() -def _create_vector_connector() -> VectorStoreConnector: +def _create_vector_connector(): """Create vector connector.""" - return VectorStoreConnector.from_default( - "Chroma", - vector_store_config=ChromaVectorConfig( - name="vector_name", - persist_path=os.path.join(PILOT_PATH, "data"), - ), + config = ChromaVectorConfig( + persist_path=PILOT_PATH, + name="embedding_rag_test", embedding_fn=DefaultEmbeddingFactory( - default_model_name=EMBEDDING_MODEL_CONFIG[CFG.EMBEDDING_MODEL], + default_model_name=os.path.join(MODEL_PATH, "text2vec-large-chinese"), ).create(), ) + return ChromaStore(config) + class TriggerReqBody(BaseModel): url: str = Field(..., description="url") @@ -75,10 +73,10 @@ async def map(self, chunks: List) -> str: ) request_handle_task = RequestHandleOperator() knowledge_operator = KnowledgeOperator(knowledge_type=KnowledgeType.URL.name) - vector_connector = _create_vector_connector() + vector_store = _create_vector_connector() url_parser_operator = MapOperator(map_function=lambda x: x["url"]) embedding_operator = EmbeddingAssemblerOperator( - vector_store_connector=vector_connector, + index_store=vector_store, ) output_task = ResultOperator() ( diff --git a/examples/rag/simple_rag_retriever_example.py b/examples/rag/simple_rag_retriever_example.py index 80786bf9e..308f790e4 100644 --- a/examples/rag/simple_rag_retriever_example.py +++ b/examples/rag/simple_rag_retriever_example.py @@ -31,7 +31,7 @@ from dbgpt._private.config import Config from dbgpt._private.pydantic import BaseModel, Field -from dbgpt.configs.model_config import EMBEDDING_MODEL_CONFIG, PILOT_PATH +from dbgpt.configs.model_config import MODEL_PATH, PILOT_PATH from dbgpt.core import Chunk from dbgpt.core.awel import DAG, HttpTrigger, JoinOperator, MapOperator from dbgpt.model.proxy import OpenAILLMClient @@ -41,8 +41,7 @@ QueryRewriteOperator, RerankOperator, ) -from dbgpt.storage.vector_store.chroma_store import ChromaVectorConfig -from dbgpt.storage.vector_store.connector import VectorStoreConnector +from dbgpt.storage.vector_store.chroma_store import ChromaStore, ChromaVectorConfig CFG = Config() @@ -78,21 +77,19 @@ def _context_join_fn(context_dict: Dict, chunks: List[Chunk]) -> Dict: def _create_vector_connector(): """Create vector connector.""" - model_name = os.getenv("EMBEDDING_MODEL", "text2vec") - return VectorStoreConnector.from_default( - "Chroma", - vector_store_config=ChromaVectorConfig( - name="vector_name", - persist_path=os.path.join(PILOT_PATH, "data"), - ), + config = ChromaVectorConfig( + persist_path=PILOT_PATH, + name="embedding_rag_test", embedding_fn=DefaultEmbeddingFactory( - default_model_name=EMBEDDING_MODEL_CONFIG[CFG.EMBEDDING_MODEL], + default_model_name=os.path.join(MODEL_PATH, "text2vec-large-chinese"), ).create(), ) + return ChromaStore(config) + with DAG("simple_sdk_rag_retriever_example") as dag: - vector_connector = _create_vector_connector() + vector_store = _create_vector_connector() trigger = HttpTrigger( "/examples/rag/retrieve", methods="POST", request_body=TriggerReqBody ) @@ -102,11 +99,11 @@ def _create_vector_connector(): rewrite_operator = QueryRewriteOperator(llm_client=OpenAILLMClient()) retriever_context_operator = EmbeddingRetrieverOperator( top_k=3, - vector_store_connector=vector_connector, + index_store=vector_store, ) retriever_operator = EmbeddingRetrieverOperator( top_k=3, - vector_store_connector=vector_connector, + index_store=vector_store, ) rerank_operator = RerankOperator() model_parse_task = MapOperator(lambda out: out.to_dict()) diff --git a/examples/sdk/chat_data_with_awel.py b/examples/sdk/chat_data_with_awel.py index e4e797e40..6beeeab28 100644 --- a/examples/sdk/chat_data_with_awel.py +++ b/examples/sdk/chat_data_with_awel.py @@ -4,6 +4,7 @@ import pandas as pd +from dbgpt.configs.model_config import PILOT_PATH from dbgpt.core import ( ChatPromptTemplate, HumanPromptTemplate, @@ -27,8 +28,7 @@ from dbgpt.rag import ChunkParameters from dbgpt.rag.embedding import DefaultEmbeddingFactory from dbgpt.rag.operators import DBSchemaAssemblerOperator, DBSchemaRetrieverOperator -from dbgpt.storage.vector_store.chroma_store import ChromaVectorConfig -from dbgpt.storage.vector_store.connector import VectorStoreConnector +from dbgpt.storage.vector_store.chroma_store import ChromaStore, ChromaVectorConfig # Delete old vector store directory(/tmp/awel_with_data_vector_store) shutil.rmtree("/tmp/awel_with_data_vector_store", ignore_errors=True) @@ -59,14 +59,12 @@ } ) -vector_connector = VectorStoreConnector.from_default( - "Chroma", - vector_store_config=ChromaVectorConfig( - name="db_schema_vector_store", - persist_path="/tmp/awel_with_data_vector_store", - ), +config = ChromaVectorConfig( + persist_path=PILOT_PATH, + name="db_schema_vector_store", embedding_fn=embeddings, ) +vector_store = ChromaStore(config) antv_charts = [ {"response_line_chart": "used to display comparative trend analysis data"}, @@ -198,7 +196,7 @@ async def merge_func(self, odd: str, even: str) -> str: # Load database schema to vector store assembler_task = DBSchemaAssemblerOperator( connector=db_conn, - vector_store_connector=vector_connector, + index_store=vector_store, chunk_parameters=ChunkParameters(chunk_strategy="CHUNK_BY_SIZE"), ) input_task >> assembler_task @@ -211,7 +209,7 @@ async def merge_func(self, odd: str, even: str) -> str: input_task = InputOperator(input_source=InputSource.from_callable()) retriever_task = DBSchemaRetrieverOperator( top_k=1, - vector_store_connector=vector_connector, + index_store=vector_store, ) content_task = MapOperator(lambda cks: [c.content for c in cks]) merge_task = JoinOperator( diff --git a/web/components/knowledge/space-card.tsx b/web/components/knowledge/space-card.tsx index 876076a25..0e5620227 100644 --- a/web/components/knowledge/space-card.tsx +++ b/web/components/knowledge/space-card.tsx @@ -71,7 +71,7 @@ export default function SpaceCard(props: IProps) { Vector Store Knowledge Graph + Full Text label={t('Description')} name="description" rules={[{ required: true, message: t('Please_input_the_description') }]}> diff --git a/web/public/models/knowledge-default.jpg b/web/public/models/knowledge-default.jpg index 312b49a118733de7df968c5a6348fd3b55bf7b98..226bd405b198c5ba188019ed4fb048d920100f97 100644 GIT binary patch literal 108470 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 C!_N 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


!>- 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 z z*h5GR|7<)7`B|y+J4Aus2_AR>d}cfQxi^ElNQCfimycWm=Sy)#h~Wl@sHoXIV(kcU zN#B4Ya_(F)-vrZED^Q&qzXv?OWkU)WL8mPpM6C-{&6TBHv(=R$E+Act3}+|D3s_hI z#O>(2CKsh#(&n@c)t5-wL9B~yjJScem_bTZxj-=nr*q@$ZKPB|1X6GMU z5oDhK$lC13rvLWB@%6iyI~toT{192XWl486I7fY5Ag@LE<;RkmnM3Eu*2)SN9M#U$bS?W7sZH4yS- zh{M?FQ9IZ`(8KRWAfUU}FxxI}&_q)JmdK&m<=X;rOH2UvZYQDfENBC1@>oRNB(-7I z?7q=_hrIPefX#~6Z1h}7)<>3rg~{hq9UTD9Mg7=jWg z=Vsw11r8wrTjg8}`hzY}7hK9lwoZ==?5^7qk1hgYB<*=7fxUd%Pel>iFQ47VG@OkH zs$ps&9#{f=?vMLVfGe<_3pGGR-X^0+;YzEh`c4_>NmzauA4xV2wb=|K9?S>Z6U%yn$ZWG=F3|asc zUcjL-O-u5Gl_?Y+NvcW%61J*Df3Wm`_Yl?M>wUnH}1qU)`y2&Wr0NKVsV~Z7E;u zKjg}0PPP(k&)Dgf^SV`Or9;p3UjM@$-i#DbG8|k{lG5|9&tkwo^yd`I zXX0K5|FwdI=gbhNKgjX^vJL;SC;r6+HD=ulzLCf~;{G`7W(Lt`3gxuF!S13CjscK&%r_h}tL~@`q5yP^u7DvHb==aUXhi*M$ z>#S??^6H;=HQTF_rtNSL*bd%(J0J2(qqT{C=YA;ke5d6u-IiuqX)!U?tDU6tirKW7_gOUJC}H4TlN$cGGu*;bk&DD2?UWkO}&@L#J*&pf)-Clpv=|6>hcG z=k+QOAeg-W1#|2^m8=!3y6f1CH;fK5mOHv8?s6N9tNsp=m-bTAUO*EVxMsfDGT}AP z#&Q}LKd8HP9{z%GoNw*zrWlyvu1s2{SkIp%&OFq%#kP}_1Oi}7+`zF-k1h*Yu3@f_ z!%;N|-MXgPV|^G*2Bs6>7M;_;>&!MdB6TFR3BLTW#ZcrfbpcJ&=Qqn}kwkH8F2%?u z=*Lh-&o9GTxtw5b&+TENn&inZa`XXzB1HRBx6>{2Rn=&R4v5!XWStsvN)wAAKCzue zgv9QFok1yI<^wv687OruJP?_r_l4zwbO6G zS%pK+UC+@9h$^<+x;RXkat^tgW>5*XM&m!WhHGd2P`e&FaPUx3inz}}qfjWLne7c< zgQr!v-TrA&$3&QV2C-3DPE>JKB}e2hhu*%e<*-lcebA&gSa5lEQPUWq3vsHi85QDa z%{^