Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

index.tsx 3.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. 'use client'
  2. import {
  3. useMemo,
  4. } from 'react'
  5. import useSWR from 'swr'
  6. import {
  7. SupportUploadFileTypes,
  8. } from '@/app/components/workflow/types'
  9. import {
  10. useWorkflowInit,
  11. } from './hooks'
  12. import {
  13. initialEdges,
  14. initialNodes,
  15. } from '@/app/components/workflow/utils'
  16. import Loading from '@/app/components/base/loading'
  17. import { FeaturesProvider } from '@/app/components/base/features'
  18. import type { Features as FeaturesData } from '@/app/components/base/features/types'
  19. import { FILE_EXTS } from '@/app/components/base/prompt-editor/constants'
  20. import { fetchFileUploadConfig } from '@/service/common'
  21. import { useAppContext } from '@/context/app-context'
  22. import WorkflowWithDefaultContext from '@/app/components/workflow'
  23. import {
  24. WorkflowContextProvider,
  25. } from '@/app/components/workflow/context'
  26. import { createWorkflowSlice } from './store/workflow/workflow-slice'
  27. import WorkflowAppMain from './components/workflow-main'
  28. const WorkflowAppWithAdditionalContext = () => {
  29. const {
  30. data,
  31. isLoading,
  32. } = useWorkflowInit()
  33. const { isLoadingCurrentWorkspace, currentWorkspace } = useAppContext()
  34. const { data: fileUploadConfigResponse } = useSWR({ url: '/files/upload' }, fetchFileUploadConfig)
  35. const nodesData = useMemo(() => {
  36. if (data)
  37. return initialNodes(data.graph.nodes, data.graph.edges)
  38. return []
  39. }, [data])
  40. const edgesData = useMemo(() => {
  41. if (data)
  42. return initialEdges(data.graph.edges, data.graph.nodes)
  43. return []
  44. }, [data])
  45. if (!data || isLoading || isLoadingCurrentWorkspace || !currentWorkspace.id) {
  46. return (
  47. <div className='relative flex h-full w-full items-center justify-center'>
  48. <Loading />
  49. </div>
  50. )
  51. }
  52. const features = data.features || {}
  53. const initialFeatures: FeaturesData = {
  54. file: {
  55. image: {
  56. enabled: !!features.file_upload?.image?.enabled,
  57. number_limits: features.file_upload?.image?.number_limits || 3,
  58. transfer_methods: features.file_upload?.image?.transfer_methods || ['local_file', 'remote_url'],
  59. },
  60. enabled: !!(features.file_upload?.enabled || features.file_upload?.image?.enabled),
  61. allowed_file_types: features.file_upload?.allowed_file_types || [SupportUploadFileTypes.image],
  62. allowed_file_extensions: features.file_upload?.allowed_file_extensions || FILE_EXTS[SupportUploadFileTypes.image].map(ext => `.${ext}`),
  63. allowed_file_upload_methods: features.file_upload?.allowed_file_upload_methods || features.file_upload?.image?.transfer_methods || ['local_file', 'remote_url'],
  64. number_limits: features.file_upload?.number_limits || features.file_upload?.image?.number_limits || 3,
  65. fileUploadConfig: fileUploadConfigResponse,
  66. },
  67. opening: {
  68. enabled: !!features.opening_statement,
  69. opening_statement: features.opening_statement,
  70. suggested_questions: features.suggested_questions,
  71. },
  72. suggested: features.suggested_questions_after_answer || { enabled: false },
  73. speech2text: features.speech_to_text || { enabled: false },
  74. text2speech: features.text_to_speech || { enabled: false },
  75. citation: features.retriever_resource || { enabled: false },
  76. moderation: features.sensitive_word_avoidance || { enabled: false },
  77. }
  78. return (
  79. <WorkflowWithDefaultContext
  80. edges={edgesData}
  81. nodes={nodesData}
  82. >
  83. <FeaturesProvider features={initialFeatures}>
  84. <WorkflowAppMain
  85. nodes={nodesData}
  86. edges={edgesData}
  87. viewport={data.graph.viewport}
  88. />
  89. </FeaturesProvider>
  90. </WorkflowWithDefaultContext>
  91. )
  92. }
  93. const WorkflowAppWrapper = () => {
  94. return (
  95. <WorkflowContextProvider
  96. injectWorkflowStoreSliceFn={createWorkflowSlice}
  97. >
  98. <WorkflowAppWithAdditionalContext />
  99. </WorkflowContextProvider>
  100. )
  101. }
  102. export default WorkflowAppWrapper