V4.7-alpha (#985)

Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>
This commit is contained in:
Archer
2024-03-13 10:50:02 +08:00
committed by GitHub
parent 5bca15f12f
commit 9501c3f3a1
170 changed files with 5786 additions and 2342 deletions

View File

@@ -1,9 +1,9 @@
import { sseResponseEventEnum } from '@fastgpt/service/common/response/constant';
import { SseResponseEventEnum } from '@fastgpt/global/core/module/runtime/constants';
import { getErrText } from '@fastgpt/global/common/error/utils';
import type { ChatHistoryItemResType } from '@fastgpt/global/core/chat/type.d';
import { StartChatFnProps } from '@/components/ChatBox';
import type { StartChatFnProps } from '@/components/ChatBox/type.d';
import { getToken } from '@/web/support/user/auth';
import { ModuleOutputKeyEnum } from '@fastgpt/global/core/module/constants';
import { DispatchNodeResponseKeyEnum } from '@fastgpt/global/core/module/runtime/constants';
import dayjs from 'dayjs';
import {
// refer to https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web
@@ -19,7 +19,7 @@ type StreamFetchProps = {
};
type StreamResponseType = {
responseText: string;
[ModuleOutputKeyEnum.responseData]: ChatHistoryItemResType[];
[DispatchNodeResponseKeyEnum.nodeResponse]: ChatHistoryItemResType[];
};
export const streamFetch = ({
url = '/api/v1/chat/completions',
@@ -34,7 +34,7 @@ export const streamFetch = ({
// response data
let responseText = '';
let remainTextList: string[] = [];
let remainTextList: { event: `${SseResponseEventEnum}`; text: string }[] = [];
let errMsg = '';
let responseData: ChatHistoryItemResType[] = [];
let finished = false;
@@ -60,19 +60,26 @@ export const streamFetch = ({
function animateResponseText() {
// abort message
if (abortCtrl.signal.aborted) {
const remainText = remainTextList.join('');
onMessage({ text: remainText });
responseText += remainText;
remainTextList.forEach((item) => {
onMessage(item);
if (item.event === SseResponseEventEnum.answer) {
responseText += item.text;
}
});
return finish();
}
if (remainTextList.length > 0) {
const fetchCount = Math.max(1, Math.round(remainTextList.length / 60));
const fetchText = remainTextList.slice(0, fetchCount).join('');
onMessage({ text: fetchText });
for (let i = 0; i < fetchCount; i++) {
const item = remainTextList[i];
onMessage(item);
if (item.event === SseResponseEventEnum.answer) {
responseText += item.text;
}
}
responseText += fetchText;
remainTextList = remainTextList.slice(fetchCount);
}
@@ -147,24 +154,34 @@ export const streamFetch = ({
}
})();
if (event === sseResponseEventEnum.answer) {
if (event === SseResponseEventEnum.answer) {
const text: string = parseJson?.choices?.[0]?.delta?.content || '';
for (const item of text) {
remainTextList.push(item);
remainTextList.push({
event,
text: item
});
}
} else if (event === sseResponseEventEnum.response) {
} else if (event === SseResponseEventEnum.fastAnswer) {
const text: string = parseJson?.choices?.[0]?.delta?.content || '';
remainTextList.push(text);
remainTextList.push({
event,
text
});
} else if (
event === sseResponseEventEnum.moduleStatus &&
parseJson?.name &&
parseJson?.status
event === SseResponseEventEnum.flowNodeStatus ||
event === SseResponseEventEnum.toolCall ||
event === SseResponseEventEnum.toolParams ||
event === SseResponseEventEnum.toolResponse
) {
onMessage(parseJson);
} else if (event === sseResponseEventEnum.appStreamResponse && Array.isArray(parseJson)) {
onMessage({
event,
...parseJson
});
} else if (event === SseResponseEventEnum.flowResponses && Array.isArray(parseJson)) {
responseData = parseJson;
} else if (event === sseResponseEventEnum.error) {
} else if (event === SseResponseEventEnum.error) {
errMsg = getErrText(parseJson, '流响应错误');
}
},

View File

@@ -14,7 +14,7 @@ export const clientInitData = async (
useSystemStore.getState().initStaticData(res);
return {
feConfigs: res.feConfigs
feConfigs: res.feConfigs || {}
};
} catch (error) {
if (retry > 0) {

View File

@@ -32,7 +32,7 @@ type State = {
setLastChatAppId: (id: string) => void;
lastChatId: string;
setLastChatId: (id: string) => void;
delOneHistoryItem: (e: DeleteChatItemProps & { index: number }) => Promise<any>;
delOneHistoryItem: (e: DeleteChatItemProps) => Promise<any>;
};
export const useChatStore = create<State>()(
@@ -120,14 +120,14 @@ export const useChatStore = create<State>()(
});
}
},
async delOneHistoryItem({ index, ...props }) {
async delOneHistoryItem(props) {
const { chatId, contentId } = props;
if (!chatId || !contentId) return;
try {
get().setChatData((state) => ({
...state,
history: state.history.filter((_, i) => i !== index)
history: state.history.filter((item) => item.dataId !== contentId)
}));
await delChatRecordById(props);
} catch (err) {

View File

@@ -3,7 +3,7 @@ import { ModuleIOValueTypeEnum } from '@fastgpt/global/core/module/constants';
export const FlowValueTypeMap = {
[ModuleIOValueTypeEnum.string]: {
handlerStyle: {
background: '#36ADEF'
borderColor: '#36ADEF'
},
label: 'core.module.valueType.string',
value: ModuleIOValueTypeEnum.string,
@@ -11,7 +11,7 @@ export const FlowValueTypeMap = {
},
[ModuleIOValueTypeEnum.number]: {
handlerStyle: {
background: '#FB7C3C'
borderColor: '#FB7C3C'
},
label: 'core.module.valueType.number',
value: ModuleIOValueTypeEnum.number,
@@ -19,7 +19,7 @@ export const FlowValueTypeMap = {
},
[ModuleIOValueTypeEnum.boolean]: {
handlerStyle: {
background: '#E7D118'
borderColor: '#E7D118'
},
label: 'core.module.valueType.boolean',
value: ModuleIOValueTypeEnum.boolean,
@@ -27,7 +27,7 @@ export const FlowValueTypeMap = {
},
[ModuleIOValueTypeEnum.chatHistory]: {
handlerStyle: {
background: '#00A9A6'
borderColor: '#00A9A6'
},
label: 'core.module.valueType.chatHistory',
value: ModuleIOValueTypeEnum.chatHistory,
@@ -38,7 +38,7 @@ export const FlowValueTypeMap = {
},
[ModuleIOValueTypeEnum.datasetQuote]: {
handlerStyle: {
background: '#A558C9'
borderColor: '#A558C9'
},
label: 'core.module.valueType.datasetQuote',
value: ModuleIOValueTypeEnum.datasetQuote,
@@ -54,7 +54,7 @@ export const FlowValueTypeMap = {
},
[ModuleIOValueTypeEnum.any]: {
handlerStyle: {
background: '#9CA2A8'
borderColor: '#9CA2A8'
},
label: 'core.module.valueType.any',
value: ModuleIOValueTypeEnum.any,
@@ -62,7 +62,7 @@ export const FlowValueTypeMap = {
},
[ModuleIOValueTypeEnum.selectApp]: {
handlerStyle: {
background: '#6a6efa'
borderColor: '#6a6efa'
},
label: 'core.module.valueType.selectApp',
value: ModuleIOValueTypeEnum.selectApp,
@@ -70,10 +70,18 @@ export const FlowValueTypeMap = {
},
[ModuleIOValueTypeEnum.selectDataset]: {
handlerStyle: {
background: '#21ba45'
borderColor: '#21ba45'
},
label: 'core.module.valueType.selectDataset',
value: ModuleIOValueTypeEnum.selectDataset,
description: ''
},
[ModuleIOValueTypeEnum.tools]: {
handlerStyle: {
borderColor: '#21ba45'
},
label: 'core.module.valueType.tools',
value: ModuleIOValueTypeEnum.tools,
description: ''
}
};

View File

@@ -1,110 +0,0 @@
import { UserGuideModule } from '@fastgpt/global/core/module/template/system/userGuide';
import { UserInputModule } from '@fastgpt/global/core/module/template/system/userInput';
import { AiChatModule } from '@fastgpt/global/core/module/template/system/aiChat';
import { DatasetSearchModule } from '@fastgpt/global/core/module/template/system/datasetSearch';
import { DatasetConcatModule } from '@fastgpt/global/core/module/template/system/datasetConcat';
import { AssignedAnswerModule } from '@fastgpt/global/core/module/template/system/assignedAnswer';
import { ClassifyQuestionModule } from '@fastgpt/global/core/module/template/system/classifyQuestion';
import { ContextExtractModule } from '@fastgpt/global/core/module/template/system/contextExtract';
import { HttpModule468 } from '@fastgpt/global/core/module/template/system/http468';
import { HttpModule } from '@fastgpt/global/core/module/template/system/abandon/http';
import { RunAppModule } from '@fastgpt/global/core/module/template/system/runApp';
import { PluginInputModule } from '@fastgpt/global/core/module/template/system/pluginInput';
import { PluginOutputModule } from '@fastgpt/global/core/module/template/system/pluginOutput';
import { RunPluginModule } from '@fastgpt/global/core/module/template/system/runPlugin';
import { AiQueryExtension } from '@fastgpt/global/core/module/template/system/queryExtension';
import type {
FlowModuleTemplateType,
moduleTemplateListType
} from '@fastgpt/global/core/module/type.d';
import { ModuleTemplateTypeEnum } from '@fastgpt/global/core/module/constants';
export const appSystemModuleTemplates: FlowModuleTemplateType[] = [
UserGuideModule,
UserInputModule,
AiChatModule,
AssignedAnswerModule,
DatasetSearchModule,
DatasetConcatModule,
RunAppModule,
ClassifyQuestionModule,
ContextExtractModule,
HttpModule468,
AiQueryExtension
];
export const pluginSystemModuleTemplates: FlowModuleTemplateType[] = [
PluginInputModule,
PluginOutputModule,
AiChatModule,
AssignedAnswerModule,
DatasetSearchModule,
DatasetConcatModule,
RunAppModule,
ClassifyQuestionModule,
ContextExtractModule,
HttpModule468,
AiQueryExtension
];
export const moduleTemplatesFlat: FlowModuleTemplateType[] = [
UserGuideModule,
UserInputModule,
AiChatModule,
DatasetSearchModule,
DatasetConcatModule,
AssignedAnswerModule,
ClassifyQuestionModule,
ContextExtractModule,
HttpModule468,
HttpModule,
RunAppModule,
PluginInputModule,
PluginOutputModule,
RunPluginModule,
AiQueryExtension
];
export const moduleTemplatesList: moduleTemplateListType = [
{
type: ModuleTemplateTypeEnum.userGuide,
label: 'core.module.template.Guide module',
list: []
},
{
type: ModuleTemplateTypeEnum.systemInput,
label: 'core.module.template.System input module',
list: []
},
{
type: ModuleTemplateTypeEnum.textAnswer,
label: 'core.module.template.Response module',
list: []
},
{
type: ModuleTemplateTypeEnum.functionCall,
label: 'core.module.template.Function module',
list: []
},
{
type: ModuleTemplateTypeEnum.tools,
label: 'core.module.template.Tool module',
list: []
},
{
type: ModuleTemplateTypeEnum.externalCall,
label: 'core.module.template.External module',
list: []
},
{
type: ModuleTemplateTypeEnum.personalPlugin,
label: 'core.module.template.My plugin module',
list: []
},
{
type: ModuleTemplateTypeEnum.other,
label: '其他',
list: []
}
];