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

use-single-run-form-params.ts 2.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import type { MutableRefObject } from 'react'
  2. import type { InputVar, Variable } from '@/app/components/workflow/types'
  3. import { useMemo } from 'react'
  4. import useNodeCrud from '../_base/hooks/use-node-crud'
  5. import type { AgentNodeType } from './types'
  6. import { useTranslation } from 'react-i18next'
  7. import type { Props as FormProps } from '@/app/components/workflow/nodes/_base/components/before-run-form/form'
  8. import { useStrategyInfo } from './use-config'
  9. import type { NodeTracing } from '@/types/workflow'
  10. import formatTracing from '@/app/components/workflow/run/utils/format-log'
  11. type Params = {
  12. id: string,
  13. payload: AgentNodeType,
  14. runInputData: Record<string, any>
  15. runInputDataRef: MutableRefObject<Record<string, any>>
  16. getInputVars: (textList: string[]) => InputVar[]
  17. setRunInputData: (data: Record<string, any>) => void
  18. toVarInputs: (variables: Variable[]) => InputVar[]
  19. runResult: NodeTracing
  20. }
  21. const useSingleRunFormParams = ({
  22. id,
  23. payload,
  24. runInputData,
  25. getInputVars,
  26. setRunInputData,
  27. runResult,
  28. }: Params) => {
  29. const { t } = useTranslation()
  30. const { inputs } = useNodeCrud<AgentNodeType>(id, payload)
  31. const formData = useMemo(() => {
  32. return Object.fromEntries(
  33. Object.entries(inputs.agent_parameters || {}).map(([key, value]) => {
  34. return [key, value.value]
  35. }),
  36. )
  37. }, [inputs.agent_parameters])
  38. const {
  39. strategy: currentStrategy,
  40. } = useStrategyInfo(
  41. inputs.agent_strategy_provider_name,
  42. inputs.agent_strategy_name,
  43. )
  44. const allVarStrArr = (() => {
  45. const arr = currentStrategy?.parameters.filter(item => item.type === 'string').map((item) => {
  46. return formData[item.name]
  47. }) || []
  48. return arr
  49. })()
  50. const varInputs = getInputVars?.(allVarStrArr)
  51. const forms = useMemo(() => {
  52. const forms: FormProps[] = []
  53. if (varInputs!.length > 0) {
  54. forms.push(
  55. {
  56. label: t('workflow.nodes.llm.singleRun.variable')!,
  57. inputs: varInputs!,
  58. values: runInputData,
  59. onChange: setRunInputData,
  60. },
  61. )
  62. }
  63. return forms
  64. }, [runInputData, setRunInputData, t, varInputs])
  65. const nodeInfo = useMemo(() => {
  66. if (!runResult)
  67. return
  68. return formatTracing([runResult], t)[0]
  69. }, [runResult, t])
  70. const getDependentVars = () => {
  71. return varInputs.map(item => item.variable.slice(1, -1).split('.'))
  72. }
  73. return {
  74. forms,
  75. nodeInfo,
  76. getDependentVars,
  77. }
  78. }
  79. export default useSingleRunFormParams