Compare commits
15 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bcf9491999 | ||
|
|
d0041a98b4 | ||
|
|
29d152784f | ||
|
|
cd7214ba8d | ||
|
|
6a84e73a82 | ||
|
|
98ce5103a0 | ||
|
|
c65a36d3ab | ||
|
|
b6e49da288 | ||
|
|
45998f9cf5 | ||
|
|
4197f63751 | ||
|
|
ace8134a16 | ||
|
|
7f1fecb84e | ||
|
|
bf172fab81 | ||
|
|
36f5648cae | ||
|
|
ab57bfcc4a |
15
.github/imgs/logo-left.svg
vendored
Normal file
|
After Width: | Height: | Size: 10 KiB |
98
.github/workflows/docs-image.yml
vendored
Normal file
@@ -0,0 +1,98 @@
|
||||
name: Build FastGPT docs images and copy image to docker hub
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
paths:
|
||||
- 'docSite/**'
|
||||
branches:
|
||||
- 'main'
|
||||
tags:
|
||||
- 'v*.*.*'
|
||||
jobs:
|
||||
build-fastgpt-docs-images:
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 1
|
||||
- name: Set up QEMU (optional)
|
||||
uses: docker/setup-qemu-action@v2
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v2
|
||||
with:
|
||||
driver-opts: network=host
|
||||
- name: Cache Docker layers
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: /tmp/.buildx-cache
|
||||
key: ${{ runner.os }}-buildx-${{ github.sha }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-buildx-
|
||||
- name: Login to GitHub Container Registry
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.repository_owner }}
|
||||
password: ${{ secrets.GH_PAT }}
|
||||
- name: Set DOCKER_REPO_TAGGED based on branch or tag
|
||||
run: |
|
||||
if [[ "${{ github.ref_name }}" == "main" ]]; then
|
||||
echo "DOCKER_REPO_TAGGED=ghcr.io/${{ github.repository_owner }}/fastgpt-docs:latest" >> $GITHUB_ENV
|
||||
else
|
||||
echo "DOCKER_REPO_TAGGED=ghcr.io/${{ github.repository_owner }}/fastgpt-docs:${{ github.ref_name }}" >> $GITHUB_ENV
|
||||
fi
|
||||
- name: Build and publish image for main branch or tag push event
|
||||
env:
|
||||
DOCKER_REPO_TAGGED: ${{ env.DOCKER_REPO_TAGGED }}
|
||||
run: |
|
||||
docker buildx build \
|
||||
--build-arg name=app \
|
||||
--platform linux/amd64,linux/arm64 \
|
||||
--label "org.opencontainers.image.source= https://github.com/ ${{ github.repository_owner }}/FastGPT" \
|
||||
--label "org.opencontainers.image.description=fastgpt image" \
|
||||
--label "org.opencontainers.image.licenses=Apache" \
|
||||
--push \
|
||||
--cache-from=type=local,src=/tmp/.buildx-cache \
|
||||
--cache-to=type=local,dest=/tmp/.buildx-cache \
|
||||
-t ${DOCKER_REPO_TAGGED} \
|
||||
-f docSite/Dockerfile \
|
||||
.
|
||||
push-to-docker-hub:
|
||||
needs: build-fastgpt-docs-images
|
||||
runs-on: ubuntu-20.04
|
||||
if: github.repository == 'labring/FastGPT'
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
- name: Login to Docker Hub
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
username: ${{ secrets.DOCKER_HUB_NAME }}
|
||||
password: ${{ secrets.DOCKER_HUB_PASSWORD }}
|
||||
- name: Set DOCKER_REPO_TAGGED based on branch or tag
|
||||
run: |
|
||||
if [[ "${{ github.ref_name }}" == "main" ]]; then
|
||||
echo "IMAGE_TAG=latest" >> $GITHUB_ENV
|
||||
else
|
||||
echo "IMAGE_TAG=${{ github.ref_name }}" >> $GITHUB_ENV
|
||||
fi
|
||||
- name: Pull image from GitHub Container Registry
|
||||
run: docker pull ghcr.io/${{ github.repository_owner }}/fastgpt-docs:${{env.IMAGE_TAG}}
|
||||
- name: Tag image with Docker Hub repository name and version tag
|
||||
run: docker tag ghcr.io/${{ github.repository_owner }}/fastgpt-docs:${{env.IMAGE_TAG}} ${{ secrets.DOCKER_IMAGE_NAME }}:${{env.IMAGE_TAG}}
|
||||
- name: Push image to Docker Hub
|
||||
run: docker push ${{ secrets.DOCKER_IMAGE_NAME }}:${{env.IMAGE_TAG}}
|
||||
|
||||
update-docs-image:
|
||||
needs: build-fastgpt-docs-images
|
||||
runs-on: ubuntu-20.04
|
||||
if: github.repository == 'labring/FastGPT'
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v3
|
||||
- uses: actions-hub/kubectl@master
|
||||
env:
|
||||
KUBE_CONFIG: ${{ secrets.KUBE_CONFIG }}
|
||||
with:
|
||||
args: rollout restart deployment fastgpt-docs
|
||||
5
.github/workflows/fastgpt-image.yml
vendored
@@ -1,9 +1,10 @@
|
||||
name: Build fastgpt images and copy image to docker hub
|
||||
name: Build FastGPT images and copy image to docker hub
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
paths:
|
||||
- 'projects/app/**'
|
||||
- 'packages/**'
|
||||
branches:
|
||||
- 'main'
|
||||
tags:
|
||||
@@ -54,7 +55,7 @@ jobs:
|
||||
--platform linux/amd64,linux/arm64 \
|
||||
--label "org.opencontainers.image.source= https://github.com/ ${{ github.repository_owner }}/FastGPT" \
|
||||
--label "org.opencontainers.image.description=fastgpt image" \
|
||||
--label "org.opencontainers.image.licenses=MIT" \
|
||||
--label "org.opencontainers.image.licenses=Apache" \
|
||||
--push \
|
||||
--cache-from=type=local,src=/tmp/.buildx-cache \
|
||||
--cache-to=type=local,dest=/tmp/.buildx-cache \
|
||||
|
||||
52
.github/workflows/preview-image.yml
vendored
Normal file
@@ -0,0 +1,52 @@
|
||||
name: Preview FastGPT images
|
||||
on:
|
||||
pull_request_target:
|
||||
paths:
|
||||
- 'projects/app/**'
|
||||
- 'packages/**'
|
||||
branches:
|
||||
- 'main'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
build-fastgpt-images:
|
||||
runs-on: ubuntu-20.04
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 1
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v2
|
||||
with:
|
||||
driver-opts: network=host
|
||||
- name: Cache Docker layers
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: /tmp/.buildx-cache
|
||||
key: ${{ runner.os }}-buildx-${{ github.sha }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-buildx-
|
||||
- name: Login to GitHub Container Registry
|
||||
uses: docker/login-action@v2
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.repository_owner }}
|
||||
password: ${{ secrets.GH_PAT }}
|
||||
- name: Set DOCKER_REPO_TAGGED based on branch or tag
|
||||
run: |
|
||||
echo "DOCKER_REPO_TAGGED=ghcr.io/${{ github.repository_owner }}/fastgpt-pr:${{ github.event.pull_request.number }}" >> $GITHUB_ENV
|
||||
- name: Build image for PR
|
||||
env:
|
||||
DOCKER_REPO_TAGGED: ${{ env.DOCKER_REPO_TAGGED }}
|
||||
run: |
|
||||
docker buildx build \
|
||||
--build-arg name=app \
|
||||
--label "org.opencontainers.image.source= https://github.com/ ${{ github.repository_owner }}/FastGPT" \
|
||||
--label "org.opencontainers.image.description=fastgpt-pr image" \
|
||||
--label "org.opencontainers.image.licenses=Apache" \
|
||||
--cache-from=type=local,src=/tmp/.buildx-cache \
|
||||
--cache-to=type=local,dest=/tmp/.buildx-cache \
|
||||
-t ${DOCKER_REPO_TAGGED} \
|
||||
-f Dockerfile \
|
||||
.
|
||||
4
.gitignore
vendored
@@ -33,4 +33,6 @@ dist/
|
||||
|
||||
# hugo
|
||||
**/.hugo_build.lock
|
||||
docSite/public/
|
||||
docSite/public/
|
||||
docSite/resources/_gen/
|
||||
docSite/.vercel
|
||||
52
README.md
@@ -4,23 +4,36 @@
|
||||
|
||||
# FastGPT
|
||||
|
||||
<p align="center">
|
||||
<a href="./README_en.md">English</a> |
|
||||
<a href="./README.md">简体中文</a>
|
||||
</p>
|
||||
|
||||
FastGPT 是一个基于 LLM 大语言模型的知识库问答系统,提供开箱即用的数据处理、模型调用等能力。同时可以通过 Flow 可视化进行工作流编排,从而实现复杂的问答场景!
|
||||
|
||||
</div>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://fastgpt.run/">线上体验</a>
|
||||
·
|
||||
<a href="https://doc.fastgpt.run/docs/intro">相关文档</a>
|
||||
·
|
||||
<a href="https://doc.fastgpt.run/docs/development">本地开发</a>
|
||||
·
|
||||
<a href="https://github.com/labring/FastGPT#-%E7%9B%B8%E5%85%B3%E9%A1%B9%E7%9B%AE">相关项目</a>
|
||||
<a href="https://fastgpt.run/">
|
||||
<img height="21" src="https://img.shields.io/badge/在线使用-fff?style=flat-square&logo=spoj&logoColor=7d09f1" alt="cloud">
|
||||
</a>
|
||||
<a href="https://doc.fastgpt.run/docs/intro">
|
||||
<img height="21" src="https://img.shields.io/badge/相关文档-7d09f1?style=flat-square" alt="document">
|
||||
</a>
|
||||
<a href="https://doc.fastgpt.run/docs/development">
|
||||
<img height="21" src="https://img.shields.io/badge/本地开发-%23fff?style=flat-square&logo=xcode&logoColor=7d09f1" alt="development">
|
||||
</a>
|
||||
<a href="/#-%E7%9B%B8%E5%85%B3%E9%A1%B9%E7%9B%AE">
|
||||
<img height="21" src="https://img.shields.io/badge/相关项目-7d09f1?style=flat-square" alt="project">
|
||||
</a>
|
||||
<a href="https://github.com/labring/FastGPT/blob/main/LICENSE">
|
||||
<img height="21" src="https://img.shields.io/badge/License-Apache--2.0-ffffff?style=flat-square&labelColor=fff&color=7d09f1" alt="license">
|
||||
</a>
|
||||
</p>
|
||||
|
||||
https://github.com/labring/FastGPT/assets/15308462/7d3a38df-eb0e-4388-9250-2409bd33f6d4
|
||||
|
||||
## 🛸 在线体验
|
||||
## 🛸 在线使用
|
||||
|
||||
[fastgpt.run](https://fastgpt.run/)(服务器在新加坡,部分地区可能无法直连)
|
||||
|
||||
@@ -39,7 +52,7 @@ https://github.com/labring/FastGPT/assets/15308462/7d3a38df-eb0e-4388-9250-2409b
|
||||
- [x] 文本内容提取成结构化数据
|
||||
- [x] HTTP 扩展
|
||||
- [ ] 嵌入 Laf,实现在线编写 HTTP 模块
|
||||
- [ ] 连续对话引导
|
||||
- [x] 对话下一步指引
|
||||
- [ ] 对话多路线选择
|
||||
- [x] 源文件引用追踪
|
||||
- [ ] 自定义文件阅读器
|
||||
@@ -55,7 +68,7 @@ https://github.com/labring/FastGPT/assets/15308462/7d3a38df-eb0e-4388-9250-2409b
|
||||
- [x] 知识库单点搜索测试
|
||||
- [x] 对话时反馈引用并可修改与删除
|
||||
- [x] 完整上下文呈现
|
||||
- [ ] 完整模块中间值呈现
|
||||
- [x] 完整模块中间值呈现
|
||||
4. OpenAPI
|
||||
- [x] completions 接口(对齐 GPT 接口)
|
||||
- [ ] 知识库 CRUD
|
||||
@@ -80,8 +93,8 @@ https://github.com/labring/FastGPT/assets/15308462/7d3a38df-eb0e-4388-9250-2409b
|
||||
* [部署 FastGPT](https://doc.fastgpt.run/docs/installation)
|
||||
* [系统配置文件说明](https://doc.fastgpt.run/docs/development/configuration/)
|
||||
* [多模型配置](https://doc.fastgpt.run/docs/installation/one-api/)
|
||||
* [版本升级](https://doc.fastgpt.run/docs/installation/upgrading)
|
||||
* [API 文档](https://doc.fastgpt.run/docs/development/openapi?pre_pathname=%2Fdrive%2Fhome%2F)
|
||||
* [版本更新/升级介绍](https://doc.fastgpt.run/docs/installation/upgrading)
|
||||
* [API 文档](https://doc.fastgpt.run/docs/development/openapi/)
|
||||
|
||||
## 🏘️ 社区交流群
|
||||
|
||||
@@ -89,12 +102,6 @@ https://github.com/labring/FastGPT/assets/15308462/7d3a38df-eb0e-4388-9250-2409b
|
||||
|
||||

|
||||
|
||||
## 👀 其他
|
||||
|
||||
- [FastGPT 常见问题](https://kjqvjse66l.feishu.cn/docx/HtrgdT0pkonP4kxGx8qcu6XDnGh)
|
||||
- [docker 部署教程视频](https://www.bilibili.com/video/BV1jo4y147fT/)
|
||||
- [FastGPT 知识库演示](https://www.bilibili.com/video/BV1Wo4y1p7i1/)
|
||||
|
||||
## 💪 相关项目
|
||||
|
||||
- [Laf: 3 分钟快速接入三方应用](https://github.com/labring/laf)
|
||||
@@ -102,10 +109,15 @@ https://github.com/labring/FastGPT/assets/15308462/7d3a38df-eb0e-4388-9250-2409b
|
||||
- [One API: 多模型管理,支持 Azure、文心一言等](https://github.com/songquanpeng/one-api)
|
||||
- [TuShan: 5 分钟搭建后台管理系统](https://github.com/msgbyte/tushan)
|
||||
|
||||
## 👀 其他
|
||||
|
||||
- [保姆级 FastGPT 教程](https://www.bilibili.com/video/BV1n34y1A7Bo/?spm_id_from=333.999.0.0)
|
||||
- [接入飞书](https://www.bilibili.com/video/BV1Su4y1r7R3/?spm_id_from=333.999.0.0)
|
||||
- [接入企微](https://www.bilibili.com/video/BV1Tp4y1n72T/?spm_id_from=333.999.0.0)
|
||||
|
||||
## 🤝 第三方生态
|
||||
|
||||
- [OnWeChat 个人微信/企微机器人](https://doc.fastgpt.run/docs/use-cases/onwechat/)
|
||||
- [luolinAI: 企微机器人,开箱即用](https://github.com/luolin-ai/FastGPT-Enterprise-WeChatbot)
|
||||
|
||||
## 🌟 Star History
|
||||
|
||||
@@ -115,7 +127,7 @@ https://github.com/labring/FastGPT/assets/15308462/7d3a38df-eb0e-4388-9250-2409b
|
||||
|
||||
本仓库遵循 [FastGPT Open Source License](./LICENSE) 开源协议。
|
||||
|
||||
1. 允许作为后台服务直接商用,但不允许直接使用 saas 服务商用。
|
||||
1. 允许作为后台服务直接商用,但不允许直接使用 SaaS 服务商用。
|
||||
2. 需保留相关版权信息。
|
||||
3. 完整请查看 [FastGPT Open Source License](./LICENSE)
|
||||
4. 联系方式:yujinlong@sealos.io, [点击查看定价策略](https://doc.fastgpt.run/docs/commercial)
|
||||
|
||||
87
README_en.md
@@ -1,25 +1,39 @@
|
||||
<div align="center">
|
||||
|
||||
<a href="https://fastgpt.run/"><img src="/.github/imgs/logo.svg" width="120" height="120" alt="fastgpt logo"></a>
|
||||
|
||||
# FastGPT
|
||||
|
||||
FastGPT is a knowledge-based question answering system built on the LLM. It offers out-of-the-box data processing and model invocation capabilities. Moreover, it allows for workflow orchestration through Flow visualization, thereby enabling complex question and answer scenarios!
|
||||
<p align="center">
|
||||
<a href="./README_en.md">English</a> |
|
||||
<a href="./README.md">简体中文</a>
|
||||
</p>
|
||||
|
||||
FastGPT is a knowledge-based Q&A system built on the LLM, offers out-of-the-box data processing and model invocation capabilities, allows for workflow orchestration through Flow visualization!
|
||||
|
||||
</div>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://fastgpt.run/">Online</a>
|
||||
·
|
||||
<a href="https://doc.fastgpt.run/docs/intro">Document</a>
|
||||
·
|
||||
<a href="https://doc.fastgpt.run/docs/development">Development</a>
|
||||
·
|
||||
<a href="https://doc.fastgpt.run/docs/installation">Deploy</a>
|
||||
·
|
||||
<a href="#powered-by">Power By</a>
|
||||
<a href="https://fastgpt.run/">
|
||||
<img height="21" src="https://img.shields.io/badge/Website-fff?style=flat-square&logo=spoj&logoColor=7d09f1" alt="cloud">
|
||||
</a>
|
||||
<a href="https://doc.fastgpt.run/docs/intro">
|
||||
<img height="21" src="https://img.shields.io/badge/Docs-7d09f1?style=flat-square" alt="document">
|
||||
</a>
|
||||
<a href="https://doc.fastgpt.run/docs/development">
|
||||
<img height="21" src="https://img.shields.io/badge/Development-%23fff?style=flat-square&logo=xcode&logoColor=7d09f1" alt="development">
|
||||
</a>
|
||||
<a href="/#-%E7%9B%B8%E5%85%B3%E9%A1%B9%E7%9B%AE">
|
||||
<img height="21" src="https://img.shields.io/badge/Related Projects-7d09f1?style=flat-square" alt="project">
|
||||
</a>
|
||||
<a href="https://github.com/labring/FastGPT/blob/main/LICENSE">
|
||||
<img height="21" src="https://img.shields.io/badge/License-Apache--2.0-ffffff?style=flat-square&labelColor=fff&color=7d09f1" alt="license">
|
||||
</a>
|
||||
</p>
|
||||
|
||||
## 🛸 Online
|
||||
https://github.com/labring/FastGPT/assets/15308462/7d3a38df-eb0e-4388-9250-2409bd33f6d4
|
||||
|
||||
## 🛸 Use Cloud Services
|
||||
|
||||
[fastgpt.run](https://fastgpt.run/)
|
||||
| | |
|
||||
@@ -29,35 +43,34 @@ FastGPT is a knowledge-based question answering system built on the LLM. It offe
|
||||
|
||||
## 💡 Features
|
||||
|
||||
1. Powerful visual orchestration for easy AI application building
|
||||
1. Powerful visual workflows: Effortlessly craft AI applications
|
||||
|
||||
- [x] Provides a simple mode without the need for orchestration operations
|
||||
- [x] Simple mode on deck - no need for manual arrangement
|
||||
- [x] User dialogue pre-guidance
|
||||
- [x] Global variables
|
||||
- [x] Knowledge base search
|
||||
- [x] Multi-LLM model dialogue
|
||||
- [x] Extraction of text content into structured data
|
||||
- [x] HTTP extension
|
||||
- [ ] Sandbox JS runtime module
|
||||
- [ ] Continuous dialogue guidance
|
||||
- [ ] Dialogue multi-path selection
|
||||
- [ ] Source file reference tracking
|
||||
- [x] Dialogue via multiple LLM models
|
||||
- [x] Text magic - convert to structured data
|
||||
- [x] Extend with HTTP
|
||||
- [ ] Embed Laf for on-the-fly HTTP module crafting
|
||||
- [x] Directions for the next dialogue steps
|
||||
- [ ] Multiple dialogue paths selection
|
||||
- [x] Tracking source file references
|
||||
- [ ] Custom file reader
|
||||
|
||||
2. Rich knowledge base preprocessing
|
||||
2. Extensive knowledge base preprocessing
|
||||
|
||||
- [x] Multiple library reuse and mixing
|
||||
- [x] Chunk record modification and deletion
|
||||
- [x] Supports direct segment import
|
||||
- [x] Supports QA split import
|
||||
- [x] Supports manual input content
|
||||
- [ ] Supports URL import reading
|
||||
- [x] Supports batch import of Q&A pairs in CSV format
|
||||
- [ ] Supports separate vector model settings for knowledge bases
|
||||
- [ ] Source file storage
|
||||
- [x] Reuse and mix multiple knowledge bases
|
||||
- [x] Track chunk modifications and deletions
|
||||
- [x] Supports manual entries, direct segmentation, and QA split imports
|
||||
- [x] Supports URL fetching and batch CSV imports
|
||||
- [x] Supports Set unique vector models for knowledge bases
|
||||
- [x] Store original files
|
||||
- [ ] File learning Agent
|
||||
|
||||
3. Multiple effect testing channels
|
||||
|
||||
- [x] Knowledge base single point search testing
|
||||
- [x] Single-point knowledge base search test
|
||||
- [x] Feedback references and ability to modify and delete during dialogue
|
||||
- [x] Complete context presentation
|
||||
- [ ] Complete module intermediate value presentation
|
||||
@@ -77,11 +90,17 @@ FastGPT is a knowledge-based question answering system built on the LLM. It offe
|
||||
|
||||
Project tech stack: NextJs + TS + ChakraUI + Mongo + Postgres (Vector plugin)
|
||||
|
||||
- **⚡ Deployment**
|
||||
|
||||
[](https://cloud.sealos.io/?openapp=system-fastdeploy%3FtemplateName%3Dfastgpt)
|
||||
|
||||
Give it a 2-4 minute wait after deployment as it sets up the database. Initially, it might be a tad slow since we're using the basic settings.
|
||||
|
||||
- [Getting Started with Local Development](https://doc.fastgpt.run/docs/development)
|
||||
- [Deploying FastGPT](https://doc.fastgpt.run/docs/installation)
|
||||
- [System Configuration File Explanation](https://doc.fastgpt.run/docs/installation/reference)
|
||||
- [Multi-model Configuration](https://doc.fastgpt.run/docs/installation/reference/models)
|
||||
- [V3 Upgrade V4 Initialization](https://doc.fastgpt.run/docs/installation/upgrading)
|
||||
- [Guide on System Configs](https://doc.fastgpt.run/docs/installation/reference)
|
||||
- [Configuring Multiple Models](https://doc.fastgpt.run/docs/installation/reference/models)
|
||||
- [Version Updates & Upgrades](https://doc.fastgpt.run/docs/installation/upgrading)
|
||||
|
||||
<!-- ## :point_right: RoadMap
|
||||
- [FastGPT RoadMap](https://kjqvjse66l.feishu.cn/docx/RVUxdqE2WolDYyxEKATcM0XXnte) -->
|
||||
|
||||
12
docSite/Dockerfile
Normal file
@@ -0,0 +1,12 @@
|
||||
FROM hugomods/hugo:0.117.0 AS builder
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
ADD ./docSite hugo
|
||||
RUN cd /app/hugo && hugo mod get -u github.com/colinwilson/lotusdocs && hugo -v --minify
|
||||
|
||||
FROM fholzer/nginx-brotli:latest
|
||||
|
||||
LABEL org.opencontainers.image.source https://github.com/labring/FastGPT
|
||||
|
||||
COPY --from=builder /app/hugo/public /usr/share/nginx/html
|
||||
@@ -3,7 +3,7 @@
|
||||
## 本地运行
|
||||
|
||||
1. 安装 go 语言环境。
|
||||
2. 安装 hugo。 [二进制下载](https://github.com/gohugoio/hugo/releases/tag/v0.117.0)
|
||||
2. 安装 hugo。 [二进制下载](https://github.com/gohugoio/hugo/releases/tag/v0.117.0),注意需要安装 extended 版本。
|
||||
3. cd docSite
|
||||
4. hugo serve
|
||||
5. 访问 http://localhost:1313
|
||||
|
||||
@@ -96,4 +96,50 @@ footer a:hover {
|
||||
}
|
||||
.github-badge .bg-lightgrey, .github-badge .bg-lightgray {
|
||||
background-color: #9f9f9f !important;
|
||||
}
|
||||
|
||||
#fixed-box {
|
||||
position: fixed;
|
||||
z-index: 9999;
|
||||
}
|
||||
|
||||
@media (max-width: 600px) {
|
||||
#fixed-box {
|
||||
display: none
|
||||
}
|
||||
}
|
||||
|
||||
.feedback-btn-wrapper {
|
||||
position: fixed;
|
||||
z-index: 1000;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
margin: 2rem;
|
||||
}
|
||||
#feedback-btn {
|
||||
height: 30px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 1.2rem 0.7rem;
|
||||
border-radius: 0.4rem;
|
||||
cursor: pointer;
|
||||
box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1),
|
||||
0 4px 6px -2px rgba(0, 0, 0, 0.05);
|
||||
user-select: none;
|
||||
border: 0;
|
||||
outline: 0;
|
||||
color: #fff;
|
||||
background-color: #4d698e;
|
||||
transition: filter 0.4s ease;
|
||||
}
|
||||
|
||||
#feedback-btn svg {
|
||||
width: 1.25rem;
|
||||
height: 1.25rem;
|
||||
}
|
||||
|
||||
#feedback-btn span {
|
||||
font-weight: 700;
|
||||
font-size: 1rem;
|
||||
margin-left: 0.5rem;
|
||||
}
|
||||
BIN
docSite/assets/imgs/fastgptonsealos1.png
Normal file
|
After Width: | Height: | Size: 212 KiB |
BIN
docSite/assets/imgs/getfile_id.png
Normal file
|
After Width: | Height: | Size: 177 KiB |
@@ -1,11 +0,0 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"baseUrl": ".",
|
||||
"paths": {
|
||||
"*": [
|
||||
"../../../../../.cache/hugo_cache/modules/filecache/modules/pkg/mod/github.com/gohugoio/hugo-mod-jslibs-dist/popperjs/v2@v2.21100.20000/package/dist/cjs/popper.js/*",
|
||||
"../../../../../.cache/hugo_cache/modules/filecache/modules/pkg/mod/github.com/twbs/bootstrap@v5.3.0+incompatible/js/*"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -53,7 +53,7 @@ weight: 20
|
||||
|
||||
#### 总费用
|
||||
|
||||
总费用 = 商业版功能费用 + 用户数量费用
|
||||
总费用 = 商业版交付费用 + 用户数量费用
|
||||
|
||||
## 技术支持
|
||||
|
||||
@@ -73,8 +73,7 @@ weight: 20
|
||||
|
||||
## 联系方式
|
||||
|
||||
微信: allence1004
|
||||
邮箱: yujinlong@sealos.io
|
||||
请填写[咨询问卷](https://fael3z0zfze.feishu.cn/share/base/form/shrcnRxj3utrzjywsom96Px4sud),我们会尽快与您联系。
|
||||
|
||||
## QA
|
||||
|
||||
|
||||
@@ -11,35 +11,19 @@ weight: 520
|
||||
|
||||
**开发环境下**,你需要将示例配置文件 `config.json` 复制成 `config.local.json` 文件才会生效。
|
||||
|
||||
这个配置文件中包含了前端页面定制、系统级参数、AI 对话的模型等……
|
||||
这个配置文件中包含了系统级参数、AI 对话的模型、function 模型等……
|
||||
|
||||
{{% alert context="warning" %}}
|
||||
注意:下面的配置介绍仅是局部介绍,你需要完整挂载整个 `config.json`,不能仅挂载一部分。你可以直接在默认的 config.json 基础上根据下面的介绍进行修改。挂载上去的配置文件不能包含注释。
|
||||
{{% /alert %}}
|
||||
|
||||
## 基础字段粗略说明
|
||||
|
||||
这里介绍一些基础的配置字段:
|
||||
|
||||
```json
|
||||
...
|
||||
// 这个配置文件是系统级参数
|
||||
"SystemParams": {
|
||||
"vectorMaxProcess": 15, // 向量生成最大进程,结合数据库性能和 key 来设置
|
||||
"qaMaxProcess": 15, // QA 生成最大进程,结合数据库性能和 key 来设置
|
||||
"pgIvfflatProbe": 20 // pg vector 搜索探针。没有设置索引前可忽略,通常 50w 组以上才需要设置。
|
||||
},
|
||||
...
|
||||
```
|
||||
|
||||
## 完整配置参数
|
||||
|
||||
**使用时,请务必去除注释!**
|
||||
|
||||
```json
|
||||
{
|
||||
"SystemParams": {
|
||||
"vectorMaxProcess": 15,
|
||||
"qaMaxProcess": 15,
|
||||
"pgIvfflatProbe": 20
|
||||
"vectorMaxProcess": 15, // 向量生成最大进程,结合数据库性能和 key 来设置
|
||||
"qaMaxProcess": 15, // QA 生成最大进程,结合数据库性能和 key 来设置
|
||||
"pgIvfflatProbe": 20 // pg vector 搜索探针。没有设置索引前可忽略,通常 50w 组以上才需要设置。
|
||||
},
|
||||
"ChatModels": [
|
||||
{
|
||||
@@ -79,27 +63,35 @@ weight: 520
|
||||
"maxToken": 3000
|
||||
}
|
||||
],
|
||||
"QAModel": {
|
||||
"QAModel": { // QA 拆分模型
|
||||
"model": "gpt-3.5-turbo-16k",
|
||||
"name": "GPT35-16k",
|
||||
"maxToken": 0,
|
||||
"maxToken": 16000,
|
||||
"price": 0
|
||||
},
|
||||
"ExtractModel": {
|
||||
"ExtractModel": { // 内容提取模型
|
||||
"model": "gpt-3.5-turbo-16k",
|
||||
"functionCall": true,
|
||||
"functionCall": true, // 是否使用 functionCall
|
||||
"name": "GPT35-16k",
|
||||
"maxToken": 0,
|
||||
"maxToken": 16000,
|
||||
"price": 0,
|
||||
"prompt": ""
|
||||
},
|
||||
"CQModel": {
|
||||
"CQModel": { // Classify Question: 问题分类模型
|
||||
"model": "gpt-3.5-turbo-16k",
|
||||
"functionCall": true,
|
||||
"name": "GPT35-16k",
|
||||
"maxToken": 0,
|
||||
"maxToken": 16000,
|
||||
"price": 0,
|
||||
"prompt": ""
|
||||
},
|
||||
"QGModel": { // Question Generation: 生成下一步指引模型
|
||||
"model": "gpt-3.5-turbo",
|
||||
"name": "GPT35-4k",
|
||||
"maxToken": 4000,
|
||||
"price": 0,
|
||||
"prompt": "",
|
||||
"functionCall": false
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
8
docSite/content/docs/development/design/_index.md
Normal file
@@ -0,0 +1,8 @@
|
||||
---
|
||||
weight: 540
|
||||
title: "设计方案"
|
||||
description: "FastGPT 部分设计方案"
|
||||
icon: public
|
||||
draft: false
|
||||
images: []
|
||||
---
|
||||
25
docSite/content/docs/development/design/dataset.md
Normal file
@@ -0,0 +1,25 @@
|
||||
---
|
||||
weight: 541
|
||||
title: "数据集"
|
||||
description: "FastGPT 数据集中文件与数据的设计方案"
|
||||
icon: dataset
|
||||
draft: false
|
||||
images: []
|
||||
---
|
||||
|
||||
## 文件与数据的关系
|
||||
|
||||
在 FastGPT 中,文件会通过 MongoDB 的 FS 存储,而具体的数据会通过 PostgreSQL 存储,PG 中的数据会有一列 file_id,关联对应的文件。考虑到旧版本的兼容,以及手动输入、标注数据等,我们给 file_id 增加了一些特殊的值,如下:
|
||||
|
||||
- manual: 手动输入
|
||||
- mark: 手动标注的数据
|
||||
|
||||
注意,file_id 仅在插入数据时会写入,变更时无法修改。
|
||||
|
||||
## 文件导入流程
|
||||
|
||||
1. 上传文件到 MongoDB 的 FS 中,获取 file_id,此时文件标记为 `unused` 状态
|
||||
2. 浏览器解析文件,获取对应的文本和 chunk
|
||||
3. 给每个 chunk 打上 file_id
|
||||
4. 点击上传数据:将文件的状态改为 `used`,并将数据推送到 mongo `training` 表中等待训练
|
||||
5. 由训练线程从 mongo 中取数据,并在获取向量后插入到 pg。
|
||||
@@ -10,30 +10,27 @@ weight: 510
|
||||
本文档介绍了如何设置开发环境以构建和测试 [FastGPT](https://fastgpt.run)。
|
||||
|
||||
|
||||
## Tips
|
||||
|
||||
1. 用户默认的时区为 `Asia/Shanghai`,非 linux 环境时候,获取系统时间会异常,本地开发时候,可以将用户的时区调整成 UTC(+0)。
|
||||
|
||||
|
||||
## 前置依赖项
|
||||
|
||||
您需要在计算机上安装和配置以下依赖项才能构建 [FastGPT](https://fastgpt.run):
|
||||
|
||||
- [Git](http://git-scm.com/)
|
||||
- [Docker](https://www.docker.com/)
|
||||
- [Docker Compose](https://docs.docker.com/compose/install/)
|
||||
- [Docker](https://www.docker.com/)(构建镜像)
|
||||
- [Node.js v18.x (LTS)](http://nodejs.org)
|
||||
- [npm](https://www.npmjs.com/) 版本 8.x.x 或 [Yarn](https://yarnpkg.com/)
|
||||
- [pnpm](https://pnpm.io/) 版本 8.x.x
|
||||
|
||||
## 本地开发
|
||||
## 开始本地开发
|
||||
|
||||
要设置一个可工作的开发环境,只需 Fork 项目的 Git 存储库,并部署一个数据库,然后开始进行开发测试。
|
||||
**Tips**
|
||||
|
||||
### Fork 存储库
|
||||
1. 用户默认的时区为 `Asia/Shanghai`,非 linux 环境时候,获取系统时间会异常,本地开发时候,可以将用户的时区调整成 UTC(+0)。
|
||||
2. 建议先服务器装好数据库在进行本地开发。
|
||||
|
||||
### 1. Fork 存储库
|
||||
|
||||
您需要 Fork [存储库](https://github.com/labring/FastGPT)。
|
||||
|
||||
### 克隆存储库
|
||||
### 2. 克隆存储库
|
||||
|
||||
克隆您在 GitHub 上 Fork 的存储库:
|
||||
|
||||
@@ -41,23 +38,27 @@ weight: 510
|
||||
git clone git@github.com:<github_username>/FastGPT.git
|
||||
```
|
||||
|
||||
**projects 目录下为 FastGPT 应用代码。NextJS 框架前后端放在一起,API 服务位于 `src/pages/api` 目录内。**
|
||||
**目录简要说明**
|
||||
|
||||
**packages 目录为相关的共用包。**
|
||||
1. `projects` 目录下为 FastGPT 应用代码。其中 `app` 为 FastGPT 核心应用。(后续可能会引入其他应用)
|
||||
2. NextJS 框架前后端放在一起,API 服务位于 `src/pages/api` 目录内。
|
||||
3. `packages` 目录为共用代码,通过 workspace 被注入到 `projects` 中,已配置 monorepo 自动注入,无需额外打包。
|
||||
|
||||
### 安装数据库
|
||||
### 3. 安装数据库
|
||||
|
||||
第一次开发,需要先部署数据库,建议本地开发可以随便找一台 2C2G 的轻量小数据库实践。数据库部署教程:[Docker 快速部署](/docs/installation/docker/)
|
||||
第一次开发,需要先部署数据库,建议本地开发可以随便找一台 2C2G 的轻量小数据库实践。数据库部署教程:[Docker 快速部署](/docs/installation/docker/)。部署完了,可以本地访问其数据库。
|
||||
|
||||
### 初始配置
|
||||
### 4. 初始配置
|
||||
|
||||
**1. 环境变量**
|
||||
以下文件均在 `projects/app` 路径下。
|
||||
|
||||
**环境变量**
|
||||
|
||||
复制.env.template 文件,生成一个.env.local 环境变量文件夹,修改.env.local 里内容才是有效的变量。变量说明见 .env.template
|
||||
|
||||
**2. config 配置文件**
|
||||
**config 配置文件**
|
||||
|
||||
复制 data/config.json 文件,生成一个 data/config.local.json 配置文件。具体的参数说明,可参考 [config 配置说名](/docs/development/configuration)
|
||||
复制 data/config.json 文件,生成一个 data/config.local.json 配置文件,具体配置参数说明,可参考 [config 配置说明](/docs/development/configuration)
|
||||
|
||||
**注意:json 配置文件不能包含注释,介绍中为了方便看才加入的注释**
|
||||
|
||||
@@ -67,23 +68,29 @@ git clone git@github.com:<github_username>/FastGPT.git
|
||||
- `qaMaxProcess`: QA 生成最大进程
|
||||
- `pgIvfflatProbe`: PostgreSQL vector 搜索探针,没有添加 vector 索引时可忽略。
|
||||
|
||||
### 运行
|
||||
### 5. 运行
|
||||
|
||||
```bash
|
||||
# 代码根目录下执行,会安装根 package、projects 和 packages 内所有依赖
|
||||
pnpm i
|
||||
cd projects/app # FastGPT 主程序
|
||||
# 切换到应用目录
|
||||
cd projects/app
|
||||
# 开发模式运行
|
||||
pnpm dev
|
||||
```
|
||||
|
||||
### 镜像打包
|
||||
### 6. 发布 - 镜像打包
|
||||
|
||||
```bash
|
||||
# 根目录下执行
|
||||
docker build -t dockername/fastgpt --build-arg name=app .
|
||||
```
|
||||
|
||||
## 创建拉取请求
|
||||
## 提交代码至开源仓库
|
||||
|
||||
在进行更改后,打开一个拉取请求(PR)。提交拉取请求后,FastGPT 团队/社区的其他人将与您一起审查它。
|
||||
1. 确保你的代码是 Fork [FastGPT](https://github.com/labring/FastGPT) 仓库
|
||||
2. 尽可能少量的提交代码,每次提交仅解决一个问题。
|
||||
3. 向 FastGPT 的 main 分支提交一个 PR,提交请求后,FastGPT 团队/社区的其他人将与您一起审查它。
|
||||
|
||||
如果遇到问题,比如合并冲突或不知道如何打开拉取请求,请查看 GitHub 的[拉取请求教程](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests),了解如何解决合并冲突和其他问题。一旦您的 PR 被合并,您将自豪地被列为[贡献者表](https://github.com/labring/FastGPT/graphs/contributors)中的一员。
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
title: 'OpenAPI 使用'
|
||||
title: 'OpenAPI 使用(API Key 使用)'
|
||||
description: 'FastGPT OpenAPI 文档'
|
||||
icon: 'api'
|
||||
draft: false
|
||||
@@ -28,25 +28,27 @@ FastGPT 的 API Key 有 2 类,一类是全局通用的 key;一类是携带
|
||||
## 发起对话
|
||||
|
||||
{{% alert icon="🤖 " context="success" %}}
|
||||
该接口 API Key 需使用应用特定的 key,否则会报错。
|
||||
该接口 API Key 需使用应用特定的 key,否则会报错。
|
||||
|
||||
有些包的 BaseUrl 需要添加 `v1` 路径,有些不需要,建议都试一下。
|
||||
{{% /alert %}}
|
||||
|
||||
|
||||
对话接口兼容 openai 的接口!如果你有第三方项目,可以直接通过修改 BaseUrl 和 Authorization 来访问 FastGpt 应用。缺点是你无法获取到响应的token值。
|
||||
对话接口兼容`GPT`的接口!如果你的项目使用的是标准的`GPT`官方接口,可以直接通过修改 `BaseUrl` 和 `Authorization` 来访问 FastGpt 应用。
|
||||
|
||||
请求内容
|
||||
请求参数说明
|
||||
- headers.Authorization: Bearer apikey
|
||||
- chatId: string | undefined 。
|
||||
- 为 undefined 时(不传入),不使用 FastGpt 提供的上下文功能,完全通过传入的 messages 构建上下文。 不会将你的记录存储到数据库中,你也无法在记录汇总中查阅到。
|
||||
- 为非空字符串时,意味着使用 chatId 进行对话,自动从 FastGpt 数据库取历史记录。并拼接 messages 数组最后一个内容作为完整请求。(自行确保 chatId 唯一,长度不限)
|
||||
- messages: 与 openai gpt 接口完全一致。
|
||||
- detail: 是否返回详细值(模块状态,响应的完整结果),会通过event进行区分
|
||||
- variables: 变量。一个对象,效果同全局变量。
|
||||
- 为非空字符串时,意味着使用 chatId 进行对话,自动从 FastGpt 数据库取历史记录,并使用 messages 数组最后一个内容作为用户问题。(请自行确保 chatId 唯一,长度不限制)
|
||||
- messages: 结构与 [GPT接口](https://platform.openai.com/docs/api-reference/chat/object) 完全一致。
|
||||
- detail: 是否返回详细值(模块状态,响应的完整结果),`stream模式`下会通过event进行区分,`非stream模式`结果保存在responseData中。
|
||||
- variables: 变量内容,一个对象,会替换`{{key}}`变量。在`HTTP`模块中会发给接口,可作为身份凭证等标识。
|
||||
|
||||
**请求示例:**
|
||||
|
||||
```bash
|
||||
curl --location --request POST 'https://fastgpt.run/api/openapi/v1/chat/completions' \
|
||||
curl --location --request POST 'https://fastgpt.run/api/v1/chat/completions' \
|
||||
--header 'Authorization: Bearer apikey' \
|
||||
--header 'Content-Type: application/json' \
|
||||
--data-raw '{
|
||||
@@ -223,9 +225,10 @@ data: [{"moduleName":"KB Search","price":1.2000000000000002,"model":"Embedding-2
|
||||
此部分 API 需使用全局通用的 API Key。
|
||||
{{% /alert %}}
|
||||
|
||||
### 如何获取知识库ID(kbId)
|
||||
| 如何获取知识库ID(kbId) | 如何获取文件ID(file_id) |
|
||||
| --------------------- | --------------------- |
|
||||
|  |  |
|
||||
|
||||

|
||||
|
||||
### 知识库添加数据
|
||||
|
||||
@@ -246,6 +249,8 @@ curl --location --request POST 'https://fastgpt.run/api/core/dataset/data/pushDa
|
||||
{
|
||||
"a": "test",
|
||||
"q": "1111",
|
||||
"file_id": "关联的文件ID/URL/manual/mark",
|
||||
"source": "来源名称",
|
||||
},
|
||||
{
|
||||
"a": "test2",
|
||||
@@ -269,7 +274,8 @@ curl --location --request POST 'https://fastgpt.run/api/core/dataset/data/pushDa
|
||||
"data": [
|
||||
{
|
||||
"q": "生成索引的内容,index 模式下最大 tokens 为3000,建议不超过 1000",
|
||||
"a": "预期回答/补充"
|
||||
"a": "预期回答/补充",
|
||||
"file_id": "如果推送数据到手动录入,这里可以留空; 如果希望关联到某个文件中,需要填写对应文件的ID; 如果希望加入到手动标注中,可设置为: mark",
|
||||
},
|
||||
{
|
||||
"q": "生成索引的内容,qa 模式下最大 tokens 为10000,建议 8000 左右",
|
||||
@@ -290,7 +296,16 @@ curl --location --request POST 'https://fastgpt.run/api/core/dataset/data/pushDa
|
||||
"code": 200,
|
||||
"statusText": "",
|
||||
"data": {
|
||||
"insertLen": 1 // 最终插入成功的数量,可能因为超出 tokens 或者插入异常,index 可以重复插入,会自动去重
|
||||
"insertLen": 1, // 最终插入成功的数量
|
||||
"overToken": [], // 超出 token 的
|
||||
"fileIdInvalid": [ // file_id 无效的
|
||||
{
|
||||
"a": "飞飞dsaf飞",
|
||||
"q": "测试是32否收到",
|
||||
"file_id": "32dwe"
|
||||
}
|
||||
],
|
||||
"error": [] // 其他错误
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
@@ -11,17 +11,17 @@ weight: 720
|
||||
|
||||
### 1. 准备好代理环境(国外服务器可忽略)
|
||||
|
||||
确保可以访问 OpenAI,具体方案可以参考:[Nginx 中转](/docs/installation/proxy/nginx/)
|
||||
确保可以访问 OpenAI,具体方案可以参考:[代理方案](/docs/installation/proxy/)。或直接在 Sealos 上 [部署 OneAPI](/docs/installation/one-api),既解决代理问题也能实现多 Key 轮询、接入其他大模型。
|
||||
|
||||
### 2. 多模型支持
|
||||
|
||||
推荐使用 one-api 项目来管理模型池,兼容 OpenAI 、Azure 和国内主流模型等。
|
||||
FastGPT 使用了 one-api 项目来管理模型池,其可以兼容 OpenAI 、Azure 、国内主流模型和本地模型等。
|
||||
|
||||
具体部署方法可参考该项目的 [README](https://github.com/songquanpeng/one-api),也可以直接通过以下按钮一键部署:
|
||||
可选择 [Sealos 快速部署 OneAPI](/docs/installation/one-api),更多部署方法可参考该项目的 [README](https://github.com/songquanpeng/one-api),也可以直接通过以下按钮一键部署:
|
||||
|
||||
[](https://cloud.sealos.io/?openapp=system-fastdeploy%3FtemplateName%3Done-api)
|
||||
|
||||
## 安装 Docker 和 docker-compose
|
||||
## 一、安装 Docker 和 docker-compose
|
||||
|
||||
{{< tabs tabTotal="3" >}}
|
||||
{{< tab tabName="Linux" >}}
|
||||
@@ -29,7 +29,7 @@ weight: 720
|
||||
|
||||
```bash
|
||||
# 安装 Docker
|
||||
curl -sSL https://get.daocloud.io/docker | sh
|
||||
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
|
||||
systemctl enable --now docker
|
||||
# 安装 docker-compose
|
||||
curl -L https://github.com/docker/compose/releases/download/2.20.3/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
|
||||
@@ -37,6 +37,7 @@ chmod +x /usr/local/bin/docker-compose
|
||||
# 验证安装
|
||||
docker -v
|
||||
docker-compose -v
|
||||
# 如失效,自行百度~
|
||||
```
|
||||
|
||||
{{< /markdownify >}}
|
||||
@@ -65,93 +66,35 @@ brew install orbstack
|
||||
{{< /tab >}}
|
||||
{{< /tabs >}}
|
||||
|
||||
## 创建 docker-compose.yml 文件
|
||||
## 二、创建目录并下载 docker-compose.yml
|
||||
|
||||
先创建一个目录(例如 fastgpt)并进入该目录,创建一个 docker-compose.yml 文件:
|
||||
依次执行下面命令,创建 FastGPT 文件并拉取`docker-compose.yml`和`config.json`,执行完后目录下会有 2 个文件。
|
||||
|
||||
非 Linux 环境,可手动创建目录,并下载这2个文件。
|
||||
|
||||
**注意: 配置文件中 Mongo 为 5.x,部分服务器不支持,需手动更改其镜像版本为 4.4.24**
|
||||
|
||||
```bash
|
||||
mkdir fastgpt
|
||||
cd fastgpt
|
||||
touch docker-compose.yml
|
||||
curl -O https://raw.githubusercontent.com/labring/FastGPT/main/files/deploy/fastgpt/docker-compose.yml
|
||||
curl -O https://raw.githubusercontent.com/labring/FastGPT/main/projects/app/data/config.json
|
||||
```
|
||||
|
||||
粘贴下面的内容,仅需把 `CHAT_API_KEY` 修改成 openai key 即可。如果需要使用中转或 oneapi 还需要修改 `OPENAI_BASE_URL`:
|
||||
|
||||
```yaml
|
||||
# 非 host 版本, 不使用本机代理
|
||||
version: '3.3'
|
||||
services:
|
||||
pg:
|
||||
image: ankane/pgvector:v0.4.2 # docker
|
||||
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/pgvector:v0.4.2 # 阿里云
|
||||
container_name: pg
|
||||
restart: always
|
||||
ports: # 生产环境建议不要暴露
|
||||
- 5432:5432
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
# 这里的配置只有首次运行生效。修改后,重启镜像是不会生效的。需要把持久化数据删除再重启,才有效果
|
||||
- POSTGRES_USER=username
|
||||
- POSTGRES_PASSWORD=password
|
||||
- POSTGRES_DB=postgres
|
||||
volumes:
|
||||
- ./pg/data:/var/lib/postgresql/data
|
||||
mongo:
|
||||
image: mongo:5.0.18
|
||||
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.18 # 阿里云
|
||||
container_name: mongo
|
||||
restart: always
|
||||
ports: # 生产环境建议不要暴露
|
||||
- 27017:27017
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
# 这里的配置只有首次运行生效。修改后,重启镜像是不会生效的。需要把持久化数据删除再重启,才有效果
|
||||
- MONGO_INITDB_ROOT_USERNAME=username
|
||||
- MONGO_INITDB_ROOT_PASSWORD=password
|
||||
volumes:
|
||||
- ./mongo/data:/data/db
|
||||
fastgpt:
|
||||
container_name: fastgpt
|
||||
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:latest # 阿里云
|
||||
image: ghcr.io/labring/fastgpt:latest # github
|
||||
ports:
|
||||
- 3000:3000
|
||||
networks:
|
||||
- fastgpt
|
||||
depends_on:
|
||||
- mongo
|
||||
- pg
|
||||
restart: always
|
||||
environment:
|
||||
# root 密码,用户名为: root
|
||||
- DEFAULT_ROOT_PSW=1234
|
||||
# 中转地址,如果是用官方号,不需要管
|
||||
- OPENAI_BASE_URL=https://api.openai.com/v1
|
||||
- CHAT_API_KEY=sk-xxxx
|
||||
- DB_MAX_LINK=5 # database max link
|
||||
- TOKEN_KEY=any
|
||||
- ROOT_KEY=root_key
|
||||
- FILE_TOKEN_KEY=filetoken
|
||||
# mongo 配置,不需要改. 如果连不上,可能需要去掉 ?authSource=admin
|
||||
- MONGODB_URI=mongodb://username:password@mongo:27017/fastgpt?authSource=admin
|
||||
# pg配置. 不需要改
|
||||
- PG_URL=postgresql://username:password@pg:5432/postgres
|
||||
networks:
|
||||
fastgpt:
|
||||
```
|
||||
## 三、启动容器
|
||||
|
||||
## 启动容器
|
||||
修改`docker-compose.yml`中的`OPENAI_BASE_URL`和`CHAT_API_KEY`即可,对应为 API 的地址和 key。
|
||||
|
||||
```bash
|
||||
# 在 docker-compose.yml 同级目录下执行
|
||||
docker-compose pull
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
## 访问 FastGPT
|
||||
## 四、访问 FastGPT
|
||||
|
||||
目前可以通过 `ip:3000` 直接访问(注意防火墙)。登录用户名为 `root`,密码为刚刚环境变量里设置的 `DEFAULT_ROOT_PSW`。
|
||||
目前可以通过 `ip:3000` 直接访问(注意防火墙)。登录用户名为 `root`,密码为`docker-compose.yml`环境变量里设置的 `DEFAULT_ROOT_PSW`。
|
||||
|
||||
如果需要域名访问,请自行安装并配置 Nginx。
|
||||
|
||||
@@ -168,28 +111,30 @@ docker-compose up -d
|
||||
|
||||
### 如何自定义配置文件?
|
||||
|
||||
需要在 `docker-compose.yml` 同级目录创建一个 `config.json` 文件,内容参考: [配置详解](/docs/development/configuration)
|
||||
修改`config.json`文件,并执行`docker-compose up -d`重起容器。具体配置,参考[配置详解](/docs/development/configuration)。
|
||||
|
||||
然后修改 `docker-compose.yml` 中的 `fastgpt` 容器内容,增加挂载选项即可:
|
||||
### 如何检查自定义配置文件是否挂载
|
||||
|
||||
```yaml
|
||||
fastgpt:
|
||||
container_name: fastgpt
|
||||
image: ghcr.io/labring/fastgpt:latest # github
|
||||
ports:
|
||||
- 3000:3000
|
||||
networks:
|
||||
- fastgpt
|
||||
depends_on:
|
||||
- mongo
|
||||
- pg
|
||||
restart: always
|
||||
environment:
|
||||
...
|
||||
- DEFAULT_ROOT_PSW=1234
|
||||
...
|
||||
volumes:
|
||||
- ./config.json:/app/data/config.json
|
||||
```
|
||||
1. `docker logs fastgpt` 可以查看日志,在启动容器后,第一次请求网页,会进行配置文件读取,可以看看有没有读取成功以及有无错误日志。
|
||||
2. `docker exec -it fastgpt sh` 进入 FastGPT 容器,可以通过`ls data`查看目录下是否成功挂载`config.json`文件。可通过`cat data/config.json`查看配置文件。
|
||||
|
||||
> 参考[配置详解](/docs/development/configuration)
|
||||
### 为什么无法连接 oneapi 和 本地模型镜像。
|
||||
|
||||
`docker-compose.yml`中使用了桥接的模式建立了`fastgpt`网络,如想通过0.0.0.0或镜像名访问其它镜像,需将其它镜像也加入到网络中。
|
||||
|
||||
### 端口冲突怎么解决?
|
||||
|
||||
docker-compose 端口定义为:`映射端口:运行端口`。
|
||||
|
||||
桥接模式下,容器运行端口不会有冲突,但是会有映射端口冲突,只需将映射端口修改成不同端口即可。
|
||||
|
||||
如果`容器1`需要连接`容器2`,使用`容器2:运行端口`来进行连接即可。
|
||||
|
||||
(自行补习 docker 基本知识)
|
||||
|
||||
### 错误排查方式
|
||||
|
||||
遇到问题先按下面方式排查。
|
||||
|
||||
1. `docker ps -a` 查看所有容器运行状态,检查是否全部 running,如有异常,尝试`docker logs 容器名`查看对应日志。
|
||||
2. 不懂 docker 不要瞎改端口,只需要改`OPENAI_BASE_URL`和`CHAT_API_KEY`即可。
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
title: '部署 One API,实现多模型支持'
|
||||
title: '接入微软、ChatGLM、本地模型等'
|
||||
description: '通过接入 One API 来实现对各种大模型的支持'
|
||||
icon: 'Api'
|
||||
draft: false
|
||||
@@ -7,9 +7,8 @@ toc: true
|
||||
weight: 730
|
||||
---
|
||||
|
||||
默认情况下,FastGPT 只配置了 GPT 的 3 个模型,如果你需要接入其他模型,需要进行一些额外配置。
|
||||
|
||||
[One API](https://github.com/songquanpeng/one-api) 是一个 OpenAI 接口管理 & 分发系统,可以通过标准的 OpenAI API 格式访问所有的大模型,开箱即用。
|
||||
* 默认情况下,FastGPT 只配置了 GPT 的 3 个模型,如果你需要接入其他模型,需要进行一些额外配置。
|
||||
* [One API](https://github.com/songquanpeng/one-api) 是一个 OpenAI 接口管理 & 分发系统,可以通过标准的 OpenAI API 格式访问所有的大模型,开箱即用。
|
||||
|
||||
FastGPT 可以通过接入 One API 来实现对各种大模型的支持。部署方法也很简单。
|
||||
|
||||
|
||||
@@ -23,6 +23,22 @@ Sealos 的服务器在国外,不需要额外处理网络问题,无需服务
|
||||
>
|
||||
> 密码就是刚刚一键部署时设置的环境变量
|
||||
|
||||
## 修改配置文件和环境变量
|
||||
|
||||
在 Sealos 中,你可以打开`应用管理`(App Launchpad)看到部署的 FastGPT,可以打开`数据库`(Database)看到对应的数据库。
|
||||
|
||||
在`应用管理`中,选中 FastGPT,点击变更,可以看到对应的环境变量和配置文件。
|
||||
|
||||

|
||||
|
||||
{{% alert icon="🤖 " context="success" %}}
|
||||
在 Sealos 上,FastGPT 一共运行了 1 个服务和 2 个数据库,如暂停和删除请注意数据库一同操作。(你可以白天启动,晚上暂停它们,省钱大法)
|
||||
{{% /alert %}}
|
||||
|
||||
## 更新
|
||||
|
||||
点击重启会自动拉取最新镜像更新,请确保镜像`tag`正确。
|
||||
|
||||
## 部署架构图
|
||||
|
||||

|
||||
@@ -4,7 +4,7 @@ description: 'FastGPT 从旧版本升级到 V4.0 操作指南'
|
||||
icon: 'upgrade'
|
||||
draft: false
|
||||
toc: true
|
||||
weight: 1000
|
||||
weight: 850
|
||||
---
|
||||
|
||||
如果您是**从旧版本升级到 V4**,由于新版 MongoDB 表变更比较大,需要按照本文档的说明执行一些初始化脚本。
|
||||
|
||||
@@ -4,7 +4,7 @@ description: 'FastGPT 从旧版本升级到 V4.1 操作指南'
|
||||
icon: 'upgrade'
|
||||
draft: false
|
||||
toc: true
|
||||
weight: 999
|
||||
weight: 849
|
||||
---
|
||||
|
||||
如果您是**从旧版本升级到 V4.1**,由于新版重新设置了对话存储结构,需要初始化原来的存储内容。
|
||||
|
||||
@@ -4,7 +4,7 @@ description: 'FastGPT 从旧版本升级到 V4.2 操作指南'
|
||||
icon: 'upgrade'
|
||||
draft: false
|
||||
toc: true
|
||||
weight: 998
|
||||
weight: 848
|
||||
---
|
||||
|
||||
99.9%用户不影响,升级 4.2 主要是修改了配置文件中 QAModel 的格式。从原先的数组改成对象:
|
||||
|
||||
@@ -4,7 +4,7 @@ description: 'FastGPT 从旧版本升级到 V4.2.1 操作指南'
|
||||
icon: 'upgrade'
|
||||
draft: false
|
||||
toc: true
|
||||
weight: 997
|
||||
weight: 847
|
||||
---
|
||||
|
||||
私有部署,如果添加了配置文件,需要在配置文件中修改 `VectorModels` 字段。增加 defaultToken 和 maxToken,分别对应直接分段时的默认 token 数量和该模型支持的 token 上限(通常不建议超过 3000)
|
||||
|
||||
@@ -4,7 +4,7 @@ description: 'FastGPT 从旧版本升级到 V4.3 操作指南'
|
||||
icon: 'upgrade'
|
||||
draft: false
|
||||
toc: true
|
||||
weight: 996
|
||||
weight: 846
|
||||
---
|
||||
|
||||
## 执行初始化 API
|
||||
|
||||
@@ -4,7 +4,7 @@ description: 'FastGPT 从旧版本升级到 V4.4 操作指南'
|
||||
icon: 'upgrade'
|
||||
draft: false
|
||||
toc: true
|
||||
weight: 995
|
||||
weight: 845
|
||||
---
|
||||
|
||||
## 执行初始化 API
|
||||
|
||||
@@ -4,7 +4,7 @@ description: 'FastGPT 从旧版本升级到 V4.4.1 操作指南'
|
||||
icon: 'upgrade'
|
||||
draft: false
|
||||
toc: true
|
||||
weight: 994
|
||||
weight: 844
|
||||
---
|
||||
|
||||
## 执行初始化 API
|
||||
|
||||
@@ -4,7 +4,7 @@ description: 'FastGPT 从旧版本升级到 V4.4.2 操作指南'
|
||||
icon: 'upgrade'
|
||||
draft: false
|
||||
toc: true
|
||||
weight: 993
|
||||
weight: 843
|
||||
---
|
||||
|
||||
## 执行初始化 API
|
||||
|
||||
@@ -4,7 +4,7 @@ description: 'FastGPT V4.4.5 更新(需执行升级脚本)'
|
||||
icon: 'upgrade'
|
||||
draft: false
|
||||
toc: true
|
||||
weight: 992
|
||||
weight: 842
|
||||
---
|
||||
|
||||
## 执行初始化 API
|
||||
@@ -26,6 +26,6 @@ curl --location --request POST 'https://{{host}}/api/admin/initv445' \
|
||||
### Fast GPT V4.4.5
|
||||
|
||||
1. 新增 - 下一步指引选项,可以通过模型生成 3 个预测问题。
|
||||
2. 新增 - 分享链接 hook 身份校验。
|
||||
3. 新增 - Api Key 使用。增加别名、额度限制和过期时间。自带 appId,无需额外连接。
|
||||
2. 商业版新增 - 分享链接限制及 hook 身份校验(可对接已有的用户系统)。
|
||||
3. 商业版新增 - Api Key 使用。增加别名、额度限制和过期时间。自带 appId,无需额外连接。
|
||||
4. 优化 - 全局变量与开场白合并成同一模块。
|
||||
14
docSite/content/docs/installation/upgrading/446.md
Normal file
@@ -0,0 +1,14 @@
|
||||
---
|
||||
title: 'V4.4.6'
|
||||
description: 'FastGPT V4.4.6 更新'
|
||||
icon: 'upgrade'
|
||||
draft: false
|
||||
toc: true
|
||||
weight: 841
|
||||
---
|
||||
|
||||
## 功能介绍
|
||||
|
||||
1. 高级编排新增模块 - 应用调用,可调用其他应用。
|
||||
2. 新增 - 必要连接校验
|
||||
3. 修复 - 下一步指引在免登录中身份问题。
|
||||
31
docSite/content/docs/installation/upgrading/447.md
Normal file
@@ -0,0 +1,31 @@
|
||||
---
|
||||
title: 'V4.4.7'
|
||||
description: 'FastGPT V4.4.7 更新(需执行升级脚本)'
|
||||
icon: 'upgrade'
|
||||
draft: false
|
||||
toc: true
|
||||
weight: 840
|
||||
---
|
||||
|
||||
## 执行初始化 API
|
||||
|
||||
发起 1 个 HTTP 请求({{rootkey}} 替换成环境变量里的`rootkey`,{{host}}替换成自己域名)
|
||||
|
||||
1. https://xxxxx/api/admin/initv445
|
||||
|
||||
```bash
|
||||
curl --location --request POST 'https://{{host}}/api/admin/initv447' \
|
||||
--header 'rootkey: {{rootkey}}' \
|
||||
--header 'Content-Type: application/json'
|
||||
```
|
||||
|
||||
初始化 pg 索引以及将 file_id 中空对象转成 manual 对象。如果数据多,可能需要较长时间,可以通过日志查看进度。
|
||||
|
||||
## 功能介绍
|
||||
|
||||
### Fast GPT V4.4.7
|
||||
|
||||
1. 优化了数据库文件 crud。
|
||||
2. 兼容链接读取,作为 source。
|
||||
3. 区分手动录入和标注,可追数据至某个文件。
|
||||
4. 升级 openai sdk。
|
||||
@@ -26,7 +26,7 @@ weight: 312
|
||||
|
||||
## 3. 创建 docker-compose.yml 文件
|
||||
|
||||
只需要修改 `OPEN_AI_API_KEY` 和 `OPEN_AI_API_BASE` 两个环境变量即可。其中 `OPEN_AI_API_KEY` 为第一步获取的秘钥,`OPEN_AI_API_BASE` 为 FastGPT 的 OpenAPI 地址,例如:`https://fastgpt.run/api/openapi/v1`。
|
||||
只需要修改 `OPEN_AI_API_KEY` 和 `OPEN_AI_API_BASE` 两个环境变量即可。其中 `OPEN_AI_API_KEY` 为第一步获取的秘钥,`OPEN_AI_API_BASE` 为 FastGPT 的 OpenAPI 地址,例如:`https://fastgpt.run/api/v1`。
|
||||
|
||||
随便找一个目录,创建一个 docker-compose.yml 文件,将下面的代码复制进去。
|
||||
|
||||
@@ -40,7 +40,7 @@ services:
|
||||
- seccomp:unconfined
|
||||
environment:
|
||||
OPEN_AI_API_KEY: 'fastgpt-z51pkjqm9nrk03a1rx2funoy'
|
||||
OPEN_AI_API_BASE: 'https://fastgpt.run/api/openapi/v1'
|
||||
OPEN_AI_API_BASE: 'https://fastgpt.run/api/v1'
|
||||
MODEL: 'gpt-3.5-turbo'
|
||||
CHANNEL_TYPE: 'wx'
|
||||
PROXY: ''
|
||||
|
||||
@@ -25,7 +25,7 @@ Tips: 安全起见,你可以设置一个额度或者过期时间,放置 key
|
||||
## 替换三方应用的变量
|
||||
|
||||
```bash
|
||||
OPENAI_API_BASE_URL: https://fastgpt.run/api/openapi (改成自己部署的域名)
|
||||
OPENAI_API_BASE_URL: https://fastgpt.run/api (改成自己部署的域名)
|
||||
OPENAI_API_KEY = 上一步获取到的秘钥
|
||||
```
|
||||
|
||||
|
||||
@@ -3,6 +3,6 @@ module fastgpt-docs
|
||||
go 1.21
|
||||
|
||||
require (
|
||||
github.com/colinwilson/lotusdocs v0.0.0-20230919015602-a9717caaab14 // indirect
|
||||
github.com/colinwilson/lotusdocs v0.1.0 // indirect
|
||||
github.com/gohugoio/hugo-mod-bootstrap-scss/v5 v5.20300.20003 // indirect
|
||||
)
|
||||
|
||||
@@ -6,6 +6,8 @@ github.com/colinwilson/lotusdocs v0.0.0-20230821033552-c5bcbdd9df80 h1:jKZF8sqr/
|
||||
github.com/colinwilson/lotusdocs v0.0.0-20230821033552-c5bcbdd9df80/go.mod h1:9zu2REJDi+zdPRcR5/bRYSUR7gkNF4NQLvV38SEoCP8=
|
||||
github.com/colinwilson/lotusdocs v0.0.0-20230919015602-a9717caaab14 h1:ORzVQia2njOTCs/5cTQZW0Y+YRZlupgwtGx3umABTcc=
|
||||
github.com/colinwilson/lotusdocs v0.0.0-20230919015602-a9717caaab14/go.mod h1:9zu2REJDi+zdPRcR5/bRYSUR7gkNF4NQLvV38SEoCP8=
|
||||
github.com/colinwilson/lotusdocs v0.1.0 h1:oTC8pAYQp9XDNaUwE4SEY+id3ByNELxIIFrktYEGxYA=
|
||||
github.com/colinwilson/lotusdocs v0.1.0/go.mod h1:9zu2REJDi+zdPRcR5/bRYSUR7gkNF4NQLvV38SEoCP8=
|
||||
github.com/gohugoio/hugo-mod-bootstrap-scss/v5 v5.20300.20003 h1:pt/JGVD5YYRsVVijOHPZI6YKTUvbR4e0hgV9B0S6rbI=
|
||||
github.com/gohugoio/hugo-mod-bootstrap-scss/v5 v5.20300.20003/go.mod h1:mvM05r93HiefwoaxQTaYiJxtJAhTebwQtU1Xh/J+Okk=
|
||||
github.com/gohugoio/hugo-mod-jslibs-dist/popperjs/v2 v2.21100.20000/go.mod h1:mFberT6ZtcchrsDtfvJM7aAH2bDKLdOnruUHl0hlapI=
|
||||
|
||||
@@ -18,6 +18,9 @@ defaultContentLanguage = 'zh-cn'
|
||||
weight = 10
|
||||
disabled = true
|
||||
|
||||
[build]
|
||||
noJSConfigInAssets = true
|
||||
|
||||
[module]
|
||||
[module.hugoVersion]
|
||||
extended = true
|
||||
|
||||
@@ -11,8 +11,12 @@
|
||||
{{ end -}}
|
||||
|
||||
{{ if .Page.Store.Get "hasMermaid" }}
|
||||
<script type="module">
|
||||
import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.esm.min.mjs';
|
||||
{{ $mermaid := resources.Get (printf "%s/%s" ($.Scratch.Get "pathName") "js/mermaid.js") }}
|
||||
{{ if hugo.IsProduction }}
|
||||
{{ $mermaid = $mermaid | minify | fingerprint "sha384" }}
|
||||
{{ end }}
|
||||
<script src="{{ $mermaid.RelPermalink }}" {{ if hugo.IsProduction }}integrity="{{ $mermaid.Data.Integrity }}"{{ end }}></script>
|
||||
<script>
|
||||
const config = {
|
||||
startOnLoad:true,
|
||||
logLevel: "error",
|
||||
|
||||
@@ -7,11 +7,33 @@
|
||||
{{ $yearToken := (cond (isset .Site.Params (lower "copyrightYearToken")) $.Site.Params.copyrightYearToken ":YEAR:") }}
|
||||
{{ replace $.Site.Params.footer.copyright $yearToken (string (now.Format "2006")) | markdownify }}
|
||||
</p>
|
||||
<!--change-->
|
||||
<p class="github-badge">
|
||||
<span class="badge-subject">云操作系统</span><span class="badge-value bg-blue"><a style="color:#fff" href="https://sealos.io/" target="_blank">Sealos</a></span>
|
||||
<span class="badge-subject">云开发</span><span class="badge-value bg-brightgreen"><a style="color:#fff" href="https://laf.run" target="_blank">Laf</a></span>
|
||||
<span class="badge-subject">云原生存储</span><span class="badge-value bg-orange"><a style="color:#fff" href="https://github.com/labring/sealfs" target="_blank">Sealfs</a></span>
|
||||
</p>
|
||||
<div id="fixed-box">
|
||||
<div class="feedback-btn-wrapper">
|
||||
<a
|
||||
href="https://fael3z0zfze.feishu.cn/share/base/form/shrcnRxj3utrzjywsom96Px4sud"
|
||||
style="text-decoration: none"
|
||||
target="_blank"
|
||||
>
|
||||
<button id="feedback-btn" title="Give feedback">
|
||||
<svg class="inline w-5 h-5" viewBox="0 0 20 20" fill="currentColor">
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
d="M18 13V5a2 2 0 00-2-2H4a2 2 0 00-2 2v8a2 2 0 002 2h3l3 3 3-3h3a2 2 0 002-2zM5 7a1 1 0 011-1h8a1 1 0 110 2H6a1 1 0 01-1-1zm1 3a1 1 0 100 2h3a1 1 0 100-2H6z"
|
||||
clip-rule="evenodd"
|
||||
></path>
|
||||
</svg>
|
||||
<span _msttexthash="6039839" _msthash="295">咨询合作</span>
|
||||
</button>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<!-- End -->
|
||||
</div>
|
||||
</div><!--end col-->
|
||||
</div><!--end row-->
|
||||
|
||||
@@ -30,6 +30,8 @@
|
||||
<meta name="Version" content="v0.1.0" />
|
||||
<!-- favicon -->
|
||||
{{ block "favicon" . }}{{ partialCached (printf "%s/%s" ($.Scratch.Get "pathName") "head/favicon.html") . }}{{ end }}
|
||||
{{- partial (printf "%s/%s" ($.Scratch.Get "pathName") "head/opengraph") . }}
|
||||
{{- partial (printf "%s/%s" ($.Scratch.Get "pathName") "head/twitter_cards") . }}
|
||||
<!-- Dark Mode -->
|
||||
{{ if eq .Site.Params.docs.darkMode true -}}
|
||||
{{ $darkModeInit := resources.Get (printf "/%s/%s" ($.Scratch.Get "pathName") "js/darkmode-init.js") | js.Build | minify -}}
|
||||
|
||||
@@ -42,7 +42,45 @@
|
||||
<ul>
|
||||
{{ range .Pages }}
|
||||
{{ $active := in $currentPage.RelPermalink .RelPermalink }}
|
||||
<li class="{{ if $active }}current{{ end }} {{ if eq .Site.Params.docs.sidebarIcons true -}}{{ else }}no-icon{{ end }}"><a class="sidebar-nested-link" href="{{ .Permalink }}">{{ .Title }}</a></li>
|
||||
{{ if .IsSection }}
|
||||
<li class="sidebar-dropdown nested {{ if eq .Site.Params.docs.sidebarIcons true -}}{{ else }}no-icon{{ end }} {{ if $active }}current active{{ end }}">
|
||||
<button class="btn">
|
||||
{{ if eq .Site.Params.docs.sidebarIcons true -}}
|
||||
<!-- <span class="material-icons me-2">{{- .Params.icon }}</span> -->
|
||||
{{ end }}
|
||||
{{- .Title }}
|
||||
</button>
|
||||
<div class="sidebar-submenu {{ if $active }}d-block{{ end }}">
|
||||
<ul>
|
||||
{{ range .Pages }}
|
||||
{{ $active := in $currentPage.RelPermalink .RelPermalink }}
|
||||
{{ if .IsSection }}
|
||||
<li class="sidebar-dropdown nested {{ if eq .Site.Params.docs.sidebarIcons true -}}{{ else }}no-icon{{ end }} {{ if $active }}current active{{ end }}">
|
||||
<button class="btn">
|
||||
{{ if eq .Site.Params.docs.sidebarIcons true -}}
|
||||
<!-- <span class="material-icons me-2">{{- .Params.icon }}</span> -->
|
||||
{{ end }}
|
||||
{{- .Title }}
|
||||
</button>
|
||||
<div class="sidebar-submenu {{ if $active }}d-block{{ end }}">
|
||||
<ul>
|
||||
{{ range .Pages }}
|
||||
{{ $active := in $currentPage.RelPermalink .RelPermalink }}
|
||||
<li class="{{ if $active }}current{{ end }} {{ if eq .Site.Params.docs.sidebarIcons true -}}{{ else }}no-icon{{ end }}"><a class="sidebar-nested-link" href="{{ .Permalink }}">{{ .Title }}</a></li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
||||
</li>
|
||||
{{ else }}
|
||||
<li class="{{ if $active }}current{{ end }} {{ if eq .Site.Params.docs.sidebarIcons true -}}{{ else }}no-icon{{ end }}"><a class="sidebar-nested-link" href="{{ .Permalink }}">{{ .Title }}</a></li>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
||||
</li>
|
||||
{{ else }}
|
||||
<li class="{{ if $active }}current{{ end }} {{ if eq .Site.Params.docs.sidebarIcons true -}}{{ else }}no-icon{{ end }}"><a class="sidebar-nested-link" href="{{ .Permalink }}">{{ .Title }}</a></li>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
{"Target":"docs/scss/style.min.dfae72221c400d9e5816cbed333a16f8ea12c17463fb493c40bab5119dc455b63fe877d0b76b92a7d5c6c595331a243d.css","MediaType":"text/css","Data":{"Integrity":"sha384-365yIhxADZ5YFsvtMzoW+OoSwXRj+0k8QLq1EZ3EVbY/6HfQt2uSp9XGxZUzGiQ9"}}
|
||||
@@ -1 +0,0 @@
|
||||
{"Target":"docs/scss/style.css","MediaType":"text/css","Data":{}}
|
||||
@@ -1 +0,0 @@
|
||||
{"Target":"scss/style.min.4d48305d7fec6ad346a2319f83fc622c27253ec11be0c970ae5b04baa6074df3868a7239c250d323090fdb718523631c.css","MediaType":"text/css","Data":{"Integrity":"sha384-TUgwXX/satNGojGfg/xiLCclPsEb4MlwrlsEuqYHTfOGinI5wlDTIwkP23GFI2Mc"}}
|
||||
@@ -1 +0,0 @@
|
||||
{"Target":"scss/style.css","MediaType":"text/css","Data":{}}
|
||||
|
Before Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 96 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 32 KiB |
@@ -3,10 +3,6 @@
|
||||
{
|
||||
"source": "/",
|
||||
"destination": "/docs"
|
||||
},
|
||||
{
|
||||
"source": "/imgs/:path*",
|
||||
"destination": "https://jsdelivr.icloudnative.io/gh/labring/FastGPT@main/docSite/assets/imgs/:path*"
|
||||
}
|
||||
],
|
||||
"headers": [
|
||||
|
||||
@@ -1,63 +0,0 @@
|
||||
{
|
||||
"FeConfig": {
|
||||
"show_emptyChat": true,
|
||||
"show_register": false,
|
||||
"show_appStore": false,
|
||||
"show_userDetail": false,
|
||||
"show_contact": true,
|
||||
"show_git": true,
|
||||
"show_doc": true,
|
||||
"systemTitle": "FastGPT",
|
||||
"authorText": "Made by FastGPT Team.",
|
||||
"scripts": []
|
||||
},
|
||||
"SystemParams": {
|
||||
"vectorMaxProcess": 15,
|
||||
"qaMaxProcess": 15,
|
||||
"pgIvfflatProbe": 20
|
||||
},
|
||||
"ChatModels": [
|
||||
{
|
||||
"model": "gpt-3.5-turbo",
|
||||
"name": "GPT35-4k",
|
||||
"contextMaxToken": 4000,
|
||||
"quoteMaxToken": 2000,
|
||||
"maxTemperature": 1.2,
|
||||
"price": 0,
|
||||
"defaultSystem": ""
|
||||
},
|
||||
{
|
||||
"model": "gpt-3.5-turbo-16k",
|
||||
"name": "GPT35-16k",
|
||||
"contextMaxToken": 16000,
|
||||
"quoteMaxToken": 8000,
|
||||
"maxTemperature": 1.2,
|
||||
"price": 0,
|
||||
"defaultSystem": ""
|
||||
},
|
||||
{
|
||||
"model": "gpt-4",
|
||||
"name": "GPT4-8k",
|
||||
"contextMaxToken": 8000,
|
||||
"quoteMaxToken": 4000,
|
||||
"maxTemperature": 1.2,
|
||||
"price": 0,
|
||||
"defaultSystem": ""
|
||||
}
|
||||
],
|
||||
"VectorModels": [
|
||||
{
|
||||
"model": "text-embedding-ada-002",
|
||||
"name": "Embedding-2",
|
||||
"price": 0,
|
||||
"defaultToken": 500,
|
||||
"maxToken": 3000
|
||||
}
|
||||
],
|
||||
"QAModel": {
|
||||
"model": "gpt-3.5-turbo-16k",
|
||||
"name": "GPT35-16k",
|
||||
"maxToken": 16000,
|
||||
"price": 0
|
||||
}
|
||||
}
|
||||
@@ -11,7 +11,7 @@
|
||||
"i18next": "^23.2.11",
|
||||
"lint-staged": "^13.2.1",
|
||||
"next-i18next": "^14.0.0",
|
||||
"prettier": "^2.8.7",
|
||||
"prettier": "^3.0.3",
|
||||
"react-i18next": "^13.0.2"
|
||||
},
|
||||
"lint-staged": {
|
||||
|
||||
23
packages/common/tools/file.ts
Normal file
@@ -0,0 +1,23 @@
|
||||
import { strIsLink } from './str';
|
||||
|
||||
export const fileImgs = [
|
||||
{ suffix: 'pdf', src: '/imgs/files/pdf.svg' },
|
||||
{ suffix: 'csv', src: '/imgs/files/csv.svg' },
|
||||
{ suffix: '(doc|docs)', src: '/imgs/files/doc.svg' },
|
||||
{ suffix: 'txt', src: '/imgs/files/txt.svg' },
|
||||
{ suffix: 'md', src: '/imgs/files/markdown.svg' },
|
||||
{ suffix: '.', src: '/imgs/files/file.svg' }
|
||||
];
|
||||
|
||||
export function getFileIcon(name = '') {
|
||||
return fileImgs.find((item) => new RegExp(item.suffix, 'gi').test(name))?.src;
|
||||
}
|
||||
export function getSpecialFileIcon(name = '') {
|
||||
if (name === 'manual') {
|
||||
return '/imgs/files/manual.svg';
|
||||
} else if (name === 'mark') {
|
||||
return '/imgs/files/mark.svg';
|
||||
} else if (strIsLink(name)) {
|
||||
return '/imgs/files/link.svg';
|
||||
}
|
||||
}
|
||||
5
packages/common/tools/str.ts
Normal file
@@ -0,0 +1,5 @@
|
||||
export function strIsLink(str?: string) {
|
||||
if (!str) return false;
|
||||
if (/^((http|https)?:\/\/|www\.|\/)[^\s/$.?#].[^\s]*$/i.test(str)) return true;
|
||||
return false;
|
||||
}
|
||||
16
packages/core/ai/config.ts
Normal file
@@ -0,0 +1,16 @@
|
||||
import { UserModelSchema } from '../user/type';
|
||||
import OpenAI from 'openai';
|
||||
|
||||
export const openaiBaseUrl = process.env.OPENAI_BASE_URL || 'https://api.openai.com/v1';
|
||||
export const baseUrl = process.env.ONEAPI_URL || openaiBaseUrl;
|
||||
|
||||
export const systemAIChatKey = process.env.CHAT_API_KEY || '';
|
||||
|
||||
export const getAIApi = (props?: UserModelSchema['openaiAccount'], timeout = 6000) => {
|
||||
return new OpenAI({
|
||||
apiKey: props?.key || systemAIChatKey,
|
||||
baseURL: props?.baseUrl || baseUrl,
|
||||
httpAgent: global.httpsAgent,
|
||||
timeout
|
||||
});
|
||||
};
|
||||
6
packages/core/ai/constant.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
export enum ChatCompletionRequestMessageRoleEnum {
|
||||
'System' = 'system',
|
||||
'User' = 'user',
|
||||
'Assistant' = 'assistant',
|
||||
'Function' = 'function'
|
||||
}
|
||||
57
packages/core/ai/functions/createQuestionGuide.ts
Normal file
@@ -0,0 +1,57 @@
|
||||
import { ChatCompletionRequestMessage } from '../type';
|
||||
import { getAIApi } from '../config';
|
||||
|
||||
export const Prompt_QuestionGuide = `我不太清楚问你什么问题,请帮我生成 3 个问题,引导我继续提问。问题的长度应小于20个字符,按 JSON 格式返回: ["问题1", "问题2", "问题3"]`;
|
||||
|
||||
export async function createQuestionGuide({
|
||||
messages,
|
||||
model
|
||||
}: {
|
||||
messages: ChatCompletionRequestMessage[];
|
||||
model: string;
|
||||
}) {
|
||||
const ai = getAIApi();
|
||||
const data = await ai.chat.completions.create({
|
||||
model: model,
|
||||
temperature: 0,
|
||||
max_tokens: 200,
|
||||
messages: [
|
||||
...messages,
|
||||
{
|
||||
role: 'user',
|
||||
content: Prompt_QuestionGuide
|
||||
}
|
||||
],
|
||||
stream: false
|
||||
});
|
||||
|
||||
const answer = data.choices?.[0].message?.content || '';
|
||||
const totalTokens = data.usage?.total_tokens || 0;
|
||||
|
||||
const start = answer.indexOf('[');
|
||||
const end = answer.lastIndexOf(']');
|
||||
|
||||
if (start === -1 || end === -1) {
|
||||
return {
|
||||
result: [],
|
||||
tokens: totalTokens
|
||||
};
|
||||
}
|
||||
|
||||
const jsonStr = answer
|
||||
.substring(start, end + 1)
|
||||
.replace(/(\\n|\\)/g, '')
|
||||
.replace(/ /g, '');
|
||||
|
||||
try {
|
||||
return {
|
||||
result: JSON.parse(jsonStr),
|
||||
tokens: totalTokens
|
||||
};
|
||||
} catch (error) {
|
||||
return {
|
||||
result: [],
|
||||
tokens: totalTokens
|
||||
};
|
||||
}
|
||||
}
|
||||
6
packages/core/ai/type.d.ts
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
import OpenAI from 'openai';
|
||||
export type ChatCompletionRequestMessage = OpenAI.Chat.CreateChatCompletionRequestMessage;
|
||||
export type ChatCompletion = OpenAI.Chat.ChatCompletion;
|
||||
export type CreateChatCompletionRequest = OpenAI.Chat.ChatCompletionCreateParams;
|
||||
|
||||
export type StreamChatType = Stream<OpenAI.Chat.ChatCompletionChunk>;
|
||||
@@ -1,28 +0,0 @@
|
||||
import { UserModelSchema } from '../user/type';
|
||||
import { Configuration, OpenAIApi } from 'openai';
|
||||
|
||||
export const openaiBaseUrl = process.env.OPENAI_BASE_URL || 'https://api.openai.com/v1';
|
||||
export const baseUrl = process.env.ONEAPI_URL || openaiBaseUrl;
|
||||
|
||||
export const systemAIChatKey = process.env.CHAT_API_KEY || '';
|
||||
|
||||
export const getAIChatApi = (props?: UserModelSchema['openaiAccount']) => {
|
||||
return new OpenAIApi(
|
||||
new Configuration({
|
||||
basePath: props?.baseUrl || baseUrl,
|
||||
apiKey: props?.key || systemAIChatKey
|
||||
})
|
||||
);
|
||||
};
|
||||
|
||||
/* openai axios config */
|
||||
export const axiosConfig = (props?: UserModelSchema['openaiAccount']) => {
|
||||
return {
|
||||
baseURL: props?.baseUrl || baseUrl, // 此处仅对非 npm 模块有效
|
||||
httpsAgent: global.httpsAgent,
|
||||
headers: {
|
||||
Authorization: `Bearer ${props?.key || systemAIChatKey}`,
|
||||
auth: process.env.OPENAI_BASE_URL_AUTH || ''
|
||||
}
|
||||
};
|
||||
};
|
||||
@@ -1 +0,0 @@
|
||||
export { ChatCompletionRequestMessageRoleEnum } from 'openai';
|
||||
1
packages/core/aiApi/type.d.ts
vendored
@@ -1 +0,0 @@
|
||||
export type { CreateChatCompletionRequest, ChatCompletionRequestMessage } from 'openai';
|
||||
15
packages/core/dataset/constant.ts
Normal file
@@ -0,0 +1,15 @@
|
||||
export enum DatasetSpecialIdEnum {
|
||||
manual = 'manual',
|
||||
mark = 'mark'
|
||||
}
|
||||
export const datasetSpecialIdMap = {
|
||||
[DatasetSpecialIdEnum.manual]: {
|
||||
name: 'kb.Manual Data',
|
||||
sourceName: 'kb.Manual Input'
|
||||
},
|
||||
[DatasetSpecialIdEnum.mark]: {
|
||||
name: 'kb.Mark Data',
|
||||
sourceName: 'kb.Manual Mark'
|
||||
}
|
||||
};
|
||||
export const datasetSpecialIds: string[] = [DatasetSpecialIdEnum.manual, DatasetSpecialIdEnum.mark];
|
||||
8
packages/core/dataset/utils.ts
Normal file
@@ -0,0 +1,8 @@
|
||||
import { datasetSpecialIds } from './constant';
|
||||
import { strIsLink } from '@fastgpt/common/tools/str';
|
||||
|
||||
export function isSpecialFileId(id: string) {
|
||||
if (datasetSpecialIds.includes(id)) return true;
|
||||
if (strIsLink(id)) return true;
|
||||
return false;
|
||||
}
|
||||
@@ -2,7 +2,10 @@
|
||||
"name": "@fastgpt/core",
|
||||
"version": "1.0.0",
|
||||
"dependencies": {
|
||||
"openai": "^3.3.0",
|
||||
"@fastgpt/common": "workspace:*",
|
||||
"@fastgpt/support": "workspace:*",
|
||||
"encoding": "^0.1.13",
|
||||
"openai": "^4.11.1",
|
||||
"tunnel": "^0.0.6"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
{
|
||||
"name": "@fastgpt/support",
|
||||
"version": "1.0.0"
|
||||
"version": "1.0.0",
|
||||
"dependencies": {
|
||||
"@fastgpt/common": "workspace:*"
|
||||
}
|
||||
}
|
||||
|
||||
308
pnpm-lock.yaml
generated
@@ -21,8 +21,8 @@ importers:
|
||||
specifier: ^14.0.0
|
||||
version: registry.npmmirror.com/next-i18next@14.0.0(i18next@23.2.11)(next@13.5.2)(react-i18next@13.0.2)(react@18.2.0)
|
||||
prettier:
|
||||
specifier: ^2.8.7
|
||||
version: registry.npmmirror.com/prettier@2.8.7
|
||||
specifier: ^3.0.3
|
||||
version: registry.npmmirror.com/prettier@3.0.3
|
||||
react-i18next:
|
||||
specifier: ^13.0.2
|
||||
version: registry.npmmirror.com/react-i18next@13.0.2(i18next@23.2.11)(react-dom@18.2.0)(react@18.2.0)
|
||||
@@ -31,9 +31,18 @@ importers:
|
||||
|
||||
packages/core:
|
||||
dependencies:
|
||||
'@fastgpt/common':
|
||||
specifier: workspace:*
|
||||
version: link:../common
|
||||
'@fastgpt/support':
|
||||
specifier: workspace:*
|
||||
version: link:../support
|
||||
encoding:
|
||||
specifier: ^0.1.13
|
||||
version: registry.npmmirror.com/encoding@0.1.13
|
||||
openai:
|
||||
specifier: ^3.3.0
|
||||
version: registry.npmmirror.com/openai@3.3.0
|
||||
specifier: ^4.11.1
|
||||
version: registry.npmmirror.com/openai@4.11.1(encoding@0.1.13)
|
||||
tunnel:
|
||||
specifier: ^0.0.6
|
||||
version: registry.npmmirror.com/tunnel@0.0.6
|
||||
@@ -42,16 +51,26 @@ importers:
|
||||
specifier: ^0.0.4
|
||||
version: registry.npmmirror.com/@types/tunnel@0.0.4
|
||||
|
||||
packages/support: {}
|
||||
packages/support:
|
||||
dependencies:
|
||||
'@fastgpt/common':
|
||||
specifier: workspace:*
|
||||
version: link:../common
|
||||
|
||||
projects/app:
|
||||
dependencies:
|
||||
'@chakra-ui/anatomy':
|
||||
specifier: ^2.2.1
|
||||
version: registry.npmmirror.com/@chakra-ui/anatomy@2.2.1
|
||||
'@chakra-ui/icons':
|
||||
specifier: ^2.0.17
|
||||
version: registry.npmmirror.com/@chakra-ui/icons@2.0.17(@chakra-ui/system@2.5.8)(react@18.2.0)
|
||||
'@chakra-ui/react':
|
||||
specifier: ^2.7.0
|
||||
version: registry.npmmirror.com/@chakra-ui/react@2.7.0(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(@types/react@18.0.28)(framer-motion@9.0.6)(react-dom@18.2.0)(react@18.2.0)
|
||||
'@chakra-ui/styled-system':
|
||||
specifier: ^2.9.1
|
||||
version: registry.npmmirror.com/@chakra-ui/styled-system@2.9.1
|
||||
'@chakra-ui/system':
|
||||
specifier: ^2.5.8
|
||||
version: registry.npmmirror.com/@chakra-ui/system@2.5.8(@emotion/react@11.10.6)(@emotion/styled@11.10.6)(react@18.2.0)
|
||||
@@ -307,6 +326,7 @@ packages:
|
||||
resolution: {integrity: sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@aws-crypto/crc32/-/crc32-3.0.0.tgz}
|
||||
name: '@aws-crypto/crc32'
|
||||
version: 3.0.0
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@aws-crypto/util': registry.npmmirror.com/@aws-crypto/util@3.0.0
|
||||
'@aws-sdk/types': registry.npmmirror.com/@aws-sdk/types@3.418.0
|
||||
@@ -318,6 +338,7 @@ packages:
|
||||
resolution: {integrity: sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz}
|
||||
name: '@aws-crypto/ie11-detection'
|
||||
version: 3.0.0
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
tslib: registry.npmmirror.com/tslib@1.14.1
|
||||
dev: false
|
||||
@@ -327,6 +348,7 @@ packages:
|
||||
resolution: {integrity: sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz}
|
||||
name: '@aws-crypto/sha256-browser'
|
||||
version: 3.0.0
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@aws-crypto/ie11-detection': registry.npmmirror.com/@aws-crypto/ie11-detection@3.0.0
|
||||
'@aws-crypto/sha256-js': registry.npmmirror.com/@aws-crypto/sha256-js@3.0.0
|
||||
@@ -343,6 +365,7 @@ packages:
|
||||
resolution: {integrity: sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz}
|
||||
name: '@aws-crypto/sha256-js'
|
||||
version: 3.0.0
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@aws-crypto/util': registry.npmmirror.com/@aws-crypto/util@3.0.0
|
||||
'@aws-sdk/types': registry.npmmirror.com/@aws-sdk/types@3.418.0
|
||||
@@ -354,6 +377,7 @@ packages:
|
||||
resolution: {integrity: sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz}
|
||||
name: '@aws-crypto/supports-web-crypto'
|
||||
version: 3.0.0
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
tslib: registry.npmmirror.com/tslib@1.14.1
|
||||
dev: false
|
||||
@@ -363,6 +387,7 @@ packages:
|
||||
resolution: {integrity: sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@aws-crypto/util/-/util-3.0.0.tgz}
|
||||
name: '@aws-crypto/util'
|
||||
version: 3.0.0
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@aws-sdk/types': registry.npmmirror.com/@aws-sdk/types@3.418.0
|
||||
'@aws-sdk/util-utf8-browser': registry.npmmirror.com/@aws-sdk/util-utf8-browser@3.259.0
|
||||
@@ -375,6 +400,7 @@ packages:
|
||||
name: '@aws-sdk/client-cognito-identity'
|
||||
version: 3.418.0
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@aws-crypto/sha256-browser': registry.npmmirror.com/@aws-crypto/sha256-browser@3.0.0
|
||||
'@aws-crypto/sha256-js': registry.npmmirror.com/@aws-crypto/sha256-js@3.0.0
|
||||
@@ -423,6 +449,7 @@ packages:
|
||||
name: '@aws-sdk/client-sso'
|
||||
version: 3.418.0
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@aws-crypto/sha256-browser': registry.npmmirror.com/@aws-crypto/sha256-browser@3.0.0
|
||||
'@aws-crypto/sha256-js': registry.npmmirror.com/@aws-crypto/sha256-js@3.0.0
|
||||
@@ -468,6 +495,7 @@ packages:
|
||||
name: '@aws-sdk/client-sts'
|
||||
version: 3.418.0
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@aws-crypto/sha256-browser': registry.npmmirror.com/@aws-crypto/sha256-browser@3.0.0
|
||||
'@aws-crypto/sha256-js': registry.npmmirror.com/@aws-crypto/sha256-js@3.0.0
|
||||
@@ -517,6 +545,7 @@ packages:
|
||||
name: '@aws-sdk/credential-provider-cognito-identity'
|
||||
version: 3.418.0
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@aws-sdk/client-cognito-identity': registry.npmmirror.com/@aws-sdk/client-cognito-identity@3.418.0
|
||||
'@aws-sdk/types': registry.npmmirror.com/@aws-sdk/types@3.418.0
|
||||
@@ -533,6 +562,7 @@ packages:
|
||||
name: '@aws-sdk/credential-provider-env'
|
||||
version: 3.418.0
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@aws-sdk/types': registry.npmmirror.com/@aws-sdk/types@3.418.0
|
||||
'@smithy/property-provider': registry.npmmirror.com/@smithy/property-provider@2.0.10
|
||||
@@ -546,6 +576,7 @@ packages:
|
||||
name: '@aws-sdk/credential-provider-ini'
|
||||
version: 3.418.0
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@aws-sdk/credential-provider-env': registry.npmmirror.com/@aws-sdk/credential-provider-env@3.418.0
|
||||
'@aws-sdk/credential-provider-process': registry.npmmirror.com/@aws-sdk/credential-provider-process@3.418.0
|
||||
@@ -567,6 +598,7 @@ packages:
|
||||
name: '@aws-sdk/credential-provider-node'
|
||||
version: 3.418.0
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@aws-sdk/credential-provider-env': registry.npmmirror.com/@aws-sdk/credential-provider-env@3.418.0
|
||||
'@aws-sdk/credential-provider-ini': registry.npmmirror.com/@aws-sdk/credential-provider-ini@3.418.0
|
||||
@@ -589,6 +621,7 @@ packages:
|
||||
name: '@aws-sdk/credential-provider-process'
|
||||
version: 3.418.0
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@aws-sdk/types': registry.npmmirror.com/@aws-sdk/types@3.418.0
|
||||
'@smithy/property-provider': registry.npmmirror.com/@smithy/property-provider@2.0.10
|
||||
@@ -603,6 +636,7 @@ packages:
|
||||
name: '@aws-sdk/credential-provider-sso'
|
||||
version: 3.418.0
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@aws-sdk/client-sso': registry.npmmirror.com/@aws-sdk/client-sso@3.418.0
|
||||
'@aws-sdk/token-providers': registry.npmmirror.com/@aws-sdk/token-providers@3.418.0
|
||||
@@ -621,6 +655,7 @@ packages:
|
||||
name: '@aws-sdk/credential-provider-web-identity'
|
||||
version: 3.418.0
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@aws-sdk/types': registry.npmmirror.com/@aws-sdk/types@3.418.0
|
||||
'@smithy/property-provider': registry.npmmirror.com/@smithy/property-provider@2.0.10
|
||||
@@ -661,6 +696,7 @@ packages:
|
||||
name: '@aws-sdk/middleware-host-header'
|
||||
version: 3.418.0
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@aws-sdk/types': registry.npmmirror.com/@aws-sdk/types@3.418.0
|
||||
'@smithy/protocol-http': registry.npmmirror.com/@smithy/protocol-http@3.0.5
|
||||
@@ -674,6 +710,7 @@ packages:
|
||||
name: '@aws-sdk/middleware-logger'
|
||||
version: 3.418.0
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@aws-sdk/types': registry.npmmirror.com/@aws-sdk/types@3.418.0
|
||||
'@smithy/types': registry.npmmirror.com/@smithy/types@2.3.3
|
||||
@@ -686,6 +723,7 @@ packages:
|
||||
name: '@aws-sdk/middleware-recursion-detection'
|
||||
version: 3.418.0
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@aws-sdk/types': registry.npmmirror.com/@aws-sdk/types@3.418.0
|
||||
'@smithy/protocol-http': registry.npmmirror.com/@smithy/protocol-http@3.0.5
|
||||
@@ -699,6 +737,7 @@ packages:
|
||||
name: '@aws-sdk/middleware-sdk-sts'
|
||||
version: 3.418.0
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@aws-sdk/middleware-signing': registry.npmmirror.com/@aws-sdk/middleware-signing@3.418.0
|
||||
'@aws-sdk/types': registry.npmmirror.com/@aws-sdk/types@3.418.0
|
||||
@@ -712,6 +751,7 @@ packages:
|
||||
name: '@aws-sdk/middleware-signing'
|
||||
version: 3.418.0
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@aws-sdk/types': registry.npmmirror.com/@aws-sdk/types@3.418.0
|
||||
'@smithy/property-provider': registry.npmmirror.com/@smithy/property-provider@2.0.10
|
||||
@@ -728,6 +768,7 @@ packages:
|
||||
name: '@aws-sdk/middleware-user-agent'
|
||||
version: 3.418.0
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@aws-sdk/types': registry.npmmirror.com/@aws-sdk/types@3.418.0
|
||||
'@aws-sdk/util-endpoints': registry.npmmirror.com/@aws-sdk/util-endpoints@3.418.0
|
||||
@@ -742,6 +783,7 @@ packages:
|
||||
name: '@aws-sdk/region-config-resolver'
|
||||
version: 3.418.0
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@smithy/node-config-provider': registry.npmmirror.com/@smithy/node-config-provider@2.0.12
|
||||
'@smithy/types': registry.npmmirror.com/@smithy/types@2.3.3
|
||||
@@ -756,6 +798,7 @@ packages:
|
||||
name: '@aws-sdk/token-providers'
|
||||
version: 3.418.0
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@aws-crypto/sha256-browser': registry.npmmirror.com/@aws-crypto/sha256-browser@3.0.0
|
||||
'@aws-crypto/sha256-js': registry.npmmirror.com/@aws-crypto/sha256-js@3.0.0
|
||||
@@ -802,6 +845,7 @@ packages:
|
||||
name: '@aws-sdk/types'
|
||||
version: 3.418.0
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@smithy/types': registry.npmmirror.com/@smithy/types@2.3.3
|
||||
tslib: registry.npmmirror.com/tslib@2.5.3
|
||||
@@ -813,6 +857,7 @@ packages:
|
||||
name: '@aws-sdk/util-endpoints'
|
||||
version: 3.418.0
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@aws-sdk/types': registry.npmmirror.com/@aws-sdk/types@3.418.0
|
||||
tslib: registry.npmmirror.com/tslib@2.5.3
|
||||
@@ -824,6 +869,7 @@ packages:
|
||||
name: '@aws-sdk/util-locate-window'
|
||||
version: 3.310.0
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
tslib: registry.npmmirror.com/tslib@2.5.3
|
||||
dev: false
|
||||
@@ -833,6 +879,7 @@ packages:
|
||||
resolution: {integrity: sha512-c4p4mc0VV/jIeNH0lsXzhJ1MpWRLuboGtNEpqE4s1Vl9ck2amv9VdUUZUmHbg+bVxlMgRQ4nmiovA4qIrqGuyg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.418.0.tgz}
|
||||
name: '@aws-sdk/util-user-agent-browser'
|
||||
version: 3.418.0
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@aws-sdk/types': registry.npmmirror.com/@aws-sdk/types@3.418.0
|
||||
'@smithy/types': registry.npmmirror.com/@smithy/types@2.3.3
|
||||
@@ -846,6 +893,7 @@ packages:
|
||||
name: '@aws-sdk/util-user-agent-node'
|
||||
version: 3.418.0
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
peerDependencies:
|
||||
aws-crt: '>=1.0.0'
|
||||
peerDependenciesMeta:
|
||||
@@ -863,6 +911,7 @@ packages:
|
||||
resolution: {integrity: sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz}
|
||||
name: '@aws-sdk/util-utf8-browser'
|
||||
version: 3.259.0
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
tslib: registry.npmmirror.com/tslib@2.5.3
|
||||
dev: false
|
||||
@@ -2487,6 +2536,12 @@ packages:
|
||||
version: 2.1.2
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/@chakra-ui/anatomy@2.2.1:
|
||||
resolution: {integrity: sha512-bbmyWTGwQo+aHYDMtLIj7k7hcWvwE7GFVDViLFArrrPhfUTDdQTNqhiDp1N7eh2HLyjNhc2MKXV8s2KTQqkmTg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@chakra-ui/anatomy/-/anatomy-2.2.1.tgz}
|
||||
name: '@chakra-ui/anatomy'
|
||||
version: 2.2.1
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/@chakra-ui/avatar@2.2.11(@chakra-ui/system@2.5.8)(react@18.2.0):
|
||||
resolution: {integrity: sha512-CJFkoWvlCTDJTUBrKA/aVyG5Zz6TBEIVmmsJtqC6VcQuVDTxkWod8ruXnjb0LT2DUveL7xR5qZM9a5IXcsH3zg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@chakra-ui/avatar/-/avatar-2.2.11.tgz}
|
||||
id: registry.npmmirror.com/@chakra-ui/avatar/2.2.11
|
||||
@@ -3854,6 +3909,7 @@ packages:
|
||||
resolution: {integrity: sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@emotion/memoize/-/memoize-0.7.4.tgz}
|
||||
name: '@emotion/memoize'
|
||||
version: 0.7.4
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
@@ -4375,6 +4431,7 @@ packages:
|
||||
name: '@smithy/abort-controller'
|
||||
version: 2.0.9
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@smithy/types': registry.npmmirror.com/@smithy/types@2.3.3
|
||||
tslib: registry.npmmirror.com/tslib@2.5.3
|
||||
@@ -4386,6 +4443,7 @@ packages:
|
||||
name: '@smithy/config-resolver'
|
||||
version: 2.0.10
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@smithy/node-config-provider': registry.npmmirror.com/@smithy/node-config-provider@2.0.12
|
||||
'@smithy/types': registry.npmmirror.com/@smithy/types@2.3.3
|
||||
@@ -4400,6 +4458,7 @@ packages:
|
||||
name: '@smithy/credential-provider-imds'
|
||||
version: 2.0.12
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@smithy/node-config-provider': registry.npmmirror.com/@smithy/node-config-provider@2.0.12
|
||||
'@smithy/property-provider': registry.npmmirror.com/@smithy/property-provider@2.0.10
|
||||
@@ -4413,6 +4472,7 @@ packages:
|
||||
resolution: {integrity: sha512-sy0pcbKnawt1iu+qCoSFbs/h9PAaUgvlJEO3lqkE1HFFj4p5RgL98vH+9CyDoj6YY82cG5XsorFmcLqQJHTOYw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@smithy/eventstream-codec/-/eventstream-codec-2.0.9.tgz}
|
||||
name: '@smithy/eventstream-codec'
|
||||
version: 2.0.9
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@aws-crypto/crc32': registry.npmmirror.com/@aws-crypto/crc32@3.0.0
|
||||
'@smithy/types': registry.npmmirror.com/@smithy/types@2.3.3
|
||||
@@ -4425,6 +4485,7 @@ packages:
|
||||
resolution: {integrity: sha512-BIeCHGfr5JCGN+EMTwZK74ELvjPXOIrI7OLM5OhZJJ6AmZyRv2S9ANJk18AtLwht0TsSm+8WoXIEp8LuxNgUyA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@smithy/fetch-http-handler/-/fetch-http-handler-2.1.5.tgz}
|
||||
name: '@smithy/fetch-http-handler'
|
||||
version: 2.1.5
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@smithy/protocol-http': registry.npmmirror.com/@smithy/protocol-http@3.0.5
|
||||
'@smithy/querystring-builder': registry.npmmirror.com/@smithy/querystring-builder@2.0.9
|
||||
@@ -4439,6 +4500,7 @@ packages:
|
||||
name: '@smithy/hash-node'
|
||||
version: 2.0.9
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@smithy/types': registry.npmmirror.com/@smithy/types@2.3.3
|
||||
'@smithy/util-buffer-from': registry.npmmirror.com/@smithy/util-buffer-from@2.0.0
|
||||
@@ -4451,6 +4513,7 @@ packages:
|
||||
resolution: {integrity: sha512-RuJqhYf8nViK96IIO9JbTtjDUuFItVfuuJhWw2yk7fv67yltQ7fZD6IQ2OsHHluoVmstnQJuCg5raXJR696Ubw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@smithy/invalid-dependency/-/invalid-dependency-2.0.9.tgz}
|
||||
name: '@smithy/invalid-dependency'
|
||||
version: 2.0.9
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@smithy/types': registry.npmmirror.com/@smithy/types@2.3.3
|
||||
tslib: registry.npmmirror.com/tslib@2.5.3
|
||||
@@ -4462,6 +4525,7 @@ packages:
|
||||
name: '@smithy/is-array-buffer'
|
||||
version: 2.0.0
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
tslib: registry.npmmirror.com/tslib@2.5.3
|
||||
dev: false
|
||||
@@ -4472,6 +4536,7 @@ packages:
|
||||
name: '@smithy/middleware-content-length'
|
||||
version: 2.0.11
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@smithy/protocol-http': registry.npmmirror.com/@smithy/protocol-http@3.0.5
|
||||
'@smithy/types': registry.npmmirror.com/@smithy/types@2.3.3
|
||||
@@ -4484,6 +4549,7 @@ packages:
|
||||
name: '@smithy/middleware-endpoint'
|
||||
version: 2.0.9
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@smithy/middleware-serde': registry.npmmirror.com/@smithy/middleware-serde@2.0.9
|
||||
'@smithy/types': registry.npmmirror.com/@smithy/types@2.3.3
|
||||
@@ -4498,6 +4564,7 @@ packages:
|
||||
name: '@smithy/middleware-retry'
|
||||
version: 2.0.12
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@smithy/node-config-provider': registry.npmmirror.com/@smithy/node-config-provider@2.0.12
|
||||
'@smithy/protocol-http': registry.npmmirror.com/@smithy/protocol-http@3.0.5
|
||||
@@ -4515,6 +4582,7 @@ packages:
|
||||
name: '@smithy/middleware-serde'
|
||||
version: 2.0.9
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@smithy/types': registry.npmmirror.com/@smithy/types@2.3.3
|
||||
tslib: registry.npmmirror.com/tslib@2.5.3
|
||||
@@ -4526,6 +4594,7 @@ packages:
|
||||
name: '@smithy/middleware-stack'
|
||||
version: 2.0.3
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@smithy/types': registry.npmmirror.com/@smithy/types@2.3.3
|
||||
tslib: registry.npmmirror.com/tslib@2.5.3
|
||||
@@ -4537,6 +4606,7 @@ packages:
|
||||
name: '@smithy/node-config-provider'
|
||||
version: 2.0.12
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@smithy/property-provider': registry.npmmirror.com/@smithy/property-provider@2.0.10
|
||||
'@smithy/shared-ini-file-loader': registry.npmmirror.com/@smithy/shared-ini-file-loader@2.0.11
|
||||
@@ -4550,6 +4620,7 @@ packages:
|
||||
name: '@smithy/node-http-handler'
|
||||
version: 2.1.5
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@smithy/abort-controller': registry.npmmirror.com/@smithy/abort-controller@2.0.9
|
||||
'@smithy/protocol-http': registry.npmmirror.com/@smithy/protocol-http@3.0.5
|
||||
@@ -4564,6 +4635,7 @@ packages:
|
||||
name: '@smithy/property-provider'
|
||||
version: 2.0.10
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@smithy/types': registry.npmmirror.com/@smithy/types@2.3.3
|
||||
tslib: registry.npmmirror.com/tslib@2.5.3
|
||||
@@ -4575,6 +4647,7 @@ packages:
|
||||
name: '@smithy/protocol-http'
|
||||
version: 3.0.5
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@smithy/types': registry.npmmirror.com/@smithy/types@2.3.3
|
||||
tslib: registry.npmmirror.com/tslib@2.5.3
|
||||
@@ -4586,6 +4659,7 @@ packages:
|
||||
name: '@smithy/querystring-builder'
|
||||
version: 2.0.9
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@smithy/types': registry.npmmirror.com/@smithy/types@2.3.3
|
||||
'@smithy/util-uri-escape': registry.npmmirror.com/@smithy/util-uri-escape@2.0.0
|
||||
@@ -4598,6 +4672,7 @@ packages:
|
||||
name: '@smithy/querystring-parser'
|
||||
version: 2.0.9
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@smithy/types': registry.npmmirror.com/@smithy/types@2.3.3
|
||||
tslib: registry.npmmirror.com/tslib@2.5.3
|
||||
@@ -4609,6 +4684,7 @@ packages:
|
||||
name: '@smithy/service-error-classification'
|
||||
version: 2.0.2
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@smithy/types': registry.npmmirror.com/@smithy/types@2.3.3
|
||||
dev: false
|
||||
@@ -4619,6 +4695,7 @@ packages:
|
||||
name: '@smithy/shared-ini-file-loader'
|
||||
version: 2.0.11
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@smithy/types': registry.npmmirror.com/@smithy/types@2.3.3
|
||||
tslib: registry.npmmirror.com/tslib@2.5.3
|
||||
@@ -4630,6 +4707,7 @@ packages:
|
||||
name: '@smithy/signature-v4'
|
||||
version: 2.0.9
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@smithy/eventstream-codec': registry.npmmirror.com/@smithy/eventstream-codec@2.0.9
|
||||
'@smithy/is-array-buffer': registry.npmmirror.com/@smithy/is-array-buffer@2.0.0
|
||||
@@ -4647,6 +4725,7 @@ packages:
|
||||
name: '@smithy/smithy-client'
|
||||
version: 2.1.7
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@smithy/middleware-stack': registry.npmmirror.com/@smithy/middleware-stack@2.0.3
|
||||
'@smithy/types': registry.npmmirror.com/@smithy/types@2.3.3
|
||||
@@ -4660,6 +4739,7 @@ packages:
|
||||
name: '@smithy/types'
|
||||
version: 2.3.3
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
tslib: registry.npmmirror.com/tslib@2.5.3
|
||||
dev: false
|
||||
@@ -4669,6 +4749,7 @@ packages:
|
||||
resolution: {integrity: sha512-NBnJ0NiY8z6E82Xd5VYUFQfKwK/wA/+QkKmpYUYP+cpH3aCzE6g2gvixd9vQKYjsIdRfNPCf+SFAozt8ljozOw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@smithy/url-parser/-/url-parser-2.0.9.tgz}
|
||||
name: '@smithy/url-parser'
|
||||
version: 2.0.9
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@smithy/querystring-parser': registry.npmmirror.com/@smithy/querystring-parser@2.0.9
|
||||
'@smithy/types': registry.npmmirror.com/@smithy/types@2.3.3
|
||||
@@ -4681,6 +4762,7 @@ packages:
|
||||
name: '@smithy/util-base64'
|
||||
version: 2.0.0
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@smithy/util-buffer-from': registry.npmmirror.com/@smithy/util-buffer-from@2.0.0
|
||||
tslib: registry.npmmirror.com/tslib@2.5.3
|
||||
@@ -4691,6 +4773,7 @@ packages:
|
||||
resolution: {integrity: sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz}
|
||||
name: '@smithy/util-body-length-browser'
|
||||
version: 2.0.0
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
tslib: registry.npmmirror.com/tslib@2.5.3
|
||||
dev: false
|
||||
@@ -4701,6 +4784,7 @@ packages:
|
||||
name: '@smithy/util-body-length-node'
|
||||
version: 2.1.0
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
tslib: registry.npmmirror.com/tslib@2.5.3
|
||||
dev: false
|
||||
@@ -4711,6 +4795,7 @@ packages:
|
||||
name: '@smithy/util-buffer-from'
|
||||
version: 2.0.0
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@smithy/is-array-buffer': registry.npmmirror.com/@smithy/is-array-buffer@2.0.0
|
||||
tslib: registry.npmmirror.com/tslib@2.5.3
|
||||
@@ -4722,6 +4807,7 @@ packages:
|
||||
name: '@smithy/util-config-provider'
|
||||
version: 2.0.0
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
tslib: registry.npmmirror.com/tslib@2.5.3
|
||||
dev: false
|
||||
@@ -4732,6 +4818,7 @@ packages:
|
||||
name: '@smithy/util-defaults-mode-browser'
|
||||
version: 2.0.11
|
||||
engines: {node: '>= 10.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@smithy/property-provider': registry.npmmirror.com/@smithy/property-provider@2.0.10
|
||||
'@smithy/smithy-client': registry.npmmirror.com/@smithy/smithy-client@2.1.7
|
||||
@@ -4746,6 +4833,7 @@ packages:
|
||||
name: '@smithy/util-defaults-mode-node'
|
||||
version: 2.0.13
|
||||
engines: {node: '>= 10.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@smithy/config-resolver': registry.npmmirror.com/@smithy/config-resolver@2.0.10
|
||||
'@smithy/credential-provider-imds': registry.npmmirror.com/@smithy/credential-provider-imds@2.0.12
|
||||
@@ -4762,6 +4850,7 @@ packages:
|
||||
name: '@smithy/util-hex-encoding'
|
||||
version: 2.0.0
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
tslib: registry.npmmirror.com/tslib@2.5.3
|
||||
dev: false
|
||||
@@ -4772,6 +4861,7 @@ packages:
|
||||
name: '@smithy/util-middleware'
|
||||
version: 2.0.2
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@smithy/types': registry.npmmirror.com/@smithy/types@2.3.3
|
||||
tslib: registry.npmmirror.com/tslib@2.5.3
|
||||
@@ -4783,6 +4873,7 @@ packages:
|
||||
name: '@smithy/util-retry'
|
||||
version: 2.0.2
|
||||
engines: {node: '>= 14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@smithy/service-error-classification': registry.npmmirror.com/@smithy/service-error-classification@2.0.2
|
||||
'@smithy/types': registry.npmmirror.com/@smithy/types@2.3.3
|
||||
@@ -4795,6 +4886,7 @@ packages:
|
||||
name: '@smithy/util-stream'
|
||||
version: 2.0.12
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@smithy/fetch-http-handler': registry.npmmirror.com/@smithy/fetch-http-handler@2.1.5
|
||||
'@smithy/node-http-handler': registry.npmmirror.com/@smithy/node-http-handler@2.1.5
|
||||
@@ -4812,6 +4904,7 @@ packages:
|
||||
name: '@smithy/util-uri-escape'
|
||||
version: 2.0.0
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
tslib: registry.npmmirror.com/tslib@2.5.3
|
||||
dev: false
|
||||
@@ -4822,6 +4915,7 @@ packages:
|
||||
name: '@smithy/util-utf8'
|
||||
version: 2.0.0
|
||||
engines: {node: '>=14.0.0'}
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
'@smithy/util-buffer-from': registry.npmmirror.com/@smithy/util-buffer-from@2.0.0
|
||||
tslib: registry.npmmirror.com/tslib@2.5.3
|
||||
@@ -5493,6 +5587,15 @@ packages:
|
||||
'@types/express': registry.npmmirror.com/@types/express@4.17.17
|
||||
dev: true
|
||||
|
||||
registry.npmmirror.com/@types/node-fetch@2.6.6:
|
||||
resolution: {integrity: sha512-95X8guJYhfqiuVVhRFxVQcf4hW/2bCuoPwDasMf/531STFoNoWTT7YDnWdXHEZKqAGUigmpG31r2FE70LwnzJw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/node-fetch/-/node-fetch-2.6.6.tgz}
|
||||
name: '@types/node-fetch'
|
||||
version: 2.6.6
|
||||
dependencies:
|
||||
'@types/node': registry.npmmirror.com/@types/node@18.14.0
|
||||
form-data: registry.npmmirror.com/form-data@4.0.0
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/@types/node@18.14.0:
|
||||
resolution: {integrity: sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/@types/node/-/node-18.14.0.tgz}
|
||||
name: '@types/node'
|
||||
@@ -5734,6 +5837,15 @@ packages:
|
||||
version: 2.0.6
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/abort-controller@3.0.0:
|
||||
resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/abort-controller/-/abort-controller-3.0.0.tgz}
|
||||
name: abort-controller
|
||||
version: 3.0.0
|
||||
engines: {node: '>=6.5'}
|
||||
dependencies:
|
||||
event-target-shim: registry.npmmirror.com/event-target-shim@5.0.1
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/acorn-jsx@5.3.2(acorn@8.10.0):
|
||||
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz}
|
||||
id: registry.npmmirror.com/acorn-jsx/5.3.2
|
||||
@@ -5764,6 +5876,15 @@ packages:
|
||||
- supports-color
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/agentkeepalive@4.5.0:
|
||||
resolution: {integrity: sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/agentkeepalive/-/agentkeepalive-4.5.0.tgz}
|
||||
name: agentkeepalive
|
||||
version: 4.5.0
|
||||
engines: {node: '>= 8.0.0'}
|
||||
dependencies:
|
||||
humanize-ms: registry.npmmirror.com/humanize-ms@1.2.1
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/aggregate-error@3.1.0:
|
||||
resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/aggregate-error/-/aggregate-error-3.1.0.tgz}
|
||||
name: aggregate-error
|
||||
@@ -6024,16 +6145,6 @@ packages:
|
||||
engines: {node: '>=4'}
|
||||
dev: true
|
||||
|
||||
registry.npmmirror.com/axios@0.26.1:
|
||||
resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/axios/-/axios-0.26.1.tgz}
|
||||
name: axios
|
||||
version: 0.26.1
|
||||
dependencies:
|
||||
follow-redirects: registry.npmmirror.com/follow-redirects@1.15.3
|
||||
transitivePeerDependencies:
|
||||
- debug
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/axios@1.3.3:
|
||||
resolution: {integrity: sha512-eYq77dYIFS77AQlhzEL937yUBSepBfPIe8FcgEDN35vMNZKMrs81pgnyrQpwfy4NF4b4XWX1Zgx7yX+25w8QJA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/axios/-/axios-1.3.3.tgz}
|
||||
name: axios
|
||||
@@ -6122,6 +6233,12 @@ packages:
|
||||
version: 1.0.2
|
||||
dev: true
|
||||
|
||||
registry.npmmirror.com/base-64@0.1.0:
|
||||
resolution: {integrity: sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/base-64/-/base-64-0.1.0.tgz}
|
||||
name: base-64
|
||||
version: 0.1.0
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/base64-js@1.5.1:
|
||||
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz}
|
||||
name: base64-js
|
||||
@@ -6159,6 +6276,7 @@ packages:
|
||||
resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/bowser/-/bowser-2.11.0.tgz}
|
||||
name: bowser
|
||||
version: 2.11.0
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
@@ -6326,6 +6444,12 @@ packages:
|
||||
version: 1.1.4
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/charenc@0.0.2:
|
||||
resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/charenc/-/charenc-0.0.2.tgz}
|
||||
name: charenc
|
||||
version: 0.0.2
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/chokidar@3.5.3:
|
||||
resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz}
|
||||
name: chokidar
|
||||
@@ -6614,6 +6738,12 @@ packages:
|
||||
which: registry.npmmirror.com/which@2.0.2
|
||||
dev: true
|
||||
|
||||
registry.npmmirror.com/crypt@0.0.2:
|
||||
resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/crypt/-/crypt-0.0.2.tgz}
|
||||
name: crypt
|
||||
version: 0.0.2
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/crypto@1.0.1:
|
||||
resolution: {integrity: sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/crypto/-/crypto-1.0.1.tgz}
|
||||
name: crypto
|
||||
@@ -7192,6 +7322,15 @@ packages:
|
||||
engines: {node: '>=0.3.1'}
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/digest-fetch@1.3.0:
|
||||
resolution: {integrity: sha512-CGJuv6iKNM7QyZlM2T3sPAdZWd/p9zQiRNS9G+9COUCwzWFTs0Xp8NF5iePx7wtvhDykReiRRrSeNb4oMmB8lA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/digest-fetch/-/digest-fetch-1.3.0.tgz}
|
||||
name: digest-fetch
|
||||
version: 1.3.0
|
||||
dependencies:
|
||||
base-64: registry.npmmirror.com/base-64@0.1.0
|
||||
md5: registry.npmmirror.com/md5@2.3.0
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/dingbat-to-unicode@1.0.1:
|
||||
resolution: {integrity: sha512-98l0sW87ZT58pU4i61wa2OHwxbiYSbuxsCBozaVnYX2iCnr3bLM3fIes1/ej7h1YdOKuKt/MLs706TVnALA65w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/dingbat-to-unicode/-/dingbat-to-unicode-1.0.1.tgz}
|
||||
name: dingbat-to-unicode
|
||||
@@ -7354,6 +7493,14 @@ packages:
|
||||
version: 2.0.0
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/encoding@0.1.13:
|
||||
resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/encoding/-/encoding-0.1.13.tgz}
|
||||
name: encoding
|
||||
version: 0.1.13
|
||||
dependencies:
|
||||
iconv-lite: registry.npmmirror.com/iconv-lite@0.6.3
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/enhanced-resolve@5.15.0:
|
||||
resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz}
|
||||
name: enhanced-resolve
|
||||
@@ -7841,6 +7988,13 @@ packages:
|
||||
engines: {node: '>=0.10.0'}
|
||||
dev: true
|
||||
|
||||
registry.npmmirror.com/event-target-shim@5.0.1:
|
||||
resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/event-target-shim/-/event-target-shim-5.0.1.tgz}
|
||||
name: event-target-shim
|
||||
version: 5.0.1
|
||||
engines: {node: '>=6'}
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/execa@7.1.1:
|
||||
resolution: {integrity: sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/execa/-/execa-7.1.1.tgz}
|
||||
name: execa
|
||||
@@ -7900,6 +8054,7 @@ packages:
|
||||
name: fast-xml-parser
|
||||
version: 4.2.5
|
||||
hasBin: true
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
strnum: registry.npmmirror.com/strnum@1.0.5
|
||||
dev: false
|
||||
@@ -8012,6 +8167,12 @@ packages:
|
||||
is-callable: registry.npmmirror.com/is-callable@1.2.7
|
||||
dev: true
|
||||
|
||||
registry.npmmirror.com/form-data-encoder@1.7.2:
|
||||
resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/form-data-encoder/-/form-data-encoder-1.7.2.tgz}
|
||||
name: form-data-encoder
|
||||
version: 1.7.2
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/form-data@4.0.0:
|
||||
resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/form-data/-/form-data-4.0.0.tgz}
|
||||
name: form-data
|
||||
@@ -8030,6 +8191,16 @@ packages:
|
||||
engines: {node: '>=0.4.x'}
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/formdata-node@4.4.1:
|
||||
resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/formdata-node/-/formdata-node-4.4.1.tgz}
|
||||
name: formdata-node
|
||||
version: 4.4.1
|
||||
engines: {node: '>= 12.20'}
|
||||
dependencies:
|
||||
node-domexception: registry.npmmirror.com/node-domexception@1.0.0
|
||||
web-streams-polyfill: registry.npmmirror.com/web-streams-polyfill@4.0.0-beta.3
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/formidable@2.1.1:
|
||||
resolution: {integrity: sha512-0EcS9wCFEzLvfiks7omJ+SiYJAiD+TzK4Pcw1UlUoGnhUxDcMKjt0P7x8wEb0u6OHu8Nb98WG3nxtlF5C7bvUQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/formidable/-/formidable-2.1.1.tgz}
|
||||
name: formidable
|
||||
@@ -8472,6 +8643,14 @@ packages:
|
||||
engines: {node: '>=14.18.0'}
|
||||
dev: true
|
||||
|
||||
registry.npmmirror.com/humanize-ms@1.2.1:
|
||||
resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/humanize-ms/-/humanize-ms-1.2.1.tgz}
|
||||
name: humanize-ms
|
||||
version: 1.2.1
|
||||
dependencies:
|
||||
ms: registry.npmmirror.com/ms@2.1.3
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/husky@8.0.3:
|
||||
resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/husky/-/husky-8.0.3.tgz}
|
||||
name: husky
|
||||
@@ -8692,6 +8871,12 @@ packages:
|
||||
has-tostringtag: registry.npmmirror.com/has-tostringtag@1.0.0
|
||||
dev: true
|
||||
|
||||
registry.npmmirror.com/is-buffer@1.1.6:
|
||||
resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-buffer/-/is-buffer-1.1.6.tgz}
|
||||
name: is-buffer
|
||||
version: 1.1.6
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/is-buffer@2.0.5:
|
||||
resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/is-buffer/-/is-buffer-2.0.5.tgz}
|
||||
name: is-buffer
|
||||
@@ -9423,6 +9608,16 @@ packages:
|
||||
version: 3.0.3
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/md5@2.3.0:
|
||||
resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/md5/-/md5-2.3.0.tgz}
|
||||
name: md5
|
||||
version: 2.3.0
|
||||
dependencies:
|
||||
charenc: registry.npmmirror.com/charenc@0.0.2
|
||||
crypt: registry.npmmirror.com/crypt@0.0.2
|
||||
is-buffer: registry.npmmirror.com/is-buffer@1.1.6
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/mdast-util-definitions@5.1.2:
|
||||
resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/mdast-util-definitions/-/mdast-util-definitions-5.1.2.tgz}
|
||||
name: mdast-util-definitions
|
||||
@@ -9616,6 +9811,7 @@ packages:
|
||||
resolution: {integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/memory-pager/-/memory-pager-1.5.0.tgz}
|
||||
name: memory-pager
|
||||
version: 1.5.0
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
@@ -10287,6 +10483,29 @@ packages:
|
||||
next: registry.npmmirror.com/next@13.5.2(@babel/core@7.22.20)(react-dom@18.2.0)(react@18.2.0)(sass@1.58.3)
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/node-domexception@1.0.0:
|
||||
resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/node-domexception/-/node-domexception-1.0.0.tgz}
|
||||
name: node-domexception
|
||||
version: 1.0.0
|
||||
engines: {node: '>=10.5.0'}
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/node-fetch@2.7.0(encoding@0.1.13):
|
||||
resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/node-fetch/-/node-fetch-2.7.0.tgz}
|
||||
id: registry.npmmirror.com/node-fetch/2.7.0
|
||||
name: node-fetch
|
||||
version: 2.7.0
|
||||
engines: {node: 4.x || >=6.0.0}
|
||||
peerDependencies:
|
||||
encoding: ^0.1.0
|
||||
peerDependenciesMeta:
|
||||
encoding:
|
||||
optional: true
|
||||
dependencies:
|
||||
encoding: registry.npmmirror.com/encoding@0.1.13
|
||||
whatwg-url: registry.npmmirror.com/whatwg-url@5.0.0
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/node-releases@2.0.13:
|
||||
resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/node-releases/-/node-releases-2.0.13.tgz}
|
||||
name: node-releases
|
||||
@@ -10449,15 +10668,23 @@ packages:
|
||||
mimic-fn: registry.npmmirror.com/mimic-fn@4.0.0
|
||||
dev: true
|
||||
|
||||
registry.npmmirror.com/openai@3.3.0:
|
||||
resolution: {integrity: sha512-uqxI/Au+aPRnsaQRe8CojU0eCR7I0mBiKjD3sNMzY6DaC1ZVrc85u98mtJW6voDug8fgGN+DIZmTDxTthxb7dQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/openai/-/openai-3.3.0.tgz}
|
||||
registry.npmmirror.com/openai@4.11.1(encoding@0.1.13):
|
||||
resolution: {integrity: sha512-GU0HQWbejXuVAQlDjxIE8pohqnjptFDIm32aPlNT1H9ucMz1VJJD0DaTJRQsagNaJ97awWjjVLEG7zCM6sm4SA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/openai/-/openai-4.11.1.tgz}
|
||||
id: registry.npmmirror.com/openai/4.11.1
|
||||
name: openai
|
||||
version: 3.3.0
|
||||
version: 4.11.1
|
||||
hasBin: true
|
||||
dependencies:
|
||||
axios: registry.npmmirror.com/axios@0.26.1
|
||||
form-data: registry.npmmirror.com/form-data@4.0.0
|
||||
'@types/node': registry.npmmirror.com/@types/node@18.14.0
|
||||
'@types/node-fetch': registry.npmmirror.com/@types/node-fetch@2.6.6
|
||||
abort-controller: registry.npmmirror.com/abort-controller@3.0.0
|
||||
agentkeepalive: registry.npmmirror.com/agentkeepalive@4.5.0
|
||||
digest-fetch: registry.npmmirror.com/digest-fetch@1.3.0
|
||||
form-data-encoder: registry.npmmirror.com/form-data-encoder@1.7.2
|
||||
formdata-node: registry.npmmirror.com/formdata-node@4.4.1
|
||||
node-fetch: registry.npmmirror.com/node-fetch@2.7.0(encoding@0.1.13)
|
||||
transitivePeerDependencies:
|
||||
- debug
|
||||
- encoding
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/option@0.2.4:
|
||||
@@ -10770,11 +10997,11 @@ packages:
|
||||
engines: {node: '>= 0.8.0'}
|
||||
dev: true
|
||||
|
||||
registry.npmmirror.com/prettier@2.8.7:
|
||||
resolution: {integrity: sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/prettier/-/prettier-2.8.7.tgz}
|
||||
registry.npmmirror.com/prettier@3.0.3:
|
||||
resolution: {integrity: sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/prettier/-/prettier-3.0.3.tgz}
|
||||
name: prettier
|
||||
version: 2.8.7
|
||||
engines: {node: '>=10.13.0'}
|
||||
version: 3.0.3
|
||||
engines: {node: '>=14'}
|
||||
hasBin: true
|
||||
dev: true
|
||||
|
||||
@@ -11726,6 +11953,7 @@ packages:
|
||||
resolution: {integrity: sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz}
|
||||
name: sparse-bitfield
|
||||
version: 3.0.3
|
||||
requiresBuild: true
|
||||
dependencies:
|
||||
memory-pager: registry.npmmirror.com/memory-pager@1.5.0
|
||||
dev: false
|
||||
@@ -11898,6 +12126,7 @@ packages:
|
||||
resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/strnum/-/strnum-1.0.5.tgz}
|
||||
name: strnum
|
||||
version: 1.0.5
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
@@ -12061,6 +12290,12 @@ packages:
|
||||
url-parse: registry.npmmirror.com/url-parse@1.5.10
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/tr46@0.0.3:
|
||||
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz}
|
||||
name: tr46
|
||||
version: 0.0.3
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/tr46@3.0.0:
|
||||
resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/tr46/-/tr46-3.0.0.tgz}
|
||||
name: tr46
|
||||
@@ -12476,6 +12711,7 @@ packages:
|
||||
name: uuid
|
||||
version: 8.3.2
|
||||
hasBin: true
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
@@ -12565,12 +12801,25 @@ packages:
|
||||
version: 2.0.1
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/web-streams-polyfill@4.0.0-beta.3:
|
||||
resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz}
|
||||
name: web-streams-polyfill
|
||||
version: 4.0.0-beta.3
|
||||
engines: {node: '>= 14'}
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/web-worker@1.2.0:
|
||||
resolution: {integrity: sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/web-worker/-/web-worker-1.2.0.tgz}
|
||||
name: web-worker
|
||||
version: 1.2.0
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/webidl-conversions@3.0.1:
|
||||
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz}
|
||||
name: webidl-conversions
|
||||
version: 3.0.1
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/webidl-conversions@7.0.0:
|
||||
resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz}
|
||||
name: webidl-conversions
|
||||
@@ -12614,6 +12863,15 @@ packages:
|
||||
webidl-conversions: registry.npmmirror.com/webidl-conversions@7.0.0
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/whatwg-url@5.0.0:
|
||||
resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz}
|
||||
name: whatwg-url
|
||||
version: 5.0.0
|
||||
dependencies:
|
||||
tr46: registry.npmmirror.com/tr46@0.0.3
|
||||
webidl-conversions: registry.npmmirror.com/webidl-conversions@3.0.1
|
||||
dev: false
|
||||
|
||||
registry.npmmirror.com/which-boxed-primitive@1.0.2:
|
||||
resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==, registry: https://registry.npm.taobao.org/, tarball: https://registry.npmmirror.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz}
|
||||
name: which-boxed-primitive
|
||||
|
||||
@@ -15,8 +15,9 @@ OPENAI_BASE_URL=https://api.openai.com/v1
|
||||
# 通用key。可以是 openai 的也可以是 oneapi 的。
|
||||
# 此处逻辑:优先走 ONEAPI_URL,如果填写了 ONEAPI_URL,key 也需要是 ONEAPI 的 key
|
||||
CHAT_API_KEY=sk-xxxx
|
||||
# db
|
||||
# mongo 数据库连接参数
|
||||
MONGODB_URI=mongodb://username:password@0.0.0.0:27017/fastgpt?authSource=admin
|
||||
# PG 数据库连接参数
|
||||
PG_URL=postgresql://username:password@host:port/postgres
|
||||
# 首页路径
|
||||
HOME_URL=/
|
||||
|
||||
@@ -1,16 +1,4 @@
|
||||
{
|
||||
"FeConfig": {
|
||||
"show_emptyChat": true,
|
||||
"show_contact": true,
|
||||
"show_git": true,
|
||||
"show_doc": true,
|
||||
"systemTitle": "FastGPT",
|
||||
"authorText": "Made by FastGPT Team.",
|
||||
"limit": {
|
||||
"exportLimitMinutes": 0
|
||||
},
|
||||
"scripts": []
|
||||
},
|
||||
"SystemParams": {
|
||||
"vectorMaxProcess": 15,
|
||||
"qaMaxProcess": 15,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "app",
|
||||
"version": "4.4.5",
|
||||
"version": "4.4.7",
|
||||
"private": false,
|
||||
"scripts": {
|
||||
"dev": "next dev",
|
||||
@@ -9,8 +9,10 @@
|
||||
"lint": "next lint"
|
||||
},
|
||||
"dependencies": {
|
||||
"@chakra-ui/anatomy": "^2.2.1",
|
||||
"@chakra-ui/icons": "^2.0.17",
|
||||
"@chakra-ui/react": "^2.7.0",
|
||||
"@chakra-ui/styled-system": "^2.9.1",
|
||||
"@chakra-ui/system": "^2.5.8",
|
||||
"@emotion/react": "^11.10.6",
|
||||
"@emotion/styled": "^11.10.6",
|
||||
@@ -92,6 +94,7 @@
|
||||
"typescript": "4.9.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18.0.0"
|
||||
"node": ">=18.0.0",
|
||||
"pnpm": ">=8.6.0"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,6 @@
|
||||
- [计费规则](https://doc.fastgpt.run/docs/pricing/)
|
||||
|
||||
**其他问题**
|
||||
| 交流群 | 小助手 |
|
||||
| ----------------------- | -------------------- |
|
||||
|  |  |
|
||||
| 添加小助手进入交流群 |
|
||||
| ----------------------- |
|
||||
|  |
|
||||
|
||||
@@ -1,10 +1,6 @@
|
||||
### Fast GPT V4.4.5
|
||||
### Fast GPT V4.4.7
|
||||
|
||||
1. 新增 - 下一步指引选项,可以通过模型生成 3 个预测问题。
|
||||
2. 新增 - 分享链接 hook 身份校验。
|
||||
3. 新增 - Api Key 使用。增加别名、额度限制和过期时间。自带 appId,无需额外连接。
|
||||
4. 去除 - 限定词。目前旧应用仍生效,9/25 后全面去除,请及时替换。
|
||||
5. 新增 - 引用模板/引用提示词设置,可以 DIY 引用内容的格式,从而更好的适配场景。[参考文档](https://doc.fastgpt.run/docs/use-cases/prompt/)
|
||||
6. [使用文档](https://doc.fastgpt.run/docs/intro/)
|
||||
7. [点击查看高级编排介绍文档](https://doc.fastgpt.run/docs/workflow)
|
||||
8. [点击查看商业版](https://doc.fastgpt.run/docs/commercial/)
|
||||
1. 优化数据集管理,区分手动录入和标注,可追数据至某个文件,保留链接读取的原始链接。
|
||||
2. [使用文档](https://doc.fastgpt.run/docs/intro/)
|
||||
3. [点击查看高级编排介绍文档](https://doc.fastgpt.run/docs/workflow)
|
||||
4. [点击查看商业版](https://doc.fastgpt.run/docs/commercial/)
|
||||
|
||||
187
projects/app/public/icon/human.svg
Normal file
@@ -0,0 +1,187 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="140px" height="140px" viewBox="0 0 140 140" enable-background="new 0 0 140 140" xml:space="preserve"> <image id="image0" width="140" height="140" x="0" y="0"
|
||||
href="data:image/png;base64,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" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 14 KiB |
1
projects/app/public/imgs/files/link.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1696841646763" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2367" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><path d="M185.78023917 244.70891583a668.28725918 668.28725918 0 0 0 121.17266584 53.53692476 665.15318203 665.15318203 0 0 0-34.64702231 183.62637022H91.72167743a419.67636227 419.67636227 0 0 1 94.05856174-237.16329498z m227.58241722-142.44192964a672.20323745 672.20323745 0 0 0-84.326223 139.79071526 609.56829772 609.56829772 0 0 1-99.6923923-42.47897884 420.36764571 420.36764571 0 0 1 184.0186153-97.31173642z m381.2622336 97.31044188a607.36887719 607.36887719 0 0 1-99.69109776 42.48027338 672.20323745 672.20323745 0 0 0-84.326223-139.79071526c69.74454391 16.75132524 132.56071902 50.73424941 184.0186153 97.31044188z m43.56509646 45.13148776a419.67636227 419.67636227 0 0 1 94.08704158 237.16329498h-180.52336198a664.06835895 664.06835895 0 0 0-34.70657106-183.62637022 668.28725918 668.28725918 0 0 0 121.17266584-53.53692476z m0 534.58216834a668.28725918 668.28725918 0 0 0-121.17266583-53.53692476 663.64763402 663.64763402 0 0 0 34.70657106-183.62637022h180.52336197a419.58574459 419.58574459 0 0 1-94.0572672 237.16329498zM694.93379223 781.91122963c34.70657106 11.23788674 68.02798617 25.5179384 99.72216668 42.48027339a420.21747927 420.21747927 0 0 1-184.04838968 97.31044187A671.42004179 671.42004179 0 0 0 694.96356661 781.91122963z m-213.06158142-28.07853511v155.75884484a607.60966131 607.60966131 0 0 1-93.63524773-143.31574298 605.26136889 605.26136889 0 0 1 93.63524773-12.44310186z m0-211.70490533v151.54123916a662.9537615 662.9537615 0 0 0-116.59258944 15.96683503 600.07803765 600.07803765 0 0 1-32.74922919-167.50807419h149.34181863z m-93.63524773-284.43335995a608.06145517 608.06145517 0 0 1 93.63524773-143.31574298v155.75884484a594.47398147 594.47398147 0 0 1-93.63524773-12.44310186z m93.63524773 72.60676804v151.57101353h-149.31204425c3.0136851-58.44710843 14.19072853-114.63395303 32.68968043-167.50807419 37.748736 8.6759955 76.70398167 14.10011085 116.62236382 15.96683503z m60.25557838-60.16366618v-155.75884484a607.00770101 607.00770101 0 0 1 93.60547335 143.31574298c-30.42812208 6.50764389-61.67180325 10.78609289-93.60547335 12.44310186z m0 211.73467971V330.33097165a660.18215506 660.18215506 0 0 0 116.59258944-15.99660942 601.1926351 601.1926351 0 0 1 32.71816027 167.5080742h-149.31204423z m93.60547335 284.40358557a606.55590717 606.55590717 0 0 1-93.60547335 143.34551736v-155.75884484c31.93496462 1.6880779 63.17735127 5.93545797 93.60547335 12.41332748z m-93.60547335-72.60676803V542.12778919h149.31204425a601.1926351 601.1926351 0 0 1-32.71945481 167.50807419 662.98483042 662.98483042 0 0 0-116.59258944-15.96683503zM229.34404109 824.42127739a606.97792663 606.97792663 0 0 1 99.72216668-42.51004776 670.24460105 670.24460105 0 0 0 84.35729193 139.7920098 420.30809695 420.30809695 0 0 1-184.07945861-97.31173641z m-43.56380192-45.13019322a419.58574459 419.58574459 0 0 1-94.05856174-237.16329498H272.27740286c3.01239056 63.9903213 14.88330651 125.60128126 34.67679669 183.62637022a668.28725918 668.28725918 0 0 0-121.17266584 53.53692476z m703.53624178 32.17574874A479.71963638 479.71963638 0 0 0 994.03944897 512c0-135.30255107-55.91758064-257.37880462-145.66662447-344.95949685A480.23097901 480.23097901 0 0 0 512 29.96184557a480.23097901 480.23097901 0 0 0-336.3728245 137.07865758c-14.61145347 14.28134622-28.22999609 29.49475998-40.9721363 45.49266394A479.6290187 479.6290187 0 0 0 29.9592565 512c0 266.2062611 215.80341349 482.03944897 482.03944896 482.03944897a480.23097901 480.23097901 0 0 0 336.34305011-137.11102104h0.02977438a484.14825182 484.14825182 0 0 0 40.9721363-45.4913694z" fill="#21A3DD" p-id="2368"></path></svg>
|
||||
|
After Width: | Height: | Size: 3.8 KiB |
1
projects/app/public/imgs/files/manual.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1696841469699" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11288" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><path d="M254.976 100.8h514.048a154.176 154.176 0 0 1 154.176 154.176v514.048a154.176 154.176 0 0 1-154.176 154.176h-514.048a154.176 154.176 0 0 1-154.176-154.176v-514.048a154.176 154.176 0 0 1 154.176-154.176z" fill="#1693F6" opacity=".3" p-id="11289"></path><path d="M192 128a64 64 0 0 0-64 64v640a64 64 0 0 0 64 64h640a64 64 0 0 0 64-64v-640a64 64 0 0 0-64-64h-640m0-128h640a192 192 0 0 1 192 192v640a192 192 0 0 1-192 192h-640a192 192 0 0 1-192-192v-640a192 192 0 0 1 192-192z" fill="#1693F6" p-id="11290"></path><path d="M320 832m-64 0l0 0q-64 0-64-64l0-512q0-64 64-64l0 0q64 0 64 64l0 512q0 64-64 64Z" fill="#1693F6" p-id="11291"></path></svg>
|
||||
|
After Width: | Height: | Size: 974 B |
1
projects/app/public/imgs/files/mark.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1696841493938" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="16677" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><path d="M102.4 332.8L170.666667 264.533333l42.666666 42.666667-68.266666 68.266667 42.666666 42.666666L256 345.6l42.666667 42.666667-68.266667 68.266666 12.8 34.133334L469.333333 268.8 315.733333 102.4c-25.6-21.333333-72.533333-17.066667-93.866666 8.533333L76.8 247.466667c-21.333333 21.333333-12.8 51.2 8.533333 72.533333l17.066667 12.8zM85.333333 896c-4.266667 17.066667 8.533333 29.866667 25.6 25.6l260.266667-81.066667L170.666667 644.266667 85.333333 896zM934.4 302.933333c21.333333-21.333333 21.333333-51.2 0-72.533333L810.666667 110.933333c-21.333333-21.333333-55.466667-21.333333-76.8 0l-89.6 85.333334 200.533333 192 89.6-85.333334zM614.4 226.133333l-413.866667 392.533334L401.066667 810.666667l413.866666-396.8zM947.2 699.733333l-187.733333-174.933333-230.4 217.6 42.666666 42.666667 72.533334-68.266667 42.666666 42.666667-72.533333 68.266666 42.666667 42.666667 72.533333-68.266667 42.666667 42.666667-72.533334 68.266667 12.8 12.8c21.333333 21.333333 55.466667 29.866667 81.066667 8.533333l145.066667-136.533333c21.333333-29.866667 29.866667-76.8 8.533333-98.133334z" p-id="16678" fill="#d4237a"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.4 KiB |
BIN
projects/app/public/imgs/module/app.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
@@ -96,6 +96,7 @@
|
||||
"module question": "Question",
|
||||
"module quoteList": "Quotes",
|
||||
"module runningTime": "Time",
|
||||
"module search response": "Search Result",
|
||||
"module similarity": "Similarity",
|
||||
"module temperature": "Temperature",
|
||||
"module time": "Running Time",
|
||||
@@ -105,6 +106,7 @@
|
||||
},
|
||||
"common": {
|
||||
"Add": "Add",
|
||||
"Close": "Clow",
|
||||
"Collect": "Collect",
|
||||
"Copy": "Copy",
|
||||
"Copy Successful": "Copy Successful",
|
||||
@@ -125,8 +127,11 @@
|
||||
"Output": "Output",
|
||||
"Password inconsistency": "Password inconsistency",
|
||||
"Rename": "Rename",
|
||||
"Rename Failed": "Rename Failed",
|
||||
"Rename Success": "Rename Success",
|
||||
"Search": "Search",
|
||||
"Status": "Status",
|
||||
"Unknow": "Unknow",
|
||||
"Update Successful": "Update Successful",
|
||||
"export": ""
|
||||
},
|
||||
@@ -212,10 +217,14 @@
|
||||
"Filename": "Filename",
|
||||
"Files": "{{total}} Files",
|
||||
"Folder Name": "Input folder name",
|
||||
"Insert Data": "Insert",
|
||||
"Manual Data": "Manual Data",
|
||||
"Manual Input": "Manual Input",
|
||||
"Manual Mark": "Manual Mark",
|
||||
"Mark Data": "Mark Data",
|
||||
"Move Failed": "Move Failed",
|
||||
"My Dataset": "My Dataset",
|
||||
"No Folder": "No Folder",
|
||||
"Other Data": "Other Data",
|
||||
"Select Dataset": "Select Dataset",
|
||||
"Select Folder": "Enter folder",
|
||||
"Upload Time": "Upload Time",
|
||||
|
||||
@@ -96,6 +96,7 @@
|
||||
"module question": "问题",
|
||||
"module quoteList": "引用内容",
|
||||
"module runningTime": "运行时长",
|
||||
"module search response": "搜索结果",
|
||||
"module similarity": "相似度",
|
||||
"module temperature": "温度",
|
||||
"module time": "运行时长",
|
||||
@@ -105,6 +106,7 @@
|
||||
},
|
||||
"common": {
|
||||
"Add": "添加",
|
||||
"Close": "关闭",
|
||||
"Collect": "收藏",
|
||||
"Copy": "复制",
|
||||
"Copy Successful": "复制成功",
|
||||
@@ -125,8 +127,11 @@
|
||||
"Output": "输出",
|
||||
"Password inconsistency": "两次密码不一致",
|
||||
"Rename": "重命名",
|
||||
"Rename Failed": "重命名失败",
|
||||
"Rename Success": "重命名成功",
|
||||
"Search": "搜索",
|
||||
"Status": "状态",
|
||||
"Unknow": "未知",
|
||||
"Update Successful": "更新成功",
|
||||
"export": ""
|
||||
},
|
||||
@@ -212,10 +217,14 @@
|
||||
"Filename": "文件名",
|
||||
"Files": "文件: {{total}}个",
|
||||
"Folder Name": "输入文件夹名称",
|
||||
"Insert Data": "插入",
|
||||
"Manual Data": "手动录入",
|
||||
"Manual Input": "手动录入",
|
||||
"Manual Mark": "手动标注",
|
||||
"Mark Data": "标注数据",
|
||||
"Move Failed": "移动出现错误~",
|
||||
"My Dataset": "我的知识库",
|
||||
"No Folder": "没有子目录了~",
|
||||
"Other Data": "其他数据",
|
||||
"Select Dataset": "选择该知识库",
|
||||
"Select Folder": "进入文件夹",
|
||||
"Upload Time": "上传时间",
|
||||
@@ -236,7 +245,7 @@
|
||||
"key tips": "你可以使用 API 秘钥访问一些特定的接口"
|
||||
},
|
||||
"outlink": {
|
||||
"Copy Iframe": "复制嵌入",
|
||||
"Copy Iframe": "嵌入网页",
|
||||
"Copy Link": "复制",
|
||||
"Create API Key": "创建新 Key",
|
||||
"Create Link": "创建链接",
|
||||
|
||||
@@ -2,9 +2,9 @@ import { GET, POST, DELETE, PUT } from './request';
|
||||
import type { AppSchema } from '@/types/mongoSchema';
|
||||
import type { AppListItemType, AppUpdateParams } from '@/types/app';
|
||||
import { RequestPaging } from '../types/index';
|
||||
import type { Props as CreateAppProps } from '@/pages/api/app/create';
|
||||
import { addDays } from 'date-fns';
|
||||
import { GetAppChatLogsParams } from './request/app';
|
||||
import type { CreateAppParams } from '@/types/app';
|
||||
|
||||
/**
|
||||
* 获取模型列表
|
||||
@@ -14,7 +14,7 @@ export const getMyModels = () => GET<AppListItemType[]>('/app/myApps');
|
||||
/**
|
||||
* 创建一个模型
|
||||
*/
|
||||
export const postCreateApp = (data: CreateAppProps) => POST<string>('/app/create', data);
|
||||
export const postCreateApp = (data: CreateAppParams) => POST<string>('/app/create', data);
|
||||
|
||||
/**
|
||||
* 根据 ID 删除模型
|
||||
|
||||
3
projects/app/src/api/core/ai/agent/type.d.ts
vendored
@@ -1,5 +1,6 @@
|
||||
import { ChatCompletionRequestMessage } from '@fastgpt/core/aiApi/type';
|
||||
import { ChatCompletionRequestMessage } from '@fastgpt/core/ai/type';
|
||||
|
||||
export type CreateQuestionGuideProps = {
|
||||
messages: ChatCompletionRequestMessage[];
|
||||
shareId?: string;
|
||||
};
|
||||
|
||||
@@ -12,7 +12,7 @@ interface StreamFetchProps {
|
||||
abortSignal: AbortController;
|
||||
}
|
||||
export const streamFetch = ({
|
||||
url = '/api/openapi/v1/chat/completions',
|
||||
url = '/api/v1/chat/completions',
|
||||
data,
|
||||
onMessage,
|
||||
abortSignal
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import React, { useCallback, useMemo, useState } from 'react';
|
||||
import { ModalBody, Box, useTheme } from '@chakra-ui/react';
|
||||
import { ModalBody, Box, useTheme, Flex, Progress } from '@chakra-ui/react';
|
||||
import { getDatasetDataItemById } from '@/api/core/dataset/data';
|
||||
import { useLoading } from '@/hooks/useLoading';
|
||||
import { useToast } from '@/hooks/useToast';
|
||||
@@ -8,22 +8,19 @@ import { QuoteItemType } from '@/types/chat';
|
||||
import MyIcon from '@/components/Icon';
|
||||
import InputDataModal, { RawFileText } from '@/pages/kb/detail/components/InputDataModal';
|
||||
import MyModal from '../MyModal';
|
||||
import type { PgDataItemType } from '@/types/core/dataset/data';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
import { useRouter } from 'next/router';
|
||||
|
||||
type SearchType = PgDataItemType & {
|
||||
kb_id?: string;
|
||||
};
|
||||
|
||||
const QuoteModal = ({
|
||||
onUpdateQuote,
|
||||
rawSearch = [],
|
||||
onClose
|
||||
}: {
|
||||
onUpdateQuote: (quoteId: string, sourceText?: string) => Promise<void>;
|
||||
rawSearch: SearchType[];
|
||||
rawSearch: QuoteItemType[];
|
||||
onClose: () => void;
|
||||
}) => {
|
||||
const { t } = useTranslation();
|
||||
const theme = useTheme();
|
||||
const router = useRouter();
|
||||
const { toast } = useToast();
|
||||
@@ -36,7 +33,7 @@ const QuoteModal = ({
|
||||
* click edit, get new kbDataItem
|
||||
*/
|
||||
const onclickEdit = useCallback(
|
||||
async (item: SearchType) => {
|
||||
async (item: QuoteItemType) => {
|
||||
if (!item.id) return;
|
||||
try {
|
||||
setIsLoading(true);
|
||||
@@ -95,9 +92,30 @@ const QuoteModal = ({
|
||||
_hover={{ '& .edit': { display: 'flex' } }}
|
||||
overflow={'hidden'}
|
||||
>
|
||||
{item.source && !isShare && (
|
||||
<RawFileText filename={item.source} fileId={item.file_id} />
|
||||
{!isShare && (
|
||||
<Flex alignItems={'center'} mb={1}>
|
||||
<RawFileText
|
||||
filename={item.source || t('common.Unknow') || 'Unknow'}
|
||||
fileId={item.file_id}
|
||||
/>
|
||||
<Box flex={'1'} />
|
||||
{item.score && (
|
||||
<>
|
||||
<Progress
|
||||
mx={2}
|
||||
w={['60px', '100px']}
|
||||
value={item.score * 100}
|
||||
size="sm"
|
||||
borderRadius={'20px'}
|
||||
colorScheme="gray"
|
||||
border={theme.borders.base}
|
||||
/>
|
||||
<Box>{item.score.toFixed(4)}</Box>
|
||||
</>
|
||||
)}
|
||||
</Flex>
|
||||
)}
|
||||
|
||||
<Box>{item.q}</Box>
|
||||
<Box>{item.a}</Box>
|
||||
{item.id && !isShare && (
|
||||
|
||||
@@ -12,15 +12,7 @@ const QuoteModal = dynamic(() => import('./QuoteModal'), { ssr: false });
|
||||
const ContextModal = dynamic(() => import('./ContextModal'), { ssr: false });
|
||||
const WholeResponseModal = dynamic(() => import('./WholeResponseModal'), { ssr: false });
|
||||
|
||||
const ResponseTags = ({
|
||||
chatId,
|
||||
contentId,
|
||||
responseData = []
|
||||
}: {
|
||||
chatId?: string;
|
||||
contentId?: string;
|
||||
responseData?: ChatHistoryItemResType[];
|
||||
}) => {
|
||||
const ResponseTags = ({ responseData = [] }: { responseData?: ChatHistoryItemResType[] }) => {
|
||||
const { isPc } = useGlobalStore();
|
||||
const { t } = useTranslation();
|
||||
const [quoteModalData, setQuoteModalData] = useState<QuoteItemType[]>();
|
||||
@@ -41,9 +33,13 @@ const ResponseTags = ({
|
||||
return {
|
||||
chatAccount: responseData.filter((item) => item.moduleType === FlowModuleTypeEnum.chatNode)
|
||||
.length,
|
||||
quoteList: chatData?.quoteList,
|
||||
quoteList: responseData
|
||||
.filter((item) => item.moduleType === FlowModuleTypeEnum.chatNode)
|
||||
.map((item) => item.quoteList)
|
||||
.flat()
|
||||
.filter((item) => item) as QuoteItemType[],
|
||||
historyPreview: chatData?.historyPreview,
|
||||
runningTime: responseData.reduce((sum, item) => sum + (item.runningTime || 0), 0).toFixed(2)
|
||||
runningTime: +responseData.reduce((sum, item) => sum + (item.runningTime || 0), 0).toFixed(2)
|
||||
};
|
||||
}, [responseData]);
|
||||
|
||||
@@ -56,20 +52,20 @@ const ResponseTags = ({
|
||||
|
||||
return responseData.length === 0 ? null : (
|
||||
<Flex alignItems={'center'} mt={2} flexWrap={'wrap'}>
|
||||
{quoteList.length > 0 && (
|
||||
<MyTooltip label="查看引用">
|
||||
<Tag
|
||||
colorSchema="blue"
|
||||
cursor={'pointer'}
|
||||
{...TagStyles}
|
||||
onClick={() => setQuoteModalData(quoteList)}
|
||||
>
|
||||
{quoteList.length}条引用
|
||||
</Tag>
|
||||
</MyTooltip>
|
||||
)}
|
||||
{chatAccount === 1 && (
|
||||
<>
|
||||
{quoteList.length > 0 && (
|
||||
<MyTooltip label="查看引用">
|
||||
<Tag
|
||||
colorSchema="blue"
|
||||
cursor={'pointer'}
|
||||
{...TagStyles}
|
||||
onClick={() => setQuoteModalData(quoteList)}
|
||||
>
|
||||
{quoteList.length}条引用
|
||||
</Tag>
|
||||
</MyTooltip>
|
||||
)}
|
||||
{historyPreview.length > 0 && (
|
||||
<MyTooltip label={'点击查看完整对话记录'}>
|
||||
<Tag
|
||||
@@ -120,4 +116,4 @@ const ResponseTags = ({
|
||||
);
|
||||
};
|
||||
|
||||
export default ResponseTags;
|
||||
export default React.memo(ResponseTags);
|
||||
|
||||
@@ -31,7 +31,7 @@ const SelectDataset = ({
|
||||
setParentId={setParentId}
|
||||
tips={t('chat.Select Mark Kb Desc')}
|
||||
>
|
||||
<ModalBody flex={['1 0 0', '0 0 auto']} maxH={'80vh'} overflowY={'auto'}>
|
||||
<ModalBody flex={'1 0 0'} overflowY={'auto'}>
|
||||
<Grid
|
||||
gridTemplateColumns={['repeat(1,1fr)', 'repeat(2,1fr)', 'repeat(3,1fr)']}
|
||||
gridGap={3}
|
||||
|
||||
@@ -16,18 +16,28 @@ import {
|
||||
ExportChatType
|
||||
} from '@/types/chat';
|
||||
import { useToast } from '@/hooks/useToast';
|
||||
import { voiceBroadcast, cancelBroadcast, hasVoiceApi } from '@/utils/web/voice';
|
||||
import { useAudioPlay } from '@/utils/web/voice';
|
||||
import { getErrText } from '@/utils/tools';
|
||||
import { useCopyData } from '@/hooks/useCopyData';
|
||||
import { Box, Card, Flex, Input, Textarea, Button, useTheme, BoxProps } from '@chakra-ui/react';
|
||||
import {
|
||||
Box,
|
||||
Card,
|
||||
Flex,
|
||||
Input,
|
||||
Textarea,
|
||||
Button,
|
||||
useTheme,
|
||||
BoxProps,
|
||||
FlexProps
|
||||
} from '@chakra-ui/react';
|
||||
import { feConfigs } from '@/store/static';
|
||||
import { event } from '@/utils/plugin/eventbus';
|
||||
import { adaptChat2GptMessages } from '@/utils/common/adapt/message';
|
||||
import { useMarkdown } from '@/hooks/useMarkdown';
|
||||
import { AppModuleItemType, VariableItemType } from '@/types/app';
|
||||
import { AppModuleItemType } from '@/types/app';
|
||||
import { VariableInputEnum } from '@/constants/app';
|
||||
import { useForm } from 'react-hook-form';
|
||||
import { MessageItemType } from '@/pages/api/openapi/v1/chat/completions';
|
||||
import type { MessageItemType } from '@/types/core/chat/type';
|
||||
import { fileDownload } from '@/utils/web/file';
|
||||
import { htmlTemplate } from '@/constants/common';
|
||||
import { useRouter } from 'next/router';
|
||||
@@ -53,11 +63,14 @@ import styles from './index.module.scss';
|
||||
import Script from 'next/script';
|
||||
import { postQuestionGuide } from '@/api/core/ai/agent/api';
|
||||
import { splitGuideModule } from './utils';
|
||||
import { DatasetSpecialIdEnum } from '@fastgpt/core/dataset/constant';
|
||||
|
||||
const nanoid = customAlphabet('abcdefghijklmnopqrstuvwxyz1234567890', 24);
|
||||
|
||||
const textareaMinH = '22px';
|
||||
|
||||
type generatingMessageProps = { text?: string; name?: string; status?: 'running' | 'finish' };
|
||||
|
||||
export type StartChatFnProps = {
|
||||
chatList: ChatSiteItemType[];
|
||||
messages: MessageItemType[];
|
||||
@@ -69,7 +82,7 @@ export type StartChatFnProps = {
|
||||
export type ComponentRef = {
|
||||
getChatHistory: () => ChatSiteItemType[];
|
||||
resetVariables: (data?: Record<string, any>) => void;
|
||||
resetHistory: (chatId: ChatSiteItemType[]) => void;
|
||||
resetHistory: (history: ChatSiteItemType[]) => void;
|
||||
scrollToBottom: (behavior?: 'smooth' | 'auto') => void;
|
||||
};
|
||||
|
||||
@@ -79,55 +92,22 @@ enum FeedbackTypeEnum {
|
||||
hidden = 'hidden'
|
||||
}
|
||||
|
||||
const VariableLabel = ({
|
||||
required = false,
|
||||
children
|
||||
}: {
|
||||
required?: boolean;
|
||||
children: React.ReactNode | string;
|
||||
}) => (
|
||||
<Box as={'label'} display={'inline-block'} position={'relative'} mb={1}>
|
||||
{children}
|
||||
{required && (
|
||||
<Box position={'absolute'} top={'-2px'} right={'-10px'} color={'red.500'} fontWeight={'bold'}>
|
||||
*
|
||||
</Box>
|
||||
)}
|
||||
</Box>
|
||||
);
|
||||
|
||||
const Empty = () => {
|
||||
const { data: chatProblem } = useMarkdown({ url: '/chatProblem.md' });
|
||||
const { data: versionIntro } = useMarkdown({ url: '/versionIntro.md' });
|
||||
|
||||
return (
|
||||
<Box pt={6} w={'85%'} maxW={'600px'} m={'auto'} alignItems={'center'} justifyContent={'center'}>
|
||||
{/* version intro */}
|
||||
<Card p={4} mb={10} minH={'200px'}>
|
||||
<Markdown source={versionIntro} />
|
||||
</Card>
|
||||
<Card p={4} minH={'600px'}>
|
||||
<Markdown source={chatProblem} />
|
||||
</Card>
|
||||
</Box>
|
||||
);
|
||||
};
|
||||
|
||||
const ChatAvatar = ({ src, type }: { src?: string; type: 'Human' | 'AI' }) => {
|
||||
const theme = useTheme();
|
||||
return (
|
||||
<Box
|
||||
w={['28px', '34px']}
|
||||
h={['28px', '34px']}
|
||||
p={'2px'}
|
||||
borderRadius={'lg'}
|
||||
border={theme.borders.base}
|
||||
boxShadow={'0 0 5px rgba(0,0,0,0.1)'}
|
||||
bg={type === 'Human' ? 'white' : 'myBlue.100'}
|
||||
>
|
||||
<Avatar src={src} w={'100%'} h={'100%'} />
|
||||
</Box>
|
||||
);
|
||||
type Props = {
|
||||
feedbackType?: `${FeedbackTypeEnum}`;
|
||||
showMarkIcon?: boolean; // admin mark dataset
|
||||
showVoiceIcon?: boolean;
|
||||
showEmptyIntro?: boolean;
|
||||
appAvatar?: string;
|
||||
userAvatar?: string;
|
||||
userGuideModule?: AppModuleItemType;
|
||||
active?: boolean;
|
||||
onUpdateVariable?: (e: Record<string, any>) => void;
|
||||
onStartChat?: (e: StartChatFnProps) => Promise<{
|
||||
responseText: string;
|
||||
[TaskResponseKeyEnum.responseData]: ChatHistoryItemResType[];
|
||||
isNewChat?: boolean;
|
||||
}>;
|
||||
onDelMessage?: (e: { contentId?: string; index: number }) => void;
|
||||
};
|
||||
|
||||
const ChatBox = (
|
||||
@@ -136,7 +116,6 @@ const ChatBox = (
|
||||
showMarkIcon = false,
|
||||
showVoiceIcon = true,
|
||||
showEmptyIntro = false,
|
||||
chatId,
|
||||
appAvatar,
|
||||
userAvatar,
|
||||
userGuideModule,
|
||||
@@ -144,35 +123,19 @@ const ChatBox = (
|
||||
onUpdateVariable,
|
||||
onStartChat,
|
||||
onDelMessage
|
||||
}: {
|
||||
feedbackType?: `${FeedbackTypeEnum}`;
|
||||
showMarkIcon?: boolean; // admin mark dataset
|
||||
showVoiceIcon?: boolean;
|
||||
showEmptyIntro?: boolean;
|
||||
chatId?: string;
|
||||
appAvatar?: string;
|
||||
userAvatar?: string;
|
||||
userGuideModule?: AppModuleItemType;
|
||||
active?: boolean;
|
||||
onUpdateVariable?: (e: Record<string, any>) => void;
|
||||
onStartChat?: (e: StartChatFnProps) => Promise<{
|
||||
responseText: string;
|
||||
[TaskResponseKeyEnum.responseData]: ChatHistoryItemResType[];
|
||||
}>;
|
||||
onDelMessage?: (e: { contentId?: string; index: number }) => void;
|
||||
},
|
||||
}: Props,
|
||||
ref: ForwardedRef<ComponentRef>
|
||||
) => {
|
||||
const ChatBoxRef = useRef<HTMLDivElement>(null);
|
||||
const theme = useTheme();
|
||||
const router = useRouter();
|
||||
const { t } = useTranslation();
|
||||
const { copyData } = useCopyData();
|
||||
const { toast } = useToast();
|
||||
const { isPc } = useGlobalStore();
|
||||
const TextareaDom = useRef<HTMLTextAreaElement>(null);
|
||||
const chatController = useRef(new AbortController());
|
||||
const questionGuideController = useRef(new AbortController());
|
||||
const isNewChatReplace = useRef(false);
|
||||
|
||||
const [refresh, setRefresh] = useState(false);
|
||||
const [variables, setVariables] = useState<Record<string, any>>({}); // settings variable
|
||||
@@ -250,6 +213,7 @@ const ChatBox = (
|
||||
);
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
const generatingMessage = useCallback(
|
||||
// concat text to end of message
|
||||
({ text = '', status, name }: generatingMessageProps) => {
|
||||
setChatHistory((state) =>
|
||||
state.map((item, index) => {
|
||||
@@ -275,14 +239,6 @@ const ChatBox = (
|
||||
[generatingScroll, setChatHistory]
|
||||
);
|
||||
|
||||
// 复制内容
|
||||
const onclickCopy = useCallback(
|
||||
(value: string) => {
|
||||
copyData(value);
|
||||
},
|
||||
[copyData]
|
||||
);
|
||||
|
||||
// 重置输入内容
|
||||
const resetInputVal = useCallback((val: string) => {
|
||||
if (!TextareaDom.current) return;
|
||||
@@ -308,7 +264,8 @@ const ChatBox = (
|
||||
|
||||
const result = await postQuestionGuide(
|
||||
{
|
||||
messages: adaptChat2GptMessages({ messages: history, reserveId: false }).slice(-6)
|
||||
messages: adaptChat2GptMessages({ messages: history, reserveId: false }).slice(-6),
|
||||
shareId: router.query.shareId as string
|
||||
},
|
||||
abortSignal
|
||||
);
|
||||
@@ -320,7 +277,7 @@ const ChatBox = (
|
||||
}
|
||||
} catch (error) {}
|
||||
},
|
||||
[questionGuide, scrollToBottom]
|
||||
[questionGuide, scrollToBottom, router.query.shareId]
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -381,7 +338,11 @@ const ChatBox = (
|
||||
|
||||
const messages = adaptChat2GptMessages({ messages: newChatList, reserveId: true });
|
||||
|
||||
const { responseData, responseText } = await onStartChat({
|
||||
const {
|
||||
responseData,
|
||||
responseText,
|
||||
isNewChat = false
|
||||
} = await onStartChat({
|
||||
chatList: newChatList,
|
||||
messages,
|
||||
controller: abortSignal,
|
||||
@@ -389,6 +350,8 @@ const ChatBox = (
|
||||
variables
|
||||
});
|
||||
|
||||
isNewChatReplace.current = isNewChat;
|
||||
|
||||
// set finish status
|
||||
setChatHistory((state) =>
|
||||
state.map((item, index) => {
|
||||
@@ -469,6 +432,17 @@ const ChatBox = (
|
||||
},
|
||||
[chatHistory, onDelMessage, sendPrompt, variables]
|
||||
);
|
||||
// delete one message
|
||||
const delOneMessage = useCallback(
|
||||
({ dataId, index }: { dataId?: string; index: number }) => {
|
||||
setChatHistory((state) => state.filter((chat) => chat.dataId !== dataId));
|
||||
onDelMessage?.({
|
||||
contentId: dataId,
|
||||
index
|
||||
});
|
||||
},
|
||||
[onDelMessage]
|
||||
);
|
||||
|
||||
// output data
|
||||
useImperativeHandle(ref, () => ({
|
||||
@@ -489,23 +463,7 @@ const ChatBox = (
|
||||
scrollToBottom
|
||||
}));
|
||||
|
||||
const controlIconStyle = {
|
||||
w: '14px',
|
||||
cursor: 'pointer',
|
||||
p: 1,
|
||||
bg: 'white',
|
||||
borderRadius: 'lg',
|
||||
boxShadow: '0 0 5px rgba(0,0,0,0.1)',
|
||||
border: theme.borders.base,
|
||||
mr: 3
|
||||
};
|
||||
const controlContainerStyle = {
|
||||
className: 'control',
|
||||
color: 'myGray.400',
|
||||
display: 'flex',
|
||||
pl: 1,
|
||||
mt: 2
|
||||
};
|
||||
/* style start */
|
||||
const MessageCardStyle: BoxProps = {
|
||||
px: 4,
|
||||
py: 3,
|
||||
@@ -539,31 +497,27 @@ const ChatBox = (
|
||||
name: t(chatContent.moduleName || 'Running')
|
||||
};
|
||||
}, [chatHistory, isChatting, t]);
|
||||
/* style end */
|
||||
|
||||
// page change and abort request
|
||||
useEffect(() => {
|
||||
isNewChatReplace.current = false;
|
||||
return () => {
|
||||
chatController.current?.abort('leave');
|
||||
questionGuideController.current?.abort('leave');
|
||||
// close voice
|
||||
cancelBroadcast();
|
||||
if (!isNewChatReplace.current) {
|
||||
questionGuideController.current?.abort('leave');
|
||||
}
|
||||
};
|
||||
}, [router.query]);
|
||||
|
||||
// page destroy and abort request
|
||||
useEffect(() => {
|
||||
const listen = () => {
|
||||
cancelBroadcast();
|
||||
};
|
||||
window.addEventListener('beforeunload', listen);
|
||||
|
||||
return () => {
|
||||
window.removeEventListener('beforeunload', listen);
|
||||
};
|
||||
}, []);
|
||||
|
||||
// add guide text listener
|
||||
useEffect(() => {
|
||||
const windowMessage = ({ data }: MessageEvent<{ type: 'sendPrompt'; text: string }>) => {
|
||||
if (data?.type === 'sendPrompt' && data?.text) {
|
||||
handleSubmit((item) => sendPrompt(item, data.text))();
|
||||
}
|
||||
};
|
||||
window.addEventListener('message', windowMessage);
|
||||
event.on('guideClick', ({ text }: { text: string }) => {
|
||||
if (!text) return;
|
||||
handleSubmit((data) => sendPrompt(data, text))();
|
||||
@@ -571,6 +525,7 @@ const ChatBox = (
|
||||
|
||||
return () => {
|
||||
event.off('guideClick');
|
||||
window.removeEventListener('message', windowMessage);
|
||||
};
|
||||
}, [handleSubmit, sendPrompt]);
|
||||
|
||||
@@ -667,45 +622,17 @@ const ChatBox = (
|
||||
<>
|
||||
{/* control icon */}
|
||||
<Flex w={'100%'} alignItems={'center'} justifyContent={'flex-end'}>
|
||||
<Flex {...controlContainerStyle} justifyContent={'flex-end'} mr={3}>
|
||||
<MyTooltip label={t('common.Copy')}>
|
||||
<MyIcon
|
||||
{...controlIconStyle}
|
||||
name={'copy'}
|
||||
_hover={{ color: 'myBlue.700' }}
|
||||
onClick={() => onclickCopy(item.value)}
|
||||
/>
|
||||
</MyTooltip>
|
||||
{!!onDelMessage && (
|
||||
<MyTooltip label={t('chat.retry')}>
|
||||
<MyIcon
|
||||
{...controlIconStyle}
|
||||
name={'retryLight'}
|
||||
_hover={{ color: 'green.500' }}
|
||||
onClick={() => retryInput(index)}
|
||||
/>
|
||||
</MyTooltip>
|
||||
)}
|
||||
{onDelMessage && (
|
||||
<MyTooltip label={t('common.Delete')}>
|
||||
<MyIcon
|
||||
{...controlIconStyle}
|
||||
mr={0}
|
||||
name={'delete'}
|
||||
_hover={{ color: 'red.600' }}
|
||||
onClick={() => {
|
||||
setChatHistory((state) =>
|
||||
state.filter((chat) => chat.dataId !== item.dataId)
|
||||
);
|
||||
onDelMessage({
|
||||
contentId: item.dataId,
|
||||
index
|
||||
});
|
||||
}}
|
||||
/>
|
||||
</MyTooltip>
|
||||
)}
|
||||
</Flex>
|
||||
<ChatController
|
||||
chat={item}
|
||||
onDelete={
|
||||
onDelMessage
|
||||
? () => {
|
||||
delOneMessage({ dataId: item.dataId, index });
|
||||
}
|
||||
: undefined
|
||||
}
|
||||
onRetry={() => retryInput(index)}
|
||||
/>
|
||||
<ChatAvatar src={userAvatar} type={'Human'} />
|
||||
</Flex>
|
||||
{/* content */}
|
||||
@@ -726,57 +653,23 @@ const ChatBox = (
|
||||
{item.obj === 'AI' && (
|
||||
<>
|
||||
{/* control icon */}
|
||||
<Flex w={'100%'} alignItems={'flex-end'}>
|
||||
<Flex w={'100%'} alignItems={'center'}>
|
||||
<ChatAvatar src={appAvatar} type={'AI'} />
|
||||
<Flex
|
||||
{...controlContainerStyle}
|
||||
ml={3}
|
||||
<ChatController
|
||||
ml={2}
|
||||
chat={item}
|
||||
display={index === chatHistory.length - 1 && isChatting ? 'none' : 'flex'}
|
||||
>
|
||||
<MyTooltip label={'复制'}>
|
||||
<MyIcon
|
||||
{...controlIconStyle}
|
||||
name={'copy'}
|
||||
_hover={{ color: 'myBlue.700' }}
|
||||
onClick={() => onclickCopy(item.value)}
|
||||
/>
|
||||
</MyTooltip>
|
||||
{onDelMessage && (
|
||||
<MyTooltip label={'删除'}>
|
||||
<MyIcon
|
||||
{...controlIconStyle}
|
||||
name={'delete'}
|
||||
_hover={{ color: 'red.600' }}
|
||||
onClick={() => {
|
||||
setChatHistory((state) =>
|
||||
state.filter((chat) => chat.dataId !== item.dataId)
|
||||
);
|
||||
onDelMessage({
|
||||
contentId: item.dataId,
|
||||
index
|
||||
});
|
||||
}}
|
||||
/>
|
||||
</MyTooltip>
|
||||
)}
|
||||
{showVoiceIcon && hasVoiceApi && (
|
||||
<MyTooltip label={'语音播报'}>
|
||||
<MyIcon
|
||||
{...controlIconStyle}
|
||||
name={'voice'}
|
||||
_hover={{ color: '#E74694' }}
|
||||
onClick={() => voiceBroadcast({ text: item.value })}
|
||||
/>
|
||||
</MyTooltip>
|
||||
)}
|
||||
{/* admin mark icon */}
|
||||
{showMarkIcon && (
|
||||
<MyTooltip label={t('chat.Mark')}>
|
||||
<MyIcon
|
||||
{...controlIconStyle}
|
||||
name={'markLight'}
|
||||
_hover={{ color: '#67c13b' }}
|
||||
onClick={() => {
|
||||
showVoiceIcon={showVoiceIcon}
|
||||
onDelete={
|
||||
onDelMessage
|
||||
? () => {
|
||||
delOneMessage({ dataId: item.dataId, index });
|
||||
}
|
||||
: undefined
|
||||
}
|
||||
onMark={
|
||||
showMarkIcon
|
||||
? () => {
|
||||
if (!item.dataId) return;
|
||||
if (item.adminFeedback) {
|
||||
setAdminMarkData({
|
||||
@@ -793,67 +686,39 @@ const ChatBox = (
|
||||
a: item.value
|
||||
});
|
||||
}
|
||||
}}
|
||||
/>
|
||||
</MyTooltip>
|
||||
)}
|
||||
{feedbackType === FeedbackTypeEnum.admin && (
|
||||
<MyTooltip label={t('chat.Read User Feedback')}>
|
||||
<MyIcon
|
||||
display={item.userFeedback ? 'block' : 'none'}
|
||||
{...controlIconStyle}
|
||||
color={'white'}
|
||||
bg={'#FC9663'}
|
||||
fontWeight={'bold'}
|
||||
name={'badLight'}
|
||||
onClick={() =>
|
||||
}
|
||||
: undefined
|
||||
}
|
||||
onReadFeedback={
|
||||
feedbackType === FeedbackTypeEnum.admin
|
||||
? () =>
|
||||
setReadFeedbackData({
|
||||
chatItemId: item.dataId || '',
|
||||
content: item.userFeedback || '',
|
||||
isMarked: !!item.adminFeedback
|
||||
})
|
||||
}
|
||||
/>
|
||||
</MyTooltip>
|
||||
)}
|
||||
{feedbackType === FeedbackTypeEnum.user && (
|
||||
<MyTooltip
|
||||
label={
|
||||
item.userFeedback
|
||||
? `取消反馈。\n您当前反馈内容为:\n${item.userFeedback}`
|
||||
: '反馈'
|
||||
}
|
||||
>
|
||||
<MyIcon
|
||||
{...controlIconStyle}
|
||||
{...(!!item.userFeedback
|
||||
? {
|
||||
color: 'white',
|
||||
bg: '#FC9663',
|
||||
fontWeight: 'bold',
|
||||
onClick: () => {
|
||||
if (!item.dataId) return;
|
||||
setChatHistory((state) =>
|
||||
state.map((chatItem) =>
|
||||
chatItem.dataId === item.dataId
|
||||
? { ...chatItem, userFeedback: undefined }
|
||||
: chatItem
|
||||
)
|
||||
);
|
||||
try {
|
||||
userUpdateChatFeedback({ chatItemId: item.dataId });
|
||||
} catch (error) {}
|
||||
}
|
||||
}
|
||||
: {
|
||||
_hover: { color: '#FB7C3C' },
|
||||
onClick: () => setFeedbackId(item.dataId)
|
||||
})}
|
||||
name={'badLight'}
|
||||
/>
|
||||
</MyTooltip>
|
||||
)}
|
||||
</Flex>
|
||||
: undefined
|
||||
}
|
||||
onFeedback={
|
||||
feedbackType === FeedbackTypeEnum.user
|
||||
? item.userFeedback
|
||||
? () => {
|
||||
if (!item.dataId) return;
|
||||
setChatHistory((state) =>
|
||||
state.map((chatItem) =>
|
||||
chatItem.dataId === item.dataId
|
||||
? { ...chatItem, userFeedback: undefined }
|
||||
: chatItem
|
||||
)
|
||||
);
|
||||
try {
|
||||
userUpdateChatFeedback({ chatItemId: item.dataId });
|
||||
} catch (error) {}
|
||||
}
|
||||
: () => setFeedbackId(item.dataId)
|
||||
: undefined
|
||||
}
|
||||
/>
|
||||
{/* chatting status */}
|
||||
{statusBoxData && index === chatHistory.length - 1 && (
|
||||
<Flex
|
||||
@@ -885,11 +750,7 @@ const ChatBox = (
|
||||
source={item.value}
|
||||
isChatting={index === chatHistory.length - 1 && isChatting}
|
||||
/>
|
||||
<ResponseTags
|
||||
chatId={chatId}
|
||||
contentId={item.dataId}
|
||||
responseData={item.responseData}
|
||||
/>
|
||||
<ResponseTags responseData={item.responseData} />
|
||||
{/* question guide */}
|
||||
{index === chatHistory.length - 1 &&
|
||||
!isChatting &&
|
||||
@@ -949,7 +810,7 @@ const ChatBox = (
|
||||
</Box>
|
||||
</Box>
|
||||
</Box>
|
||||
{/* input */}
|
||||
{/* message input */}
|
||||
{onStartChat && variableIsFinish && active ? (
|
||||
<Box m={['0 auto', '10px auto']} w={'100%'} maxW={['auto', 'min(750px, 100%)']} px={[0, 5]}>
|
||||
<Box
|
||||
@@ -988,8 +849,8 @@ const ChatBox = (
|
||||
textarea.style.height = `${textarea.scrollHeight}px`;
|
||||
}}
|
||||
onKeyDown={(e) => {
|
||||
// 触发快捷发送
|
||||
if (isPc && e.keyCode === 13 && !e.shiftKey) {
|
||||
// enter send.(pc or iframe && enter and unPress shift)
|
||||
if ((isPc || window !== parent) && e.keyCode === 13 && !e.shiftKey) {
|
||||
handleSubmit((data) => sendPrompt(data, TextareaDom.current?.value))();
|
||||
e.preventDefault();
|
||||
}
|
||||
@@ -1078,6 +939,7 @@ const ChatBox = (
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
{/* admin mark data */}
|
||||
{showMarkIcon && (
|
||||
<>
|
||||
{/* select one dataset to insert markData */}
|
||||
@@ -1141,7 +1003,8 @@ const ChatBox = (
|
||||
defaultValues={{
|
||||
dataId: adminMarkData.dataId,
|
||||
q: adminMarkData.q,
|
||||
a: adminMarkData.a
|
||||
a: adminMarkData.a,
|
||||
file_id: DatasetSpecialIdEnum.mark
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
@@ -1160,9 +1023,8 @@ export const useChatBox = () => {
|
||||
const historyDom = document.getElementById('history');
|
||||
if (!historyDom) return;
|
||||
const dom = Array.from(historyDom.children).map((child, i) => {
|
||||
const avatar = `<img src="${
|
||||
child.querySelector<HTMLImageElement>('.avatar')?.src
|
||||
}" alt="" />`;
|
||||
const avatar = `<img src="${child.querySelector<HTMLImageElement>('.avatar')
|
||||
?.src}" alt="" />`;
|
||||
|
||||
const chatContent = child.querySelector<HTMLDivElement>('.markdown');
|
||||
|
||||
@@ -1225,3 +1087,207 @@ export const useChatBox = () => {
|
||||
onExportChat
|
||||
};
|
||||
};
|
||||
|
||||
function VariableLabel({
|
||||
required = false,
|
||||
children
|
||||
}: {
|
||||
required?: boolean;
|
||||
children: React.ReactNode | string;
|
||||
}) {
|
||||
return (
|
||||
<Box as={'label'} display={'inline-block'} position={'relative'} mb={1}>
|
||||
{children}
|
||||
{required && (
|
||||
<Box
|
||||
position={'absolute'}
|
||||
top={'-2px'}
|
||||
right={'-10px'}
|
||||
color={'red.500'}
|
||||
fontWeight={'bold'}
|
||||
>
|
||||
*
|
||||
</Box>
|
||||
)}
|
||||
</Box>
|
||||
);
|
||||
}
|
||||
function ChatAvatar({ src, type }: { src?: string; type: 'Human' | 'AI' }) {
|
||||
const theme = useTheme();
|
||||
return (
|
||||
<Box
|
||||
w={['28px', '34px']}
|
||||
h={['28px', '34px']}
|
||||
p={'2px'}
|
||||
borderRadius={'lg'}
|
||||
border={theme.borders.base}
|
||||
boxShadow={'0 0 5px rgba(0,0,0,0.1)'}
|
||||
bg={type === 'Human' ? 'white' : 'myBlue.100'}
|
||||
>
|
||||
<Avatar src={src} w={'100%'} h={'100%'} />
|
||||
</Box>
|
||||
);
|
||||
}
|
||||
|
||||
function Empty() {
|
||||
const { data: chatProblem } = useMarkdown({ url: '/chatProblem.md' });
|
||||
const { data: versionIntro } = useMarkdown({ url: '/versionIntro.md' });
|
||||
|
||||
return (
|
||||
<Box pt={6} w={'85%'} maxW={'600px'} m={'auto'} alignItems={'center'} justifyContent={'center'}>
|
||||
{/* version intro */}
|
||||
<Card p={4} mb={10} minH={'200px'}>
|
||||
<Markdown source={versionIntro} />
|
||||
</Card>
|
||||
<Card p={4} minH={'600px'}>
|
||||
<Markdown source={chatProblem} />
|
||||
</Card>
|
||||
</Box>
|
||||
);
|
||||
}
|
||||
|
||||
function ChatController({
|
||||
chat,
|
||||
display,
|
||||
showVoiceIcon,
|
||||
onReadFeedback,
|
||||
onMark,
|
||||
onRetry,
|
||||
onDelete,
|
||||
onFeedback,
|
||||
ml,
|
||||
mr
|
||||
}: {
|
||||
chat: ChatSiteItemType;
|
||||
showVoiceIcon?: boolean;
|
||||
onRetry?: () => void;
|
||||
onDelete?: () => void;
|
||||
onMark?: () => void;
|
||||
onReadFeedback?: () => void;
|
||||
onFeedback?: () => void;
|
||||
} & FlexProps) {
|
||||
const theme = useTheme();
|
||||
const { t } = useTranslation();
|
||||
const { copyData } = useCopyData();
|
||||
const { audioLoading, audioPlaying, hasAudio, playAudio, cancelAudio } = useAudioPlay({});
|
||||
const controlIconStyle = {
|
||||
w: '14px',
|
||||
cursor: 'pointer',
|
||||
p: 1,
|
||||
bg: 'white',
|
||||
borderRadius: 'lg',
|
||||
boxShadow: '0 0 5px rgba(0,0,0,0.1)',
|
||||
border: theme.borders.base,
|
||||
mr: 3
|
||||
};
|
||||
const controlContainerStyle = {
|
||||
className: 'control',
|
||||
color: 'myGray.400',
|
||||
display: 'flex',
|
||||
pl: 1
|
||||
};
|
||||
|
||||
return (
|
||||
<Flex {...controlContainerStyle} ml={ml} mr={mr} display={display}>
|
||||
<MyTooltip label={'复制'}>
|
||||
<MyIcon
|
||||
{...controlIconStyle}
|
||||
name={'copy'}
|
||||
_hover={{ color: 'myBlue.700' }}
|
||||
onClick={() => copyData(chat.value)}
|
||||
/>
|
||||
</MyTooltip>
|
||||
{!!onDelete && (
|
||||
<>
|
||||
{onRetry && (
|
||||
<MyTooltip label={t('chat.retry')}>
|
||||
<MyIcon
|
||||
{...controlIconStyle}
|
||||
name={'retryLight'}
|
||||
_hover={{ color: 'green.500' }}
|
||||
onClick={onRetry}
|
||||
/>
|
||||
</MyTooltip>
|
||||
)}
|
||||
<MyTooltip label={'删除'}>
|
||||
<MyIcon
|
||||
{...controlIconStyle}
|
||||
name={'delete'}
|
||||
_hover={{ color: 'red.600' }}
|
||||
onClick={onDelete}
|
||||
/>
|
||||
</MyTooltip>
|
||||
</>
|
||||
)}
|
||||
{showVoiceIcon &&
|
||||
hasAudio &&
|
||||
(audioLoading ? (
|
||||
<MyTooltip label={'加载中...'}>
|
||||
<MyIcon {...controlIconStyle} name={'loading'} />
|
||||
</MyTooltip>
|
||||
) : audioPlaying ? (
|
||||
<MyTooltip label={'终止播放'}>
|
||||
<MyIcon
|
||||
{...controlIconStyle}
|
||||
name={'pause'}
|
||||
_hover={{ color: '#E74694' }}
|
||||
onClick={() => cancelAudio()}
|
||||
/>
|
||||
</MyTooltip>
|
||||
) : (
|
||||
<MyTooltip label={'语音播报'}>
|
||||
<MyIcon
|
||||
{...controlIconStyle}
|
||||
name={'voice'}
|
||||
_hover={{ color: '#E74694' }}
|
||||
onClick={() => playAudio(chat.value)}
|
||||
/>
|
||||
</MyTooltip>
|
||||
))}
|
||||
{!!onMark && (
|
||||
<MyTooltip label={t('chat.Mark')}>
|
||||
<MyIcon
|
||||
{...controlIconStyle}
|
||||
name={'markLight'}
|
||||
_hover={{ color: '#67c13b' }}
|
||||
onClick={onMark}
|
||||
/>
|
||||
</MyTooltip>
|
||||
)}
|
||||
{!!onReadFeedback && (
|
||||
<MyTooltip label={t('chat.Read User Feedback')}>
|
||||
<MyIcon
|
||||
display={chat.userFeedback ? 'block' : 'none'}
|
||||
{...controlIconStyle}
|
||||
color={'white'}
|
||||
bg={'#FC9663'}
|
||||
fontWeight={'bold'}
|
||||
name={'badLight'}
|
||||
onClick={onReadFeedback}
|
||||
/>
|
||||
</MyTooltip>
|
||||
)}
|
||||
{!!onFeedback && (
|
||||
<MyTooltip
|
||||
label={chat.userFeedback ? `取消反馈。\n您当前反馈内容为:\n${chat.userFeedback}` : '反馈'}
|
||||
>
|
||||
<MyIcon
|
||||
{...controlIconStyle}
|
||||
{...(!!chat.userFeedback
|
||||
? {
|
||||
color: 'white',
|
||||
bg: '#FC9663',
|
||||
fontWeight: 'bold',
|
||||
onClick: onFeedback
|
||||
}
|
||||
: {
|
||||
_hover: { color: '#FB7C3C' },
|
||||
onClick: onFeedback
|
||||
})}
|
||||
name={'badLight'}
|
||||
/>
|
||||
</MyTooltip>
|
||||
)}
|
||||
</Flex>
|
||||
);
|
||||
}
|
||||
|
||||
1
projects/app/src/components/Icon/icons/common/pause.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1696179048209" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4182" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48"><path d="M373.333333 85.333333H266.666667a53.393333 53.393333 0 0 0-53.333334 53.333334v746.666666a53.393333 53.393333 0 0 0 53.333334 53.333334h106.666666a53.393333 53.393333 0 0 0 53.333334-53.333334V138.666667a53.393333 53.393333 0 0 0-53.333334-53.333334z m10.666667 800a10.666667 10.666667 0 0 1-10.666667 10.666667H266.666667a10.666667 10.666667 0 0 1-10.666667-10.666667V138.666667a10.666667 10.666667 0 0 1 10.666667-10.666667h106.666666a10.666667 10.666667 0 0 1 10.666667 10.666667z m373.333333-800H650.666667a53.393333 53.393333 0 0 0-53.333334 53.333334v746.666666a53.393333 53.393333 0 0 0 53.333334 53.333334h106.666666a53.393333 53.393333 0 0 0 53.333334-53.333334V138.666667a53.393333 53.393333 0 0 0-53.333334-53.333334z m10.666667 800a10.666667 10.666667 0 0 1-10.666667 10.666667H650.666667a10.666667 10.666667 0 0 1-10.666667-10.666667V138.666667a10.666667 10.666667 0 0 1 10.666667-10.666667h106.666666a10.666667 10.666667 0 0 1 10.666667 10.666667z" p-id="4183"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
52
projects/app/src/components/Icon/icons/light/loading.svg
Normal file
@@ -0,0 +1,52 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style=" background: rgb(255, 255, 255); display: block; shape-rendering: auto;" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid">
|
||||
<g transform="rotate(0 50 50)">
|
||||
<rect x="47.5" y="24" rx="2.5" ry="6" width="5" height="12" fill="#3370ff">
|
||||
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.9166666666666666s" repeatCount="indefinite"></animate>
|
||||
</rect>
|
||||
</g><g transform="rotate(30 50 50)">
|
||||
<rect x="47.5" y="24" rx="2.5" ry="6" width="5" height="12" fill="#3370ff">
|
||||
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.8333333333333334s" repeatCount="indefinite"></animate>
|
||||
</rect>
|
||||
</g><g transform="rotate(60 50 50)">
|
||||
<rect x="47.5" y="24" rx="2.5" ry="6" width="5" height="12" fill="#3370ff">
|
||||
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.75s" repeatCount="indefinite"></animate>
|
||||
</rect>
|
||||
</g><g transform="rotate(90 50 50)">
|
||||
<rect x="47.5" y="24" rx="2.5" ry="6" width="5" height="12" fill="#3370ff">
|
||||
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.6666666666666666s" repeatCount="indefinite"></animate>
|
||||
</rect>
|
||||
</g><g transform="rotate(120 50 50)">
|
||||
<rect x="47.5" y="24" rx="2.5" ry="6" width="5" height="12" fill="#3370ff">
|
||||
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.5833333333333334s" repeatCount="indefinite"></animate>
|
||||
</rect>
|
||||
</g><g transform="rotate(150 50 50)">
|
||||
<rect x="47.5" y="24" rx="2.5" ry="6" width="5" height="12" fill="#3370ff">
|
||||
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.5s" repeatCount="indefinite"></animate>
|
||||
</rect>
|
||||
</g><g transform="rotate(180 50 50)">
|
||||
<rect x="47.5" y="24" rx="2.5" ry="6" width="5" height="12" fill="#3370ff">
|
||||
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.4166666666666667s" repeatCount="indefinite"></animate>
|
||||
</rect>
|
||||
</g><g transform="rotate(210 50 50)">
|
||||
<rect x="47.5" y="24" rx="2.5" ry="6" width="5" height="12" fill="#3370ff">
|
||||
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.3333333333333333s" repeatCount="indefinite"></animate>
|
||||
</rect>
|
||||
</g><g transform="rotate(240 50 50)">
|
||||
<rect x="47.5" y="24" rx="2.5" ry="6" width="5" height="12" fill="#3370ff">
|
||||
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.25s" repeatCount="indefinite"></animate>
|
||||
</rect>
|
||||
</g><g transform="rotate(270 50 50)">
|
||||
<rect x="47.5" y="24" rx="2.5" ry="6" width="5" height="12" fill="#3370ff">
|
||||
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.16666666666666666s" repeatCount="indefinite"></animate>
|
||||
</rect>
|
||||
</g><g transform="rotate(300 50 50)">
|
||||
<rect x="47.5" y="24" rx="2.5" ry="6" width="5" height="12" fill="#3370ff">
|
||||
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="-0.08333333333333333s" repeatCount="indefinite"></animate>
|
||||
</rect>
|
||||
</g><g transform="rotate(330 50 50)">
|
||||
<rect x="47.5" y="24" rx="2.5" ry="6" width="5" height="12" fill="#3370ff">
|
||||
<animate attributeName="opacity" values="1;0" keyTimes="0;1" dur="1s" begin="0s" repeatCount="indefinite"></animate>
|
||||
</rect>
|
||||
</g>
|
||||
<!-- [ldio] generated by https://loading.io/ --></svg>
|
||||
|
After Width: | Height: | Size: 3.3 KiB |
@@ -87,7 +87,9 @@ const iconPaths = {
|
||||
searchLight: () => import('./icons/light/search.svg'),
|
||||
plusFill: () => import('./icons/fill/plus.svg'),
|
||||
moveLight: () => import('./icons/light/move.svg'),
|
||||
questionGuide: () => import('./icons/app/questionGuide.svg')
|
||||
questionGuide: () => import('./icons/app/questionGuide.svg'),
|
||||
loading: () => import('./icons/light/loading.svg'),
|
||||
pause: () => import('./icons/common/pause.svg')
|
||||
};
|
||||
|
||||
export type IconName = keyof typeof iconPaths;
|
||||
|
||||
@@ -102,7 +102,7 @@ const Layout = ({ children }: { children: JSX.Element }) => {
|
||||
</>
|
||||
)}
|
||||
</Box>
|
||||
<Loading loading={loading} />
|
||||
<Loading loading={loading} zIndex={9999} />
|
||||
</>
|
||||
);
|
||||
};
|
||||
|
||||
@@ -4,16 +4,18 @@ import { Spinner, Flex, Box } from '@chakra-ui/react';
|
||||
const Loading = ({
|
||||
fixed = true,
|
||||
text = '',
|
||||
bg = 'rgba(255,255,255,0.5)'
|
||||
bg = 'rgba(255,255,255,0.5)',
|
||||
zIndex = 1000
|
||||
}: {
|
||||
fixed?: boolean;
|
||||
text?: string;
|
||||
bg?: string;
|
||||
zIndex?: number;
|
||||
}) => {
|
||||
return (
|
||||
<Flex
|
||||
position={fixed ? 'fixed' : 'absolute'}
|
||||
zIndex={1000}
|
||||
zIndex={zIndex}
|
||||
bg={bg}
|
||||
top={0}
|
||||
left={0}
|
||||
|
||||
@@ -4,6 +4,7 @@ import ReactMarkdown from 'react-markdown';
|
||||
import RemarkGfm from 'remark-gfm';
|
||||
import RemarkMath from 'remark-math';
|
||||
import RehypeKatex from 'rehype-katex';
|
||||
import RemarkBreaks from 'remark-breaks';
|
||||
import { event } from '@/utils/plugin/eventbus';
|
||||
|
||||
import 'katex/dist/katex.min.css';
|
||||
@@ -19,34 +20,36 @@ function MyLink(e: any) {
|
||||
{text}
|
||||
</Link>
|
||||
) : (
|
||||
<Box as={'ul'}>
|
||||
<Box as={'li'}>
|
||||
<Box
|
||||
as={'span'}
|
||||
color={'blue.600'}
|
||||
textDecoration={'underline'}
|
||||
cursor={'pointer'}
|
||||
onClick={() => {
|
||||
event.emit('guideClick', { text });
|
||||
}}
|
||||
>
|
||||
{text}
|
||||
</Box>
|
||||
<Box as={'li'} mb={1}>
|
||||
<Box
|
||||
as={'span'}
|
||||
color={'blue.600'}
|
||||
textDecoration={'underline'}
|
||||
cursor={'pointer'}
|
||||
onClick={() => {
|
||||
event.emit('guideClick', { text });
|
||||
}}
|
||||
>
|
||||
{text}
|
||||
</Box>
|
||||
</Box>
|
||||
);
|
||||
}
|
||||
|
||||
const Guide = ({ text }: { text: string }) => {
|
||||
const formatText = useMemo(() => text.replace(/\[(.*?)\]($|\n)/g, '[$1]()\n'), [text]);
|
||||
const formatText = useMemo(
|
||||
() => text.replace(/\[(.*?)\]($|\n)/g, '[$1]()').replace(/\\n/g, '\n '),
|
||||
[text]
|
||||
);
|
||||
|
||||
return (
|
||||
<ReactMarkdown
|
||||
className={`markdown ${styles.markdown}`}
|
||||
remarkPlugins={[RemarkGfm, RemarkMath]}
|
||||
remarkPlugins={[RemarkGfm, RemarkMath, RemarkBreaks]}
|
||||
rehypePlugins={[RehypeKatex]}
|
||||
components={{
|
||||
a: MyLink,
|
||||
p: 'div',
|
||||
img: Image
|
||||
}}
|
||||
>
|
||||
|
||||
@@ -171,11 +171,10 @@
|
||||
.markdown ol li > *:first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
.markdown ul ul,
|
||||
.markdown ul ol,
|
||||
.markdown ol ol,
|
||||
.markdown ol ul {
|
||||
.markdown ul,
|
||||
.markdown ol {
|
||||
margin-bottom: 0;
|
||||
padding-left: 14px;
|
||||
}
|
||||
.markdown dl {
|
||||
padding: 0;
|
||||
|
||||
@@ -62,6 +62,8 @@ const Markdown = ({ source, isChatting = false }: { source: string; isChatting?:
|
||||
[]
|
||||
);
|
||||
|
||||
const formatSource = source.replace(/\\n/g, '\n ');
|
||||
|
||||
return (
|
||||
<ReactMarkdown
|
||||
className={`markdown ${styles.markdown}
|
||||
@@ -73,9 +75,9 @@ const Markdown = ({ source, isChatting = false }: { source: string; isChatting?:
|
||||
components={components}
|
||||
linkTarget={'_blank'}
|
||||
>
|
||||
{source}
|
||||
{formatSource}
|
||||
</ReactMarkdown>
|
||||
);
|
||||
};
|
||||
|
||||
export default Markdown;
|
||||
export default React.memo(Markdown);
|
||||
|
||||
@@ -8,7 +8,7 @@ const PageContainer = ({ children, ...props }: BoxProps) => {
|
||||
<Box
|
||||
h={'100%'}
|
||||
bg={'white'}
|
||||
borderRadius={[0, '2xl']}
|
||||
borderRadius={props?.borderRadius || [0, '2xl']}
|
||||
border={['none', theme.borders.lg]}
|
||||
overflow={'overlay'}
|
||||
>
|
||||
|
||||