From e1f8b4b387309853362041471e28687de7f34499 Mon Sep 17 00:00:00 2001 From: Joel Date: Tue, 14 Oct 2025 18:31:42 +0800 Subject: [PATCH] feat: support show dataset in knowledge --- .../dataset-config/card-item/item.tsx | 16 +++++---- .../components/app/configuration/preview.tsx | 36 ++++++++++++++----- web/service/try-app.ts | 7 ++++ web/service/use-try-app.ts | 13 ++++++- 4 files changed, 55 insertions(+), 17 deletions(-) diff --git a/web/app/components/app/configuration/dataset-config/card-item/item.tsx b/web/app/components/app/configuration/dataset-config/card-item/item.tsx index 85d46122a3..b671d9c146 100644 --- a/web/app/components/app/configuration/dataset-config/card-item/item.tsx +++ b/web/app/components/app/configuration/dataset-config/card-item/item.tsx @@ -98,13 +98,15 @@ const Item: FC = ({ text={t('dataset.externalTag') as string} /> } - setShowSettingsModal(false)} footer={null} mask={isMobile} panelClassName='mt-16 mx-2 sm:mr-2 mb-3 !p-0 !max-w-[640px] rounded-xl'> - setShowSettingsModal(false)} - onSave={handleSave} - /> - + {showSettingsModal && ( + setShowSettingsModal(false)} footer={null} mask={isMobile} panelClassName='mt-16 mx-2 sm:mr-2 mb-3 !p-0 !max-w-[640px] rounded-xl'> + setShowSettingsModal(false)} + onSave={handleSave} + /> + + )} ) } diff --git a/web/app/components/app/configuration/preview.tsx b/web/app/components/app/configuration/preview.tsx index 167019c60b..eceb4972aa 100644 --- a/web/app/components/app/configuration/preview.tsx +++ b/web/app/components/app/configuration/preview.tsx @@ -21,7 +21,7 @@ import type { Features as FeaturesData, FileUpload } from '@/app/components/base import { FILE_EXTS } from '@/app/components/base/prompt-editor/constants' import { SupportUploadFileTypes } from '@/app/components/workflow/types' -import { useGetTryAppInfo } from '@/service/use-try-app' +import { useGetTryAppDataSets, useGetTryAppInfo } from '@/service/use-try-app' import { noop } from 'lodash' import { correctModelProvider } from '@/utils' import { userInputsFormToPromptVariables } from '@/utils/model-config' @@ -57,12 +57,36 @@ const Configuration: FC = ({ const media = useBreakpoints() const isMobile = media === MediaType.mobile - const { data: appDetail, isLoading } = useGetTryAppInfo(appId) + const { data: appDetail, isLoading: isLoadingAppDetail } = useGetTryAppInfo(appId) + const datasetIds = (() => { + if(isLoadingAppDetail) + return [] + const modelConfig = appDetail?.model_config + if(!modelConfig) + return [] + let datasets: any = null + + if (modelConfig.agent_mode?.tools?.find(({ dataset }: any) => dataset?.enabled)) + datasets = modelConfig.agent_mode?.tools.filter(({ dataset }: any) => dataset?.enabled) + // new dataset struct + else if (modelConfig.dataset_configs.datasets?.datasets?.length > 0) + datasets = modelConfig.dataset_configs?.datasets?.datasets + + if (datasets?.length && datasets?.length > 0) + return datasets.map(({ dataset }: any) => dataset.id) + + return [] + })() + const { data: dataSetData, isLoading: isLoadingDatasets } = useGetTryAppDataSets(appId, datasetIds) + const dataSets = dataSetData?.data || [] + const isLoading = isLoadingAppDetail || isLoadingDatasets + const modelConfig = ((modelConfig?: BackendModelConfig) => { if(isLoading || !modelConfig) return defaultModelConfig const model = modelConfig.model + const newModelConfig = { provider: correctModelProvider(model.provider), model_id: model.name, @@ -105,7 +129,7 @@ const Configuration: FC = ({ retriever_resource: modelConfig.retriever_resource, annotation_reply: modelConfig.annotation_reply, external_data_tools: modelConfig.external_data_tools, - dataSets: [], + dataSets, agentConfig: appDetail?.mode === 'agent-chat' ? { max_iteration: DEFAULT_AGENT_SETTING.max_iteration, ...modelConfig.agent_mode, @@ -143,12 +167,6 @@ const Configuration: FC = ({ // completion configuration const completionPromptConfig = modelConfig?.completion_prompt_config || clone(DEFAULT_COMPLETION_PROMPT_CONFIG) as any - // datasets - const dataSets = (() => { - return [] - })() - // const selectedIds = dataSets.map(item => item.id) - // prompt & model config const inputs = {} const query = '' diff --git a/web/service/try-app.ts b/web/service/try-app.ts index e174a6a35d..a6f7a12c91 100644 --- a/web/service/try-app.ts +++ b/web/service/try-app.ts @@ -6,6 +6,8 @@ import type { SiteInfo, } from '@/models/share' import type { ModelConfig } from '@/types/app' +import qs from 'qs' +import type { DataSetListResponse } from '@/models/datasets' type TryAppInfo = { name: string @@ -17,3 +19,8 @@ type TryAppInfo = { export const fetchTryAppInfo = async (appId: string) => { return get(`/trial-apps/${appId}`) as Promise } + +export const fetchTryAppDatasets = (appId: string, ids: string[]) => { + const urlParams = qs.stringify({ ids }, { indices: false }) + return get(`/trial-apps/${appId}/datasets?${urlParams}`) +} diff --git a/web/service/use-try-app.ts b/web/service/use-try-app.ts index 1d7ed2ca02..1245e628e1 100644 --- a/web/service/use-try-app.ts +++ b/web/service/use-try-app.ts @@ -1,6 +1,7 @@ import { useQuery } from '@tanstack/react-query' -import { fetchTryAppInfo } from './try-app' +import { fetchTryAppDatasets, fetchTryAppInfo } from './try-app' import { AppSourceType, fetchAppParams } from './share' +import type { DataSetListResponse } from '@/models/datasets' const NAME_SPACE = 'try-app' @@ -21,3 +22,13 @@ export const useGetTryAppParams = (appId: string) => { }, }) } + +export const useGetTryAppDataSets = (appId: string, ids: string[]) => { + return useQuery({ + queryKey: [NAME_SPACE, 'dataSets', ids], + queryFn: () => { + return fetchTryAppDatasets(appId, ids) + }, + enabled: ids.length > 0, + }) +}