| 
                        123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 | 
                        - import { useCallback } from 'react'
 - import { useStoreApi } from 'reactflow'
 - import { useTranslation } from 'react-i18next'
 - import { useWorkflowStore } from '../store'
 - import {
 -   BlockEnum,
 -   WorkflowRunningStatus,
 - } from '../types'
 - import type { KnowledgeRetrievalNodeType } from '../nodes/knowledge-retrieval/types'
 - import type { Node } from '../types'
 - import { useWorkflow } from './use-workflow'
 - import {
 -   useIsChatMode,
 -   useNodesSyncDraft,
 -   useWorkflowInteractions,
 -   useWorkflowRun,
 - } from './index'
 - import { ModelTypeEnum } from '@/app/components/header/account-setting/model-provider-page/declarations'
 - import { useCurrentProviderAndModel, useModelListAndDefaultModelAndCurrentProviderAndModel } from '@/app/components/header/account-setting/model-provider-page/hooks'
 - import { useFeaturesStore } from '@/app/components/base/features/hooks'
 - import KnowledgeRetrievalDefault from '@/app/components/workflow/nodes/knowledge-retrieval/default'
 - import Toast from '@/app/components/base/toast'
 - 
 - export const useWorkflowStartRun = () => {
 -   const store = useStoreApi()
 -   const workflowStore = useWorkflowStore()
 -   const featuresStore = useFeaturesStore()
 -   const isChatMode = useIsChatMode()
 -   const { handleCancelDebugAndPreviewPanel } = useWorkflowInteractions()
 -   const { handleRun } = useWorkflowRun()
 -   const { isFromStartNode } = useWorkflow()
 -   const { doSyncWorkflowDraft } = useNodesSyncDraft()
 -   const { checkValid: checkKnowledgeRetrievalValid } = KnowledgeRetrievalDefault
 -   const { t } = useTranslation()
 -   const {
 -     modelList: rerankModelList,
 -     defaultModel: rerankDefaultModel,
 -   } = useModelListAndDefaultModelAndCurrentProviderAndModel(ModelTypeEnum.rerank)
 - 
 -   const {
 -     currentModel,
 -   } = useCurrentProviderAndModel(
 -     rerankModelList,
 -     rerankDefaultModel
 -       ? {
 -         ...rerankDefaultModel,
 -         provider: rerankDefaultModel.provider.provider,
 -       }
 -       : undefined,
 -   )
 - 
 -   const handleWorkflowStartRunInWorkflow = useCallback(async () => {
 -     const {
 -       workflowRunningData,
 -     } = workflowStore.getState()
 - 
 -     if (workflowRunningData?.result.status === WorkflowRunningStatus.Running)
 -       return
 - 
 -     const { getNodes } = store.getState()
 -     const nodes = getNodes()
 -     const startNode = nodes.find(node => node.data.type === BlockEnum.Start)
 -     const knowledgeRetrievalNodes = nodes.filter((node: Node<KnowledgeRetrievalNodeType>) =>
 -       node.data.type === BlockEnum.KnowledgeRetrieval,
 -     )
 -     const startVariables = startNode?.data.variables || []
 -     const fileSettings = featuresStore!.getState().features.file
 -     const {
 -       showDebugAndPreviewPanel,
 -       setShowDebugAndPreviewPanel,
 -       setShowInputsPanel,
 -       setShowEnvPanel,
 -     } = workflowStore.getState()
 - 
 -     if (knowledgeRetrievalNodes.length > 0) {
 -       for (const node of knowledgeRetrievalNodes) {
 -         if (isFromStartNode(node.id)) {
 -           const res = checkKnowledgeRetrievalValid(node.data, t)
 -           if (!res.isValid || !currentModel || !rerankDefaultModel) {
 -             const errorMessage = res.errorMessage
 -             if (errorMessage) {
 -               Toast.notify({
 -                 type: 'error',
 -                 message: errorMessage,
 -               })
 -               return false
 -             }
 -             else {
 -               Toast.notify({
 -                 type: 'error',
 -                 message: t('appDebug.datasetConfig.rerankModelRequired'),
 -               })
 -               return false
 -             }
 -           }
 -         }
 -       }
 -     }
 - 
 -     setShowEnvPanel(false)
 - 
 -     if (showDebugAndPreviewPanel) {
 -       handleCancelDebugAndPreviewPanel()
 -       return
 -     }
 - 
 -     if (!startVariables.length && !fileSettings?.image?.enabled) {
 -       await doSyncWorkflowDraft()
 -       handleRun({ inputs: {}, files: [] })
 -       setShowDebugAndPreviewPanel(true)
 -       setShowInputsPanel(false)
 -     }
 -     else {
 -       setShowDebugAndPreviewPanel(true)
 -       setShowInputsPanel(true)
 -     }
 -   }, [store, workflowStore, featuresStore, handleCancelDebugAndPreviewPanel, handleRun, doSyncWorkflowDraft])
 - 
 -   const handleWorkflowStartRunInChatflow = useCallback(async () => {
 -     const {
 -       showDebugAndPreviewPanel,
 -       setShowDebugAndPreviewPanel,
 -       setHistoryWorkflowData,
 -       setShowEnvPanel,
 -       setShowChatVariablePanel,
 -     } = workflowStore.getState()
 - 
 -     setShowEnvPanel(false)
 -     setShowChatVariablePanel(false)
 - 
 -     if (showDebugAndPreviewPanel)
 -       handleCancelDebugAndPreviewPanel()
 -     else
 -       setShowDebugAndPreviewPanel(true)
 - 
 -     setHistoryWorkflowData(undefined)
 -   }, [workflowStore, handleCancelDebugAndPreviewPanel])
 - 
 -   const handleStartWorkflowRun = useCallback(() => {
 -     if (!isChatMode)
 -       handleWorkflowStartRunInWorkflow()
 -     else
 -       handleWorkflowStartRunInChatflow()
 -   }, [isChatMode, handleWorkflowStartRunInWorkflow, handleWorkflowStartRunInChatflow])
 - 
 -   return {
 -     handleStartWorkflowRun,
 -     handleWorkflowStartRunInWorkflow,
 -     handleWorkflowStartRunInChatflow,
 -   }
 - }
 
 
  |