Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

use-pipeline-init.ts 3.0KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import {
  2. useCallback,
  3. useEffect,
  4. useState,
  5. } from 'react'
  6. import {
  7. useWorkflowStore,
  8. } from '@/app/components/workflow/store'
  9. import { usePipelineTemplate } from './use-pipeline-template'
  10. import {
  11. fetchWorkflowDraft,
  12. syncWorkflowDraft,
  13. } from '@/service/workflow'
  14. import type { FetchWorkflowDraftResponse } from '@/types/workflow'
  15. import { useDatasetDetailContextWithSelector } from '@/context/dataset-detail'
  16. import { usePipelineConfig } from './use-pipeline-config'
  17. export const usePipelineInit = () => {
  18. const workflowStore = useWorkflowStore()
  19. const {
  20. nodes: nodesTemplate,
  21. edges: edgesTemplate,
  22. } = usePipelineTemplate()
  23. const [data, setData] = useState<FetchWorkflowDraftResponse>()
  24. const [isLoading, setIsLoading] = useState(true)
  25. const datasetId = useDatasetDetailContextWithSelector(s => s.dataset)?.pipeline_id
  26. const knowledgeName = useDatasetDetailContextWithSelector(s => s.dataset)?.name
  27. useEffect(() => {
  28. workflowStore.setState({ pipelineId: datasetId, knowledgeName })
  29. }, [datasetId, workflowStore, knowledgeName])
  30. usePipelineConfig()
  31. const handleGetInitialWorkflowData = useCallback(async () => {
  32. const {
  33. setEnvSecrets,
  34. setEnvironmentVariables,
  35. setSyncWorkflowDraftHash,
  36. setDraftUpdatedAt,
  37. setToolPublished,
  38. setRagPipelineVariables,
  39. } = workflowStore.getState()
  40. try {
  41. const res = await fetchWorkflowDraft(`/rag/pipelines/${datasetId}/workflows/draft`)
  42. setData(res)
  43. setDraftUpdatedAt(res.updated_at)
  44. setToolPublished(res.tool_published)
  45. setEnvSecrets((res.environment_variables || []).filter(env => env.value_type === 'secret').reduce((acc, env) => {
  46. acc[env.id] = env.value
  47. return acc
  48. }, {} as Record<string, string>))
  49. setEnvironmentVariables(res.environment_variables?.map(env => env.value_type === 'secret' ? { ...env, value: '[__HIDDEN__]' } : env) || [])
  50. setSyncWorkflowDraftHash(res.hash)
  51. setRagPipelineVariables?.(res.rag_pipeline_variables || [])
  52. setIsLoading(false)
  53. }
  54. catch (error: any) {
  55. if (error && error.json && !error.bodyUsed && datasetId) {
  56. error.json().then((err: any) => {
  57. if (err.code === 'draft_workflow_not_exist') {
  58. workflowStore.setState({ notInitialWorkflow: true })
  59. syncWorkflowDraft({
  60. url: `/rag/pipelines/${datasetId}/workflows/draft`,
  61. params: {
  62. graph: {
  63. nodes: nodesTemplate,
  64. edges: edgesTemplate,
  65. },
  66. environment_variables: [],
  67. },
  68. }).then((res) => {
  69. const { setDraftUpdatedAt } = workflowStore.getState()
  70. setDraftUpdatedAt(res.updated_at)
  71. handleGetInitialWorkflowData()
  72. })
  73. }
  74. })
  75. }
  76. }
  77. }, [nodesTemplate, edgesTemplate, workflowStore, datasetId])
  78. useEffect(() => {
  79. handleGetInitialWorkflowData()
  80. // eslint-disable-next-line react-hooks/exhaustive-deps
  81. }, [])
  82. return {
  83. data,
  84. isLoading,
  85. }
  86. }