您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

index.tsx 3.7KB

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