From 61bc6a1dc2c0729f306f82c5646de7f6f5bcc06d Mon Sep 17 00:00:00 2001 From: Junyan Qin Date: Thu, 6 Nov 2025 15:36:43 +0800 Subject: [PATCH] feat: add supports for bot-selector config field --- .../dynamic-form/DynamicFormComponent.tsx | 3 ++ .../dynamic-form/DynamicFormItemComponent.tsx | 34 ++++++++++++++++++- web/src/app/infra/entities/form/dynamic.ts | 1 + web/src/i18n/locales/en-US.ts | 1 + web/src/i18n/locales/ja-JP.ts | 1 + web/src/i18n/locales/zh-Hans.ts | 1 + web/src/i18n/locales/zh-Hant.ts | 1 + 7 files changed, 41 insertions(+), 1 deletion(-) diff --git a/web/src/app/home/components/dynamic-form/DynamicFormComponent.tsx b/web/src/app/home/components/dynamic-form/DynamicFormComponent.tsx index 6e3cb08e..5cdd2ff7 100644 --- a/web/src/app/home/components/dynamic-form/DynamicFormComponent.tsx +++ b/web/src/app/home/components/dynamic-form/DynamicFormComponent.tsx @@ -58,6 +58,9 @@ export default function DynamicFormComponent({ case 'knowledge-base-selector': fieldSchema = z.string(); break; + case 'bot-selector': + fieldSchema = z.string(); + break; case 'prompt-editor': fieldSchema = z.array( z.object({ diff --git a/web/src/app/home/components/dynamic-form/DynamicFormItemComponent.tsx b/web/src/app/home/components/dynamic-form/DynamicFormItemComponent.tsx index 011122e9..03603c26 100644 --- a/web/src/app/home/components/dynamic-form/DynamicFormItemComponent.tsx +++ b/web/src/app/home/components/dynamic-form/DynamicFormItemComponent.tsx @@ -17,7 +17,7 @@ import { ControllerRenderProps } from 'react-hook-form'; import { Button } from '@/components/ui/button'; import { useEffect, useState } from 'react'; import { httpClient } from '@/app/infra/http/HttpClient'; -import { LLMModel } from '@/app/infra/entities/api'; +import { LLMModel, Bot } from '@/app/infra/entities/api'; import { KnowledgeBase } from '@/app/infra/entities/api'; import { toast } from 'sonner'; import { @@ -42,6 +42,7 @@ export default function DynamicFormItemComponent({ }) { const [llmModels, setLlmModels] = useState([]); const [knowledgeBases, setKnowledgeBases] = useState([]); + const [bots, setBots] = useState([]); const [uploading, setUploading] = useState(false); const { t } = useTranslation(); @@ -101,6 +102,19 @@ export default function DynamicFormItemComponent({ } }, [config.type]); + useEffect(() => { + if (config.type === DynamicFormItemType.BOT_SELECTOR) { + httpClient + .getBots() + .then((resp) => { + setBots(resp.bots); + }) + .catch((err) => { + toast.error('Failed to get bot list: ' + err.message); + }); + } + }, [config.type]); + switch (config.type) { case DynamicFormItemType.INT: case DynamicFormItemType.FLOAT: @@ -322,6 +336,24 @@ export default function DynamicFormItemComponent({ ); + case DynamicFormItemType.BOT_SELECTOR: + return ( + + ); + case DynamicFormItemType.PROMPT_EDITOR: return (
diff --git a/web/src/app/infra/entities/form/dynamic.ts b/web/src/app/infra/entities/form/dynamic.ts index 2f993939..fc2d4e76 100644 --- a/web/src/app/infra/entities/form/dynamic.ts +++ b/web/src/app/infra/entities/form/dynamic.ts @@ -30,6 +30,7 @@ export enum DynamicFormItemType { UNKNOWN = 'unknown', KNOWLEDGE_BASE_SELECTOR = 'knowledge-base-selector', PLUGIN_SELECTOR = 'plugin-selector', + BOT_SELECTOR = 'bot-selector', } export interface IFileConfig { diff --git a/web/src/i18n/locales/en-US.ts b/web/src/i18n/locales/en-US.ts index de6b25e2..d61cfb68 100644 --- a/web/src/i18n/locales/en-US.ts +++ b/web/src/i18n/locales/en-US.ts @@ -139,6 +139,7 @@ const enUS = { adapterConfig: 'Adapter Configuration', bindPipeline: 'Bind Pipeline', selectPipeline: 'Select Pipeline', + selectBot: 'Select Bot', botLogTitle: 'Bot Log', enableAutoRefresh: 'Enable Auto Refresh', session: 'Session', diff --git a/web/src/i18n/locales/ja-JP.ts b/web/src/i18n/locales/ja-JP.ts index 447e6696..7ecf74ac 100644 --- a/web/src/i18n/locales/ja-JP.ts +++ b/web/src/i18n/locales/ja-JP.ts @@ -141,6 +141,7 @@ const jaJP = { adapterConfig: 'アダプター設定', bindPipeline: 'パイプラインを紐付け', selectPipeline: 'パイプラインを選択', + selectBot: 'ボットを選択してください', botLogTitle: 'ボットログ', enableAutoRefresh: '自動更新を有効にする', session: 'セッション', diff --git a/web/src/i18n/locales/zh-Hans.ts b/web/src/i18n/locales/zh-Hans.ts index 93e8d1b4..e22f7f44 100644 --- a/web/src/i18n/locales/zh-Hans.ts +++ b/web/src/i18n/locales/zh-Hans.ts @@ -136,6 +136,7 @@ const zhHans = { adapterConfig: '适配器配置', bindPipeline: '绑定流水线', selectPipeline: '选择流水线', + selectBot: '请选择机器人', botLogTitle: '机器人日志', enableAutoRefresh: '开启自动刷新', session: '会话', diff --git a/web/src/i18n/locales/zh-Hant.ts b/web/src/i18n/locales/zh-Hant.ts index c1b252be..444b1398 100644 --- a/web/src/i18n/locales/zh-Hant.ts +++ b/web/src/i18n/locales/zh-Hant.ts @@ -136,6 +136,7 @@ const zhHant = { adapterConfig: '適配器設定', bindPipeline: '綁定流程線', selectPipeline: '選擇流程線', + selectBot: '請選擇機器人', botLogTitle: '機器人日誌', enableAutoRefresh: '開啟自動重新整理', session: '對話',