You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import { useMemo } from 'react'
  2. import WorkflowWithDefaultContext from '@/app/components/workflow'
  3. import {
  4. WorkflowContextProvider,
  5. } from '@/app/components/workflow/context'
  6. import type { InjectWorkflowStoreSliceFn } from '@/app/components/workflow/store'
  7. import {
  8. initialEdges,
  9. initialNodes,
  10. } from '@/app/components/workflow/utils'
  11. import Loading from '@/app/components/base/loading'
  12. import { createRagPipelineSliceSlice } from './store'
  13. import RagPipelineMain from './components/rag-pipeline-main'
  14. import { usePipelineInit } from './hooks'
  15. import { useDatasetDetailContextWithSelector } from '@/context/dataset-detail'
  16. import Conversion from './components/conversion'
  17. import { processNodesWithoutDataSource } from './utils'
  18. const RagPipeline = () => {
  19. const {
  20. data,
  21. isLoading,
  22. } = usePipelineInit()
  23. const nodesData = useMemo(() => {
  24. if (data)
  25. return initialNodes(data.graph.nodes, data.graph.edges)
  26. return []
  27. }, [data])
  28. const edgesData = useMemo(() => {
  29. if (data)
  30. return initialEdges(data.graph.edges, data.graph.nodes)
  31. return []
  32. }, [data])
  33. if (!data || isLoading) {
  34. return (
  35. <div className='relative flex h-full w-full items-center justify-center'>
  36. <Loading />
  37. </div>
  38. )
  39. }
  40. const {
  41. nodes: processedNodes,
  42. viewport,
  43. } = processNodesWithoutDataSource(nodesData, data.graph.viewport)
  44. return (
  45. <WorkflowWithDefaultContext
  46. edges={edgesData}
  47. nodes={processedNodes}
  48. >
  49. <RagPipelineMain
  50. edges={edgesData}
  51. nodes={processedNodes}
  52. viewport={viewport}
  53. />
  54. </WorkflowWithDefaultContext>
  55. )
  56. }
  57. const RagPipelineWrapper = () => {
  58. const pipelineId = useDatasetDetailContextWithSelector(s => s.dataset?.pipeline_id)
  59. if (!pipelineId)
  60. return <Conversion />
  61. return (
  62. <WorkflowContextProvider
  63. injectWorkflowStoreSliceFn={createRagPipelineSliceSlice as InjectWorkflowStoreSliceFn}
  64. >
  65. <RagPipeline />
  66. </WorkflowContextProvider>
  67. )
  68. }
  69. export default RagPipelineWrapper