diff --git a/web/app/components/workflow/nodes/llm/components/config-prompt.tsx b/web/app/components/workflow/nodes/llm/components/config-prompt.tsx index 6aaff989f7..f6306bddce 100644 --- a/web/app/components/workflow/nodes/llm/components/config-prompt.tsx +++ b/web/app/components/workflow/nodes/llm/components/config-prompt.tsx @@ -147,9 +147,7 @@ const ConfigPrompt: FC = ({ const newPrompt = produce(payload as PromptTemplateItem[], (draft) => { const item = draft[index] if (!isPromptMessageContext(item)) { - const content = item.text - const nextMetadata = cleanupToolMetadata(content, metadata) - ; (item as PromptItem).metadata = nextMetadata + (item as PromptItem).metadata = metadata } }) onChange(newPrompt) @@ -258,12 +256,8 @@ const ConfigPrompt: FC = ({ }, [onChange, payload]) const handleCompletionMetadataChange = useCallback((metadata: Record) => { - const promptItem = payload as PromptItem - const contentKey = promptItem.edition_type === EditionType.jinja2 ? 'jinja2_text' : 'text' - const content = (promptItem[contentKey] ?? '') as string - const nextMetadata = cleanupToolMetadata(content, metadata) const newPrompt = produce(payload as PromptItem, (draft) => { - draft.metadata = nextMetadata + draft.metadata = metadata }) onChange(newPrompt) }, [onChange, payload]) diff --git a/web/app/components/workflow/skill/editor/skill-editor/plugins/tool-block/tool-picker-block.tsx b/web/app/components/workflow/skill/editor/skill-editor/plugins/tool-block/tool-picker-block.tsx index a3d31ffa5a..c1ad1b3579 100644 --- a/web/app/components/workflow/skill/editor/skill-editor/plugins/tool-block/tool-picker-block.tsx +++ b/web/app/components/workflow/skill/editor/skill-editor/plugins/tool-block/tool-picker-block.tsx @@ -44,6 +44,29 @@ const ToolPickerBlock: FC = ({ scope = 'all' }) => { const options = useMemo(() => [new ToolPickerMenuOption()], []) + const buildNextMetadata = useCallback((metadata: Record, toolEntries: { + configId: string + tool: ToolDefaultValue + }[]) => { + const nextTools = { ...(metadata.tools || {}) } as Record + toolEntries.forEach(({ configId, tool }) => { + const schemas = toolParametersToFormSchemas((tool.paramSchemas || []) as ToolParameter[]) + const fields = schemas.map(schema => ({ + id: schema.variable, + value: schema.default ?? null, + auto: schema.form === 'llm', + })) + nextTools[configId] = { + type: tool.provider_type, + configuration: { fields }, + } + }) + return { + ...metadata, + tools: nextTools, + } + }, []) + const insertTools = useCallback((tools: ToolDefaultValue[]) => { const toolEntries = tools.map(tool => ({ configId: uuid(), @@ -88,48 +111,20 @@ const ToolPickerBlock: FC = ({ scope = 'all' }) => { if (isUsingExternalMetadata) { const metadata = (toolBlockContext?.metadata || {}) as Record - const nextTools = { ...(metadata.tools || {}) } as Record - toolEntries.forEach(({ configId, tool }) => { - const schemas = toolParametersToFormSchemas((tool.paramSchemas || []) as ToolParameter[]) - const fields = schemas.map(schema => ({ - id: schema.variable, - value: schema.default ?? null, - auto: schema.form === 'llm', - })) - nextTools[configId] = { - type: tool.provider_type, - configuration: { fields }, - } - }) - toolBlockContext?.onMetadataChange?.({ - ...metadata, - tools: nextTools, - }) + const nextMetadata = buildNextMetadata(metadata, toolEntries) + toolBlockContext?.onMetadataChange?.(nextMetadata) return } const { activeTabId, fileMetadata, setDraftMetadata, pinTab } = storeApi.getState() if (!activeTabId || activeTabId === START_TAB_ID) return const metadata = (fileMetadata.get(activeTabId) || {}) as Record - const nextTools = { ...(metadata.tools || {}) } as Record - toolEntries.forEach(({ configId, tool }) => { - const schemas = toolParametersToFormSchemas((tool.paramSchemas || []) as ToolParameter[]) - const fields = schemas.map(schema => ({ - id: schema.variable, - value: schema.default ?? null, - auto: schema.form === 'llm', - })) - nextTools[configId] = { - type: tool.provider_type, // === CollectionType.mcp ? 'mcp' : 'builtin' - configuration: { fields }, - } - }) + const nextMetadata = buildNextMetadata(metadata, toolEntries) setDraftMetadata(activeTabId, { - ...metadata, - tools: nextTools, + ...nextMetadata, }) pinTab(activeTabId) - }, [checkForTriggerMatch, editor, isUsingExternalMetadata, storeApi, toolBlockContext]) + }, [buildNextMetadata, checkForTriggerMatch, editor, isUsingExternalMetadata, storeApi, toolBlockContext]) const renderMenu = useCallback(( anchorElementRef: React.RefObject,