Переглянути джерело

Fix array-only filtering in List Operator picker; remove file children fallback and align child types. (#26240)

tags/1.9.1
Wood 1 місяць тому
джерело
коміт
eab6f65409
Аккаунт користувача з таким Email не знайдено

+ 17
- 21
web/app/components/workflow/nodes/_base/components/variable/utils.ts Переглянути файл



import { import {
AGENT_OUTPUT_STRUCT, AGENT_OUTPUT_STRUCT,
FILE_STRUCT,
HTTP_REQUEST_OUTPUT_STRUCT, HTTP_REQUEST_OUTPUT_STRUCT,
KNOWLEDGE_RETRIEVAL_OUTPUT_STRUCT, KNOWLEDGE_RETRIEVAL_OUTPUT_STRUCT,
LLM_OUTPUT_STRUCT, LLM_OUTPUT_STRUCT,
[VarType.boolean]: Type.boolean, [VarType.boolean]: Type.boolean,
[VarType.object]: Type.object, [VarType.object]: Type.object,
[VarType.array]: Type.array, [VarType.array]: Type.array,
[VarType.arrayString]: Type.array,
[VarType.arrayNumber]: Type.array,
[VarType.arrayObject]: Type.array,
[VarType.arrayFile]: Type.array,
} as any } as any
)[type] || Type.string )[type] || Type.string
) )
children: filteredObj.children, children: filteredObj.children,
} }
}) })

if (isFile && Array.isArray(childrenResult)) {
if (childrenResult.length === 0) {
childrenResult = OUTPUT_FILE_SUB_VARIABLES.map(key => ({
variable: key,
type: key === 'size' ? VarType.number : VarType.string,
}))
}
}
} }
else { else {
childrenResult = [] childrenResult = []
variable: outputKey, variable: outputKey,
type: type:
output.type === 'array' output.type === 'array'
? (`Array[${
output.items?.type
? output.items.type.slice(0, 1).toLocaleUpperCase()
+ output.items.type.slice(1)
: 'Unknown'
? (`Array[${output.items?.type
? output.items.type.slice(0, 1).toLocaleUpperCase()
+ output.items.type.slice(1)
: 'Unknown'
}]` as VarType) }]` as VarType)
: (`${
output.type
? output.type.slice(0, 1).toLocaleUpperCase()
+ output.type.slice(1)
: 'Unknown'
: (`${output.type
? output.type.slice(0, 1).toLocaleUpperCase()
+ output.type.slice(1)
: 'Unknown'
}` as VarType), }` as VarType),
}) })
}, },
const children = (() => { const children = (() => {
if (isFile) { if (isFile) {
return OUTPUT_FILE_SUB_VARIABLES.map((key) => { return OUTPUT_FILE_SUB_VARIABLES.map((key) => {
const def = FILE_STRUCT.find(c => c.variable === key)
return { return {
variable: key, variable: key,
type: key === 'size' ? VarType.number : VarType.string,
type: def?.type || VarType.string,
} }
}) })
} }
if (isFile) { if (isFile) {
return { return {
children: OUTPUT_FILE_SUB_VARIABLES.map((key) => { children: OUTPUT_FILE_SUB_VARIABLES.map((key) => {
const def = FILE_STRUCT.find(c => c.variable === key)
return { return {
variable: key, variable: key,
type: key === 'size' ? VarType.number : VarType.string,
type: def?.type || VarType.string,
} }
}), }),
} }

+ 5
- 4
web/app/components/workflow/nodes/_base/components/variable/var-reference-vars.tsx Переглянути файл

import PickerStructurePanel from '@/app/components/workflow/nodes/_base/components/variable/object-child-tree-panel/picker' import PickerStructurePanel from '@/app/components/workflow/nodes/_base/components/variable/object-child-tree-panel/picker'
import { isSpecialVar, varTypeToStructType } from './utils' import { isSpecialVar, varTypeToStructType } from './utils'
import type { Field } from '@/app/components/workflow/nodes/llm/types' import type { Field } from '@/app/components/workflow/nodes/llm/types'
import { FILE_STRUCT } from '@/app/components/workflow/constants'
import { noop } from 'lodash-es' import { noop } from 'lodash-es'
import { CodeAssistant, MagicEdit } from '@/app/components/base/icons/src/vender/line/general' import { CodeAssistant, MagicEdit } from '@/app/components/base/icons/src/vender/line/general'
import ManageInputField from './manage-input-field' import ManageInputField from './manage-input-field'


const objStructuredOutput: StructuredOutput | null = useMemo(() => { const objStructuredOutput: StructuredOutput | null = useMemo(() => {
if (!isObj) return null if (!isObj) return null
const properties: Record<string, Field> = {};
(isFile ? FILE_STRUCT : (itemData.children as Var[])).forEach((c) => {
const properties: Record<string, Field> = {}
const childrenVars = (itemData.children as Var[]) || []
childrenVars.forEach((c) => {
properties[c.variable] = { properties[c.variable] = {
type: varTypeToStructType(c.type), type: varTypeToStructType(c.type),
} }
additionalProperties: false, additionalProperties: false,
}, },
} }
}, [isFile, isObj, itemData.children])
}, [isObj, itemData.children])


const structuredOutput = (() => { const structuredOutput = (() => {
if (isStructureOutput) if (isStructureOutput)
</> </>
) )
} }

export default React.memo(VarReferenceVars) export default React.memo(VarReferenceVars)

+ 1
- 0
web/app/components/workflow/nodes/list-operator/panel.tsx Переглянути файл

value={inputs.variable || []} value={inputs.variable || []}
onChange={handleVarChanges} onChange={handleVarChanges}
filterVar={filterVar} filterVar={filterVar}
isSupportFileVar={false}
typePlaceHolder='Array' typePlaceHolder='Array'
/> />
</Field> </Field>

Завантаження…
Відмінити
Зберегти