mirror of
https://github.com/labring/FastGPT.git
synced 2025-08-01 03:48:24 +00:00
V4.7-alpha (#985)
Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>
This commit is contained in:
@@ -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, '流响应错误');
|
||||
}
|
||||
},
|
||||
|
@@ -14,7 +14,7 @@ export const clientInitData = async (
|
||||
useSystemStore.getState().initStaticData(res);
|
||||
|
||||
return {
|
||||
feConfigs: res.feConfigs
|
||||
feConfigs: res.feConfigs || {}
|
||||
};
|
||||
} catch (error) {
|
||||
if (retry > 0) {
|
||||
|
@@ -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) {
|
||||
|
@@ -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: ''
|
||||
}
|
||||
};
|
||||
|
@@ -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: []
|
||||
}
|
||||
];
|
Reference in New Issue
Block a user