mirror of
https://github.com/labring/FastGPT.git
synced 2025-10-16 08:01:18 +00:00

* feat: system Tool (#4959) * feat: independent system tool * chore: use ToolNode instead of PluginModule * chore: tools * chore: tools templateDir * refactor: templates * feat: flush code * chore: update template * refactor: migrate delay * feat: worker pool * chore: Dockerfile * docs: add tools.template.json * feat: auto flush system tools * fix: ts error * chore: create new pool temporarily * chore: system tool migration * chore: migration * fix: fix pnpm-workspace.yaml * chore: update pnpm-lock.yaml to integrate tool * chore(systemTool): chore * chore: add system plugin * chore(deps): update @fastgpt-sdk/plugin * fix: type error * chore: remove plugin package * chore: move pro plugins code to open source * feat: support system tool config input * fix: type error * perf: i18n * fix: cr * chore: update sdk * feat: system plugin cache * update mcp server (#5076) * update mcp server * fix: action * fix: dockerfile * fix: dockerfile * fix: dockerfile * fix: dockerfile * fix: dockerfile * fix: dockerfile * feat: system Tool (#4959) * feat: independent system tool * chore: use ToolNode instead of PluginModule * chore: tools * chore: tools templateDir * refactor: templates * feat: flush code * chore: update template * refactor: migrate delay * feat: worker pool * chore: Dockerfile * docs: add tools.template.json * feat: auto flush system tools * fix: ts error * chore: create new pool temporarily * chore: system tool migration * chore: migration * fix: fix pnpm-workspace.yaml * chore: update pnpm-lock.yaml to integrate tool * chore(systemTool): chore * chore: add system plugin * chore(deps): update @fastgpt-sdk/plugin * fix: type error * chore: remove plugin package * chore: move pro plugins code to open source * feat: support system tool config input * fix: type error * perf: i18n * fix: cr * chore: update sdk * feat: system plugin cache * perf: run tool * update package * perf: config key * fix: tool ini * tool config params * perf: workflow type * rename tools to agent * version list * perf: tool error * config secret ux * perf: config secret ux * fix: tool config field * add course to secret input * feat: support inputConfig switch (#5099) * feat: support inputConfig switch * deps: update @fastgpt-sdk/plugin * chore: update workflows * fix: inputType * fix: secret * add default value to node * update i18n * eslint * add precision to number input * feat: add number input and select * perf: number ux * fix: code * Proxies image requests to plugin service (#5111) * Proxies image requests to plugin service Adds a rewrite rule and API endpoint to proxy image requests to the plugin service. This allows the app to fetch images from the plugin's tools directory. It also adds the plugin base URL to the service's constants, so that it can use the plugin URL when proxying requests. * fix: update FastGPTPluginUrl to remove unnecessary API path * feat: update image proxy destination and add plugin image handler * Adapt plugin id * replace avatar * remove rewrite * fix: plugin avatar * update system tool doc * feat: system tool type * yml sh * yml sh * update doc * fix: simple app tool select * fix: switch ui * update pacakge * Yamljs (#5129) * update docker-compose configuration: bump fastgpt and fastgpt-plugin images, change minio host to service name, and adjust service dependencies * refactor: comment out port exposure in docker-compose configuration * update: uncomment port exposure in docker-compose configuration * update: change MINIO_HOST to use specific IP address in docker configuration * update: modify fastgpt-plugin image version in docker configuration * update readme * doc * remove --------- Co-authored-by: Finley Ge <32237950+FinleyGe@users.noreply.github.com> Co-authored-by: Theresa <63280168+sd0ric4@users.noreply.github.com>
406 lines
11 KiB
TypeScript
406 lines
11 KiB
TypeScript
import { i18nT } from '../../../web/i18n/utils';
|
|
import type { JsonSchemaPropertiesItemType } from '../app/jsonschema';
|
|
|
|
export enum FlowNodeTemplateTypeEnum {
|
|
systemInput = 'systemInput',
|
|
ai = 'ai',
|
|
function = 'function',
|
|
interactive = 'interactive',
|
|
|
|
// System tool type
|
|
tools = 'tools',
|
|
search = 'search',
|
|
multimodal = 'multimodal',
|
|
communication = 'communication',
|
|
finance = 'finance',
|
|
design = 'design',
|
|
productivity = 'productivity',
|
|
news = 'news',
|
|
entertainment = 'entertainment',
|
|
social = 'social',
|
|
scientific = 'scientific',
|
|
other = 'other',
|
|
|
|
// Team app type
|
|
teamApp = 'teamApp'
|
|
}
|
|
|
|
export enum WorkflowIOValueTypeEnum {
|
|
string = 'string',
|
|
number = 'number',
|
|
boolean = 'boolean',
|
|
object = 'object',
|
|
|
|
arrayString = 'arrayString',
|
|
arrayNumber = 'arrayNumber',
|
|
arrayBoolean = 'arrayBoolean',
|
|
arrayObject = 'arrayObject',
|
|
arrayAny = 'arrayAny',
|
|
any = 'any',
|
|
|
|
chatHistory = 'chatHistory',
|
|
datasetQuote = 'datasetQuote',
|
|
|
|
dynamic = 'dynamic',
|
|
|
|
// plugin special type
|
|
selectDataset = 'selectDataset',
|
|
|
|
// abandon
|
|
selectApp = 'selectApp'
|
|
}
|
|
|
|
export const toolValueTypeList: {
|
|
label: string;
|
|
value: WorkflowIOValueTypeEnum;
|
|
jsonSchema: JsonSchemaPropertiesItemType;
|
|
}[] = [
|
|
{
|
|
label: WorkflowIOValueTypeEnum.string,
|
|
value: WorkflowIOValueTypeEnum.string,
|
|
jsonSchema: {
|
|
type: 'string'
|
|
}
|
|
},
|
|
{
|
|
label: WorkflowIOValueTypeEnum.number,
|
|
value: WorkflowIOValueTypeEnum.number,
|
|
jsonSchema: {
|
|
type: 'number'
|
|
}
|
|
},
|
|
{
|
|
label: WorkflowIOValueTypeEnum.boolean,
|
|
value: WorkflowIOValueTypeEnum.boolean,
|
|
jsonSchema: {
|
|
type: 'boolean'
|
|
}
|
|
},
|
|
{
|
|
label: 'array<string>',
|
|
value: WorkflowIOValueTypeEnum.arrayString,
|
|
jsonSchema: {
|
|
type: 'array',
|
|
items: {
|
|
type: 'string'
|
|
}
|
|
}
|
|
},
|
|
{
|
|
label: 'array<number>',
|
|
value: WorkflowIOValueTypeEnum.arrayNumber,
|
|
jsonSchema: {
|
|
type: 'array',
|
|
items: {
|
|
type: 'number'
|
|
}
|
|
}
|
|
},
|
|
{
|
|
label: 'array<boolean>',
|
|
value: WorkflowIOValueTypeEnum.arrayBoolean,
|
|
jsonSchema: {
|
|
type: 'array',
|
|
items: {
|
|
type: 'boolean'
|
|
}
|
|
}
|
|
}
|
|
];
|
|
export const valueTypeJsonSchemaMap: Record<string, JsonSchemaPropertiesItemType> =
|
|
toolValueTypeList.reduce(
|
|
(acc, item) => {
|
|
acc[item.value] = item.jsonSchema;
|
|
return acc;
|
|
},
|
|
{} as Record<string, JsonSchemaPropertiesItemType>
|
|
);
|
|
|
|
/* reg: modulename key */
|
|
export enum NodeInputKeyEnum {
|
|
// old
|
|
welcomeText = 'welcomeText',
|
|
switch = 'switch', // a trigger switch
|
|
history = 'history',
|
|
answerText = 'text',
|
|
|
|
// system config
|
|
questionGuide = 'questionGuide',
|
|
tts = 'tts',
|
|
whisper = 'whisper',
|
|
variables = 'variables',
|
|
scheduleTrigger = 'scheduleTrigger',
|
|
chatInputGuide = 'chatInputGuide',
|
|
autoExecute = 'autoExecute',
|
|
|
|
// plugin config
|
|
instruction = 'instruction',
|
|
|
|
// entry
|
|
userChatInput = 'userChatInput',
|
|
inputFiles = 'inputFiles',
|
|
|
|
agents = 'agents', // cq agent key
|
|
|
|
// latest
|
|
// common
|
|
aiModel = 'model',
|
|
aiSystemPrompt = 'systemPrompt',
|
|
description = 'description',
|
|
anyInput = 'system_anyInput',
|
|
textareaInput = 'system_textareaInput',
|
|
addInputParam = 'system_addInputParam',
|
|
forbidStream = 'system_forbid_stream',
|
|
headerSecret = 'system_header_secret',
|
|
systemInputConfig = 'system_input_config',
|
|
|
|
// history
|
|
historyMaxAmount = 'maxContext',
|
|
|
|
// ai chat
|
|
aiChatTemperature = 'temperature',
|
|
aiChatMaxToken = 'maxToken',
|
|
aiChatSettingModal = 'aiSettings',
|
|
aiChatIsResponseText = 'isResponseAnswerText',
|
|
aiChatQuoteRole = 'aiChatQuoteRole',
|
|
aiChatQuoteTemplate = 'quoteTemplate',
|
|
aiChatQuotePrompt = 'quotePrompt',
|
|
aiChatDatasetQuote = 'quoteQA',
|
|
aiChatVision = 'aiChatVision',
|
|
stringQuoteText = 'stringQuoteText',
|
|
aiChatReasoning = 'aiChatReasoning',
|
|
aiChatTopP = 'aiChatTopP',
|
|
aiChatStopSign = 'aiChatStopSign',
|
|
aiChatResponseFormat = 'aiChatResponseFormat',
|
|
aiChatJsonSchema = 'aiChatJsonSchema',
|
|
|
|
// dataset
|
|
datasetSelectList = 'datasets',
|
|
datasetSimilarity = 'similarity',
|
|
datasetMaxTokens = 'limit',
|
|
datasetSearchMode = 'searchMode',
|
|
datasetSearchEmbeddingWeight = 'embeddingWeight',
|
|
|
|
datasetSearchUsingReRank = 'usingReRank',
|
|
datasetSearchRerankWeight = 'rerankWeight',
|
|
datasetSearchRerankModel = 'rerankModel',
|
|
|
|
datasetSearchUsingExtensionQuery = 'datasetSearchUsingExtensionQuery',
|
|
datasetSearchExtensionModel = 'datasetSearchExtensionModel',
|
|
datasetSearchExtensionBg = 'datasetSearchExtensionBg',
|
|
collectionFilterMatch = 'collectionFilterMatch',
|
|
authTmbId = 'authTmbId',
|
|
datasetDeepSearch = 'datasetDeepSearch',
|
|
datasetDeepSearchModel = 'datasetDeepSearchModel',
|
|
datasetDeepSearchMaxTimes = 'datasetDeepSearchMaxTimes',
|
|
datasetDeepSearchBg = 'datasetDeepSearchBg',
|
|
|
|
// concat dataset
|
|
datasetQuoteList = 'system_datasetQuoteList',
|
|
|
|
// context extract
|
|
contextExtractInput = 'content',
|
|
extractKeys = 'extractKeys',
|
|
|
|
// http
|
|
httpReqUrl = 'system_httpReqUrl',
|
|
httpHeaders = 'system_httpHeader',
|
|
httpMethod = 'system_httpMethod',
|
|
httpParams = 'system_httpParams',
|
|
httpJsonBody = 'system_httpJsonBody',
|
|
httpFormBody = 'system_httpFormBody',
|
|
httpContentType = 'system_httpContentType',
|
|
httpTimeout = 'system_httpTimeout',
|
|
abandon_httpUrl = 'url',
|
|
|
|
// app
|
|
runAppSelectApp = 'app',
|
|
|
|
// plugin
|
|
pluginId = 'pluginId',
|
|
pluginStart = 'pluginStart',
|
|
|
|
// if else
|
|
condition = 'condition',
|
|
ifElseList = 'ifElseList',
|
|
|
|
// variable update
|
|
updateList = 'updateList',
|
|
|
|
// code
|
|
code = 'code',
|
|
codeType = 'codeType', // js|py
|
|
|
|
// read files
|
|
fileUrlList = 'fileUrlList',
|
|
|
|
// user select
|
|
userSelectOptions = 'userSelectOptions',
|
|
|
|
// loop
|
|
loopInputArray = 'loopInputArray',
|
|
childrenNodeIdList = 'childrenNodeIdList',
|
|
nodeWidth = 'nodeWidth',
|
|
nodeHeight = 'nodeHeight',
|
|
loopNodeInputHeight = 'loopNodeInputHeight',
|
|
// loop start
|
|
loopStartInput = 'loopStartInput',
|
|
loopStartIndex = 'loopStartIndex',
|
|
// loop end
|
|
loopEndInput = 'loopEndInput',
|
|
|
|
// form input
|
|
userInputForms = 'userInputForms',
|
|
|
|
// comment
|
|
commentText = 'commentText',
|
|
commentSize = 'commentSize',
|
|
|
|
// Tool
|
|
toolData = 'system_toolData',
|
|
toolSetData = 'system_toolSetData'
|
|
}
|
|
|
|
export enum NodeOutputKeyEnum {
|
|
// common
|
|
userChatInput = 'userChatInput',
|
|
history = 'history',
|
|
answerText = 'answerText', // node answer. the value will be show and save to history
|
|
reasoningText = 'reasoningText', // node reasoning. the value will be show but not save to history
|
|
success = 'success',
|
|
failed = 'failed',
|
|
error = 'error',
|
|
text = 'system_text',
|
|
addOutputParam = 'system_addOutputParam',
|
|
rawResponse = 'system_rawResponse',
|
|
systemError = 'system_error',
|
|
|
|
// start
|
|
userFiles = 'userFiles',
|
|
|
|
// dataset
|
|
datasetQuoteQA = 'quoteQA',
|
|
|
|
// classify
|
|
cqResult = 'cqResult',
|
|
// context extract
|
|
contextExtractFields = 'fields',
|
|
|
|
// tf switch
|
|
resultTrue = 'system_resultTrue',
|
|
resultFalse = 'system_resultFalse',
|
|
|
|
// tools
|
|
selectedTools = 'selectedTools',
|
|
|
|
// http
|
|
httpRawResponse = 'httpRawResponse',
|
|
|
|
// plugin
|
|
pluginStart = 'pluginStart',
|
|
|
|
// if else
|
|
ifElseResult = 'ifElseResult',
|
|
|
|
//user select
|
|
selectResult = 'selectResult',
|
|
|
|
// loop
|
|
loopArray = 'loopArray',
|
|
// loop start
|
|
loopStartInput = 'loopStartInput',
|
|
loopStartIndex = 'loopStartIndex',
|
|
|
|
// form input
|
|
formInputResult = 'formInputResult'
|
|
}
|
|
|
|
export enum VariableInputEnum {
|
|
input = 'input',
|
|
textarea = 'textarea',
|
|
numberInput = 'numberInput',
|
|
select = 'select',
|
|
custom = 'custom'
|
|
}
|
|
export const variableMap: Record<
|
|
VariableInputEnum,
|
|
{
|
|
icon: string;
|
|
label: string;
|
|
value: VariableInputEnum;
|
|
defaultValueType: WorkflowIOValueTypeEnum;
|
|
description?: string;
|
|
}
|
|
> = {
|
|
[VariableInputEnum.input]: {
|
|
icon: 'core/workflow/inputType/input',
|
|
label: i18nT('common:core.workflow.inputType.textInput'),
|
|
value: VariableInputEnum.input,
|
|
defaultValueType: WorkflowIOValueTypeEnum.string
|
|
},
|
|
[VariableInputEnum.textarea]: {
|
|
icon: 'core/workflow/inputType/textarea',
|
|
label: i18nT('common:core.workflow.inputType.textarea'),
|
|
value: VariableInputEnum.textarea,
|
|
defaultValueType: WorkflowIOValueTypeEnum.string,
|
|
description: i18nT('app:variable.textarea_type_desc')
|
|
},
|
|
[VariableInputEnum.numberInput]: {
|
|
icon: 'core/workflow/inputType/numberInput',
|
|
label: i18nT('common:core.workflow.inputType.number input'),
|
|
value: VariableInputEnum.numberInput,
|
|
defaultValueType: WorkflowIOValueTypeEnum.number
|
|
},
|
|
[VariableInputEnum.select]: {
|
|
icon: 'core/workflow/inputType/option',
|
|
label: i18nT('common:core.workflow.inputType.select'),
|
|
value: VariableInputEnum.select,
|
|
defaultValueType: WorkflowIOValueTypeEnum.string
|
|
},
|
|
[VariableInputEnum.custom]: {
|
|
icon: 'core/workflow/inputType/customVariable',
|
|
label: i18nT('common:core.workflow.inputType.custom'),
|
|
value: VariableInputEnum.custom,
|
|
defaultValueType: WorkflowIOValueTypeEnum.string,
|
|
description: i18nT('app:variable.select type_desc')
|
|
}
|
|
};
|
|
|
|
/* run time */
|
|
export enum RuntimeEdgeStatusEnum {
|
|
'waiting' = 'waiting',
|
|
'active' = 'active',
|
|
'skipped' = 'skipped'
|
|
}
|
|
|
|
export const VARIABLE_NODE_ID = 'VARIABLE_NODE_ID';
|
|
export const DYNAMIC_INPUT_REFERENCE_KEY = 'DYNAMIC_INPUT_REFERENCE_KEY';
|
|
|
|
// http node body content type
|
|
export enum ContentTypes {
|
|
none = 'none',
|
|
formData = 'form-data',
|
|
xWwwFormUrlencoded = 'x-www-form-urlencoded',
|
|
json = 'json',
|
|
xml = 'xml',
|
|
raw = 'raw-text'
|
|
}
|
|
|
|
export const ArrayTypeMap: Record<WorkflowIOValueTypeEnum, WorkflowIOValueTypeEnum> = {
|
|
[WorkflowIOValueTypeEnum.string]: WorkflowIOValueTypeEnum.arrayString,
|
|
[WorkflowIOValueTypeEnum.number]: WorkflowIOValueTypeEnum.arrayNumber,
|
|
[WorkflowIOValueTypeEnum.boolean]: WorkflowIOValueTypeEnum.arrayBoolean,
|
|
[WorkflowIOValueTypeEnum.object]: WorkflowIOValueTypeEnum.arrayObject,
|
|
[WorkflowIOValueTypeEnum.arrayString]: WorkflowIOValueTypeEnum.arrayString,
|
|
[WorkflowIOValueTypeEnum.arrayNumber]: WorkflowIOValueTypeEnum.arrayNumber,
|
|
[WorkflowIOValueTypeEnum.arrayBoolean]: WorkflowIOValueTypeEnum.arrayBoolean,
|
|
[WorkflowIOValueTypeEnum.arrayObject]: WorkflowIOValueTypeEnum.arrayObject,
|
|
[WorkflowIOValueTypeEnum.chatHistory]: WorkflowIOValueTypeEnum.arrayObject,
|
|
[WorkflowIOValueTypeEnum.datasetQuote]: WorkflowIOValueTypeEnum.arrayObject,
|
|
[WorkflowIOValueTypeEnum.dynamic]: WorkflowIOValueTypeEnum.arrayObject,
|
|
[WorkflowIOValueTypeEnum.selectDataset]: WorkflowIOValueTypeEnum.arrayObject,
|
|
[WorkflowIOValueTypeEnum.selectApp]: WorkflowIOValueTypeEnum.arrayObject,
|
|
[WorkflowIOValueTypeEnum.arrayAny]: WorkflowIOValueTypeEnum.arrayAny,
|
|
[WorkflowIOValueTypeEnum.any]: WorkflowIOValueTypeEnum.arrayAny
|
|
};
|