mirror of
https://github.com/langgenius/dify.git
synced 2025-11-20 06:53:33 +00:00
Signed-off-by: -LAN- <laipz8200@outlook.com> Co-authored-by: twwu <twwu@dify.ai> Co-authored-by: crazywoola <100913391+crazywoola@users.noreply.github.com> Co-authored-by: jyong <718720800@qq.com> Co-authored-by: Wu Tianwei <30284043+WTW0313@users.noreply.github.com> Co-authored-by: QuantumGhost <obelisk.reg+git@gmail.com> Co-authored-by: lyzno1 <yuanyouhuilyz@gmail.com> Co-authored-by: quicksand <quicksandzn@gmail.com> Co-authored-by: Jyong <76649700+JohnJyong@users.noreply.github.com> Co-authored-by: lyzno1 <92089059+lyzno1@users.noreply.github.com> Co-authored-by: zxhlyh <jasonapring2015@outlook.com> Co-authored-by: Yongtao Huang <yongtaoh2022@gmail.com> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: Joel <iamjoel007@gmail.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: nite-knite <nkCoding@gmail.com> Co-authored-by: Hanqing Zhao <sherry9277@gmail.com> Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> Co-authored-by: Harry <xh001x@hotmail.com>
156 lines
6.1 KiB
TypeScript
156 lines
6.1 KiB
TypeScript
import type { StrategyDetail, StrategyPluginDetail } from '@/app/components/plugins/types'
|
|
import { BlockEnum, type NodeDefault } from '../../types'
|
|
import type { AgentNodeType } from './types'
|
|
import { FormTypeEnum } from '@/app/components/header/account-setting/model-provider-page/declarations'
|
|
import { genNodeMetaData } from '../../utils'
|
|
|
|
const metaData = genNodeMetaData({
|
|
sort: 3,
|
|
type: BlockEnum.Agent,
|
|
})
|
|
import { renderI18nObject } from '@/i18n-config'
|
|
|
|
const nodeDefault: NodeDefault<AgentNodeType> = {
|
|
metaData,
|
|
defaultValue: {
|
|
tool_node_version: '2',
|
|
},
|
|
checkValid(payload, t, moreDataForCheckValid: {
|
|
strategyProvider?: StrategyPluginDetail,
|
|
strategy?: StrategyDetail
|
|
language: string
|
|
isReadyForCheckValid: boolean
|
|
}) {
|
|
const { strategy, language, isReadyForCheckValid } = moreDataForCheckValid
|
|
if (!isReadyForCheckValid) {
|
|
return {
|
|
isValid: true,
|
|
errorMessage: '',
|
|
}
|
|
}
|
|
if (!strategy) {
|
|
return {
|
|
isValid: false,
|
|
errorMessage: t('workflow.nodes.agent.checkList.strategyNotSelected'),
|
|
}
|
|
}
|
|
for (const param of strategy.parameters) {
|
|
// single tool
|
|
if (param.required && param.type === FormTypeEnum.toolSelector) {
|
|
// no value
|
|
const toolValue = payload.agent_parameters?.[param.name]?.value
|
|
if (!toolValue) {
|
|
return {
|
|
isValid: false,
|
|
errorMessage: t('workflow.errorMsg.fieldRequired', { field: renderI18nObject(param.label, language) }),
|
|
}
|
|
}
|
|
// not enabled
|
|
else if (!toolValue.enabled) {
|
|
return {
|
|
isValid: false,
|
|
errorMessage: t('workflow.errorMsg.noValidTool', { field: renderI18nObject(param.label, language) }),
|
|
}
|
|
}
|
|
// check form of tool
|
|
else {
|
|
const schemas = toolValue.schemas || []
|
|
const userSettings = toolValue.settings
|
|
const reasoningConfig = toolValue.parameters
|
|
const version = payload.version
|
|
const toolNodeVersion = payload.tool_node_version
|
|
const mergeVersion = version || toolNodeVersion
|
|
schemas.forEach((schema: any) => {
|
|
if (schema?.required) {
|
|
if (schema.form === 'form' && !mergeVersion && !userSettings[schema.name]?.value) {
|
|
return {
|
|
isValid: false,
|
|
errorMessage: t('workflow.errorMsg.toolParameterRequired', { field: renderI18nObject(param.label, language), param: renderI18nObject(schema.label, language) }),
|
|
}
|
|
}
|
|
if (schema.form === 'form' && mergeVersion && !userSettings[schema.name]?.value.value) {
|
|
return {
|
|
isValid: false,
|
|
errorMessage: t('workflow.errorMsg.toolParameterRequired', { field: renderI18nObject(param.label, language), param: renderI18nObject(schema.label, language) }),
|
|
}
|
|
}
|
|
if (schema.form === 'llm' && !mergeVersion && reasoningConfig[schema.name].auto === 0 && !reasoningConfig[schema.name]?.value) {
|
|
return {
|
|
isValid: false,
|
|
errorMessage: t('workflow.errorMsg.toolParameterRequired', { field: renderI18nObject(param.label, language), param: renderI18nObject(schema.label, language) }),
|
|
}
|
|
}
|
|
if (schema.form === 'llm' && mergeVersion && reasoningConfig[schema.name].auto === 0 && !reasoningConfig[schema.name]?.value.value) {
|
|
return {
|
|
isValid: false,
|
|
errorMessage: t('workflow.errorMsg.toolParameterRequired', { field: renderI18nObject(param.label, language), param: renderI18nObject(schema.label, language) }),
|
|
}
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|
|
// multiple tools
|
|
if (param.required && param.type === FormTypeEnum.multiToolSelector) {
|
|
const tools = payload.agent_parameters?.[param.name]?.value || []
|
|
// no value
|
|
if (!tools.length) {
|
|
return {
|
|
isValid: false,
|
|
errorMessage: t('workflow.errorMsg.fieldRequired', { field: renderI18nObject(param.label, language) }),
|
|
}
|
|
}
|
|
// not enabled
|
|
else if (tools.every((tool: any) => !tool.enabled)) {
|
|
return {
|
|
isValid: false,
|
|
errorMessage: t('workflow.errorMsg.noValidTool', { field: renderI18nObject(param.label, language) }),
|
|
}
|
|
}
|
|
// check form of tools
|
|
else {
|
|
const validState = {
|
|
isValid: true,
|
|
errorMessage: '',
|
|
}
|
|
for (const tool of tools) {
|
|
const schemas = tool.schemas || []
|
|
const userSettings = tool.settings
|
|
const reasoningConfig = tool.parameters
|
|
schemas.forEach((schema: any) => {
|
|
if (schema?.required) {
|
|
if (schema.form === 'form' && !userSettings[schema.name]?.value) {
|
|
return {
|
|
isValid: false,
|
|
errorMessage: t('workflow.errorMsg.toolParameterRequired', { field: renderI18nObject(param.label, language), param: renderI18nObject(schema.label, language) }),
|
|
}
|
|
}
|
|
if (schema.form === 'llm' && reasoningConfig[schema.name]?.auto === 0 && !reasoningConfig[schema.name]?.value) {
|
|
return {
|
|
isValid: false,
|
|
errorMessage: t('workflow.errorMsg.toolParameterRequired', { field: renderI18nObject(param.label, language), param: renderI18nObject(schema.label, language) }),
|
|
}
|
|
}
|
|
}
|
|
})
|
|
}
|
|
return validState
|
|
}
|
|
}
|
|
// common params
|
|
if (param.required && !(payload.agent_parameters?.[param.name]?.value || param.default)) {
|
|
return {
|
|
isValid: false,
|
|
errorMessage: t('workflow.errorMsg.fieldRequired', { field: renderI18nObject(param.label, language) }),
|
|
}
|
|
}
|
|
}
|
|
return {
|
|
isValid: true,
|
|
errorMessage: '',
|
|
}
|
|
},
|
|
}
|
|
|
|
export default nodeDefault
|