Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

use-pipeline-init.ts 3.1KB

5 meses atrás
5 meses atrás
5 meses atrás
5 meses atrás
5 meses atrás
5 meses atrás
5 meses atrás
5 meses atrás
5 meses atrás
5 meses atrás
5 meses atrás
5 meses atrás
5 meses atrás
5 meses atrás
5 meses atrás
5 meses atrás
5 meses atrás
5 meses atrás
5 meses atrás
5 meses atrás
5 meses atrás
5 meses atrás
5 meses atrás
5 meses atrás
5 meses atrás
5 meses atrás
5 meses atrás
5 meses atrás
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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. const knowledgeIcon = useDatasetDetailContextWithSelector(s => s.dataset)?.icon_info
  28. useEffect(() => {
  29. workflowStore.setState({ pipelineId: datasetId, knowledgeName, knowledgeIcon })
  30. }, [datasetId, workflowStore, knowledgeName, knowledgeIcon])
  31. usePipelineConfig()
  32. const handleGetInitialWorkflowData = useCallback(async () => {
  33. const {
  34. setEnvSecrets,
  35. setEnvironmentVariables,
  36. setSyncWorkflowDraftHash,
  37. setDraftUpdatedAt,
  38. setToolPublished,
  39. setRagPipelineVariables,
  40. } = workflowStore.getState()
  41. try {
  42. const res = await fetchWorkflowDraft(`/rag/pipelines/${datasetId}/workflows/draft`)
  43. setData(res)
  44. setDraftUpdatedAt(res.updated_at)
  45. setToolPublished(res.tool_published)
  46. setEnvSecrets((res.environment_variables || []).filter(env => env.value_type === 'secret').reduce((acc, env) => {
  47. acc[env.id] = env.value
  48. return acc
  49. }, {} as Record<string, string>))
  50. setEnvironmentVariables(res.environment_variables?.map(env => env.value_type === 'secret' ? { ...env, value: '[__HIDDEN__]' } : env) || [])
  51. setSyncWorkflowDraftHash(res.hash)
  52. setRagPipelineVariables?.(res.rag_pipeline_variables || [])
  53. setIsLoading(false)
  54. }
  55. catch (error: any) {
  56. if (error && error.json && !error.bodyUsed && datasetId) {
  57. error.json().then((err: any) => {
  58. if (err.code === 'draft_workflow_not_exist') {
  59. workflowStore.setState({ notInitialWorkflow: true })
  60. syncWorkflowDraft({
  61. url: `/rag/pipelines/${datasetId}/workflows/draft`,
  62. params: {
  63. graph: {
  64. nodes: nodesTemplate,
  65. edges: edgesTemplate,
  66. },
  67. environment_variables: [],
  68. },
  69. }).then((res) => {
  70. const { setDraftUpdatedAt } = workflowStore.getState()
  71. setDraftUpdatedAt(res.updated_at)
  72. handleGetInitialWorkflowData()
  73. })
  74. }
  75. })
  76. }
  77. }
  78. }, [nodesTemplate, edgesTemplate, workflowStore, datasetId])
  79. useEffect(() => {
  80. handleGetInitialWorkflowData()
  81. // eslint-disable-next-line react-hooks/exhaustive-deps
  82. }, [])
  83. return {
  84. data,
  85. isLoading,
  86. }
  87. }