4.8-alpha fix (#1424)

This commit is contained in:
Archer
2024-05-09 22:48:44 +08:00
committed by GitHub
parent 6463427d93
commit 434af56abd
19 changed files with 255 additions and 148 deletions

View File

@@ -1,10 +1,32 @@
### FastGPT V4.7.1
### FastGPT V4.8
1. 新增 - 语音输入完整配置。支持选择是否打开语音输入(包括分享页面),支持语音输入后自动发送,支持语音输入后自动语音播放(流式)
2. 新增 - Pptx 和 xlsx 文件读取。但所有文件读取都放服务端,会消耗更多的服务器资源,以及无法在上传时预览更多内容。
3. 新增 - 集成 Laf 云函数,可以读取 Laf 账号中的云函数作为 HTTP 模块。
4. 修改 - csv导入模板取消 header 校验,自动获取前两列。
5. 修复 - 问题补全历史记录BUG
6. [点击查看高级编排介绍文档](https://doc.fastgpt.in/docs/workflow/intro)
7. [使用文档](https://doc.fastgpt.in/docs/intro/)
8. [点击查看商业版](https://doc.fastgpt.in/docs/commercial/)
本次更新的重点是对工作流 (高级编排) 进行了重构,使其更加简洁和强大。但由于新旧工作流机制有较大变化,尽管我们进行了一定的自动转换,仍有部分工作流需要您手动重建。请尽快更新到新版本,并对工作流进行必要的调试和重新发布
❗ 重要提示:
1⃣ 旧工作流更新后暂不失效,打开旧工作流会弹出自动转换提示,重新编排后点 “发布” 按钮发布新工作流
2⃣ 发布新工作流前,工作流自动保存功能暂不生效
3⃣ 应用和插件新增 version 字段,标识适用新/旧版工作流,以实现兼容
✨ 新增功能亮点:
1⃣ 判断器:支持 if/elseIf/else 判断逻辑,工作流控制更灵活
2⃣ 变量更新节点:运行中可动态修改工作流输出变量或全局变量值
3⃣ 工作流自动保存和版本管理:自动保存修改,支持查看和回滚历史版本
4⃣ 工作流调试模式:更直观高效,可调试单节点或逐步执行,实时查看输入输出数据
5⃣ 定时执行应用:支持简单配置实现各种定时任务
🛠️ 其他优化与修复:
- 优化工作流节点连线方式,支持四向连接,易构建循环工作流
- 显著提升工作流上下文数据传递性能
- 简易模式下修改配置自动刷新调试框,免手动保存
- 改进 worker 进程管理,支持 Token 计算任务分配,提高效率
- 工具调用支持 string、boolean、number 数据类型
- 完善 completions 接口对 size 参数限制
- 重构 Node.js API 中间件和服务端代码
- 对话记录长度调整为偶数,最大长度增至 50 轮,避免奇数导致部分模型不兼容
- HTTP 节点出错将终止进程,避免异常影响
- 修复工具调用名称不能以数字开头问题
- 修复分享链接 query 参数缓存 bug
- 修复工具调用和 HTTP 模块兼容性问题
- [点击查看高级编排介绍文档](https://doc.fastgpt.in/docs/workflow/intro)
- [使用文档](https://doc.fastgpt.in/docs/intro/)
- [点击查看商业版](https://doc.fastgpt.in/docs/commercial/)

View File

@@ -55,6 +55,8 @@ const MessageInput = ({
const { t } = useTranslation();
const havInput = !!inputValue || fileList.length > 0;
const hasFileUploading = fileList.some((item) => !item.url);
const canSendMessage = havInput && !hasFileUploading;
/* file selector and upload */
const { File, onOpen: onOpenSelectFile } = useSelectFile({
@@ -142,7 +144,8 @@ const MessageInput = ({
);
/* on send */
const handleSend = useCallback(async () => {
const handleSend = async () => {
if (!canSendMessage) return;
const textareaValue = TextareaDom.current?.value || '';
onSendMessage({
@@ -150,7 +153,7 @@ const MessageInput = ({
files: fileList
});
replaceFile([]);
}, [TextareaDom, fileList, onSendMessage, replaceFile]);
};
/* whisper init */
const {
@@ -466,16 +469,20 @@ const MessageInput = ({
h={['28px', '32px']}
w={['28px', '32px']}
borderRadius={'md'}
bg={isSpeaking || isChatting ? '' : !havInput ? '#E5E5E5' : 'primary.500'}
bg={
isSpeaking || isChatting
? ''
: !havInput || hasFileUploading
? '#E5E5E5'
: 'primary.500'
}
cursor={havInput ? 'pointer' : 'not-allowed'}
lineHeight={1}
onClick={() => {
if (isChatting) {
return onStop();
}
if (havInput) {
return handleSend();
}
return handleSend();
}}
>
{isChatting ? (

View File

@@ -53,7 +53,7 @@ const Markdown = ({
);
const formatSource = source
.replace(/\\n/g, '\n ')
// .replace(/\\n/g, '\n')
.replace(/(http[s]?:\/\/[^\s。]+)([。,])/g, '$1 $2')
.replace(/\n*(\[QUOTE SIGN\]\(.*\))/g, '$1');

View File

@@ -40,3 +40,9 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse<
res.status(500).send(getErrText(err));
}
}
export const config = {
api: {
responseLimit: '16mb'
}
};

View File

@@ -362,12 +362,6 @@ async function handler(req: NextApiRequest, res: NextApiResponse) {
}
export default NextAPI(handler);
export const config = {
api: {
responseLimit: '20mb'
}
};
const authShareChat = async ({
chatId,
...data
@@ -526,3 +520,9 @@ const authHeaderRequest = async ({
canWrite
};
};
export const config = {
api: {
responseLimit: '20mb'
}
};

View File

@@ -28,7 +28,7 @@ export default React.memo(FileLocal);
const csvTemplate = `"第一列内容","第二列内容"
"必填列","可选列。CSV 中请注意内容不能包含双引号,双引号是列分割符号"
"只会第一和第二列内容导入,其余列会被忽略",""
"只会第一和第二列内容导入,其余列会被忽略",""
"结合人工智能的演进历程,AIGC的发展大致可以分为三个阶段即:早期萌芽阶段(20世纪50年代至90年代中期)、沉淀积累阶段(20世纪90年代中期至21世纪10年代中期),以及快速发展展阶段(21世纪10年代中期至今)。",""
"AIGC发展分为几个阶段","早期萌芽阶段(20世纪50年代至90年代中期)、沉淀积累阶段(20世纪90年代中期至21世纪10年代中期)、快速发展展阶段(21世纪10年代中期至今)"`;

View File

@@ -32,7 +32,7 @@ export const useSearchTestStore = create<State>()(
datasetTestList: [],
pushDatasetTestItem(data) {
set((state) => {
state.datasetTestList = [data, ...state.datasetTestList].slice(0, 100);
state.datasetTestList = [data, ...state.datasetTestList].slice(0, 50);
});
},
delDatasetTestItemById(id) {