mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-06-02 03:55:55 +00:00
new nofe、、
This commit is contained in:
@@ -64,6 +64,7 @@ class NodeMetadataValidator:
|
||||
'plugin-selector',
|
||||
'webhook-url',
|
||||
'embed-code',
|
||||
'workflow-selector',
|
||||
}
|
||||
|
||||
def validate(self, metadata: dict[str, Any]) -> list[str]:
|
||||
|
||||
@@ -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<KnowledgeBase[]>([]);
|
||||
const [bots, setBots] = useState<Bot[]>([]);
|
||||
const [pipelines, setPipelines] = useState<Pipeline[]>([]);
|
||||
const [workflows, setWorkflows] = useState<Workflow[]>([]);
|
||||
const [tools, setTools] = useState<PluginTool[]>([]);
|
||||
const [uploading, setUploading] = useState<boolean>(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({
|
||||
</Select>
|
||||
);
|
||||
|
||||
case DynamicFormItemType.WORKFLOW_SELECTOR:
|
||||
return (
|
||||
<Select value={field.value ?? ''} onValueChange={field.onChange}>
|
||||
<SelectTrigger className="bg-[#ffffff] dark:bg-[#2a2a2e]">
|
||||
{field.value ? (
|
||||
(() => {
|
||||
const selectedWorkflow = workflows.find(
|
||||
(workflow) => workflow.uuid === field.value,
|
||||
);
|
||||
return (
|
||||
<span className="truncate">
|
||||
{selectedWorkflow?.name ?? field.value}
|
||||
</span>
|
||||
);
|
||||
})()
|
||||
) : (
|
||||
<SelectValue placeholder={t('workflows.selectWorkflow')} />
|
||||
)}
|
||||
</SelectTrigger>
|
||||
<SelectContent>
|
||||
<SelectGroup>
|
||||
{workflows.length === 0 ? (
|
||||
<div className="px-2 py-3 text-sm text-muted-foreground">
|
||||
{t('workflows.noWorkflowsFound')}
|
||||
</div>
|
||||
) : (
|
||||
workflows.map((workflow) => (
|
||||
<SelectItem key={workflow.uuid} value={workflow.uuid ?? ''}>
|
||||
{workflow.name}
|
||||
</SelectItem>
|
||||
))
|
||||
)}
|
||||
</SelectGroup>
|
||||
</SelectContent>
|
||||
</Select>
|
||||
);
|
||||
|
||||
case DynamicFormItemType.TOOLS_SELECTOR:
|
||||
return (
|
||||
<>
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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: '绑定类型',
|
||||
|
||||
Reference in New Issue
Block a user