mirror of
https://github.com/labring/FastGPT.git
synced 2025-07-23 21:13:50 +00:00

* feat: stop toolCall and rename some field. (#46) * perf: node delete tip;pay tip * fix: toolCall cannot save child answer * feat: stop tool * fix: team modal * fix feckbackMoal auth bug (#47) * 简单的支持提示词运行tool。优化workflow模板 (#49) * remove templates * fix: request body undefined * feat: prompt tool run * feat: workflow tamplates modal * perf: plugin start * 4.7 (#50) * fix docker-compose download url (#994) original code is a bad url with '404 NOT FOUND' return. fix docker-compose download url, add 'v' before docker-compose version * Update ai_settings.md (#1000) * Update configuration.md * Update configuration.md * Fix history in classifyQuestion and extract modules (#1012) * Fix history in classifyQuestion and extract modules * Add chatValue2RuntimePrompt import and update text formatting * flow controller to packages * fix: rerank select * modal ui * perf: modal code path * point not sufficient * feat: http url support variable * fix http key * perf: prompt * perf: ai setting modal * simple edit ui --------- Co-authored-by: entorick <entorick11@qq.com> Co-authored-by: liujianglc <liujianglc@163.com> Co-authored-by: Fengrui Liu <liufengrui.work@bytedance.com> * fix team share redirect to login (#51) * feat: support openapi import plugins (#48) * feat: support openapi import plugins * feat: import from url * fix: add body params parse * fix build * fix * fix * fix * tool box ui (#52) * fix: training queue * feat: simple edit tool select * perf: simple edit dataset prompt * fix: chatbox tool ux * feat: quote prompt module * perf: plugin tools sign * perf: model avatar * tool selector ui * feat: max histories * perf: http plugin import (#53) * perf: plugin http import * chatBox ui * perf: name * fix: Node template card (#54) * fix: ts * setting modal * package * package * feat: add plugins search (#57) * feat: add plugins search * perf: change http plugin header input * Yjl (#56) * perf: prompt tool call * perf: chat box ux * doc * doc * price tip * perf: tool selector * ui' * fix: vector queue * fix: empty tool and empty response * fix: empty msg * perf: pg index * perf: ui tip * doc * tool tip --------- Co-authored-by: yst <77910600+yu-and-liu@users.noreply.github.com> Co-authored-by: entorick <entorick11@qq.com> Co-authored-by: liujianglc <liujianglc@163.com> Co-authored-by: Fengrui Liu <liufengrui.work@bytedance.com> Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>
117 lines
3.6 KiB
TypeScript
117 lines
3.6 KiB
TypeScript
import { FlowNodeInputTypeEnum, FlowNodeTypeEnum } from './node/constant';
|
|
import {
|
|
ModuleIOValueTypeEnum,
|
|
ModuleInputKeyEnum,
|
|
VariableInputEnum,
|
|
variableMap
|
|
} from './constants';
|
|
import { FlowNodeInputItemType, FlowNodeOutputItemType } from './node/type';
|
|
import { AppTTSConfigType, ModuleItemType, VariableItemType } from './type';
|
|
import { Input_Template_Switch } from './template/input';
|
|
import { EditorVariablePickerType } from '../../../web/components/common/Textarea/PromptEditor/type';
|
|
import { Output_Template_Finish } from './template/output';
|
|
|
|
/* module */
|
|
export const getGuideModule = (modules: ModuleItemType[]) =>
|
|
modules.find((item) => item.flowType === FlowNodeTypeEnum.userGuide);
|
|
|
|
export const splitGuideModule = (guideModules?: ModuleItemType) => {
|
|
const welcomeText: string =
|
|
guideModules?.inputs?.find((item) => item.key === ModuleInputKeyEnum.welcomeText)?.value || '';
|
|
|
|
const variableModules: VariableItemType[] =
|
|
guideModules?.inputs.find((item) => item.key === ModuleInputKeyEnum.variables)?.value || [];
|
|
|
|
const questionGuide: boolean =
|
|
!!guideModules?.inputs?.find((item) => item.key === ModuleInputKeyEnum.questionGuide)?.value ||
|
|
false;
|
|
|
|
const ttsConfig: AppTTSConfigType = guideModules?.inputs?.find(
|
|
(item) => item.key === ModuleInputKeyEnum.tts
|
|
)?.value || { type: 'web' };
|
|
|
|
return {
|
|
welcomeText,
|
|
variableModules,
|
|
questionGuide,
|
|
ttsConfig
|
|
};
|
|
};
|
|
|
|
export const getOrInitModuleInputValue = (input: FlowNodeInputItemType) => {
|
|
if (input.value !== undefined || !input.valueType) return input.value;
|
|
|
|
const map: Record<string, any> = {
|
|
[ModuleIOValueTypeEnum.boolean]: false,
|
|
[ModuleIOValueTypeEnum.number]: 0,
|
|
[ModuleIOValueTypeEnum.string]: ''
|
|
};
|
|
|
|
return map[input.valueType];
|
|
};
|
|
|
|
export const getModuleInputUiField = (input: FlowNodeInputItemType) => {
|
|
if (input.type === FlowNodeInputTypeEnum.input || input.type === FlowNodeInputTypeEnum.textarea) {
|
|
return {
|
|
placeholder: input.placeholder || input.description
|
|
};
|
|
}
|
|
return {};
|
|
};
|
|
|
|
export const plugin2ModuleIO = (
|
|
pluginId: string,
|
|
modules: ModuleItemType[]
|
|
): {
|
|
inputs: FlowNodeInputItemType[];
|
|
outputs: FlowNodeOutputItemType[];
|
|
} => {
|
|
const pluginInput = modules.find((module) => module.flowType === FlowNodeTypeEnum.pluginInput);
|
|
const pluginOutput = modules.find((module) => module.flowType === FlowNodeTypeEnum.pluginOutput);
|
|
|
|
return {
|
|
inputs: pluginInput
|
|
? [
|
|
{
|
|
// plugin id
|
|
key: ModuleInputKeyEnum.pluginId,
|
|
type: FlowNodeInputTypeEnum.hidden,
|
|
label: '',
|
|
value: pluginId,
|
|
valueType: ModuleIOValueTypeEnum.string,
|
|
connected: true,
|
|
showTargetInApp: false,
|
|
showTargetInPlugin: false
|
|
},
|
|
// switch
|
|
Input_Template_Switch,
|
|
...pluginInput.inputs.map((item) => ({
|
|
...item,
|
|
...getModuleInputUiField(item),
|
|
value: getOrInitModuleInputValue(item),
|
|
edit: false,
|
|
connected: false
|
|
}))
|
|
]
|
|
: [Input_Template_Switch],
|
|
outputs: pluginOutput
|
|
? [
|
|
...pluginOutput.outputs.map((item) => ({
|
|
...item,
|
|
edit: false
|
|
})),
|
|
Output_Template_Finish
|
|
]
|
|
: [Output_Template_Finish]
|
|
};
|
|
};
|
|
|
|
export const formatEditorVariablePickerIcon = (
|
|
variables: { key: string; label: string; type?: `${VariableInputEnum}` }[]
|
|
): EditorVariablePickerType[] => {
|
|
return variables.map((item) => ({
|
|
...item,
|
|
icon: item.type ? variableMap[item.type]?.icon : variableMap['input'].icon
|
|
}));
|
|
};
|