refactor: update datasource handling and improve documentation properties in pipeline components

pull/21398/head
twwu 11 months ago
parent 350ea6be6e
commit 82e7c8a2f9

@ -51,8 +51,8 @@ export const useDatasourceOptions = (pipelineNodes: Node<DataSourceNodeType>[])
return { return {
nodeId: node.id, nodeId: node.id,
type: node.data.provider_type as DatasourceType, type: node.data.provider_type as DatasourceType,
description: node.data.desc || '', description: node.data.datasource_label,
docTitle: '', // todo: Add docTitle and docLink if needed, or remove these properties if not used docTitle: 'How to use?',
docLink: '', docLink: '',
fileExtensions: node.data.fileExtensions || [], fileExtensions: node.data.fileExtensions || [],
} }

@ -265,6 +265,11 @@ const CreateFormPipeline = () => {
{datasource?.type === DatasourceType.onlineDocument && ( {datasource?.type === DatasourceType.onlineDocument && (
<Notion <Notion
nodeId={datasource?.nodeId || ''} nodeId={datasource?.nodeId || ''}
headerInfo={{
title: datasource.description,
docTitle: datasource.docTitle || '',
docLink: datasource.docLink || '',
}}
notionPages={notionPages} notionPages={notionPages}
updateNotionPages={updateNotionPages} updateNotionPages={updateNotionPages}
canPreview canPreview
@ -283,7 +288,6 @@ const CreateFormPipeline = () => {
onCheckedCrawlResultChange={setWebsitePages} onCheckedCrawlResultChange={setWebsitePages}
onJobIdChange={setWebsiteCrawlJobId} onJobIdChange={setWebsiteCrawlJobId}
onPreview={updateCurrentWebsite} onPreview={updateCurrentWebsite}
usingPublished
/> />
)} )}
{isShowVectorSpaceFull && ( {isShowVectorSpaceFull && (

@ -3,6 +3,11 @@ import NotionPageSelector from './notion-page-selector'
type NotionProps = { type NotionProps = {
nodeId: string nodeId: string
headerInfo: {
title: string
docTitle: string
docLink: string
}
notionPages: NotionPage[] notionPages: NotionPage[]
updateNotionPages: (value: NotionPage[]) => void updateNotionPages: (value: NotionPage[]) => void
canPreview?: boolean canPreview?: boolean
@ -12,6 +17,7 @@ type NotionProps = {
const Notion = ({ const Notion = ({
nodeId, nodeId,
headerInfo,
notionPages, notionPages,
updateNotionPages, updateNotionPages,
canPreview = false, canPreview = false,
@ -21,6 +27,7 @@ const Notion = ({
return ( return (
<NotionPageSelector <NotionPageSelector
nodeId={nodeId} nodeId={nodeId}
headerInfo={headerInfo}
value={notionPages.map(page => page.page_id)} value={notionPages.map(page => page.page_id)}
onSelect={updateNotionPages} onSelect={updateNotionPages}
canPreview={canPreview} canPreview={canPreview}

@ -1,12 +1,12 @@
import { useCallback, useEffect, useMemo, useState } from 'react' import { useCallback, useEffect, useMemo, useRef, useState } from 'react'
import WorkspaceSelector from '@/app/components/base/notion-page-selector/workspace-selector' import WorkspaceSelector from '@/app/components/base/notion-page-selector/workspace-selector'
import SearchInput from '@/app/components/base/notion-page-selector/search-input' import SearchInput from '@/app/components/base/notion-page-selector/search-input'
import PageSelector from '@/app/components/base/notion-page-selector/page-selector' import PageSelector from '@/app/components/base/notion-page-selector/page-selector'
import type { DataSourceNotionPageMap, DataSourceNotionWorkspace, NotionPage } from '@/models/common' import type { DataSourceNotionPageMap, DataSourceNotionWorkspace, NotionPage } from '@/models/common'
import Header from '@/app/components/datasets/create/website/base/header' import Header from '@/app/components/datasets/create/website/base/header'
import { useDatasetDetailContextWithSelector } from '@/context/dataset-detail' import { useDatasetDetailContextWithSelector } from '@/context/dataset-detail'
import { useDatasourceNodeRun } from '@/service/use-pipeline' import { useDraftDatasourceNodeRun, usePublishedDatasourceNodeRun } from '@/service/use-pipeline'
import { useTranslation } from 'react-i18next' import { DatasourceType } from '@/models/pipeline'
type NotionPageSelectorProps = { type NotionPageSelectorProps = {
value?: string[] value?: string[]
@ -16,6 +16,11 @@ type NotionPageSelectorProps = {
onPreview?: (selectedPage: NotionPage) => void onPreview?: (selectedPage: NotionPage) => void
isInPipeline?: boolean isInPipeline?: boolean
nodeId: string nodeId: string
headerInfo: {
title: string
docTitle: string
docLink: string
}
} }
const NotionPageSelector = ({ const NotionPageSelector = ({
@ -26,20 +31,23 @@ const NotionPageSelector = ({
onPreview, onPreview,
isInPipeline = false, isInPipeline = false,
nodeId, nodeId,
headerInfo,
}: NotionPageSelectorProps) => { }: NotionPageSelectorProps) => {
const { t } = useTranslation()
const pipeline_id = useDatasetDetailContextWithSelector(s => s.dataset?.pipeline_id) const pipeline_id = useDatasetDetailContextWithSelector(s => s.dataset?.pipeline_id)
const { mutateAsync: getNotionPages } = useDatasourceNodeRun()
const [notionData, setNotionData] = useState<DataSourceNotionWorkspace[]>([]) const [notionData, setNotionData] = useState<DataSourceNotionWorkspace[]>([])
const [searchValue, setSearchValue] = useState('') const [searchValue, setSearchValue] = useState('')
const [currentWorkspaceId, setCurrentWorkspaceId] = useState('') const [currentWorkspaceId, setCurrentWorkspaceId] = useState('')
const useDatasourceNodeRun = useRef(!isInPipeline ? usePublishedDatasourceNodeRun : useDraftDatasourceNodeRun)
const { mutateAsync: getNotionPages } = useDatasourceNodeRun.current()
const getNotionData = useCallback(async () => { const getNotionData = useCallback(async () => {
if (pipeline_id) { if (pipeline_id) {
await getNotionPages({ await getNotionPages({
pipeline_id, pipeline_id,
node_id: nodeId, node_id: nodeId,
inputs: {}, inputs: {},
datasource_type: DatasourceType.onlineDocument,
}, { }, {
onSuccess(notionData) { onSuccess(notionData) {
setNotionData(notionData as DataSourceNotionWorkspace[]) setNotionData(notionData as DataSourceNotionWorkspace[])
@ -106,9 +114,7 @@ const NotionPageSelector = ({
<div className='flex flex-col gap-y-2'> <div className='flex flex-col gap-y-2'>
<Header <Header
isInPipeline={isInPipeline} isInPipeline={isInPipeline}
title={t('datasetPipeline.testRun.notion.title')} {...headerInfo}
docTitle={t('datasetPipeline.testRun.notion.docTitle')}
docLink={'https://www.notion.so/docs'}
/> />
<div className='rounded-xl border border-components-panel-border bg-background-default-subtle'> <div className='rounded-xl border border-components-panel-border bg-background-default-subtle'>
<div className='flex h-12 items-center gap-x-2 rounded-t-xl border-b border-b-divider-regular bg-components-panel-bg p-2'> <div className='flex h-12 items-center gap-x-2 rounded-t-xl border-b border-b-divider-regular bg-components-panel-bg p-2'>

@ -8,11 +8,13 @@ import Crawling from './crawling'
import ErrorMessage from './error-message' import ErrorMessage from './error-message'
import CrawledResult from './crawled-result' import CrawledResult from './crawled-result'
import { import {
useDatasourceNodeRun, useDraftDatasourceNodeRun,
useDraftPipelinePreProcessingParams, useDraftPipelinePreProcessingParams,
usePublishedDatasourceNodeRun,
usePublishedPipelineProcessingParams, usePublishedPipelineProcessingParams,
} from '@/service/use-pipeline' } from '@/service/use-pipeline'
import { useDatasetDetailContextWithSelector } from '@/context/dataset-detail' import { useDatasetDetailContextWithSelector } from '@/context/dataset-detail'
import { DatasourceType } from '@/models/pipeline'
const I18N_PREFIX = 'datasetCreation.stepOne.website' const I18N_PREFIX = 'datasetCreation.stepOne.website'
@ -27,7 +29,7 @@ type CrawlerProps = {
docLink: string docLink: string
} }
onPreview?: (payload: CrawlResultItem) => void onPreview?: (payload: CrawlResultItem) => void
usingPublished?: boolean isInPipeline?: boolean
} }
enum Step { enum Step {
@ -43,14 +45,14 @@ const Crawler = ({
onCheckedCrawlResultChange, onCheckedCrawlResultChange,
onJobIdChange, onJobIdChange,
onPreview, onPreview,
usingPublished = false, isInPipeline = false,
}: CrawlerProps) => { }: CrawlerProps) => {
const { t } = useTranslation() const { t } = useTranslation()
const [step, setStep] = useState<Step>(Step.init) const [step, setStep] = useState<Step>(Step.init)
const [controlFoldOptions, setControlFoldOptions] = useState<number>(0) const [controlFoldOptions, setControlFoldOptions] = useState<number>(0)
const pipelineId = useDatasetDetailContextWithSelector(s => s.dataset?.pipeline_id) const pipelineId = useDatasetDetailContextWithSelector(s => s.dataset?.pipeline_id)
const usePreProcessingParams = useRef(usingPublished ? usePublishedPipelineProcessingParams : useDraftPipelinePreProcessingParams) const usePreProcessingParams = useRef(!isInPipeline ? usePublishedPipelineProcessingParams : useDraftPipelinePreProcessingParams)
const { data: paramsConfig } = usePreProcessingParams.current({ const { data: paramsConfig } = usePreProcessingParams.current({
pipeline_id: pipelineId!, pipeline_id: pipelineId!,
node_id: nodeId, node_id: nodeId,
@ -71,7 +73,8 @@ const Crawler = ({
const [crawlErrorMessage, setCrawlErrorMessage] = useState('') const [crawlErrorMessage, setCrawlErrorMessage] = useState('')
const showError = isCrawlFinished && crawlErrorMessage const showError = isCrawlFinished && crawlErrorMessage
const { mutateAsync: runDatasourceNode } = useDatasourceNodeRun() const useDatasourceNodeRun = useRef(!isInPipeline ? usePublishedDatasourceNodeRun : useDraftDatasourceNodeRun)
const { mutateAsync: runDatasourceNode } = useDatasourceNodeRun.current()
const handleRun = useCallback(async (value: Record<string, any>) => { const handleRun = useCallback(async (value: Record<string, any>) => {
setStep(Step.running) setStep(Step.running)
@ -79,6 +82,7 @@ const Crawler = ({
node_id: nodeId, node_id: nodeId,
pipeline_id: pipelineId!, pipeline_id: pipelineId!,
inputs: value, inputs: value,
datasource_type: DatasourceType.websiteCrawl,
}, { }, {
onSuccess: (res: any) => { onSuccess: (res: any) => {
const jobId = res.job_id const jobId = res.job_id

@ -14,7 +14,7 @@ type WebsiteCrawlProps = {
docLink: string docLink: string
} }
onPreview?: (payload: CrawlResultItem) => void onPreview?: (payload: CrawlResultItem) => void
usingPublished?: boolean isInPipeline?: boolean
} }
const WebsiteCrawl = ({ const WebsiteCrawl = ({
@ -24,7 +24,7 @@ const WebsiteCrawl = ({
onCheckedCrawlResultChange, onCheckedCrawlResultChange,
onJobIdChange, onJobIdChange,
onPreview, onPreview,
usingPublished, isInPipeline,
}: WebsiteCrawlProps) => { }: WebsiteCrawlProps) => {
return ( return (
<Crawler <Crawler
@ -34,7 +34,7 @@ const WebsiteCrawl = ({
onCheckedCrawlResultChange={onCheckedCrawlResultChange} onCheckedCrawlResultChange={onCheckedCrawlResultChange}
onJobIdChange={onJobIdChange} onJobIdChange={onJobIdChange}
onPreview={onPreview} onPreview={onPreview}
usingPublished={usingPublished} isInPipeline={isInPipeline}
/> />
) )
} }

@ -49,8 +49,8 @@ export const useDatasourceOptions = () => {
return { return {
nodeId: node.id, nodeId: node.id,
type: node.data.provider_type as DatasourceType, type: node.data.provider_type as DatasourceType,
description: '', // todo: Add description description: node.data.datasource_label,
docTitle: '', // todo: Add docTitle and docLink docTitle: 'How to use?',
docLink: '', docLink: '',
fileExtensions: node.data.fileExtensions || [], fileExtensions: node.data.fileExtensions || [],
} }

@ -132,8 +132,14 @@ const TestRunPanel = () => {
{datasource?.type === DatasourceType.onlineDocument && ( {datasource?.type === DatasourceType.onlineDocument && (
<Notion <Notion
nodeId={datasource?.nodeId || ''} nodeId={datasource?.nodeId || ''}
headerInfo={{
title: datasource.description,
docTitle: datasource.docTitle || '',
docLink: datasource.docLink || '',
}}
notionPages={notionPages} notionPages={notionPages}
updateNotionPages={updateNotionPages} updateNotionPages={updateNotionPages}
isInPipeline
/> />
)} )}
{datasource?.type === DatasourceType.websiteCrawl && ( {datasource?.type === DatasourceType.websiteCrawl && (
@ -147,6 +153,7 @@ const TestRunPanel = () => {
}} }}
onCheckedCrawlResultChange={setWebsitePages} onCheckedCrawlResultChange={setWebsitePages}
onJobIdChange={setWebsiteCrawlJobId} onJobIdChange={setWebsiteCrawlJobId}
isInPipeline
/> />
)} )}
{isShowVectorSpaceFull && ( {isShowVectorSpaceFull && (

@ -155,6 +155,7 @@ export type PipelineDatasourceNodeRunRequest = {
pipeline_id: string pipeline_id: string
node_id: string node_id: string
inputs: Record<string, any> inputs: Record<string, any>
datasource_type: DatasourceType
} }
export type PipelineDatasourceNodeRunResponse = Record<string, any> export type PipelineDatasourceNodeRunResponse = Record<string, any>

@ -123,14 +123,29 @@ export const useCheckPipelineDependencies = (
}) })
} }
export const useDatasourceNodeRun = ( export const useDraftDatasourceNodeRun = (
mutationOptions: MutationOptions<PipelineDatasourceNodeRunResponse, Error, PipelineDatasourceNodeRunRequest> = {}, mutationOptions: MutationOptions<PipelineDatasourceNodeRunResponse, Error, PipelineDatasourceNodeRunRequest> = {},
) => { ) => {
return useMutation({ return useMutation({
mutationKey: [NAME_SPACE, 'datasource-node-run'], mutationKey: [NAME_SPACE, 'draft-datasource-node-run'],
mutationFn: (request: PipelineDatasourceNodeRunRequest) => { mutationFn: (request: PipelineDatasourceNodeRunRequest) => {
const { pipeline_id, node_id, ...rest } = request const { pipeline_id, node_id, ...rest } = request
return post<PipelineDatasourceNodeRunResponse>(`/rag/pipelines/${pipeline_id}/workflows/published/nodes/${node_id}/run`, { return post<PipelineDatasourceNodeRunResponse>(`/rag/pipelines/${pipeline_id}/workflows/draft/datasource/nodes/${node_id}/run`, {
body: rest,
})
},
...mutationOptions,
})
}
export const usePublishedDatasourceNodeRun = (
mutationOptions: MutationOptions<PipelineDatasourceNodeRunResponse, Error, PipelineDatasourceNodeRunRequest> = {},
) => {
return useMutation({
mutationKey: [NAME_SPACE, 'published-datasource-node-run'],
mutationFn: (request: PipelineDatasourceNodeRunRequest) => {
const { pipeline_id, node_id, ...rest } = request
return post<PipelineDatasourceNodeRunResponse>(`/rag/pipelines/${pipeline_id}/workflows/published/datasource/nodes/${node_id}/run`, {
body: rest, body: rest,
}) })
}, },
@ -141,7 +156,7 @@ export const useDatasourceNodeRun = (
export const useDraftPipelineProcessingParams = (params: PipelineProcessingParamsRequest, enabled = true) => { export const useDraftPipelineProcessingParams = (params: PipelineProcessingParamsRequest, enabled = true) => {
const { pipeline_id, node_id } = params const { pipeline_id, node_id } = params
return useQuery<PipelineProcessingParamsResponse>({ return useQuery<PipelineProcessingParamsResponse>({
queryKey: [NAME_SPACE, 'pipeline-processing-params', pipeline_id, node_id], queryKey: [NAME_SPACE, 'draft-pipeline-processing-params', pipeline_id, node_id],
queryFn: () => { queryFn: () => {
return get<PipelineProcessingParamsResponse>(`/rag/pipelines/${pipeline_id}/workflows/draft/processing/parameters`, { return get<PipelineProcessingParamsResponse>(`/rag/pipelines/${pipeline_id}/workflows/draft/processing/parameters`, {
params: { params: {
@ -157,7 +172,7 @@ export const useDraftPipelineProcessingParams = (params: PipelineProcessingParam
export const usePublishedPipelineProcessingParams = (params: PipelineProcessingParamsRequest) => { export const usePublishedPipelineProcessingParams = (params: PipelineProcessingParamsRequest) => {
const { pipeline_id, node_id } = params const { pipeline_id, node_id } = params
return useQuery<PipelineProcessingParamsResponse>({ return useQuery<PipelineProcessingParamsResponse>({
queryKey: [NAME_SPACE, 'pipeline-processing-params', pipeline_id, node_id], queryKey: [NAME_SPACE, 'published-pipeline-processing-params', pipeline_id, node_id],
queryFn: () => { queryFn: () => {
return get<PipelineProcessingParamsResponse>(`/rag/pipelines/${pipeline_id}/workflows/published/processing/parameters`, { return get<PipelineProcessingParamsResponse>(`/rag/pipelines/${pipeline_id}/workflows/published/processing/parameters`, {
params: { params: {
@ -255,7 +270,7 @@ export const useUpdateDataSourceCredentials = (
export const useDraftPipelinePreProcessingParams = (params: PipelinePreProcessingParamsRequest, enabled = true) => { export const useDraftPipelinePreProcessingParams = (params: PipelinePreProcessingParamsRequest, enabled = true) => {
const { pipeline_id, node_id } = params const { pipeline_id, node_id } = params
return useQuery<PipelinePreProcessingParamsResponse>({ return useQuery<PipelinePreProcessingParamsResponse>({
queryKey: [NAME_SPACE, 'pipeline-pre-processing-params', pipeline_id, node_id], queryKey: [NAME_SPACE, 'draft-pipeline-pre-processing-params', pipeline_id, node_id],
queryFn: () => { queryFn: () => {
return get<PipelinePreProcessingParamsResponse>(`/rag/pipelines/${pipeline_id}/workflows/draft/pre-processing/parameters`, { return get<PipelinePreProcessingParamsResponse>(`/rag/pipelines/${pipeline_id}/workflows/draft/pre-processing/parameters`, {
params: { params: {
@ -271,7 +286,7 @@ export const useDraftPipelinePreProcessingParams = (params: PipelinePreProcessin
export const usePublishedPipelinePreProcessingParams = (params: PipelinePreProcessingParamsRequest, enabled = true) => { export const usePublishedPipelinePreProcessingParams = (params: PipelinePreProcessingParamsRequest, enabled = true) => {
const { pipeline_id, node_id } = params const { pipeline_id, node_id } = params
return useQuery<PipelinePreProcessingParamsResponse>({ return useQuery<PipelinePreProcessingParamsResponse>({
queryKey: [NAME_SPACE, 'pipeline-pre-processing-params', pipeline_id, node_id], queryKey: [NAME_SPACE, 'published-pipeline-pre-processing-params', pipeline_id, node_id],
queryFn: () => { queryFn: () => {
return get<PipelinePreProcessingParamsResponse>(`/rag/pipelines/${pipeline_id}/workflows/published/processing/parameters`, { return get<PipelinePreProcessingParamsResponse>(`/rag/pipelines/${pipeline_id}/workflows/published/processing/parameters`, {
params: { params: {

Loading…
Cancel
Save