From b5c43cc113fb05e5184297c6b315fa9740357571 Mon Sep 17 00:00:00 2001 From: Typer_Body Date: Sat, 23 May 2026 03:21:31 +0800 Subject: [PATCH] =?UTF-8?q?new=20nofe=E3=80=81=E3=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/langbot/pkg/workflow/metadata.py | 1 + .../metadata/nodes/call_workflow.yaml | 2 +- .../dynamic-form/DynamicFormItemComponent.tsx | 52 +++++++++++++++++++ web/src/app/infra/entities/form/dynamic.ts | 1 + web/src/i18n/locales/en-US.ts | 4 ++ web/src/i18n/locales/zh-Hans.ts | 4 ++ 6 files changed, 63 insertions(+), 1 deletion(-) diff --git a/src/langbot/pkg/workflow/metadata.py b/src/langbot/pkg/workflow/metadata.py index b63ded8d..4eaa0de3 100644 --- a/src/langbot/pkg/workflow/metadata.py +++ b/src/langbot/pkg/workflow/metadata.py @@ -64,6 +64,7 @@ class NodeMetadataValidator: 'plugin-selector', 'webhook-url', 'embed-code', + 'workflow-selector', } def validate(self, metadata: dict[str, Any]) -> list[str]: diff --git a/src/langbot/templates/metadata/nodes/call_workflow.yaml b/src/langbot/templates/metadata/nodes/call_workflow.yaml index 62e79e86..739bf654 100644 --- a/src/langbot/templates/metadata/nodes/call_workflow.yaml +++ b/src/langbot/templates/metadata/nodes/call_workflow.yaml @@ -2,7 +2,7 @@ name: call_workflow label: en_US: Call Workflow - zh_Hans: 调用工作流 + zh_Hans: 调用 工作流 category: action icon: Workflow color: '#8b5cf6' diff --git a/web/src/app/home/components/dynamic-form/DynamicFormItemComponent.tsx b/web/src/app/home/components/dynamic-form/DynamicFormItemComponent.tsx index c7e59a48..c0bbd7fb 100644 --- a/web/src/app/home/components/dynamic-form/DynamicFormItemComponent.tsx +++ b/web/src/app/home/components/dynamic-form/DynamicFormItemComponent.tsx @@ -27,6 +27,7 @@ import { RerankModel, Pipeline, PluginTool, + Workflow, } from '@/app/infra/entities/api'; import { toast } from 'sonner'; import { useTranslation } from 'react-i18next'; @@ -114,6 +115,7 @@ export default function DynamicFormItemComponent({ const [knowledgeBases, setKnowledgeBases] = useState([]); const [bots, setBots] = useState([]); const [pipelines, setPipelines] = useState([]); + const [workflows, setWorkflows] = useState([]); const [tools, setTools] = useState([]); const [uploading, setUploading] = useState(false); const [kbDialogOpen, setKbDialogOpen] = useState(false); @@ -295,6 +297,19 @@ export default function DynamicFormItemComponent({ } }, [config.type]); + useEffect(() => { + if (config.type === DynamicFormItemType.WORKFLOW_SELECTOR) { + httpClient + .getWorkflows() + .then((resp) => { + setWorkflows(resp.workflows); + }) + .catch((err) => { + toast.error(t('workflows.loadWorkflowsFailed') + err.msg); + }); + } + }, [config.type]); + switch (config.type) { case DynamicFormItemType.INT: case DynamicFormItemType.FLOAT: @@ -1397,6 +1412,43 @@ export default function DynamicFormItemComponent({ ); + case DynamicFormItemType.WORKFLOW_SELECTOR: + return ( + + ); + case DynamicFormItemType.TOOLS_SELECTOR: return ( <> diff --git a/web/src/app/infra/entities/form/dynamic.ts b/web/src/app/infra/entities/form/dynamic.ts index fe3af07d..7d384ce4 100644 --- a/web/src/app/infra/entities/form/dynamic.ts +++ b/web/src/app/infra/entities/form/dynamic.ts @@ -39,6 +39,7 @@ export enum DynamicFormItemType { EMBEDDING_MODEL_SELECTOR = 'embedding-model-selector', RERANK_MODEL_SELECTOR = 'rerank-model-selector', PIPELINE_SELECTOR = 'pipeline-selector', + WORKFLOW_SELECTOR = 'workflow-selector', MODEL_FALLBACK_SELECTOR = 'model-fallback-selector', PROMPT_EDITOR = 'prompt-editor', UNKNOWN = 'unknown', diff --git a/web/src/i18n/locales/en-US.ts b/web/src/i18n/locales/en-US.ts index af9eccda..009e6c77 100644 --- a/web/src/i18n/locales/en-US.ts +++ b/web/src/i18n/locales/en-US.ts @@ -2181,6 +2181,10 @@ const enUS = { intent: 'Intent', entities: 'Entities', }, + // Workflow selector for dynamic forms + selectWorkflow: 'Select Workflow', + noWorkflowsFound: 'No workflows found', + loadWorkflowsFailed: 'Failed to load workflows: ', }, unifiedBinding: { bindingType: 'Binding Type', diff --git a/web/src/i18n/locales/zh-Hans.ts b/web/src/i18n/locales/zh-Hans.ts index 94ede091..aeb86f81 100644 --- a/web/src/i18n/locales/zh-Hans.ts +++ b/web/src/i18n/locales/zh-Hans.ts @@ -2131,6 +2131,10 @@ const zhHans = { coze_bot_id: '机器人ID', coze_api_base: 'API基础URL', }, + // Workflow selector for dynamic forms + selectWorkflow: '选择工作流', + noWorkflowsFound: '暂无工作流', + loadWorkflowsFailed: '加载工作流列表失败:', }, unifiedBinding: { bindingType: '绑定类型',