From ad7a17bf40cce53486ae36146b3de46552f42f38 Mon Sep 17 00:00:00 2001 From: Archer <545436317@qq.com> Date: Thu, 12 Oct 2023 17:46:37 +0800 Subject: [PATCH] Optimize the project structure and introduce DDD design (#394) --- docSite/content/docs/commercial.md | 20 +- docSite/content/docs/development/intro.md | 11 +- docSite/content/docs/installation/docker.md | 13 +- projects/app/public/locales/en/common.json | 2 +- projects/app/public/locales/zh/common.json | 2 +- projects/app/src/api/common/bill/index.ts | 5 - projects/app/src/api/core/ai/agent/api.ts | 5 - projects/app/src/api/core/dataset/data.d.ts | 28 - projects/app/src/api/core/dataset/data.ts | 72 --- projects/app/src/api/core/dataset/file.d.ts | 10 - projects/app/src/api/core/dataset/file.ts | 19 - projects/app/src/api/core/dataset/index.d.ts | 34 -- projects/app/src/api/core/dataset/index.ts | 32 -- projects/app/src/api/plugins/common.ts | 6 - projects/app/src/api/support/file.ts | 18 - projects/app/src/api/system.ts | 4 - .../src/components/ChatBox/FeedbackModal.tsx | 4 +- .../app/src/components/ChatBox/QuoteModal.tsx | 6 +- .../components/ChatBox/ReadFeedbackModal.tsx | 4 +- .../src/components/ChatBox/ResponseTags.tsx | 2 +- .../src/components/ChatBox/SelectDataset.tsx | 2 +- projects/app/src/components/ChatBox/index.tsx | 24 +- .../app/src/components/Language/index.tsx | 2 +- projects/app/src/components/Layout/auth.tsx | 2 +- projects/app/src/components/Layout/index.tsx | 8 +- projects/app/src/components/Layout/navbar.tsx | 8 +- .../app/src/components/Layout/navbarPhone.tsx | 2 +- .../app/src/components/Markdown/CodeLight.tsx | 2 +- .../src/components/Markdown/chat/Guide.tsx | 4 +- .../src/components/Markdown/chat/Quote.tsx | 4 +- .../app/src/components/MyTooltip/index.tsx | 2 +- .../components/core/dataset/SelectModal.tsx | 4 +- .../src/components/support/apikey/Table.tsx | 12 +- projects/app/src/constants/app.ts | 3 + .../app/src/constants/flow/ModuleTemplate.ts | 75 +-- projects/app/src/constants/flow/index.ts | 14 +- .../app/src/constants/flow/outputTemplate.ts | 12 + .../common/api/billReq.d.ts} | 0 .../common/api/pluginRes.d.ts} | 0 .../app/src/global/common/api/systemRes.d.ts | 14 + .../type.d.ts => global/core/api/aiReq.d.ts} | 2 +- .../app.d.ts => global/core/api/appReq.d.ts} | 0 .../app.d.ts => global/core/api/appRes.d.ts} | 0 .../core/api/chatReq.d.ts} | 0 .../core/api/chatRes.d.ts} | 9 +- .../app/src/global/core/api/datasetReq.d.ts | 59 +++ .../app/src/global/core/api/datasetRes.d.ts | 15 + .../core => global/core/prompt}/AIChat.ts | 0 .../core => global/core/prompt}/agent.ts | 0 .../support/api/openapiReq.d.ts} | 0 .../src/global/support/api/outLinkRes.d.ts | 6 + .../support/api/userRes.d.ts} | 0 projects/app/src/pages/_app.tsx | 10 +- projects/app/src/pages/_error.tsx | 4 +- .../pages/account/components/BillTable.tsx | 8 +- .../app/src/pages/account/components/Info.tsx | 12 +- .../pages/account/components/InformTable.tsx | 8 +- .../account/components/OpenAIAccountModal.tsx | 5 +- .../src/pages/account/components/PayModal.tsx | 6 +- .../account/components/PayRecordTable.tsx | 6 +- .../pages/account/components/Promotion.tsx | 12 +- .../account/components/UpdatePswModal.tsx | 4 +- projects/app/src/pages/account/index.tsx | 10 +- projects/app/src/pages/api/app/getChatLogs.ts | 2 +- .../pages/api/chat/feedback/adminUpdate.ts | 2 +- projects/app/src/pages/api/chat/init.ts | 2 +- .../api/common/bill/createTrainingBill.ts | 2 +- .../api/core/ai/agent/createQuestionGuide.ts | 4 +- .../app/src/pages/api/core/dataset/create.ts | 2 +- .../pages/api/core/dataset/data/pushData.ts | 3 +- .../pages/api/core/dataset/data/updateData.ts | 4 +- .../pages/api/core/dataset/file/markUsed.ts | 2 +- .../src/pages/api/core/dataset/file/update.ts | 2 +- .../src/pages/api/core/dataset/searchTest.ts | 3 +- .../app/src/pages/api/core/dataset/update.ts | 2 +- .../app/src/pages/api/plugins/urlFetch.ts | 2 +- .../app/src/pages/api/plusApi/[...path].ts | 2 +- .../src/pages/api/support/openapi/getKeys.ts | 2 +- .../src/pages/api/support/openapi/postKey.ts | 2 +- .../src/pages/api/support/openapi/putKey.ts | 2 +- .../app/src/pages/api/support/outLink/init.ts | 2 +- .../api/{support => system}/file/delete.ts | 0 .../api/{support => system}/file/read.ts | 0 .../api/{support => system}/file/readUrl.ts | 2 +- .../api/{support => system}/file/upload.ts | 0 .../api/system/{ => file}/uploadImage.ts | 0 .../app/src/pages/api/system/getInitData.ts | 16 +- .../detail/components/AIChatSettingsModal.tsx | 4 +- .../components/AdEdit/components/ChatTest.tsx | 4 +- .../AdEdit/components/ImportSettings.tsx | 2 +- .../AdEdit/components/Nodes/NodeChat.tsx | 148 +----- .../AdEdit/components/Nodes/NodeKbSearch.tsx | 86 +-- .../components/Nodes/NodeQuestionInput.tsx | 16 +- .../components/AdEdit/components/Provider.tsx | 2 +- .../AdEdit/components/TemplateList.tsx | 2 +- .../AdEdit/components/modules/NodeCard.tsx | 4 +- .../AdEdit/components/render/RenderInput.tsx | 490 ++++++++++++++---- .../AdEdit/components/render/RenderOutput.tsx | 11 +- .../app/detail/components/AdEdit/index.tsx | 9 +- .../app/detail/components/BasicEdit/index.tsx | 18 +- .../detail/components/Charts/TotalUsage.tsx | 4 +- .../detail/components/DatasetSelectModal.tsx | 8 +- .../pages/app/detail/components/InfoModal.tsx | 10 +- .../src/pages/app/detail/components/Logs.tsx | 8 +- .../app/detail/components/OutLink/Share.tsx | 12 +- .../app/detail/components/SelectAppModal.tsx | 4 +- projects/app/src/pages/app/detail/index.tsx | 8 +- .../pages/app/list/component/CreateModal.tsx | 14 +- projects/app/src/pages/app/list/index.tsx | 10 +- projects/app/src/pages/appStore/index.tsx | 10 +- .../src/pages/chat/components/ChatHeader.tsx | 2 +- .../chat/components/ChatHistorySlider.tsx | 8 +- .../app/src/pages/chat/components/Empty.tsx | 2 +- .../src/pages/chat/components/SliderApps.tsx | 2 +- projects/app/src/pages/chat/index.tsx | 16 +- projects/app/src/pages/chat/share.tsx | 12 +- projects/app/src/pages/components/Ability.tsx | 2 +- projects/app/src/pages/components/Choice.tsx | 2 +- projects/app/src/pages/components/Footer.tsx | 2 +- projects/app/src/pages/components/Hero.tsx | 4 +- projects/app/src/pages/components/Navbar.tsx | 4 +- projects/app/src/pages/index.tsx | 4 +- .../pages/kb/detail/components/DataCard.tsx | 11 +- .../pages/kb/detail/components/FileCard.tsx | 20 +- .../kb/detail/components/Import/Chunk.tsx | 10 +- .../components/Import/CreateFileModal.tsx | 2 +- .../pages/kb/detail/components/Import/Csv.tsx | 10 +- .../detail/components/Import/FileSelect.tsx | 12 +- .../kb/detail/components/Import/Manual.tsx | 8 +- .../pages/kb/detail/components/Import/QA.tsx | 12 +- .../components/Import/UrlFetchModal.tsx | 8 +- .../src/pages/kb/detail/components/Info.tsx | 12 +- .../kb/detail/components/InputDataModal.tsx | 10 +- .../src/pages/kb/detail/components/Test.tsx | 11 +- projects/app/src/pages/kb/detail/index.tsx | 13 +- .../pages/kb/list/component/CreateModal.tsx | 16 +- .../kb/list/component/EditFolderModal.tsx | 4 +- .../src/pages/kb/list/component/MoveModal.tsx | 4 +- projects/app/src/pages/kb/list/index.tsx | 22 +- .../login/components/ForgetPasswordForm.tsx | 10 +- .../src/pages/login/components/LoginForm.tsx | 10 +- .../pages/login/components/RegisterForm.tsx | 13 +- projects/app/src/pages/login/index.tsx | 12 +- projects/app/src/pages/login/provider.tsx | 14 +- projects/app/src/pages/tools/index.tsx | 4 +- .../service => service/common/api}/plugins.ts | 2 +- .../service => service/common/api}/request.ts | 0 projects/app/src/service/events/generateQA.ts | 2 +- .../moduleDispatch/agent/classifyQuestion.ts | 2 +- .../service/moduleDispatch/agent/extract.ts | 2 +- .../src/service/moduleDispatch/chat/oneapi.ts | 6 +- .../service/moduleDispatch/tools/answer.ts | 8 +- projects/app/src/types/chat.d.ts | 3 +- projects/app/src/types/core/app/flow.d.ts | 1 + projects/app/src/utils/app.ts | 21 +- projects/app/src/utils/user.ts | 2 +- projects/app/src/web/common/api/bill.ts | 27 + .../app/src/{ => web/common}/api/fetch.ts | 4 +- projects/app/src/web/common/api/plugin.ts | 6 + .../app/src/{ => web/common}/api/request.ts | 0 projects/app/src/web/common/api/system.ts | 21 + .../src/{ => web/common}/hooks/useConfirm.tsx | 0 .../{ => web/common}/hooks/useCopyData.tsx | 0 .../{ => web/common}/hooks/useEditTitle.tsx | 0 .../src/{ => web/common}/hooks/useLoading.tsx | 0 .../src/{ => web/common}/hooks/useMarkdown.ts | 0 .../{ => web/common}/hooks/usePagination.tsx | 8 +- .../src/{ => web/common}/hooks/useRequest.tsx | 2 +- .../{ => web/common}/hooks/useSelectFile.tsx | 0 .../src/{ => web/common}/hooks/useToast.ts | 0 .../app/src/{ => web/common}/store/global.ts | 0 .../app/src/{ => web/common}/store/static.ts | 6 +- .../plugin => web/common/utils}/eventbus.ts | 2 +- .../{utils/web => web/common/utils}/file.ts | 5 +- .../{utils/web => web/common/utils}/i18n.ts | 0 .../{utils/web => web/common/utils}/voice.ts | 4 +- projects/app/src/web/core/api/ai.ts | 5 + projects/app/src/{ => web/core}/api/app.ts | 7 +- projects/app/src/{ => web/core}/api/chat.ts | 8 +- projects/app/src/web/core/api/dataset.ts | 123 +++++ projects/app/src/{ => web/core}/store/chat.ts | 4 +- .../app/src/{ => web/core}/store/dataset.ts | 4 +- .../app/src/{ => web/core}/store/shareChat.ts | 0 .../web/core => web/core/utils}/dataset.ts | 4 +- .../app/src/{ => web}/styles/default.scss | 0 .../app/src/{ => web}/styles/reactflow.scss | 0 projects/app/src/{ => web}/styles/reset.scss | 0 .../src/{constants => web/styles}/theme.ts | 0 .../index.ts => web/support/api/openapi.ts} | 4 +- .../support => web/support/api}/outLink.ts | 4 +- .../app/src/{ => web/support}/api/user.ts | 27 +- .../{ => web/support}/hooks/useSendCode.ts | 6 +- .../app/src/{ => web/support}/store/user.ts | 4 +- 193 files changed, 1169 insertions(+), 1084 deletions(-) delete mode 100644 projects/app/src/api/common/bill/index.ts delete mode 100644 projects/app/src/api/core/ai/agent/api.ts delete mode 100644 projects/app/src/api/core/dataset/data.d.ts delete mode 100644 projects/app/src/api/core/dataset/data.ts delete mode 100644 projects/app/src/api/core/dataset/file.d.ts delete mode 100644 projects/app/src/api/core/dataset/file.ts delete mode 100644 projects/app/src/api/core/dataset/index.d.ts delete mode 100644 projects/app/src/api/core/dataset/index.ts delete mode 100644 projects/app/src/api/plugins/common.ts delete mode 100644 projects/app/src/api/support/file.ts delete mode 100644 projects/app/src/api/system.ts create mode 100644 projects/app/src/constants/flow/outputTemplate.ts rename projects/app/src/{api/common/bill/index.d.ts => global/common/api/billReq.d.ts} (100%) rename projects/app/src/{types/plugin.d.ts => global/common/api/pluginRes.d.ts} (100%) create mode 100644 projects/app/src/global/common/api/systemRes.d.ts rename projects/app/src/{api/core/ai/agent/type.d.ts => global/core/api/aiReq.d.ts} (76%) rename projects/app/src/{api/request/app.d.ts => global/core/api/appReq.d.ts} (100%) rename projects/app/src/{api/response/app.d.ts => global/core/api/appRes.d.ts} (100%) rename projects/app/src/{api/request/chat.d.ts => global/core/api/chatReq.d.ts} (100%) rename projects/app/src/{api/response/chat.d.ts => global/core/api/chatRes.d.ts} (76%) create mode 100644 projects/app/src/global/core/api/datasetReq.d.ts create mode 100644 projects/app/src/global/core/api/datasetRes.d.ts rename projects/app/src/{prompts/core => global/core/prompt}/AIChat.ts (100%) rename projects/app/src/{prompts/core => global/core/prompt}/agent.ts (100%) rename projects/app/src/{api/support/openapi/index.d.ts => global/support/api/openapiReq.d.ts} (100%) create mode 100644 projects/app/src/global/support/api/outLinkRes.d.ts rename projects/app/src/{api/response/user.d.ts => global/support/api/userRes.d.ts} (100%) rename projects/app/src/pages/api/{support => system}/file/delete.ts (100%) rename projects/app/src/pages/api/{support => system}/file/read.ts (100%) rename projects/app/src/pages/api/{support => system}/file/readUrl.ts (97%) rename projects/app/src/pages/api/{support => system}/file/upload.ts (100%) rename projects/app/src/pages/api/system/{ => file}/uploadImage.ts (100%) rename projects/app/src/{api/service => service/common/api}/plugins.ts (86%) rename projects/app/src/{api/service => service/common/api}/request.ts (100%) create mode 100644 projects/app/src/web/common/api/bill.ts rename projects/app/src/{ => web/common}/api/fetch.ts (99%) create mode 100644 projects/app/src/web/common/api/plugin.ts rename projects/app/src/{ => web/common}/api/request.ts (100%) create mode 100644 projects/app/src/web/common/api/system.ts rename projects/app/src/{ => web/common}/hooks/useConfirm.tsx (100%) rename projects/app/src/{ => web/common}/hooks/useCopyData.tsx (100%) rename projects/app/src/{ => web/common}/hooks/useEditTitle.tsx (100%) rename projects/app/src/{ => web/common}/hooks/useLoading.tsx (100%) rename projects/app/src/{ => web/common}/hooks/useMarkdown.ts (100%) rename projects/app/src/{ => web/common}/hooks/usePagination.tsx (98%) rename projects/app/src/{ => web/common}/hooks/useRequest.tsx (94%) rename projects/app/src/{ => web/common}/hooks/useSelectFile.tsx (100%) rename projects/app/src/{ => web/common}/hooks/useToast.ts (100%) rename projects/app/src/{ => web/common}/store/global.ts (100%) rename projects/app/src/{ => web/common}/store/static.ts (83%) rename projects/app/src/{utils/plugin => web/common/utils}/eventbus.ts (94%) rename projects/app/src/{utils/web => web/common/utils}/file.ts (97%) rename projects/app/src/{utils/web => web/common/utils}/i18n.ts (100%) rename projects/app/src/{utils/web => web/common/utils}/voice.ts (97%) create mode 100644 projects/app/src/web/core/api/ai.ts rename projects/app/src/{ => web/core}/api/app.ts (87%) rename projects/app/src/{ => web/core}/api/chat.ts (83%) create mode 100644 projects/app/src/web/core/api/dataset.ts rename projects/app/src/{ => web/core}/store/chat.ts (96%) rename projects/app/src/{ => web/core}/store/dataset.ts (96%) rename projects/app/src/{ => web/core}/store/shareChat.ts (100%) rename projects/app/src/{utils/web/core => web/core/utils}/dataset.ts (90%) rename projects/app/src/{ => web}/styles/default.scss (100%) rename projects/app/src/{ => web}/styles/reactflow.scss (100%) rename projects/app/src/{ => web}/styles/reset.scss (100%) rename projects/app/src/{constants => web/styles}/theme.ts (100%) rename projects/app/src/{api/support/openapi/index.ts => web/support/api/openapi.ts} (80%) rename projects/app/src/{api/support => web/support/api}/outLink.ts (85%) rename projects/app/src/{ => web/support}/api/user.ts (75%) rename projects/app/src/{ => web/support}/hooks/useSendCode.ts (92%) rename projects/app/src/{ => web/support}/store/user.ts (95%) diff --git a/docSite/content/docs/commercial.md b/docSite/content/docs/commercial.md index bd144fb22..bf332b45b 100644 --- a/docSite/content/docs/commercial.md +++ b/docSite/content/docs/commercial.md @@ -13,18 +13,20 @@ weight: 20 ## 商业版 -商业版最终交付版本功能与 https://fastgpt.run 完全一致,品牌内容可自定义。 +商业版最终交付版本功能与 https://fastgpt.run 完全一致,品牌内容可自定义,商业授权时长同`License`有效期。 {{% alert icon="🤖" context="warning" %}} -商业版与开源版功能差异:(目前计划) +商业版比开源版额外增加的内容:(目前计划) -1. 自定义 title 和 logo +1. 可自定义 title 和 logo 2. 用户注册,支付 (已有微信扫码支付,后续会补充支付方式) 3. API 访问限制,可配置:额度、过期时间 -4. 团队空间 (计划) -5. 完善的 OpenAPI(计划) -6. 高级编排额外插件(计划) -7. 后台管理系统 +4. 分享链接限制,可配置:额度、过期时间、QPM、身份验证Hook +5. 内容审核(目前对接了百度) +6. 团队空间 (计划) +7. 完善的 OpenAPI(计划) +8. 高级编排额外插件(计划) +9. 后台管理系统 a. 查询:用户、支付、应用、知识库 b. 变更:用户 c. 新增:用户 @@ -36,7 +38,7 @@ weight: 20 + 使用 [Sealos 公有云](https://sealos.io)部署:1万元/年/套 (无部署费用。赠送 8000 sealos 公有云额度,可用于 FastGPT 或其他云资源)。 + 渠道商使用 Sealos 部署:返现 20% 成交额。 -+ 私有服务器部署:2万元/年/套(如需部署支持,按技术服务费计算) ++ 私有服务器部署:2万元/年/套 + 渠道商私有服务器部署:1.3万元/年/套(渠道商合同单独约谈,累计 5 套以上可签) #### 用户注册数量费用(按注册量算,不计量分享和 API) @@ -81,7 +83,7 @@ weight: 20 完整版应用 = 开源版镜像 + 商业版镜像 - 我们会提供一个商业版镜像给你使用,该镜像需要一个 license 启动,license 有效期为 1 年。此外,还会提供一个简单的后台管理系统(目前只设置了简单的查询功能) + 我们会提供一个商业版镜像给你使用,该镜像需要一个 License 启动,License 有效期为 1 年。此外,还会提供一个简单的后台管理系统(目前只设置了简单的查询功能) 2. 二次开发如何操作? diff --git a/docSite/content/docs/development/intro.md b/docSite/content/docs/development/intro.md index 117b4ddb5..9435d519f 100644 --- a/docSite/content/docs/development/intro.md +++ b/docSite/content/docs/development/intro.md @@ -94,7 +94,16 @@ docker build -t dockername/fastgpt --build-arg name=app . 如果遇到问题,比如合并冲突或不知道如何打开拉取请求,请查看 GitHub 的[拉取请求教程](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests),了解如何解决合并冲突和其他问题。一旦您的 PR 被合并,您将自豪地被列为[贡献者表](https://github.com/labring/FastGPT/graphs/contributors)中的一员。 -## 加入社区 + + +## QA + +### 本地数据库无法连接 + +1. 如果你是连接远程的数据库,先检查对应的端口是否开放。 +2. 如果是本地运行的数据库,可尝试`host`改成`localhost`或`127.0.0.1` + +### 加入社区 遇到困难了吗?有任何问题吗? 加入微信群与开发者和用户保持沟通。 diff --git a/docSite/content/docs/installation/docker.md b/docSite/content/docs/installation/docker.md index 2c0d97486..a7b32883e 100644 --- a/docSite/content/docs/installation/docker.md +++ b/docSite/content/docs/installation/docker.md @@ -9,6 +9,8 @@ weight: 720 ## 准备条件 +服务器要求:2C2G 起 + ### 1. 准备好代理环境(国外服务器可忽略) 确保可以访问 OpenAI,具体方案可以参考:[代理方案](/docs/installation/proxy/)。或直接在 Sealos 上 [部署 OneAPI](/docs/installation/one-api),既解决代理问题也能实现多 Key 轮询、接入其他大模型。 @@ -70,9 +72,9 @@ brew install orbstack 依次执行下面命令,创建 FastGPT 文件并拉取`docker-compose.yml`和`config.json`,执行完后目录下会有 2 个文件。 -非 Linux 环境,可手动创建目录,并下载这2个文件。 +非 Linux 环境或无法访问外网环境,可手动创建一个目录,并下载下面2个链接的文件。 -**注意: 配置文件中 Mongo 为 5.x,部分服务器不支持,需手动更改其镜像版本为 4.4.24** +**注意: `docker-compose.yml` 配置文件中 Mongo 为 5.x,部分服务器不支持,需手动更改其镜像版本为 4.4.24** ```bash mkdir fastgpt @@ -118,7 +120,12 @@ docker-compose up -d 1. `docker logs fastgpt` 可以查看日志,在启动容器后,第一次请求网页,会进行配置文件读取,可以看看有没有读取成功以及有无错误日志。 2. `docker exec -it fastgpt sh` 进入 FastGPT 容器,可以通过`ls data`查看目录下是否成功挂载`config.json`文件。可通过`cat data/config.json`查看配置文件。 -### 为什么无法连接 oneapi 和 本地模型镜像。 +**可能不生效的原因** + +1. 挂载目录不正确 +2. 配置文件不正确,日志中会提示`invalid json`,配置文件需要是标准的 JSON 文件。 + +### 为什么无法连接`本地模型`镜像。 `docker-compose.yml`中使用了桥接的模式建立了`fastgpt`网络,如想通过0.0.0.0或镜像名访问其它镜像,需将其它镜像也加入到网络中。 diff --git a/projects/app/public/locales/en/common.json b/projects/app/public/locales/en/common.json index 744c16c70..235dafb1b 100644 --- a/projects/app/public/locales/en/common.json +++ b/projects/app/public/locales/en/common.json @@ -242,7 +242,7 @@ "openapi": { "app key tips": "These keys have the identification of the current application and can be used by external access.", "key alias": "Alias of key, for display only", - "key tips": "You can use API keys to access certain interfaces" + "key tips": "You can use the API Key to access certain interfaces (you can't access the application, you need to use the API key within the application to access the application)." }, "outlink": { "Copy Iframe": "Copy Iframe", diff --git a/projects/app/public/locales/zh/common.json b/projects/app/public/locales/zh/common.json index 15f6476c5..3617f05ca 100644 --- a/projects/app/public/locales/zh/common.json +++ b/projects/app/public/locales/zh/common.json @@ -242,7 +242,7 @@ "openapi": { "app key tips": "这些 key 已有当前应用标识,具体使用可参考文档", "key alias": "key 的别名,仅用于展示", - "key tips": "你可以使用 API 秘钥访问一些特定的接口" + "key tips": "你可以使用 API 秘钥访问一些特定的接口(无法访问应用,访问应用需使用应用内的API Key)" }, "outlink": { "Copy Iframe": "嵌入网页", diff --git a/projects/app/src/api/common/bill/index.ts b/projects/app/src/api/common/bill/index.ts deleted file mode 100644 index dddd64622..000000000 --- a/projects/app/src/api/common/bill/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { GET, POST, PUT, DELETE } from '@/api/request'; -import { CreateTrainingBillType } from './index.d'; - -export const postCreateTrainingBill = (data: CreateTrainingBillType) => - POST(`/common/bill/createTrainingBill`, data); diff --git a/projects/app/src/api/core/ai/agent/api.ts b/projects/app/src/api/core/ai/agent/api.ts deleted file mode 100644 index c19c2b765..000000000 --- a/projects/app/src/api/core/ai/agent/api.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { GET, POST, PUT, DELETE } from '@/api/request'; -import { CreateQuestionGuideProps } from './type'; - -export const postQuestionGuide = (data: CreateQuestionGuideProps, cancelToken: AbortController) => - POST('/core/ai/agent/createQuestionGuide', data, { cancelToken }); diff --git a/projects/app/src/api/core/dataset/data.d.ts b/projects/app/src/api/core/dataset/data.d.ts deleted file mode 100644 index cdd8354aa..000000000 --- a/projects/app/src/api/core/dataset/data.d.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { KbTypeEnum } from '@/constants/dataset'; -import type { RequestPaging } from '@/types'; -import { TrainingModeEnum } from '@/constants/plugin'; -import { DatasetDataItemType } from '@/types/core/dataset/data'; - -export type PushDataProps = { - kbId: string; - data: DatasetDataItemType[]; - mode: `${TrainingModeEnum}`; - prompt?: string; - billId?: string; -}; -export type PushDataResponse = { - insertLen: number; -}; - -export type UpdateDataPrams = { - dataId: string; - kbId: string; - a?: string; - q?: string; -}; - -export type GetDatasetDataListProps = RequestPaging & { - kbId: string; - searchText: string; - fileId: string; -}; diff --git a/projects/app/src/api/core/dataset/data.ts b/projects/app/src/api/core/dataset/data.ts deleted file mode 100644 index e7b082fc9..000000000 --- a/projects/app/src/api/core/dataset/data.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { GET, POST, PUT, DELETE } from '@/api/request'; -import type { DatasetDataItemType } from '@/types/core/dataset/data'; -import type { - PushDataProps, - PushDataResponse, - UpdateDataPrams, - GetDatasetDataListProps -} from './data.d'; -import { QuoteItemType } from '@/types/chat'; -import { getToken } from '@/utils/user'; -import download from 'downloadjs'; - -/* kb data */ -export const getDatasetDataList = (data: GetDatasetDataListProps) => - POST(`/core/dataset/data/getDataList`, data); - -/** - * export and download data - */ -export const exportDatasetData = (data: { kbId: string }) => - fetch(`/api/core/dataset/data/exportAll?kbId=${data.kbId}`, { - method: 'GET', - headers: { - token: getToken() - } - }) - .then(async (res) => { - if (!res.ok) { - const data = await res.json(); - throw new Error(data?.message || 'Export failed'); - } - return res.blob(); - }) - .then((blob) => download(blob, 'dataset.csv', 'text/csv')); - -/** - * 获取模型正在拆分数据的数量 - */ -export const getTrainingData = (data: { kbId: string; init: boolean }) => - POST<{ - qaListLen: number; - vectorListLen: number; - }>(`/core/dataset/data/getTrainingData`, data); - -/* get length of system training queue */ -export const getTrainingQueueLen = () => GET(`/core/dataset/data/getQueueLen`); - -export const getDatasetDataItemById = (dataId: string) => - GET(`/core/dataset/data/getDataById`, { dataId }); - -/** - * push data to training queue - */ -export const postChunks2Dataset = (data: PushDataProps) => - POST(`/core/dataset/data/pushData`, data); - -/** - * insert one data to dataset (immediately insert) - */ -export const postData2Dataset = (data: { kbId: string; data: DatasetDataItemType }) => - POST(`/core/dataset/data/insertData`, data); - -/** - * 更新一条数据 - */ -export const putDatasetDataById = (data: UpdateDataPrams) => - PUT('/core/dataset/data/updateData', data); -/** - * 删除一条知识库数据 - */ -export const delOneDatasetDataById = (dataId: string) => - DELETE(`/core/dataset/data/delDataById?dataId=${dataId}`); diff --git a/projects/app/src/api/core/dataset/file.d.ts b/projects/app/src/api/core/dataset/file.d.ts deleted file mode 100644 index 656343025..000000000 --- a/projects/app/src/api/core/dataset/file.d.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { RequestPaging } from '../../../types/index'; - -export type GetFileListProps = RequestPaging & { - kbId: string; - searchText: string; -}; - -export type UpdateFileProps = { id: string; name?: string; datasetUsed?: boolean }; - -export type MarkFileUsedProps = { fileIds: string[] }; diff --git a/projects/app/src/api/core/dataset/file.ts b/projects/app/src/api/core/dataset/file.ts deleted file mode 100644 index 5468cf46d..000000000 --- a/projects/app/src/api/core/dataset/file.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { GET, POST, PUT, DELETE } from '@/api/request'; -import type { DatasetFileItemType } from '@/types/core/dataset/file'; -import type { GSFileInfoType } from '@/types/common/file'; - -import type { GetFileListProps, UpdateFileProps, MarkFileUsedProps } from './file.d'; - -export const getDatasetFiles = (data: GetFileListProps) => - POST(`/core/dataset/file/list`, data); -export const delDatasetFileById = (params: { fileId: string; kbId: string }) => - DELETE(`/core/dataset/file/delById`, params); -export const getFileInfoById = (fileId: string) => - GET(`/core/dataset/file/detail`, { fileId }); -export const delDatasetEmptyFiles = (kbId: string) => - DELETE(`/core/dataset/file/delEmptyFiles`, { kbId }); - -export const updateDatasetFile = (data: UpdateFileProps) => PUT(`/core/dataset/file/update`, data); - -export const putMarkFilesUsed = (data: MarkFileUsedProps) => - PUT(`/core/dataset/file/markUsed`, data); diff --git a/projects/app/src/api/core/dataset/index.d.ts b/projects/app/src/api/core/dataset/index.d.ts deleted file mode 100644 index f007b4f1c..000000000 --- a/projects/app/src/api/core/dataset/index.d.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { KbTypeEnum } from '@/constants/dataset'; -import type { RequestPaging } from '@/types'; -import { TrainingModeEnum } from '@/constants/plugin'; -import type { SearchTestItemType } from '@/types/core/dataset'; - -export type DatasetUpdateParams = { - id: string; - parentId?: string; - tags?: string; - name?: string; - avatar?: string; -}; -export type CreateDatasetParams = { - parentId?: string; - name: string; - tags: string[]; - avatar: string; - vectorModel?: string; - type: `${KbTypeEnum}`; -}; - -export type DatasetUpdateParams = { - id: string; - parentId?: string; - tags?: string; - name?: string; - avatar?: string; -}; - -export type SearchTestProps = { - kbId: string; - text: string; -}; -export type SearchTestResponseType = SearchTestItemType['results']; diff --git a/projects/app/src/api/core/dataset/index.ts b/projects/app/src/api/core/dataset/index.ts deleted file mode 100644 index ea24458c1..000000000 --- a/projects/app/src/api/core/dataset/index.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { GET, POST, PUT, DELETE } from '@/api/request'; -import type { DatasetItemType, DatasetsItemType, DatasetPathItemType } from '@/types/core/dataset'; -import type { - DatasetUpdateParams, - CreateDatasetParams, - SearchTestProps, - SearchTestResponseType -} from './index.d'; -import { KbTypeEnum } from '@/constants/dataset'; - -export const getDatasets = (data: { parentId?: string; type?: `${KbTypeEnum}` }) => - GET(`/core/dataset/list`, data); - -/** - * get type=dataset list - */ -export const getAllDataset = () => GET(`/core/dataset/allDataset`); - -export const getDatasetPaths = (parentId?: string) => - GET('/core/dataset/paths', { parentId }); - -export const getDatasetById = (id: string) => GET(`/core/dataset/detail?id=${id}`); - -export const postCreateDataset = (data: CreateDatasetParams) => - POST(`/core/dataset/create`, data); - -export const putDatasetById = (data: DatasetUpdateParams) => PUT(`/core/dataset/update`, data); - -export const delDatasetById = (id: string) => DELETE(`/core/dataset/delete?id=${id}`); - -export const postSearchText = (data: SearchTestProps) => - POST(`/core/dataset/searchTest`, data); diff --git a/projects/app/src/api/plugins/common.ts b/projects/app/src/api/plugins/common.ts deleted file mode 100644 index 598cfbfa0..000000000 --- a/projects/app/src/api/plugins/common.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { GET, POST, PUT, DELETE } from '../request'; - -import type { FetchResultItem } from '@/types/plugin'; - -export const fetchUrls = (urlList: string[]) => - POST(`/plugins/urlFetch`, { urlList }); diff --git a/projects/app/src/api/support/file.ts b/projects/app/src/api/support/file.ts deleted file mode 100644 index 6028162b5..000000000 --- a/projects/app/src/api/support/file.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { GET, POST } from '../request'; - -import { AxiosProgressEvent } from 'axios'; - -export const uploadImg = (base64Img: string) => POST('/system/uploadImage', { base64Img }); - -export const postUploadFiles = ( - data: FormData, - onUploadProgress: (progressEvent: AxiosProgressEvent) => void -) => - POST('/support/file/upload', data, { - onUploadProgress, - headers: { - 'Content-Type': 'multipart/form-data; charset=utf-8' - } - }); - -export const getFileViewUrl = (fileId: string) => GET('/support/file/readUrl', { fileId }); diff --git a/projects/app/src/api/system.ts b/projects/app/src/api/system.ts deleted file mode 100644 index 0c2fb87c8..000000000 --- a/projects/app/src/api/system.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { GET, POST, PUT } from './request'; -import type { InitDateResponse } from '@/pages/api/system/getInitData'; - -export const getInitData = () => GET('/system/getInitData'); diff --git a/projects/app/src/components/ChatBox/FeedbackModal.tsx b/projects/app/src/components/ChatBox/FeedbackModal.tsx index 7d622f97e..2d9e1be41 100644 --- a/projects/app/src/components/ChatBox/FeedbackModal.tsx +++ b/projects/app/src/components/ChatBox/FeedbackModal.tsx @@ -1,9 +1,9 @@ import React, { useRef } from 'react'; import { ModalBody, Textarea, ModalFooter, Button } from '@chakra-ui/react'; import MyModal from '../MyModal'; -import { useRequest } from '@/hooks/useRequest'; +import { useRequest } from '@/web/common/hooks/useRequest'; import { useTranslation } from 'next-i18next'; -import { userUpdateChatFeedback } from '@/api/chat'; +import { userUpdateChatFeedback } from '@/web/core/api/chat'; const FeedbackModal = ({ chatItemId, diff --git a/projects/app/src/components/ChatBox/QuoteModal.tsx b/projects/app/src/components/ChatBox/QuoteModal.tsx index a486e1008..11871ba8d 100644 --- a/projects/app/src/components/ChatBox/QuoteModal.tsx +++ b/projects/app/src/components/ChatBox/QuoteModal.tsx @@ -1,8 +1,8 @@ import React, { useCallback, useMemo, useState } from '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'; +import { getDatasetDataItemById } from '@/web/core/api/dataset'; +import { useLoading } from '@/web/common/hooks/useLoading'; +import { useToast } from '@/web/common/hooks/useToast'; import { getErrText } from '@/utils/tools'; import { QuoteItemType } from '@/types/chat'; import MyIcon from '@/components/Icon'; diff --git a/projects/app/src/components/ChatBox/ReadFeedbackModal.tsx b/projects/app/src/components/ChatBox/ReadFeedbackModal.tsx index 5a08c9bfa..8f67ad736 100644 --- a/projects/app/src/components/ChatBox/ReadFeedbackModal.tsx +++ b/projects/app/src/components/ChatBox/ReadFeedbackModal.tsx @@ -1,9 +1,9 @@ import React from 'react'; import { ModalBody, ModalFooter, Button } from '@chakra-ui/react'; import MyModal from '../MyModal'; -import { useRequest } from '@/hooks/useRequest'; +import { useRequest } from '@/web/common/hooks/useRequest'; import { useTranslation } from 'next-i18next'; -import { userUpdateChatFeedback } from '@/api/chat'; +import { userUpdateChatFeedback } from '@/web/core/api/chat'; const ReadFeedbackModal = ({ chatItemId, diff --git a/projects/app/src/components/ChatBox/ResponseTags.tsx b/projects/app/src/components/ChatBox/ResponseTags.tsx index f06a172b6..323a675b2 100644 --- a/projects/app/src/components/ChatBox/ResponseTags.tsx +++ b/projects/app/src/components/ChatBox/ResponseTags.tsx @@ -2,7 +2,7 @@ import React, { useCallback, useMemo, useState } from 'react'; import { ChatHistoryItemResType, ChatItemType, QuoteItemType } from '@/types/chat'; import { Flex, BoxProps, useDisclosure } from '@chakra-ui/react'; import { useTranslation } from 'react-i18next'; -import { useGlobalStore } from '@/store/global'; +import { useGlobalStore } from '@/web/common/store/global'; import dynamic from 'next/dynamic'; import Tag from '../Tag'; import MyTooltip from '../MyTooltip'; diff --git a/projects/app/src/components/ChatBox/SelectDataset.tsx b/projects/app/src/components/ChatBox/SelectDataset.tsx index ecc2de8c5..eb213573d 100644 --- a/projects/app/src/components/ChatBox/SelectDataset.tsx +++ b/projects/app/src/components/ChatBox/SelectDataset.tsx @@ -1,7 +1,7 @@ import React, { useState } from 'react'; import { ModalBody, useTheme, ModalFooter, Button, Box, Card, Flex, Grid } from '@chakra-ui/react'; import { useTranslation } from 'next-i18next'; -import { useToast } from '@/hooks/useToast'; +import { useToast } from '@/web/common/hooks/useToast'; import Avatar from '../Avatar'; import MyIcon from '@/components/Icon'; import { KbTypeEnum } from '@/constants/dataset'; diff --git a/projects/app/src/components/ChatBox/index.tsx b/projects/app/src/components/ChatBox/index.tsx index aa674f733..682fa2b12 100644 --- a/projects/app/src/components/ChatBox/index.tsx +++ b/projects/app/src/components/ChatBox/index.tsx @@ -15,10 +15,10 @@ import { ChatSiteItemType, ExportChatType } from '@/types/chat'; -import { useToast } from '@/hooks/useToast'; -import { useAudioPlay } from '@/utils/web/voice'; +import { useToast } from '@/web/common/hooks/useToast'; +import { useAudioPlay } from '@/web/common/utils/voice'; import { getErrText } from '@/utils/tools'; -import { useCopyData } from '@/hooks/useCopyData'; +import { useCopyData } from '@/web/common/hooks/useCopyData'; import { Box, Card, @@ -30,22 +30,22 @@ import { BoxProps, FlexProps } from '@chakra-ui/react'; -import { feConfigs } from '@/store/static'; -import { event } from '@/utils/plugin/eventbus'; +import { feConfigs } from '@/web/common/store/static'; +import { eventBus } from '@/web/common/utils/eventbus'; import { adaptChat2GptMessages } from '@/utils/common/adapt/message'; -import { useMarkdown } from '@/hooks/useMarkdown'; +import { useMarkdown } from '@/web/common/hooks/useMarkdown'; import { AppModuleItemType } from '@/types/app'; import { VariableInputEnum } from '@/constants/app'; import { useForm } from 'react-hook-form'; import type { MessageItemType } from '@/types/core/chat/type'; -import { fileDownload } from '@/utils/web/file'; +import { fileDownload } from '@/web/common/utils/file'; import { htmlTemplate } from '@/constants/common'; import { useRouter } from 'next/router'; -import { useGlobalStore } from '@/store/global'; +import { useGlobalStore } from '@/web/common/store/global'; import { TaskResponseKeyEnum } from '@/constants/chat'; import { useTranslation } from 'react-i18next'; import { customAlphabet } from 'nanoid'; -import { userUpdateChatFeedback, adminUpdateChatFeedback } from '@/api/chat'; +import { userUpdateChatFeedback, adminUpdateChatFeedback } from '@/web/core/api/chat'; import MyIcon from '@/components/Icon'; import Avatar from '@/components/Avatar'; @@ -61,7 +61,7 @@ const InputDataModal = dynamic(() => import('@/pages/kb/detail/components/InputD import styles from './index.module.scss'; import Script from 'next/script'; -import { postQuestionGuide } from '@/api/core/ai/agent/api'; +import { postQuestionGuide } from '@/web/core/api/ai'; import { splitGuideModule } from './utils'; import { DatasetSpecialIdEnum } from '@fastgpt/core/dataset/constant'; @@ -518,13 +518,13 @@ const ChatBox = ( } }; window.addEventListener('message', windowMessage); - event.on('guideClick', ({ text }: { text: string }) => { + eventBus.on('guideClick', ({ text }: { text: string }) => { if (!text) return; handleSubmit((data) => sendPrompt(data, text))(); }); return () => { - event.off('guideClick'); + eventBus.off('guideClick'); window.removeEventListener('message', windowMessage); }; }, [handleSubmit, sendPrompt]); diff --git a/projects/app/src/components/Language/index.tsx b/projects/app/src/components/Language/index.tsx index 7ef15b987..0fbbd6335 100644 --- a/projects/app/src/components/Language/index.tsx +++ b/projects/app/src/components/Language/index.tsx @@ -1,6 +1,6 @@ import React, { useState } from 'react'; import { Menu, MenuButton, MenuItem, MenuList, MenuButtonProps } from '@chakra-ui/react'; -import { getLangStore, LangEnum, setLangStore, langMap } from '@/utils/web/i18n'; +import { getLangStore, LangEnum, setLangStore, langMap } from '@/web/common/utils/i18n'; import MyIcon from '@/components/Icon'; import { useTranslation } from 'react-i18next'; import { useRouter } from 'next/router'; diff --git a/projects/app/src/components/Layout/auth.tsx b/projects/app/src/components/Layout/auth.tsx index e5d291598..f1cd8a299 100644 --- a/projects/app/src/components/Layout/auth.tsx +++ b/projects/app/src/components/Layout/auth.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { useRouter } from 'next/router'; import { useToast } from '@chakra-ui/react'; -import { useUserStore } from '@/store/user'; +import { useUserStore } from '@/web/support/store/user'; import { useQuery } from '@tanstack/react-query'; const unAuthPage: { [key: string]: boolean } = { diff --git a/projects/app/src/components/Layout/index.tsx b/projects/app/src/components/Layout/index.tsx index 640076ec5..8018b79d2 100644 --- a/projects/app/src/components/Layout/index.tsx +++ b/projects/app/src/components/Layout/index.tsx @@ -1,15 +1,15 @@ import React, { useEffect, useMemo } from 'react'; import { Box, useColorMode, Flex } from '@chakra-ui/react'; import { useRouter } from 'next/router'; -import { useLoading } from '@/hooks/useLoading'; -import { useGlobalStore } from '@/store/global'; +import { useLoading } from '@/web/common/hooks/useLoading'; +import { useGlobalStore } from '@/web/common/store/global'; import { throttle } from 'lodash'; import Auth from './auth'; import Navbar from './navbar'; import NavbarPhone from './navbarPhone'; import { useQuery } from '@tanstack/react-query'; -import { useUserStore } from '@/store/user'; -import { getUnreadCount } from '@/api/user'; +import { useUserStore } from '@/web/support/store/user'; +import { getUnreadCount } from '@/web/support/api/user'; const pcUnShowLayoutRoute: Record = { '/': true, diff --git a/projects/app/src/components/Layout/navbar.tsx b/projects/app/src/components/Layout/navbar.tsx index bb0878522..89be146b6 100644 --- a/projects/app/src/components/Layout/navbar.tsx +++ b/projects/app/src/components/Layout/navbar.tsx @@ -1,16 +1,16 @@ import React, { useMemo } from 'react'; import { Box, Flex, Link } from '@chakra-ui/react'; import { useRouter } from 'next/router'; -import { useUserStore } from '@/store/user'; -import { useChatStore } from '@/store/chat'; +import { useUserStore } from '@/web/support/store/user'; +import { useChatStore } from '@/web/core/store/chat'; import { HUMAN_ICON } from '@/constants/chat'; -import { feConfigs } from '@/store/static'; +import { feConfigs } from '@/web/common/store/static'; import NextLink from 'next/link'; import Badge from '../Badge'; import Avatar from '../Avatar'; import MyIcon from '../Icon'; import { useTranslation } from 'next-i18next'; -import { useGlobalStore } from '@/store/global'; +import { useGlobalStore } from '@/web/common/store/global'; import MyTooltip from '../MyTooltip'; export enum NavbarTypeEnum { diff --git a/projects/app/src/components/Layout/navbarPhone.tsx b/projects/app/src/components/Layout/navbarPhone.tsx index 5bba9684b..1ed769b8e 100644 --- a/projects/app/src/components/Layout/navbarPhone.tsx +++ b/projects/app/src/components/Layout/navbarPhone.tsx @@ -1,7 +1,7 @@ import React, { useMemo } from 'react'; import { useRouter } from 'next/router'; import { Flex, Box } from '@chakra-ui/react'; -import { useChatStore } from '@/store/chat'; +import { useChatStore } from '@/web/core/store/chat'; import { useTranslation } from 'react-i18next'; import Badge from '../Badge'; import MyIcon from '../Icon'; diff --git a/projects/app/src/components/Markdown/CodeLight.tsx b/projects/app/src/components/Markdown/CodeLight.tsx index d8ee83fdd..78b0f88d6 100644 --- a/projects/app/src/components/Markdown/CodeLight.tsx +++ b/projects/app/src/components/Markdown/CodeLight.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter'; import { Box, Flex, useColorModeValue } from '@chakra-ui/react'; import Icon from '@/components/Icon'; -import { useCopyData } from '@/hooks/useCopyData'; +import { useCopyData } from '@/web/common/hooks/useCopyData'; const codeLight: { [key: string]: React.CSSProperties } = { 'code[class*=language-]': { diff --git a/projects/app/src/components/Markdown/chat/Guide.tsx b/projects/app/src/components/Markdown/chat/Guide.tsx index 938de7b70..c89fb1893 100644 --- a/projects/app/src/components/Markdown/chat/Guide.tsx +++ b/projects/app/src/components/Markdown/chat/Guide.tsx @@ -5,7 +5,7 @@ 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 { eventBus } from '@/web/common/utils/eventbus'; import 'katex/dist/katex.min.css'; import styles from '../index.module.scss'; @@ -27,7 +27,7 @@ function MyLink(e: any) { textDecoration={'underline'} cursor={'pointer'} onClick={() => { - event.emit('guideClick', { text }); + eventBus.emit('guideClick', { text }); }} > {text} diff --git a/projects/app/src/components/Markdown/chat/Quote.tsx b/projects/app/src/components/Markdown/chat/Quote.tsx index 3a838c378..78db21ff8 100644 --- a/projects/app/src/components/Markdown/chat/Quote.tsx +++ b/projects/app/src/components/Markdown/chat/Quote.tsx @@ -1,7 +1,7 @@ import React, { useMemo } from 'react'; import { Box, useTheme } from '@chakra-ui/react'; -import { getFileAndOpen } from '@/utils/web/file'; -import { useToast } from '@/hooks/useToast'; +import { getFileAndOpen } from '@/web/common/utils/file'; +import { useToast } from '@/web/common/hooks/useToast'; import { getErrText } from '@/utils/tools'; type QuoteItemType = { diff --git a/projects/app/src/components/MyTooltip/index.tsx b/projects/app/src/components/MyTooltip/index.tsx index c05f79768..9bc2fccb6 100644 --- a/projects/app/src/components/MyTooltip/index.tsx +++ b/projects/app/src/components/MyTooltip/index.tsx @@ -1,6 +1,6 @@ import React from 'react'; import { Tooltip, TooltipProps } from '@chakra-ui/react'; -import { useGlobalStore } from '@/store/global'; +import { useGlobalStore } from '@/web/common/store/global'; interface Props extends TooltipProps { forceShow?: boolean; diff --git a/projects/app/src/components/core/dataset/SelectModal.tsx b/projects/app/src/components/core/dataset/SelectModal.tsx index 22ccd829d..2d4afb81b 100644 --- a/projects/app/src/components/core/dataset/SelectModal.tsx +++ b/projects/app/src/components/core/dataset/SelectModal.tsx @@ -1,9 +1,9 @@ -import { getDatasets, getDatasetPaths } from '@/api/core/dataset'; +import { getDatasets, getDatasetPaths } from '@/web/core/api/dataset'; import MyModal from '@/components/MyModal'; import { useQuery } from '@tanstack/react-query'; import React, { Dispatch, useMemo, useState } from 'react'; import { useTranslation } from 'react-i18next'; -import { useGlobalStore } from '@/store/global'; +import { useGlobalStore } from '@/web/common/store/global'; import { Box, Flex, ModalHeader } from '@chakra-ui/react'; import MyIcon from '@/components/Icon'; diff --git a/projects/app/src/components/support/apikey/Table.tsx b/projects/app/src/components/support/apikey/Table.tsx index f28a1b6bd..253882a93 100644 --- a/projects/app/src/components/support/apikey/Table.tsx +++ b/projects/app/src/components/support/apikey/Table.tsx @@ -25,19 +25,19 @@ import { createAOpenApiKey, delOpenApiById, putOpenApiKey -} from '@/api/support/openapi'; -import type { EditApiKeyProps } from '@/api/support/openapi/index.d'; +} from '@/web/support/api/openapi'; +import type { EditApiKeyProps } from '@/global/support/api/openapiReq'; import { useQuery, useMutation } from '@tanstack/react-query'; -import { useLoading } from '@/hooks/useLoading'; +import { useLoading } from '@/web/common/hooks/useLoading'; import dayjs from 'dayjs'; import { AddIcon, QuestionOutlineIcon } from '@chakra-ui/icons'; -import { useCopyData } from '@/hooks/useCopyData'; -import { feConfigs } from '@/store/static'; +import { useCopyData } from '@/web/common/hooks/useCopyData'; +import { feConfigs } from '@/web/common/store/static'; import { useTranslation } from 'react-i18next'; import MyIcon from '@/components/Icon'; import MyModal from '@/components/MyModal'; import { useForm } from 'react-hook-form'; -import { useRequest } from '@/hooks/useRequest'; +import { useRequest } from '@/web/common/hooks/useRequest'; import MyTooltip from '@/components/MyTooltip'; type EditProps = EditApiKeyProps & { _id?: string }; diff --git a/projects/app/src/constants/app.ts b/projects/app/src/constants/app.ts index b3b5aad26..e1763462b 100644 --- a/projects/app/src/constants/app.ts +++ b/projects/app/src/constants/app.ts @@ -7,6 +7,9 @@ export enum SystemInputEnum { 'userChatInput' = 'userChatInput', 'questionGuide' = 'questionGuide' } +export enum SystemOutputEnum { + finish = 'finish' +} export enum VariableInputEnum { input = 'input', diff --git a/projects/app/src/constants/flow/ModuleTemplate.ts b/projects/app/src/constants/flow/ModuleTemplate.ts index 1b61398f9..53443b568 100644 --- a/projects/app/src/constants/flow/ModuleTemplate.ts +++ b/projects/app/src/constants/flow/ModuleTemplate.ts @@ -9,13 +9,14 @@ import { } from './index'; import type { AppItemType } from '@/types/app'; import type { FlowModuleTemplateType } from '@/types/core/app/flow'; -import { chatModelList } from '@/store/static'; +import { chatModelList } from '@/web/common/store/static'; import { Input_Template_History, Input_Template_TFSwitch, Input_Template_UserChatInput } from './inputTemplate'; import { ContextExtractEnum, HttpPropsEnum } from './flowField'; +import { Output_Template_Finish } from './outputTemplate'; export const ChatModelSystemTip = '模型固定的引导词,通过调整该内容,可以引导模型聊天方向。该内容会被固定在上下文的开头。可使用变量,例如 {{language}}'; @@ -130,12 +131,15 @@ export const ChatModule: FlowModuleTemplateType = { intro: 'AI 大模型对话', showStatus: true, inputs: [ + Input_Template_TFSwitch, { key: 'model', - type: FlowInputItemTypeEnum.custom, + type: FlowInputItemTypeEnum.selectChatModel, label: '对话模型', value: chatModelList[0]?.model, - list: chatModelList.map((item) => ({ label: item.name, value: item.model })) + list: chatModelList.map((item) => ({ label: item.name, value: item.model })), + required: true, + valueCheck: (val) => !!val }, { key: 'temperature', @@ -152,7 +156,7 @@ export const ChatModule: FlowModuleTemplateType = { }, { key: 'maxToken', - type: FlowInputItemTypeEnum.custom, + type: FlowInputItemTypeEnum.maxToken, label: '回复上限', value: chatModelList[0] ? chatModelList[0].contextMaxToken / 2 : 2000, min: 100, @@ -190,10 +194,9 @@ export const ChatModule: FlowModuleTemplateType = { valueType: FlowValueTypeEnum.string, value: '' }, - Input_Template_TFSwitch, { key: 'quoteQA', - type: FlowInputItemTypeEnum.custom, + type: FlowInputItemTypeEnum.quoteList, label: '引用内容', description: "对象数组格式,结构:\n [{q:'问题',a:'回答'}]", valueType: FlowValueTypeEnum.kbQuote, @@ -219,14 +222,7 @@ export const ChatModule: FlowModuleTemplateType = { type: FlowOutputItemTypeEnum.source, targets: [] }, - { - key: 'finish', - label: '回复结束', - description: 'AI 回复完成后触发', - valueType: FlowValueTypeEnum.boolean, - type: FlowOutputItemTypeEnum.source, - targets: [] - } + Output_Template_Finish ] }; @@ -237,12 +233,15 @@ export const KBSearchModule: FlowModuleTemplateType = { intro: '去知识库中搜索对应的答案。可作为 AI 对话引用参考。', showStatus: true, inputs: [ + Input_Template_TFSwitch, { key: 'kbList', - type: FlowInputItemTypeEnum.custom, + type: FlowInputItemTypeEnum.selectDataset, label: '关联的知识库', value: [], - list: [] + list: [], + required: true, + valueCheck: (val) => !!val.length }, { key: 'similarity', @@ -271,7 +270,6 @@ export const KBSearchModule: FlowModuleTemplateType = { { label: '20', value: 20 } ] }, - Input_Template_TFSwitch, Input_Template_UserChatInput ], outputs: [ @@ -297,7 +295,8 @@ export const KBSearchModule: FlowModuleTemplateType = { type: FlowOutputItemTypeEnum.source, valueType: FlowValueTypeEnum.kbQuote, targets: [] - } + }, + Output_Template_Finish ] }; @@ -312,23 +311,14 @@ export const AnswerModule: FlowModuleTemplateType = { { key: SpecialInputKeyEnum.answerText, type: FlowInputItemTypeEnum.textarea, - valueType: FlowValueTypeEnum.string, + valueType: FlowValueTypeEnum.any, value: '', label: '回复的内容', description: - '可以使用 \\n 来实现连续换行。\n\n可以通过外部模块输入实现回复,外部模块输入时会覆盖当前填写的内容' + '可以使用 \\n 来实现连续换行。\n\n可以通过外部模块输入实现回复,外部模块输入时会覆盖当前填写的内容。\n\n如传入非字符串类型数据将会自动转成字符串' } ], - outputs: [ - { - key: 'finish', - label: '回复结束', - description: '回复完成后触发', - valueType: FlowValueTypeEnum.boolean, - type: FlowOutputItemTypeEnum.source, - targets: [] - } - ] + outputs: [Output_Template_Finish] }; export const ClassifyQuestionModule: FlowModuleTemplateType = { flowType: FlowModuleTypeEnum.classifyQuestion, @@ -461,6 +451,7 @@ export const HttpModule: FlowModuleTemplateType = { description: '可以发出一个 HTTP POST 请求,实现更为复杂的操作(联网搜索、数据库查询等)', showStatus: true, inputs: [ + Input_Template_TFSwitch, { key: HttpPropsEnum.url, value: '', @@ -468,19 +459,11 @@ export const HttpModule: FlowModuleTemplateType = { label: '请求地址', description: '请求目标地址', placeholder: 'https://api.fastgpt.run/getInventory', - required: true - }, - Input_Template_TFSwitch - ], - outputs: [ - { - key: HttpPropsEnum.finish, - label: '请求结束', - valueType: FlowValueTypeEnum.boolean, - type: FlowOutputItemTypeEnum.source, - targets: [] + required: true, + valueCheck: (val) => !!val } - ] + ], + outputs: [Output_Template_Finish] }; export const EmptyModule: FlowModuleTemplateType = { flowType: FlowModuleTypeEnum.empty, @@ -527,13 +510,7 @@ export const AppModule: FlowModuleTemplateType = { type: FlowOutputItemTypeEnum.source, targets: [] }, - { - key: 'finish', - label: '请求结束', - valueType: FlowValueTypeEnum.boolean, - type: FlowOutputItemTypeEnum.source, - targets: [] - } + Output_Template_Finish ] }; diff --git a/projects/app/src/constants/flow/index.ts b/projects/app/src/constants/flow/index.ts index 31941b80c..a167affe2 100644 --- a/projects/app/src/constants/flow/index.ts +++ b/projects/app/src/constants/flow/index.ts @@ -8,17 +8,21 @@ export enum FlowInputItemTypeEnum { select = 'select', slider = 'slider', custom = 'custom', - target = 'target', - none = 'none', + target = 'target', // data input switch = 'switch', - hidden = 'hidden', - selectApp = 'selectApp' + selectApp = 'selectApp', + // chat special input + quoteList = 'quoteList', + maxToken = 'maxToken', + selectChatModel = 'selectChatModel', + // dataset special input + selectDataset = 'selectDataset', + hidden = 'hidden' } export enum FlowOutputItemTypeEnum { answer = 'answer', source = 'source', - none = 'none', hidden = 'hidden' } diff --git a/projects/app/src/constants/flow/outputTemplate.ts b/projects/app/src/constants/flow/outputTemplate.ts new file mode 100644 index 000000000..226345338 --- /dev/null +++ b/projects/app/src/constants/flow/outputTemplate.ts @@ -0,0 +1,12 @@ +import type { FlowOutputItemType } from '@/types/core/app/flow'; +import { SystemOutputEnum } from '../app'; +import { FlowOutputItemTypeEnum, FlowValueTypeEnum } from './index'; + +export const Output_Template_Finish: FlowOutputItemType = { + key: SystemOutputEnum.finish, + label: '模块调用结束', + description: '模块调用结束时触发', + valueType: FlowValueTypeEnum.boolean, + type: FlowOutputItemTypeEnum.source, + targets: [] +}; diff --git a/projects/app/src/api/common/bill/index.d.ts b/projects/app/src/global/common/api/billReq.d.ts similarity index 100% rename from projects/app/src/api/common/bill/index.d.ts rename to projects/app/src/global/common/api/billReq.d.ts diff --git a/projects/app/src/types/plugin.d.ts b/projects/app/src/global/common/api/pluginRes.d.ts similarity index 100% rename from projects/app/src/types/plugin.d.ts rename to projects/app/src/global/common/api/pluginRes.d.ts diff --git a/projects/app/src/global/common/api/systemRes.d.ts b/projects/app/src/global/common/api/systemRes.d.ts new file mode 100644 index 000000000..a22df94a2 --- /dev/null +++ b/projects/app/src/global/common/api/systemRes.d.ts @@ -0,0 +1,14 @@ +import { + type QAModelItemType, + type ChatModelItemType, + type VectorModelItemType, + FunctionModelItemType +} from '@/types/model'; + +export type InitDateResponse = { + chatModels: ChatModelItemType[]; + qaModel: QAModelItemType; + vectorModels: VectorModelItemType[]; + feConfigs: FeConfigsType; + systemVersion: string; +}; diff --git a/projects/app/src/api/core/ai/agent/type.d.ts b/projects/app/src/global/core/api/aiReq.d.ts similarity index 76% rename from projects/app/src/api/core/ai/agent/type.d.ts rename to projects/app/src/global/core/api/aiReq.d.ts index 99189b71c..b4343aeff 100644 --- a/projects/app/src/api/core/ai/agent/type.d.ts +++ b/projects/app/src/global/core/api/aiReq.d.ts @@ -1,6 +1,6 @@ import { ChatCompletionRequestMessage } from '@fastgpt/core/ai/type'; -export type CreateQuestionGuideProps = { +export type CreateQuestionGuideParams = { messages: ChatCompletionRequestMessage[]; shareId?: string; }; diff --git a/projects/app/src/api/request/app.d.ts b/projects/app/src/global/core/api/appReq.d.ts similarity index 100% rename from projects/app/src/api/request/app.d.ts rename to projects/app/src/global/core/api/appReq.d.ts diff --git a/projects/app/src/api/response/app.d.ts b/projects/app/src/global/core/api/appRes.d.ts similarity index 100% rename from projects/app/src/api/response/app.d.ts rename to projects/app/src/global/core/api/appRes.d.ts diff --git a/projects/app/src/api/request/chat.d.ts b/projects/app/src/global/core/api/chatReq.d.ts similarity index 100% rename from projects/app/src/api/request/chat.d.ts rename to projects/app/src/global/core/api/chatReq.d.ts diff --git a/projects/app/src/api/response/chat.d.ts b/projects/app/src/global/core/api/chatRes.d.ts similarity index 76% rename from projects/app/src/api/response/chat.d.ts rename to projects/app/src/global/core/api/chatRes.d.ts index 5c07ad124..cbcd35bc3 100644 --- a/projects/app/src/api/response/chat.d.ts +++ b/projects/app/src/global/core/api/chatRes.d.ts @@ -2,7 +2,7 @@ import type { AppSchema } from '@/types/mongoSchema'; import type { ChatItemType } from '@/types/chat'; import { AppModuleItemType, VariableItemType } from '@/types/app'; -export interface InitChatResponse { +export type InitChatResponse = { chatId: string; appId: string; app: { @@ -16,9 +16,4 @@ export interface InitChatResponse { title: string; variables: Record; history: ChatItemType[]; -} - -export interface InitShareChatResponse { - userAvatar: string; - app: InitChatResponse['app']; -} +}; diff --git a/projects/app/src/global/core/api/datasetReq.d.ts b/projects/app/src/global/core/api/datasetReq.d.ts new file mode 100644 index 000000000..f28f504b2 --- /dev/null +++ b/projects/app/src/global/core/api/datasetReq.d.ts @@ -0,0 +1,59 @@ +import { KbTypeEnum } from '@/constants/dataset'; +import type { RequestPaging } from '@/types'; +import { TrainingModeEnum } from '@/constants/plugin'; +import type { SearchTestItemType } from '@/types/core/dataset'; +import { DatasetDataItemType } from '@/types/core/dataset/data'; + +/* ===== dataset ===== */ +export type DatasetUpdateParams = { + id: string; + parentId?: string; + tags?: string; + name?: string; + avatar?: string; +}; +export type CreateDatasetParams = { + parentId?: string; + name: string; + tags: string[]; + avatar: string; + vectorModel?: string; + type: `${KbTypeEnum}`; +}; + +export type SearchTestProps = { + kbId: string; + text: string; +}; + +/* ======= file =========== */ +export type GetFileListProps = RequestPaging & { + kbId: string; + searchText: string; +}; + +export type UpdateFileProps = { id: string; name?: string; datasetUsed?: boolean }; + +export type MarkFileUsedProps = { fileIds: string[] }; + +/* ==== data ===== */ +export type PushDataProps = { + kbId: string; + data: DatasetDataItemType[]; + mode: `${TrainingModeEnum}`; + prompt?: string; + billId?: string; +}; + +export type UpdateDatasetDataPrams = { + dataId: string; + kbId: string; + a?: string; + q?: string; +}; + +export type GetDatasetDataListProps = RequestPaging & { + kbId: string; + searchText: string; + fileId: string; +}; diff --git a/projects/app/src/global/core/api/datasetRes.d.ts b/projects/app/src/global/core/api/datasetRes.d.ts new file mode 100644 index 000000000..8ad02486c --- /dev/null +++ b/projects/app/src/global/core/api/datasetRes.d.ts @@ -0,0 +1,15 @@ +import { KbTypeEnum } from '@/constants/dataset'; +import type { RequestPaging } from '@/types'; +import { TrainingModeEnum } from '@/constants/plugin'; +import type { SearchTestItemType } from '@/types/core/dataset'; +import { DatasetDataItemType } from '@/types/core/dataset/data'; + +/* ===== dataset ===== */ +export type SearchTestResponseType = SearchTestItemType['results']; + +/* ======= file =========== */ + +/* ==== data ===== */ +export type PushDataResponse = { + insertLen: number; +}; diff --git a/projects/app/src/prompts/core/AIChat.ts b/projects/app/src/global/core/prompt/AIChat.ts similarity index 100% rename from projects/app/src/prompts/core/AIChat.ts rename to projects/app/src/global/core/prompt/AIChat.ts diff --git a/projects/app/src/prompts/core/agent.ts b/projects/app/src/global/core/prompt/agent.ts similarity index 100% rename from projects/app/src/prompts/core/agent.ts rename to projects/app/src/global/core/prompt/agent.ts diff --git a/projects/app/src/api/support/openapi/index.d.ts b/projects/app/src/global/support/api/openapiReq.d.ts similarity index 100% rename from projects/app/src/api/support/openapi/index.d.ts rename to projects/app/src/global/support/api/openapiReq.d.ts diff --git a/projects/app/src/global/support/api/outLinkRes.d.ts b/projects/app/src/global/support/api/outLinkRes.d.ts new file mode 100644 index 000000000..9dace2ccd --- /dev/null +++ b/projects/app/src/global/support/api/outLinkRes.d.ts @@ -0,0 +1,6 @@ +import type { InitChatResponse } from '@/global/core/api/chatRes.d'; + +export type InitShareChatResponse = { + userAvatar: string; + app: InitChatResponse['app']; +}; diff --git a/projects/app/src/api/response/user.d.ts b/projects/app/src/global/support/api/userRes.d.ts similarity index 100% rename from projects/app/src/api/response/user.d.ts rename to projects/app/src/global/support/api/userRes.d.ts diff --git a/projects/app/src/pages/_app.tsx b/projects/app/src/pages/_app.tsx index c5890092a..ae05c83d5 100644 --- a/projects/app/src/pages/_app.tsx +++ b/projects/app/src/pages/_app.tsx @@ -4,18 +4,18 @@ import Script from 'next/script'; import Head from 'next/head'; import { ChakraProvider, ColorModeScript } from '@chakra-ui/react'; import Layout from '@/components/Layout'; -import { theme } from '@/constants/theme'; +import { theme } from '@/web/styles/theme'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import NProgress from 'nprogress'; //nprogress module import Router from 'next/router'; -import { clientInitData, feConfigs } from '@/store/static'; +import { clientInitData, feConfigs } from '@/web/common/store/static'; import { appWithTranslation, useTranslation } from 'next-i18next'; -import { getLangStore, setLangStore } from '@/utils/web/i18n'; +import { getLangStore, setLangStore } from '@/web/common/utils/i18n'; import { useRouter } from 'next/router'; -import { useGlobalStore } from '@/store/global'; +import { useGlobalStore } from '@/web/common/store/global'; import 'nprogress/nprogress.css'; -import '@/styles/reset.scss'; +import '@/web/styles/reset.scss'; import { FeConfigsType } from '@/types'; //Binding events. diff --git a/projects/app/src/pages/_error.tsx b/projects/app/src/pages/_error.tsx index ec8c58b1b..b2f7cbfad 100644 --- a/projects/app/src/pages/_error.tsx +++ b/projects/app/src/pages/_error.tsx @@ -1,7 +1,7 @@ import { useEffect } from 'react'; import { useRouter } from 'next/router'; -import { serviceSideProps } from '@/utils/web/i18n'; -import { useGlobalStore } from '@/store/global'; +import { serviceSideProps } from '@/web/common/utils/i18n'; +import { useGlobalStore } from '@/web/common/store/global'; import { addLog } from '@/service/utils/tools'; import { getErrText } from '@/utils/tools'; diff --git a/projects/app/src/pages/account/components/BillTable.tsx b/projects/app/src/pages/account/components/BillTable.tsx index 3ebe6ad44..e735efd20 100644 --- a/projects/app/src/pages/account/components/BillTable.tsx +++ b/projects/app/src/pages/account/components/BillTable.tsx @@ -12,16 +12,16 @@ import { Button } from '@chakra-ui/react'; import { BillSourceMap } from '@/constants/user'; -import { getUserBills } from '@/api/user'; +import { getUserBills } from '@/web/common/api/bill'; import type { UserBillType } from '@/types/user'; -import { usePagination } from '@/hooks/usePagination'; -import { useLoading } from '@/hooks/useLoading'; +import { usePagination } from '@/web/common/hooks/usePagination'; +import { useLoading } from '@/web/common/hooks/useLoading'; import dayjs from 'dayjs'; import MyIcon from '@/components/Icon'; import DateRangePicker, { type DateRangeType } from '@/components/DateRangePicker'; import { addDays } from 'date-fns'; import dynamic from 'next/dynamic'; -import { useGlobalStore } from '@/store/global'; +import { useGlobalStore } from '@/web/common/store/global'; import { useTranslation } from 'next-i18next'; const BillDetail = dynamic(() => import('./BillDetail')); diff --git a/projects/app/src/pages/account/components/Info.tsx b/projects/app/src/pages/account/components/Info.tsx index 2db4506de..645799832 100644 --- a/projects/app/src/pages/account/components/Info.tsx +++ b/projects/app/src/pages/account/components/Info.tsx @@ -14,21 +14,21 @@ import { } from '@chakra-ui/react'; import { useForm } from 'react-hook-form'; import { UserUpdateParams } from '@/types/user'; -import { useToast } from '@/hooks/useToast'; -import { useUserStore } from '@/store/user'; +import { useToast } from '@/web/common/hooks/useToast'; +import { useUserStore } from '@/web/support/store/user'; import { UserType } from '@/types/user'; import { useQuery } from '@tanstack/react-query'; import dynamic from 'next/dynamic'; -import { useSelectFile } from '@/hooks/useSelectFile'; -import { compressImg } from '@/utils/web/file'; -import { feConfigs, systemVersion } from '@/store/static'; +import { useSelectFile } from '@/web/common/hooks/useSelectFile'; +import { compressImg } from '@/web/common/utils/file'; +import { feConfigs, systemVersion } from '@/web/common/store/static'; import { useTranslation } from 'next-i18next'; import { timezoneList } from '@/utils/user'; import Loading from '@/components/Loading'; import Avatar from '@/components/Avatar'; import MyIcon from '@/components/Icon'; import MyTooltip from '@/components/MyTooltip'; -import { getLangStore, LangEnum, langMap, setLangStore } from '@/utils/web/i18n'; +import { getLangStore, LangEnum, langMap, setLangStore } from '@/web/common/utils/i18n'; import { useRouter } from 'next/router'; import MyMenu from '@/components/MyMenu'; import MySelect from '@/components/Select'; diff --git a/projects/app/src/pages/account/components/InformTable.tsx b/projects/app/src/pages/account/components/InformTable.tsx index 93eb8cd0a..dbc694dfb 100644 --- a/projects/app/src/pages/account/components/InformTable.tsx +++ b/projects/app/src/pages/account/components/InformTable.tsx @@ -1,11 +1,11 @@ import React from 'react'; import { Box, Flex, useTheme } from '@chakra-ui/react'; -import { getInforms, readInform } from '@/api/user'; -import { usePagination } from '@/hooks/usePagination'; -import { useLoading } from '@/hooks/useLoading'; +import { getInforms, readInform } from '@/web/support/api/user'; +import { usePagination } from '@/web/common/hooks/usePagination'; +import { useLoading } from '@/web/common/hooks/useLoading'; import type { informSchema } from '@/types/mongoSchema'; import { formatTimeToChatTime } from '@/utils/tools'; -import { useGlobalStore } from '@/store/global'; +import { useGlobalStore } from '@/web/common/store/global'; import MyIcon from '@/components/Icon'; const BillTable = () => { diff --git a/projects/app/src/pages/account/components/OpenAIAccountModal.tsx b/projects/app/src/pages/account/components/OpenAIAccountModal.tsx index ea2fbef51..7b2ae25dd 100644 --- a/projects/app/src/pages/account/components/OpenAIAccountModal.tsx +++ b/projects/app/src/pages/account/components/OpenAIAccountModal.tsx @@ -3,7 +3,7 @@ import { ModalBody, Box, Flex, Input, ModalFooter, Button } from '@chakra-ui/rea import MyModal from '@/components/MyModal'; import { useTranslation } from 'react-i18next'; import { useForm } from 'react-hook-form'; -import { useRequest } from '@/hooks/useRequest'; +import { useRequest } from '@/web/common/hooks/useRequest'; import { UserType } from '@/types/user'; const OpenAIAccountModal = ({ @@ -32,7 +32,8 @@ const OpenAIAccountModal = ({ - 如果你填写了该内容,在线上平台使用 OpenAI Chat 模型不会计费(不包含知识库训练、索引生成) + 可以填写 OpenAI 的 key,也可以是 OneAPI 的可以。如果你填写了该内容,在线上平台使用 OpenAI + Chat 模型不会计费(不包含知识库训练、索引生成)。请注意你的 Key 是否有访问对应模型的权限。 API Key: diff --git a/projects/app/src/pages/account/components/PayModal.tsx b/projects/app/src/pages/account/components/PayModal.tsx index d5e3d47b7..1f8ba9eee 100644 --- a/projects/app/src/pages/account/components/PayModal.tsx +++ b/projects/app/src/pages/account/components/PayModal.tsx @@ -1,7 +1,7 @@ import React, { useState, useCallback } from 'react'; import { ModalFooter, ModalBody, Button, Input, Box, Grid } from '@chakra-ui/react'; -import { getPayCode, checkPayResult } from '@/api/user'; -import { useToast } from '@/hooks/useToast'; +import { getPayCode, checkPayResult } from '@/web/common/api/bill'; +import { useToast } from '@/web/common/hooks/useToast'; import { useQuery } from '@tanstack/react-query'; import { useRouter } from 'next/router'; import { getErrText } from '@/utils/tools'; @@ -9,7 +9,7 @@ import { useTranslation } from 'react-i18next'; import { formatPrice } from '@fastgpt/common/bill/index'; import Markdown from '@/components/Markdown'; import MyModal from '@/components/MyModal'; -import { vectorModelList, chatModelList, qaModel } from '@/store/static'; +import { vectorModelList, chatModelList, qaModel } from '@/web/common/store/static'; const PayModal = ({ onClose }: { onClose: () => void }) => { const router = useRouter(); diff --git a/projects/app/src/pages/account/components/PayRecordTable.tsx b/projects/app/src/pages/account/components/PayRecordTable.tsx index a30d89be2..00a8ab0ce 100644 --- a/projects/app/src/pages/account/components/PayRecordTable.tsx +++ b/projects/app/src/pages/account/components/PayRecordTable.tsx @@ -11,13 +11,13 @@ import { Flex, Box } from '@chakra-ui/react'; -import { getPayOrders, checkPayResult } from '@/api/user'; +import { getPayOrders, checkPayResult } from '@/web/common/api/bill'; import { PaySchema } from '@/types/mongoSchema'; import dayjs from 'dayjs'; import { useQuery } from '@tanstack/react-query'; import { formatPrice } from '@fastgpt/common/bill/index'; -import { useToast } from '@/hooks/useToast'; -import { useLoading } from '@/hooks/useLoading'; +import { useToast } from '@/web/common/hooks/useToast'; +import { useLoading } from '@/web/common/hooks/useLoading'; import MyIcon from '@/components/Icon'; const PayRecordTable = () => { diff --git a/projects/app/src/pages/account/components/Promotion.tsx b/projects/app/src/pages/account/components/Promotion.tsx index 50802e2c3..dc274542d 100644 --- a/projects/app/src/pages/account/components/Promotion.tsx +++ b/projects/app/src/pages/account/components/Promotion.tsx @@ -16,15 +16,15 @@ import { } from '@chakra-ui/react'; import { useTranslation } from 'next-i18next'; import { useQuery } from '@tanstack/react-query'; -import { getPromotionInitData, getPromotionRecords } from '@/api/user'; -import { useUserStore } from '@/store/user'; -import { useLoading } from '@/hooks/useLoading'; +import { getPromotionInitData, getPromotionRecords } from '@/web/support/api/user'; +import { useUserStore } from '@/web/support/store/user'; +import { useLoading } from '@/web/common/hooks/useLoading'; import MyTooltip from '@/components/MyTooltip'; import { QuestionOutlineIcon } from '@chakra-ui/icons'; -import { useCopyData } from '@/hooks/useCopyData'; -import { usePagination } from '@/hooks/usePagination'; -import { PromotionRecordType } from '@/api/response/user'; +import { useCopyData } from '@/web/common/hooks/useCopyData'; +import { usePagination } from '@/web/common/hooks/usePagination'; +import type { PromotionRecordType } from '@/global/support/api/userRes.d'; import MyIcon from '@/components/Icon'; import dayjs from 'dayjs'; diff --git a/projects/app/src/pages/account/components/UpdatePswModal.tsx b/projects/app/src/pages/account/components/UpdatePswModal.tsx index ed5e0b912..534ba4b1a 100644 --- a/projects/app/src/pages/account/components/UpdatePswModal.tsx +++ b/projects/app/src/pages/account/components/UpdatePswModal.tsx @@ -3,8 +3,8 @@ import { ModalBody, Box, Flex, Input, ModalFooter, Button } from '@chakra-ui/rea import MyModal from '@/components/MyModal'; import { useTranslation } from 'react-i18next'; import { useForm } from 'react-hook-form'; -import { useRequest } from '@/hooks/useRequest'; -import { updatePasswordByOld } from '@/api/user'; +import { useRequest } from '@/web/common/hooks/useRequest'; +import { updatePasswordByOld } from '@/web/support/api/user'; type FormType = { oldPsw: string; diff --git a/projects/app/src/pages/account/index.tsx b/projects/app/src/pages/account/index.tsx index 173844aff..94fe47ce8 100644 --- a/projects/app/src/pages/account/index.tsx +++ b/projects/app/src/pages/account/index.tsx @@ -1,17 +1,17 @@ import React, { useCallback, useRef } from 'react'; import { Box, Flex, useTheme } from '@chakra-ui/react'; -import { useGlobalStore } from '@/store/global'; +import { useGlobalStore } from '@/web/common/store/global'; import { useRouter } from 'next/router'; import dynamic from 'next/dynamic'; import { clearToken } from '@/utils/user'; -import { useUserStore } from '@/store/user'; -import { useConfirm } from '@/hooks/useConfirm'; +import { useUserStore } from '@/web/support/store/user'; +import { useConfirm } from '@/web/common/hooks/useConfirm'; import PageContainer from '@/components/PageContainer'; import SideTabs from '@/components/SideTabs'; import Tabs from '@/components/Tabs'; import UserInfo from './components/Info'; -import { serviceSideProps } from '@/utils/web/i18n'; -import { feConfigs } from '@/store/static'; +import { serviceSideProps } from '@/web/common/utils/i18n'; +import { feConfigs } from '@/web/common/store/static'; import { useTranslation } from 'react-i18next'; import Script from 'next/script'; diff --git a/projects/app/src/pages/api/app/getChatLogs.ts b/projects/app/src/pages/api/app/getChatLogs.ts index 80ef7cd19..9aec42870 100644 --- a/projects/app/src/pages/api/app/getChatLogs.ts +++ b/projects/app/src/pages/api/app/getChatLogs.ts @@ -6,7 +6,7 @@ import type { PagingData } from '@/types'; import { AppLogsListItemType } from '@/types/app'; import { Types } from 'mongoose'; import { addDays } from 'date-fns'; -import { GetAppChatLogsParams } from '@/api/request/app'; +import type { GetAppChatLogsParams } from '@/global/core/api/appReq.d'; export default async function handler(req: NextApiRequest, res: NextApiResponse) { try { diff --git a/projects/app/src/pages/api/chat/feedback/adminUpdate.ts b/projects/app/src/pages/api/chat/feedback/adminUpdate.ts index 116cf8506..d4836250f 100644 --- a/projects/app/src/pages/api/chat/feedback/adminUpdate.ts +++ b/projects/app/src/pages/api/chat/feedback/adminUpdate.ts @@ -1,7 +1,7 @@ import type { NextApiRequest, NextApiResponse } from 'next'; import { jsonRes } from '@/service/response'; import { connectToDatabase, ChatItem } from '@/service/mongo'; -import { AdminUpdateFeedbackParams } from '@/api/request/chat'; +import type { AdminUpdateFeedbackParams } from '@/global/core/api/chatReq.d'; import { authUser } from '@/service/utils/auth'; /* 初始化我的聊天框,需要身份验证 */ diff --git a/projects/app/src/pages/api/chat/init.ts b/projects/app/src/pages/api/chat/init.ts index 1c30987ed..1dcaf9157 100644 --- a/projects/app/src/pages/api/chat/init.ts +++ b/projects/app/src/pages/api/chat/init.ts @@ -1,7 +1,7 @@ import type { NextApiRequest, NextApiResponse } from 'next'; import { jsonRes } from '@/service/response'; import { Chat, ChatItem } from '@/service/mongo'; -import type { InitChatResponse } from '@/api/response/chat'; +import type { InitChatResponse } from '@/global/core/api/chatRes.d'; import { authUser } from '@/service/utils/auth'; import { ChatItemType } from '@/types/chat'; import { authApp } from '@/service/utils/auth'; diff --git a/projects/app/src/pages/api/common/bill/createTrainingBill.ts b/projects/app/src/pages/api/common/bill/createTrainingBill.ts index c80e2cbd0..01d6cb49d 100644 --- a/projects/app/src/pages/api/common/bill/createTrainingBill.ts +++ b/projects/app/src/pages/api/common/bill/createTrainingBill.ts @@ -3,7 +3,7 @@ import { jsonRes } from '@/service/response'; import { connectToDatabase, Bill } from '@/service/mongo'; import { authUser } from '@/service/utils/auth'; import { BillSourceEnum } from '@/constants/user'; -import { CreateTrainingBillType } from '@/api/common/bill/index.d'; +import { CreateTrainingBillType } from '@/global/common/api/billReq.d'; export default async function handler(req: NextApiRequest, res: NextApiResponse) { try { diff --git a/projects/app/src/pages/api/core/ai/agent/createQuestionGuide.ts b/projects/app/src/pages/api/core/ai/agent/createQuestionGuide.ts index 89e1f460e..f9fa2a993 100644 --- a/projects/app/src/pages/api/core/ai/agent/createQuestionGuide.ts +++ b/projects/app/src/pages/api/core/ai/agent/createQuestionGuide.ts @@ -2,7 +2,7 @@ import type { NextApiRequest, NextApiResponse } from 'next'; import { jsonRes } from '@/service/response'; import { connectToDatabase } from '@/service/mongo'; import { authUser } from '@/service/utils/auth'; -import { CreateQuestionGuideProps } from '@/api/core/ai/agent/type'; +import type { CreateQuestionGuideParams } from '@/global/core/api/aiReq.d'; import { pushQuestionGuideBill } from '@/service/common/bill/push'; import { defaultQGModel } from '@/pages/api/system/getInitData'; import { createQuestionGuide } from '@fastgpt/core/ai/functions/createQuestionGuide'; @@ -10,7 +10,7 @@ import { createQuestionGuide } from '@fastgpt/core/ai/functions/createQuestionGu export default async function handler(req: NextApiRequest, res: NextApiResponse) { try { await connectToDatabase(); - const { messages } = req.body as CreateQuestionGuideProps; + const { messages } = req.body as CreateQuestionGuideParams; const { user } = await authUser({ req, authOutLink: true, diff --git a/projects/app/src/pages/api/core/dataset/create.ts b/projects/app/src/pages/api/core/dataset/create.ts index 03206e58c..ef750bb33 100644 --- a/projects/app/src/pages/api/core/dataset/create.ts +++ b/projects/app/src/pages/api/core/dataset/create.ts @@ -2,7 +2,7 @@ import type { NextApiRequest, NextApiResponse } from 'next'; import { jsonRes } from '@/service/response'; import { connectToDatabase, KB } from '@/service/mongo'; import { authUser } from '@/service/utils/auth'; -import type { CreateDatasetParams } from '@/api/core/dataset/index.d'; +import type { CreateDatasetParams } from '@/global/core/api/datasetReq.d'; export default async function handler(req: NextApiRequest, res: NextApiResponse) { try { diff --git a/projects/app/src/pages/api/core/dataset/data/pushData.ts b/projects/app/src/pages/api/core/dataset/data/pushData.ts index bcd1707a9..4b46353cd 100644 --- a/projects/app/src/pages/api/core/dataset/data/pushData.ts +++ b/projects/app/src/pages/api/core/dataset/data/pushData.ts @@ -10,7 +10,8 @@ import { startQueue } from '@/service/utils/tools'; import { getVectorModel } from '@/service/utils/data'; import { DatasetDataItemType } from '@/types/core/dataset/data'; import { countPromptTokens } from '@/utils/common/tiktoken'; -import type { PushDataProps, PushDataResponse } from '@/api/core/dataset/data.d'; +import type { PushDataResponse } from '@/global/core/api/datasetRes.d'; +import type { PushDataProps } from '@/global/core/api/datasetReq.d'; import { authFileIdValid } from '@/service/dataset/auth'; const modeMap = { diff --git a/projects/app/src/pages/api/core/dataset/data/updateData.ts b/projects/app/src/pages/api/core/dataset/data/updateData.ts index d40ebbca2..5bd2de14f 100644 --- a/projects/app/src/pages/api/core/dataset/data/updateData.ts +++ b/projects/app/src/pages/api/core/dataset/data/updateData.ts @@ -6,11 +6,11 @@ import { withNextCors } from '@/service/utils/tools'; import { KB, connectToDatabase } from '@/service/mongo'; import { getVector } from '@/pages/api/openapi/plugin/vector'; import { PgDatasetTableName } from '@/constants/plugin'; -import type { UpdateDataPrams } from '@/api/core/dataset/data.d'; +import type { UpdateDatasetDataPrams } from '@/global/core/api/datasetReq.d'; export default withNextCors(async function handler(req: NextApiRequest, res: NextApiResponse) { try { - const { dataId, a = '', q = '', kbId } = req.body as UpdateDataPrams; + const { dataId, a = '', q = '', kbId } = req.body as UpdateDatasetDataPrams; if (!dataId) { throw new Error('缺少参数'); diff --git a/projects/app/src/pages/api/core/dataset/file/markUsed.ts b/projects/app/src/pages/api/core/dataset/file/markUsed.ts index f3800d616..eb352557c 100644 --- a/projects/app/src/pages/api/core/dataset/file/markUsed.ts +++ b/projects/app/src/pages/api/core/dataset/file/markUsed.ts @@ -3,7 +3,7 @@ import { jsonRes } from '@/service/response'; import { connectToDatabase } from '@/service/mongo'; import { authUser } from '@/service/utils/auth'; import { GridFSStorage } from '@/service/lib/gridfs'; -import { MarkFileUsedProps } from '@/api/core/dataset/file.d'; +import { MarkFileUsedProps } from '@/global/core/api/datasetReq.d'; import { Types } from 'mongoose'; export default async function handler(req: NextApiRequest, res: NextApiResponse) { diff --git a/projects/app/src/pages/api/core/dataset/file/update.ts b/projects/app/src/pages/api/core/dataset/file/update.ts index eeb2947ef..52d6b2e3a 100644 --- a/projects/app/src/pages/api/core/dataset/file/update.ts +++ b/projects/app/src/pages/api/core/dataset/file/update.ts @@ -3,7 +3,7 @@ import { jsonRes } from '@/service/response'; import { connectToDatabase } from '@/service/mongo'; import { authUser } from '@/service/utils/auth'; import { GridFSStorage } from '@/service/lib/gridfs'; -import { UpdateFileProps } from '@/api/core/dataset/file.d'; +import { UpdateFileProps } from '@/global/core/api/datasetReq.d'; import { Types } from 'mongoose'; import { PgClient } from '@/service/pg'; import { PgDatasetTableName } from '@/constants/plugin'; diff --git a/projects/app/src/pages/api/core/dataset/searchTest.ts b/projects/app/src/pages/api/core/dataset/searchTest.ts index 288d3b028..157a5e13a 100644 --- a/projects/app/src/pages/api/core/dataset/searchTest.ts +++ b/projects/app/src/pages/api/core/dataset/searchTest.ts @@ -6,7 +6,8 @@ import { withNextCors } from '@/service/utils/tools'; import { getVector } from '../../openapi/plugin/vector'; import { PgDatasetTableName } from '@/constants/plugin'; import { KB } from '@/service/mongo'; -import type { SearchTestProps, SearchTestResponseType } from '@/api/core/dataset/index.d'; +import type { SearchTestProps } from '@/global/core/api/datasetReq.d'; +import type { SearchTestResponseType } from '@/global/core/api/datasetRes.d'; export default withNextCors(async function handler(req: NextApiRequest, res: NextApiResponse) { try { diff --git a/projects/app/src/pages/api/core/dataset/update.ts b/projects/app/src/pages/api/core/dataset/update.ts index 4cf118af4..f0e4eb53a 100644 --- a/projects/app/src/pages/api/core/dataset/update.ts +++ b/projects/app/src/pages/api/core/dataset/update.ts @@ -2,7 +2,7 @@ import type { NextApiRequest, NextApiResponse } from 'next'; import { jsonRes } from '@/service/response'; import { connectToDatabase, KB } from '@/service/mongo'; import { authUser } from '@/service/utils/auth'; -import type { DatasetUpdateParams } from '@/api/core/dataset/index.d'; +import type { DatasetUpdateParams } from '@/global/core/api/datasetReq.d'; export default async function handler(req: NextApiRequest, res: NextApiResponse) { try { diff --git a/projects/app/src/pages/api/plugins/urlFetch.ts b/projects/app/src/pages/api/plugins/urlFetch.ts index ea908e04c..21c7b4b42 100644 --- a/projects/app/src/pages/api/plugins/urlFetch.ts +++ b/projects/app/src/pages/api/plugins/urlFetch.ts @@ -5,7 +5,7 @@ import { JSDOM } from 'jsdom'; import { Readability } from '@mozilla/readability'; import { jsonRes } from '@/service/response'; import { authUser } from '@/service/utils/auth'; -import type { FetchResultItem } from '@/types/plugin'; +import type { FetchResultItem } from '@/global/common/api/pluginRes.d'; import { simpleText } from '@/utils/file'; export type UrlFetchResponse = FetchResultItem[]; diff --git a/projects/app/src/pages/api/plusApi/[...path].ts b/projects/app/src/pages/api/plusApi/[...path].ts index ba3b74ecd..122225947 100644 --- a/projects/app/src/pages/api/plusApi/[...path].ts +++ b/projects/app/src/pages/api/plusApi/[...path].ts @@ -1,6 +1,6 @@ import type { NextApiRequest, NextApiResponse } from 'next'; import { jsonRes } from '@/service/response'; -import { request } from '@/api/service/request'; +import { request } from '@/service/common/api/request'; import type { Method } from 'axios'; import { connectToDatabase } from '@/service/mongo'; diff --git a/projects/app/src/pages/api/support/openapi/getKeys.ts b/projects/app/src/pages/api/support/openapi/getKeys.ts index bb344f08e..f96f5c91c 100644 --- a/projects/app/src/pages/api/support/openapi/getKeys.ts +++ b/projects/app/src/pages/api/support/openapi/getKeys.ts @@ -2,7 +2,7 @@ import type { NextApiRequest, NextApiResponse } from 'next'; import { jsonRes } from '@/service/response'; import { connectToDatabase, OpenApi } from '@/service/mongo'; import { authUser } from '@/service/utils/auth'; -import type { GetApiKeyProps } from '@/api/support/openapi/index.d'; +import type { GetApiKeyProps } from '@/global/support/api/openapiReq.d'; export default async function handler(req: NextApiRequest, res: NextApiResponse) { try { diff --git a/projects/app/src/pages/api/support/openapi/postKey.ts b/projects/app/src/pages/api/support/openapi/postKey.ts index e0773b3c6..0106c4475 100644 --- a/projects/app/src/pages/api/support/openapi/postKey.ts +++ b/projects/app/src/pages/api/support/openapi/postKey.ts @@ -4,7 +4,7 @@ import { jsonRes } from '@/service/response'; import { connectToDatabase, OpenApi } from '@/service/mongo'; import { authUser } from '@/service/utils/auth'; import { customAlphabet } from 'nanoid'; -import type { EditApiKeyProps } from '@/api/support/openapi/index.d'; +import type { EditApiKeyProps } from '@/global/support/api/openapiReq.d'; export default async function handler(req: NextApiRequest, res: NextApiResponse) { try { diff --git a/projects/app/src/pages/api/support/openapi/putKey.ts b/projects/app/src/pages/api/support/openapi/putKey.ts index 2de79688e..efd7b5427 100644 --- a/projects/app/src/pages/api/support/openapi/putKey.ts +++ b/projects/app/src/pages/api/support/openapi/putKey.ts @@ -2,7 +2,7 @@ import type { NextApiRequest, NextApiResponse } from 'next'; import { jsonRes } from '@/service/response'; import { connectToDatabase, OpenApi } from '@/service/mongo'; import { authUser } from '@/service/utils/auth'; -import type { EditApiKeyProps } from '@/api/support/openapi/index.d'; +import type { EditApiKeyProps } from '@/global/support/api/openapiReq.d'; export default async function handler(req: NextApiRequest, res: NextApiResponse) { try { diff --git a/projects/app/src/pages/api/support/outLink/init.ts b/projects/app/src/pages/api/support/outLink/init.ts index 69b3421f6..18f18da7f 100644 --- a/projects/app/src/pages/api/support/outLink/init.ts +++ b/projects/app/src/pages/api/support/outLink/init.ts @@ -1,7 +1,7 @@ import type { NextApiRequest, NextApiResponse } from 'next'; import { jsonRes } from '@/service/response'; import { connectToDatabase, OutLink, User } from '@/service/mongo'; -import type { InitShareChatResponse } from '@/api/response/chat'; +import type { InitShareChatResponse } from '@/global/support/api/outLinkRes.d'; import { authApp } from '@/service/utils/auth'; import { HUMAN_ICON } from '@/constants/chat'; import { getChatModelNameList, getGuideModule } from '@/components/ChatBox/utils'; diff --git a/projects/app/src/pages/api/support/file/delete.ts b/projects/app/src/pages/api/system/file/delete.ts similarity index 100% rename from projects/app/src/pages/api/support/file/delete.ts rename to projects/app/src/pages/api/system/file/delete.ts diff --git a/projects/app/src/pages/api/support/file/read.ts b/projects/app/src/pages/api/system/file/read.ts similarity index 100% rename from projects/app/src/pages/api/support/file/read.ts rename to projects/app/src/pages/api/system/file/read.ts diff --git a/projects/app/src/pages/api/support/file/readUrl.ts b/projects/app/src/pages/api/system/file/readUrl.ts similarity index 97% rename from projects/app/src/pages/api/support/file/readUrl.ts rename to projects/app/src/pages/api/system/file/readUrl.ts index 59fb7eb1d..05a647387 100644 --- a/projects/app/src/pages/api/support/file/readUrl.ts +++ b/projects/app/src/pages/api/system/file/readUrl.ts @@ -28,7 +28,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse< }); jsonRes(res, { - data: `/api/support/file/read?token=${token}` + data: `/api/system/file/read?token=${token}` }); } catch (error) { jsonRes(res, { diff --git a/projects/app/src/pages/api/support/file/upload.ts b/projects/app/src/pages/api/system/file/upload.ts similarity index 100% rename from projects/app/src/pages/api/support/file/upload.ts rename to projects/app/src/pages/api/system/file/upload.ts diff --git a/projects/app/src/pages/api/system/uploadImage.ts b/projects/app/src/pages/api/system/file/uploadImage.ts similarity index 100% rename from projects/app/src/pages/api/system/uploadImage.ts rename to projects/app/src/pages/api/system/file/uploadImage.ts diff --git a/projects/app/src/pages/api/system/getInitData.ts b/projects/app/src/pages/api/system/getInitData.ts index 8e52bdbf1..f1ffe5cc4 100644 --- a/projects/app/src/pages/api/system/getInitData.ts +++ b/projects/app/src/pages/api/system/getInitData.ts @@ -2,20 +2,8 @@ import type { FeConfigsType, SystemEnvType } from '@/types'; import type { NextApiRequest, NextApiResponse } from 'next'; import { jsonRes } from '@/service/response'; import { readFileSync } from 'fs'; -import { - type QAModelItemType, - type ChatModelItemType, - type VectorModelItemType, - FunctionModelItemType -} from '@/types/model'; - -export type InitDateResponse = { - chatModels: ChatModelItemType[]; - qaModel: QAModelItemType; - vectorModels: VectorModelItemType[]; - feConfigs: FeConfigsType; - systemVersion: string; -}; +import type { InitDateResponse } from '@/global/common/api/systemRes'; +import { type VectorModelItemType, FunctionModelItemType } from '@/types/model'; export default async function handler(req: NextApiRequest, res: NextApiResponse) { if (!global.feConfigs) { diff --git a/projects/app/src/pages/app/detail/components/AIChatSettingsModal.tsx b/projects/app/src/pages/app/detail/components/AIChatSettingsModal.tsx index 859fdd1fe..27c5b78fd 100644 --- a/projects/app/src/pages/app/detail/components/AIChatSettingsModal.tsx +++ b/projects/app/src/pages/app/detail/components/AIChatSettingsModal.tsx @@ -15,8 +15,8 @@ import { } from '@chakra-ui/react'; import MyTooltip from '@/components/MyTooltip'; import { QuestionOutlineIcon } from '@chakra-ui/icons'; -import { defaultQuotePrompt, defaultQuoteTemplate } from '@/prompts/core/AIChat'; -import { feConfigs } from '@/store/static'; +import { defaultQuotePrompt, defaultQuoteTemplate } from '@/global/core/prompt/AIChat'; +import { feConfigs } from '@/web/common/store/static'; const AIChatSettingsModal = ({ onClose, diff --git a/projects/app/src/pages/app/detail/components/AdEdit/components/ChatTest.tsx b/projects/app/src/pages/app/detail/components/AdEdit/components/ChatTest.tsx index df282b8cd..ce3060748 100644 --- a/projects/app/src/pages/app/detail/components/AdEdit/components/ChatTest.tsx +++ b/projects/app/src/pages/app/detail/components/AdEdit/components/ChatTest.tsx @@ -11,9 +11,9 @@ import React, { import { Box, Flex, IconButton } from '@chakra-ui/react'; import MyIcon from '@/components/Icon'; import { FlowModuleTypeEnum } from '@/constants/flow'; -import { streamFetch } from '@/api/fetch'; +import { streamFetch } from '@/web/common/api/fetch'; import MyTooltip from '@/components/MyTooltip'; -import { useUserStore } from '@/store/user'; +import { useUserStore } from '@/web/support/store/user'; import ChatBox, { type ComponentRef, type StartChatFnProps } from '@/components/ChatBox'; import { getGuideModule } from '@/components/ChatBox/utils'; diff --git a/projects/app/src/pages/app/detail/components/AdEdit/components/ImportSettings.tsx b/projects/app/src/pages/app/detail/components/AdEdit/components/ImportSettings.tsx index 080b5b049..0171ce0bb 100644 --- a/projects/app/src/pages/app/detail/components/AdEdit/components/ImportSettings.tsx +++ b/projects/app/src/pages/app/detail/components/AdEdit/components/ImportSettings.tsx @@ -2,7 +2,7 @@ import React, { useState } from 'react'; import { Textarea, Button, ModalBody, ModalFooter } from '@chakra-ui/react'; import MyModal from '@/components/MyModal'; import { useTranslation } from 'react-i18next'; -import { useToast } from '@/hooks/useToast'; +import { useToast } from '@/web/common/hooks/useToast'; import { useFlowStore } from './Provider'; const ImportSettings = ({ onClose }: { onClose: () => void }) => { diff --git a/projects/app/src/pages/app/detail/components/AdEdit/components/Nodes/NodeChat.tsx b/projects/app/src/pages/app/detail/components/AdEdit/components/Nodes/NodeChat.tsx index 13ae8d083..fa5ac05f5 100644 --- a/projects/app/src/pages/app/detail/components/AdEdit/components/Nodes/NodeChat.tsx +++ b/projects/app/src/pages/app/detail/components/AdEdit/components/Nodes/NodeChat.tsx @@ -6,167 +6,23 @@ import Divider from '../modules/Divider'; import Container from '../modules/Container'; import RenderInput from '../render/RenderInput'; import RenderOutput from '../render/RenderOutput'; -import MySelect from '@/components/Select'; -import { chatModelList } from '@/store/static'; -import MySlider from '@/components/Slider'; -import { Box, Button, useDisclosure } from '@chakra-ui/react'; -import { formatPrice } from '@fastgpt/common/bill/index'; -import MyIcon from '@/components/Icon'; -import dynamic from 'next/dynamic'; -import { AIChatProps } from '@/types/core/aiChat'; -import { useFlowStore } from '../Provider'; -const AIChatSettingsModal = dynamic(() => import('../../../AIChatSettingsModal')); +import { useFlowStore } from '../Provider'; const NodeChat = ({ data }: NodeProps) => { const { moduleId, inputs, outputs } = data; const { onChangeNode } = useFlowStore(); - const chatModulesData = useMemo(() => { - const obj: Record = {}; - inputs.forEach((item) => { - obj[item.key] = item.value; - }); - return obj as AIChatProps; - }, [inputs]); - - const { - isOpen: isOpenAIChatSetting, - onOpen: onOpenAIChatSetting, - onClose: onCloseAIChatSetting - } = useDisclosure(); - return ( - { - const list = chatModelList.map((item) => { - const priceStr = `(${formatPrice(item.price, 1000)}元/1k Tokens)`; - - return { - value: item.model, - label: `${item.name}${priceStr}` - }; - }); - - return ( - { - onChangeNode({ - moduleId, - type: 'inputs', - key: inputItem.key, - value: { - ...inputItem, - value: e - } - }); - - // update max tokens - const model = - chatModelList.find((item) => item.model === e) || chatModelList[0]; - if (!model) return; - - onChangeNode({ - moduleId, - type: 'inputs', - key: 'maxToken', - value: { - ...inputs.find((input) => input.key === 'maxToken'), - markList: [ - { label: '100', value: 100 }, - { label: `${model.contextMaxToken}`, value: model.contextMaxToken } - ], - max: model.contextMaxToken, - value: model.contextMaxToken / 2 - } - }); - }} - /> - ); - }, - maxToken: (inputItem) => { - const model = inputs.find((item) => item.key === 'model')?.value; - const modelData = chatModelList.find((item) => item.model === model); - const maxToken = modelData ? modelData.contextMaxToken : 4000; - const markList = [ - { label: '100', value: 100 }, - { label: `${maxToken}`, value: maxToken } - ]; - return ( - - { - onChangeNode({ - moduleId, - type: 'inputs', - key: inputItem.key, - value: { - ...inputItem, - value: e - } - }); - }} - /> - - ); - }, - quoteQA: (inputItem) => { - return ( - - ); - } - }} - /> + - - {isOpenAIChatSetting && ( - { - for (let key in e) { - const item = inputs.find((input) => input.key === key); - if (!item) continue; - onChangeNode({ - moduleId, - type: 'inputs', - key, - value: { - ...item, - // @ts-ignore - value: e[key] - } - }); - } - onCloseAIChatSetting(); - }} - defaultData={chatModulesData} - /> - )} ); }; diff --git a/projects/app/src/pages/app/detail/components/AdEdit/components/Nodes/NodeKbSearch.tsx b/projects/app/src/pages/app/detail/components/AdEdit/components/Nodes/NodeKbSearch.tsx index 0c239d4f5..560e76fef 100644 --- a/projects/app/src/pages/app/detail/components/AdEdit/components/Nodes/NodeKbSearch.tsx +++ b/projects/app/src/pages/app/detail/components/AdEdit/components/Nodes/NodeKbSearch.tsx @@ -1,104 +1,20 @@ import React, { useMemo } from 'react'; import { NodeProps } from 'reactflow'; import { FlowModuleItemType } from '@/types/core/app/flow'; -import { Flex, Box, Button, useTheme, useDisclosure, Grid } from '@chakra-ui/react'; -import { useDatasetStore } from '@/store/dataset'; -import { useQuery } from '@tanstack/react-query'; import NodeCard from '../modules/NodeCard'; import Divider from '../modules/Divider'; import Container from '../modules/Container'; import RenderInput from '../render/RenderInput'; import RenderOutput from '../render/RenderOutput'; -import { DatasetSelectModal } from '../../../DatasetSelectModal'; -import type { SelectedDatasetType } from '@/types/core/dataset'; -import Avatar from '@/components/Avatar'; -import { useFlowStore } from '../Provider'; - -const KBSelect = ({ - activeKbs = [], - onChange -}: { - activeKbs: SelectedDatasetType; - onChange: (e: SelectedDatasetType) => void; -}) => { - const theme = useTheme(); - const { allDatasets, loadAllDatasets } = useDatasetStore(); - const { - isOpen: isOpenKbSelect, - onOpen: onOpenKbSelect, - onClose: onCloseKbSelect - } = useDisclosure(); - - const showKbList = useMemo( - () => allDatasets.filter((item) => activeKbs.find((kb) => kb.kbId === item._id)), - [allDatasets, activeKbs] - ); - - useQuery(['loadAllDatasets'], loadAllDatasets); - - return ( - <> - - - {showKbList.map((item) => ( - - - - {item.name} - - - ))} - - - - ); -}; const NodeKbSearch = ({ data }: NodeProps) => { const { moduleId, inputs, outputs } = data; - const { onChangeNode } = useFlowStore(); return ( - ( - { - onChangeNode({ - moduleId, - key, - type: 'inputs', - value: { - ...props, - key, - value: e - } - }); - }} - /> - ) - }} - /> + diff --git a/projects/app/src/pages/app/detail/components/AdEdit/components/Nodes/NodeQuestionInput.tsx b/projects/app/src/pages/app/detail/components/AdEdit/components/Nodes/NodeQuestionInput.tsx index e252c5bed..83dea198a 100644 --- a/projects/app/src/pages/app/detail/components/AdEdit/components/Nodes/NodeQuestionInput.tsx +++ b/projects/app/src/pages/app/detail/components/AdEdit/components/Nodes/NodeQuestionInput.tsx @@ -1,24 +1,18 @@ import React from 'react'; import { NodeProps } from 'reactflow'; -import { Box } from '@chakra-ui/react'; import NodeCard from '../modules/NodeCard'; import { FlowModuleItemType } from '@/types/core/app/flow'; import Container from '../modules/Container'; -import { SystemInputEnum } from '@/constants/app'; -import { FlowValueTypeEnum } from '@/constants/flow'; -import SourceHandle from '../render/SourceHandle'; + +import RenderOutput from '../render/RenderOutput'; const QuestionInputNode = ({ data }: NodeProps) => { + const { moduleId, inputs, outputs } = data; + return ( - - 用户问题 - - + ); diff --git a/projects/app/src/pages/app/detail/components/AdEdit/components/Provider.tsx b/projects/app/src/pages/app/detail/components/AdEdit/components/Provider.tsx index 08232a6a7..1d81348a0 100644 --- a/projects/app/src/pages/app/detail/components/AdEdit/components/Provider.tsx +++ b/projects/app/src/pages/app/detail/components/AdEdit/components/Provider.tsx @@ -26,7 +26,7 @@ import React, { } from 'react'; import { customAlphabet } from 'nanoid'; import { appModule2FlowEdge, appModule2FlowNode } from '@/utils/adapt'; -import { useToast } from '@/hooks/useToast'; +import { useToast } from '@/web/common/hooks/useToast'; import { FlowModuleTypeEnum, FlowValueTypeEnum } from '@/constants/flow'; import { useTranslation } from 'next-i18next'; import { AppModuleItemType } from '@/types/app'; diff --git a/projects/app/src/pages/app/detail/components/AdEdit/components/TemplateList.tsx b/projects/app/src/pages/app/detail/components/AdEdit/components/TemplateList.tsx index 811caa909..59ccc1b39 100644 --- a/projects/app/src/pages/app/detail/components/AdEdit/components/TemplateList.tsx +++ b/projects/app/src/pages/app/detail/components/AdEdit/components/TemplateList.tsx @@ -3,7 +3,7 @@ import { Box, Flex } from '@chakra-ui/react'; import { ModuleTemplates } from '@/constants/flow/ModuleTemplate'; import { FlowModuleItemType, FlowModuleTemplateType } from '@/types/core/app/flow'; import type { Node } from 'reactflow'; -import { useGlobalStore } from '@/store/global'; +import { useGlobalStore } from '@/web/common/store/global'; import Avatar from '@/components/Avatar'; import { FlowModuleTypeEnum } from '@/constants/flow'; import { useFlowStore } from './Provider'; diff --git a/projects/app/src/pages/app/detail/components/AdEdit/components/modules/NodeCard.tsx b/projects/app/src/pages/app/detail/components/AdEdit/components/modules/NodeCard.tsx index 2fc4a7e5d..ccf619acc 100644 --- a/projects/app/src/pages/app/detail/components/AdEdit/components/modules/NodeCard.tsx +++ b/projects/app/src/pages/app/detail/components/AdEdit/components/modules/NodeCard.tsx @@ -6,8 +6,8 @@ import type { FlowModuleItemType } from '@/types/core/app/flow'; import MyTooltip from '@/components/MyTooltip'; import { QuestionOutlineIcon } from '@chakra-ui/icons'; import { useTranslation } from 'react-i18next'; -import { useEditTitle } from '@/hooks/useEditTitle'; -import { useToast } from '@/hooks/useToast'; +import { useEditTitle } from '@/web/common/hooks/useEditTitle'; +import { useToast } from '@/web/common/hooks/useToast'; import { useFlowStore } from '../Provider'; type Props = FlowModuleItemType & { diff --git a/projects/app/src/pages/app/detail/components/AdEdit/components/render/RenderInput.tsx b/projects/app/src/pages/app/detail/components/AdEdit/components/render/RenderInput.tsx index 251df4445..fc0f45b2e 100644 --- a/projects/app/src/pages/app/detail/components/AdEdit/components/render/RenderInput.tsx +++ b/projects/app/src/pages/app/detail/components/AdEdit/components/render/RenderInput.tsx @@ -1,4 +1,4 @@ -import React, { useState } from 'react'; +import React, { useMemo, useState } from 'react'; import type { FlowInputItemType, SelectAppItemType } from '@/types/core/app/flow'; import { Box, @@ -12,20 +12,31 @@ import { Flex, useDisclosure, Button, - useTheme + useTheme, + Grid } from '@chakra-ui/react'; import { FlowInputItemTypeEnum } from '@/constants/flow'; import { QuestionOutlineIcon } from '@chakra-ui/icons'; import dynamic from 'next/dynamic'; +import { useFlowStore } from '../Provider'; +import Avatar from '@/components/Avatar'; import MySelect from '@/components/Select'; import MySlider from '@/components/Slider'; import MyTooltip from '@/components/MyTooltip'; import TargetHandle from './TargetHandle'; import MyIcon from '@/components/Icon'; +import { useTranslation } from 'react-i18next'; +import { AIChatProps } from '@/types/core/aiChat'; +import { chatModelList } from '@/web/common/store/static'; +import { formatPrice } from '@fastgpt/common/bill'; +import { useDatasetStore } from '@/web/core/store/dataset'; +import { SelectedDatasetType } from '@/types/core/dataset'; +import { useQuery } from '@tanstack/react-query'; + const SetInputFieldModal = dynamic(() => import('../modules/SetInputFieldModal')); const SelectAppModal = dynamic(() => import('../../../SelectAppModal')); -import { useFlowStore } from '../Provider'; -import Avatar from '@/components/Avatar'; +const AIChatSettingsModal = dynamic(() => import('../../../AIChatSettingsModal')); +const DatasetSelectModal = dynamic(() => import('../../../DatasetSelectModal')); export const Label = ({ moduleId, @@ -145,123 +156,51 @@ const RenderInput = ({ moduleId: string; CustomComponent?: Record React.ReactNode>; }) => { - const { onChangeNode } = useFlowStore(); - + const sortInputs = useMemo( + () => flowInputList.sort((a, b) => (a.key === FlowInputItemTypeEnum.switch ? -1 : 1)), + [flowInputList] + ); return ( <> - {flowInputList.map( + {sortInputs.map( (item) => item.type !== FlowInputItemTypeEnum.hidden && ( {!!item.label &&