mirror of
https://github.com/langgenius/dify.git
synced 2025-10-23 15:08:45 +00:00
pipeline init
This commit is contained in:
parent
7e31da7882
commit
b51c18c2cf
@ -5,12 +5,19 @@ import {
|
|||||||
import type { PanelProps } from '@/app/components/workflow/panel'
|
import type { PanelProps } from '@/app/components/workflow/panel'
|
||||||
import Panel from '@/app/components/workflow/panel'
|
import Panel from '@/app/components/workflow/panel'
|
||||||
import { useStore } from '@/app/components/workflow/store'
|
import { useStore } from '@/app/components/workflow/store'
|
||||||
|
import Record from '@/app/components/workflow/panel/record'
|
||||||
import TestRunPanel from './test-run'
|
import TestRunPanel from './test-run'
|
||||||
|
|
||||||
const RagPipelinePanelOnRight = () => {
|
const RagPipelinePanelOnRight = () => {
|
||||||
|
const historyWorkflowData = useStore(s => s.historyWorkflowData)
|
||||||
const showDebugAndPreviewPanel = useStore(s => s.showDebugAndPreviewPanel)
|
const showDebugAndPreviewPanel = useStore(s => s.showDebugAndPreviewPanel)
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
{
|
||||||
|
historyWorkflowData && (
|
||||||
|
<Record />
|
||||||
|
)
|
||||||
|
}
|
||||||
{showDebugAndPreviewPanel && <TestRunPanel />}
|
{showDebugAndPreviewPanel && <TestRunPanel />}
|
||||||
</>
|
</>
|
||||||
)
|
)
|
||||||
|
@ -7,9 +7,9 @@ import RagPipelineChildren from './rag-pipeline-children'
|
|||||||
import {
|
import {
|
||||||
useAvailableNodesMetaData,
|
useAvailableNodesMetaData,
|
||||||
useNodesSyncDraft,
|
useNodesSyncDraft,
|
||||||
useWorkflowRefreshDraft,
|
usePipelineRefreshDraft,
|
||||||
useWorkflowRun,
|
usePipelineRun,
|
||||||
useWorkflowStartRun,
|
usePipelineStartRun,
|
||||||
} from '../hooks'
|
} from '../hooks'
|
||||||
|
|
||||||
type RagPipelineMainProps = Pick<WorkflowProps, 'nodes' | 'edges' | 'viewport'>
|
type RagPipelineMainProps = Pick<WorkflowProps, 'nodes' | 'edges' | 'viewport'>
|
||||||
@ -22,18 +22,18 @@ const RagPipelineMain = ({
|
|||||||
doSyncWorkflowDraft,
|
doSyncWorkflowDraft,
|
||||||
syncWorkflowDraftWhenPageClose,
|
syncWorkflowDraftWhenPageClose,
|
||||||
} = useNodesSyncDraft()
|
} = useNodesSyncDraft()
|
||||||
const { handleRefreshWorkflowDraft } = useWorkflowRefreshDraft()
|
const { handleRefreshWorkflowDraft } = usePipelineRefreshDraft()
|
||||||
const {
|
const {
|
||||||
handleBackupDraft,
|
handleBackupDraft,
|
||||||
handleLoadBackupDraft,
|
handleLoadBackupDraft,
|
||||||
handleRestoreFromPublishedWorkflow,
|
handleRestoreFromPublishedWorkflow,
|
||||||
handleRun,
|
handleRun,
|
||||||
handleStopRun,
|
handleStopRun,
|
||||||
} = useWorkflowRun()
|
} = usePipelineRun()
|
||||||
const {
|
const {
|
||||||
handleStartWorkflowRun,
|
handleStartWorkflowRun,
|
||||||
handleWorkflowStartRunInWorkflow,
|
handleWorkflowStartRunInWorkflow,
|
||||||
} = useWorkflowStartRun()
|
} = usePipelineStartRun()
|
||||||
const availableNodesMetaData = useAvailableNodesMetaData()
|
const availableNodesMetaData = useAvailableNodesMetaData()
|
||||||
|
|
||||||
const hooksStore = useMemo(() => {
|
const hooksStore = useMemo(() => {
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
export * from './use-available-nodes-meta-data'
|
export * from './use-available-nodes-meta-data'
|
||||||
export * from './use-workflow-refresh-draft'
|
export * from './use-pipeline-refresh-draft'
|
||||||
export * from './use-nodes-sync-draft'
|
export * from './use-nodes-sync-draft'
|
||||||
export * from './use-workflow-run'
|
export * from './use-pipeline-run'
|
||||||
export * from './use-workflow-start-run'
|
export * from './use-pipeline-start-run'
|
||||||
|
export * from './use-pipeline-init'
|
||||||
|
@ -46,7 +46,7 @@ export const useNodesSyncDraft = () => {
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
return {
|
return {
|
||||||
url: `/datasets/${pipelineId}/workflows/draft`,
|
url: `/rag/pipeline/${pipelineId}/workflows/draft`,
|
||||||
params: {
|
params: {
|
||||||
graph: {
|
graph: {
|
||||||
nodes: producedNodes,
|
nodes: producedNodes,
|
||||||
|
118
web/app/components/rag-pipeline/hooks/use-pipeline-init.ts
Normal file
118
web/app/components/rag-pipeline/hooks/use-pipeline-init.ts
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
import {
|
||||||
|
useCallback,
|
||||||
|
useEffect,
|
||||||
|
useState,
|
||||||
|
} from 'react'
|
||||||
|
import { useParams } from 'next/navigation'
|
||||||
|
import {
|
||||||
|
useStore,
|
||||||
|
useWorkflowStore,
|
||||||
|
} from '@/app/components/workflow/store'
|
||||||
|
import { usePipelineTemplate } from './use-pipeline-template'
|
||||||
|
import {
|
||||||
|
fetchNodesDefaultConfigs,
|
||||||
|
fetchPublishedWorkflow,
|
||||||
|
fetchWorkflowDraft,
|
||||||
|
syncWorkflowDraft,
|
||||||
|
} from '@/service/workflow'
|
||||||
|
import type { FetchWorkflowDraftResponse } from '@/types/workflow'
|
||||||
|
// import { useWorkflowConfig } from '@/service/use-workflow'
|
||||||
|
|
||||||
|
export const usePipelineInit = () => {
|
||||||
|
const { datasetId } = useParams()
|
||||||
|
const workflowStore = useWorkflowStore()
|
||||||
|
const {
|
||||||
|
nodes: nodesTemplate,
|
||||||
|
edges: edgesTemplate,
|
||||||
|
} = usePipelineTemplate()
|
||||||
|
const setSyncWorkflowDraftHash = useStore(s => s.setSyncWorkflowDraftHash)
|
||||||
|
const [data, setData] = useState<FetchWorkflowDraftResponse>()
|
||||||
|
const [isLoading, setIsLoading] = useState(true)
|
||||||
|
useEffect(() => {
|
||||||
|
// workflowStore.setState({ pipelineId: datasetId as string })
|
||||||
|
}, [datasetId, workflowStore])
|
||||||
|
|
||||||
|
const handleUpdateWorkflowConfig = useCallback((config: Record<string, any>) => {
|
||||||
|
const { setWorkflowConfig } = workflowStore.getState()
|
||||||
|
|
||||||
|
setWorkflowConfig(config)
|
||||||
|
}, [workflowStore])
|
||||||
|
// useWorkflowConfig(`/rag/pipeline/${datasetId}/workflows/draft/config`, handleUpdateWorkflowConfig)
|
||||||
|
|
||||||
|
const handleGetInitialWorkflowData = useCallback(async () => {
|
||||||
|
try {
|
||||||
|
const res = await fetchWorkflowDraft(`/rag/pipeline/${datasetId}/workflows/draft`)
|
||||||
|
setData(res)
|
||||||
|
workflowStore.setState({
|
||||||
|
envSecrets: (res.environment_variables || []).filter(env => env.value_type === 'secret').reduce((acc, env) => {
|
||||||
|
acc[env.id] = env.value
|
||||||
|
return acc
|
||||||
|
}, {} as Record<string, string>),
|
||||||
|
environmentVariables: res.environment_variables?.map(env => env.value_type === 'secret' ? { ...env, value: '[__HIDDEN__]' } : env) || [],
|
||||||
|
})
|
||||||
|
setSyncWorkflowDraftHash(res.hash)
|
||||||
|
setIsLoading(false)
|
||||||
|
}
|
||||||
|
catch (error: any) {
|
||||||
|
if (error && error.json && !error.bodyUsed && datasetId) {
|
||||||
|
error.json().then((err: any) => {
|
||||||
|
if (err.code === 'draft_workflow_not_exist') {
|
||||||
|
workflowStore.setState({ notInitialWorkflow: true })
|
||||||
|
syncWorkflowDraft({
|
||||||
|
url: `/rag/pipeline/${datasetId}/workflows/draft`,
|
||||||
|
params: {
|
||||||
|
graph: {
|
||||||
|
nodes: nodesTemplate,
|
||||||
|
edges: edgesTemplate,
|
||||||
|
},
|
||||||
|
environment_variables: [],
|
||||||
|
},
|
||||||
|
}).then((res) => {
|
||||||
|
workflowStore.getState().setDraftUpdatedAt(res.updated_at)
|
||||||
|
handleGetInitialWorkflowData()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, [nodesTemplate, edgesTemplate, workflowStore, setSyncWorkflowDraftHash, datasetId])
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
// handleGetInitialWorkflowData()
|
||||||
|
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
const handleFetchPreloadData = useCallback(async () => {
|
||||||
|
try {
|
||||||
|
const nodesDefaultConfigsData = await fetchNodesDefaultConfigs(`/rag/pipeline/${datasetId}/workflows/default-workflow-block-configs`)
|
||||||
|
const publishedWorkflow = await fetchPublishedWorkflow(`/rag/pipeline/${datasetId}/workflows/publish`)
|
||||||
|
workflowStore.setState({
|
||||||
|
nodesDefaultConfigs: nodesDefaultConfigsData.reduce((acc, block) => {
|
||||||
|
if (!acc[block.type])
|
||||||
|
acc[block.type] = { ...block.config }
|
||||||
|
return acc
|
||||||
|
}, {} as Record<string, any>),
|
||||||
|
})
|
||||||
|
workflowStore.getState().setPublishedAt(publishedWorkflow?.created_at)
|
||||||
|
}
|
||||||
|
catch (e) {
|
||||||
|
console.error(e)
|
||||||
|
}
|
||||||
|
}, [workflowStore, datasetId])
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
// handleFetchPreloadData()
|
||||||
|
}, [handleFetchPreloadData])
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (data) {
|
||||||
|
workflowStore.getState().setDraftUpdatedAt(data.updated_at)
|
||||||
|
workflowStore.getState().setToolPublished(data.tool_published)
|
||||||
|
}
|
||||||
|
}, [data, workflowStore])
|
||||||
|
|
||||||
|
return {
|
||||||
|
data,
|
||||||
|
isLoading,
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,6 @@
|
|||||||
import { useCallback } from 'react'
|
import { useCallback } from 'react'
|
||||||
|
|
||||||
export const useWorkflowRefreshDraft = () => {
|
export const usePipelineRefreshDraft = () => {
|
||||||
const handleRefreshWorkflowDraft = useCallback(() => {
|
const handleRefreshWorkflowDraft = useCallback(() => {
|
||||||
return true
|
return true
|
||||||
}, [])
|
}, [])
|
@ -14,7 +14,7 @@ import { stopWorkflowRun } from '@/service/workflow'
|
|||||||
import type { VersionHistory } from '@/types/workflow'
|
import type { VersionHistory } from '@/types/workflow'
|
||||||
import { useNodesSyncDraft } from './use-nodes-sync-draft'
|
import { useNodesSyncDraft } from './use-nodes-sync-draft'
|
||||||
|
|
||||||
export const useWorkflowRun = () => {
|
export const usePipelineRun = () => {
|
||||||
const store = useStoreApi()
|
const store = useStoreApi()
|
||||||
const workflowStore = useWorkflowStore()
|
const workflowStore = useWorkflowStore()
|
||||||
const reactflow = useReactFlow()
|
const reactflow = useReactFlow()
|
@ -8,14 +8,14 @@ import {
|
|||||||
import { useWorkflowInteractions } from '@/app/components/workflow/hooks'
|
import { useWorkflowInteractions } from '@/app/components/workflow/hooks'
|
||||||
import {
|
import {
|
||||||
useNodesSyncDraft,
|
useNodesSyncDraft,
|
||||||
useWorkflowRun,
|
usePipelineRun,
|
||||||
} from '.'
|
} from '.'
|
||||||
|
|
||||||
export const useWorkflowStartRun = () => {
|
export const usePipelineStartRun = () => {
|
||||||
const store = useStoreApi()
|
const store = useStoreApi()
|
||||||
const workflowStore = useWorkflowStore()
|
const workflowStore = useWorkflowStore()
|
||||||
const { handleCancelDebugAndPreviewPanel } = useWorkflowInteractions()
|
const { handleCancelDebugAndPreviewPanel } = useWorkflowInteractions()
|
||||||
const { handleRun } = useWorkflowRun()
|
const { handleRun } = usePipelineRun()
|
||||||
const { doSyncWorkflowDraft } = useNodesSyncDraft()
|
const { doSyncWorkflowDraft } = useNodesSyncDraft()
|
||||||
|
|
||||||
const handleWorkflowStartRunInWorkflow = useCallback(async () => {
|
const handleWorkflowStartRunInWorkflow = useCallback(async () => {
|
@ -0,0 +1,6 @@
|
|||||||
|
export const usePipelineTemplate = () => {
|
||||||
|
return {
|
||||||
|
nodes: [],
|
||||||
|
edges: [],
|
||||||
|
}
|
||||||
|
}
|
@ -11,8 +11,13 @@ import {
|
|||||||
} from '@/app/components/workflow/constants'
|
} from '@/app/components/workflow/constants'
|
||||||
import { createRagPipelineSliceSlice } from './store'
|
import { createRagPipelineSliceSlice } from './store'
|
||||||
import RagPipelineMain from './components/rag-pipeline-main'
|
import RagPipelineMain from './components/rag-pipeline-main'
|
||||||
|
// import { usePipelineInit } from './hooks'
|
||||||
|
|
||||||
const RagPipeline = () => {
|
const RagPipeline = () => {
|
||||||
|
// const {
|
||||||
|
// data,
|
||||||
|
// isLoading,
|
||||||
|
// } = usePipelineInit()
|
||||||
const { newNode: knowledgeBaseNode } = generateNewNode({
|
const { newNode: knowledgeBaseNode } = generateNewNode({
|
||||||
data: {
|
data: {
|
||||||
type: knowledgeBaseNodeDefault.metaData.type,
|
type: knowledgeBaseNodeDefault.metaData.type,
|
||||||
|
@ -37,7 +37,7 @@ export const useWorkflowInit = () => {
|
|||||||
|
|
||||||
setWorkflowConfig(config)
|
setWorkflowConfig(config)
|
||||||
}, [workflowStore])
|
}, [workflowStore])
|
||||||
useWorkflowConfig(appDetail.id, handleUpdateWorkflowConfig)
|
useWorkflowConfig(`/apps/${appDetail.id}/workflows/draft/config`, handleUpdateWorkflowConfig)
|
||||||
|
|
||||||
const handleGetInitialWorkflowData = useCallback(async () => {
|
const handleGetInitialWorkflowData = useCallback(async () => {
|
||||||
try {
|
try {
|
||||||
|
@ -21,11 +21,11 @@ export const useAppWorkflow = (appID: string) => {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export const useWorkflowConfig = (appId: string, onSuccess: (v: WorkflowConfigResponse) => void) => {
|
export const useWorkflowConfig = (url: string, onSuccess: (v: WorkflowConfigResponse) => void) => {
|
||||||
return useQuery({
|
return useQuery({
|
||||||
queryKey: [NAME_SPACE, 'config', appId],
|
queryKey: [NAME_SPACE, 'config', url],
|
||||||
queryFn: async () => {
|
queryFn: async () => {
|
||||||
const data = await get<WorkflowConfigResponse>(`/apps/${appId}/workflows/draft/config`)
|
const data = await get<WorkflowConfigResponse>(url)
|
||||||
onSuccess(data)
|
onSuccess(data)
|
||||||
return data
|
return data
|
||||||
},
|
},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user