Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. import {
  2. useCallback,
  3. useRef,
  4. useState,
  5. } from 'react'
  6. import { useBoolean } from 'ahooks'
  7. import type {
  8. AgentLogItemWithChildren,
  9. IterationDurationMap,
  10. LoopDurationMap,
  11. LoopVariableMap,
  12. NodeTracing,
  13. } from '@/types/workflow'
  14. export const useLogs = () => {
  15. const [showRetryDetail, {
  16. setTrue: setShowRetryDetailTrue,
  17. setFalse: setShowRetryDetailFalse,
  18. }] = useBoolean(false)
  19. const [retryResultList, setRetryResultList] = useState<NodeTracing[]>([])
  20. const handleShowRetryResultList = useCallback((detail: NodeTracing[]) => {
  21. setShowRetryDetailTrue()
  22. setRetryResultList(detail)
  23. }, [setShowRetryDetailTrue, setRetryResultList])
  24. const [showIteratingDetail, {
  25. setTrue: setShowIteratingDetailTrue,
  26. setFalse: setShowIteratingDetailFalse,
  27. }] = useBoolean(false)
  28. const [iterationResultList, setIterationResultList] = useState<NodeTracing[][]>([])
  29. const [iterationResultDurationMap, setIterationResultDurationMap] = useState<IterationDurationMap>({})
  30. const handleShowIterationResultList = useCallback((detail: NodeTracing[][], iterDurationMap: IterationDurationMap) => {
  31. setShowIteratingDetailTrue()
  32. setIterationResultList(detail)
  33. setIterationResultDurationMap(iterDurationMap)
  34. }, [setShowIteratingDetailTrue, setIterationResultList, setIterationResultDurationMap])
  35. const [showLoopingDetail, {
  36. setTrue: setShowLoopingDetailTrue,
  37. setFalse: setShowLoopingDetailFalse,
  38. }] = useBoolean(false)
  39. const [loopResultList, setLoopResultList] = useState<NodeTracing[][]>([])
  40. const [loopResultDurationMap, setLoopResultDurationMap] = useState<LoopDurationMap>({})
  41. const [loopResultVariableMap, setLoopResultVariableMap] = useState<Record<string, any>>({})
  42. const handleShowLoopResultList = useCallback((detail: NodeTracing[][], loopDurationMap: LoopDurationMap, loopVariableMap: LoopVariableMap) => {
  43. setShowLoopingDetailTrue()
  44. setLoopResultList(detail)
  45. setLoopResultDurationMap(loopDurationMap)
  46. setLoopResultVariableMap(loopVariableMap)
  47. }, [setShowLoopingDetailTrue, setLoopResultList, setLoopResultDurationMap])
  48. const [agentOrToolLogItemStack, setAgentOrToolLogItemStack] = useState<AgentLogItemWithChildren[]>([])
  49. const agentOrToolLogItemStackRef = useRef(agentOrToolLogItemStack)
  50. const [agentOrToolLogListMap, setAgentOrToolLogListMap] = useState<Record<string, AgentLogItemWithChildren[]>>({})
  51. const agentOrToolLogListMapRef = useRef(agentOrToolLogListMap)
  52. const handleShowAgentOrToolLog = useCallback((detail?: AgentLogItemWithChildren) => {
  53. if (!detail) {
  54. setAgentOrToolLogItemStack([])
  55. agentOrToolLogItemStackRef.current = []
  56. return
  57. }
  58. const { id, children } = detail
  59. let currentAgentOrToolLogItemStack = agentOrToolLogItemStackRef.current.slice()
  60. const index = currentAgentOrToolLogItemStack.findIndex(logItem => logItem.id === id)
  61. if (index > -1)
  62. currentAgentOrToolLogItemStack = currentAgentOrToolLogItemStack.slice(0, index + 1)
  63. else
  64. currentAgentOrToolLogItemStack = [...currentAgentOrToolLogItemStack.slice(), detail]
  65. setAgentOrToolLogItemStack(currentAgentOrToolLogItemStack)
  66. agentOrToolLogItemStackRef.current = currentAgentOrToolLogItemStack
  67. if (children) {
  68. setAgentOrToolLogListMap({
  69. ...agentOrToolLogListMapRef.current,
  70. [id]: children,
  71. })
  72. }
  73. }, [setAgentOrToolLogItemStack, setAgentOrToolLogListMap])
  74. return {
  75. showSpecialResultPanel: showRetryDetail || showIteratingDetail || showLoopingDetail || !!agentOrToolLogItemStack.length,
  76. showRetryDetail,
  77. setShowRetryDetailTrue,
  78. setShowRetryDetailFalse,
  79. retryResultList,
  80. setRetryResultList,
  81. handleShowRetryResultList,
  82. showIteratingDetail,
  83. setShowIteratingDetailTrue,
  84. setShowIteratingDetailFalse,
  85. iterationResultList,
  86. setIterationResultList,
  87. iterationResultDurationMap,
  88. setIterationResultDurationMap,
  89. handleShowIterationResultList,
  90. showLoopingDetail,
  91. setShowLoopingDetailTrue,
  92. setShowLoopingDetailFalse,
  93. loopResultList,
  94. setLoopResultList,
  95. loopResultDurationMap,
  96. setLoopResultDurationMap,
  97. loopResultVariableMap,
  98. setLoopResultVariableMap,
  99. handleShowLoopResultList,
  100. agentOrToolLogItemStack,
  101. agentOrToolLogListMap,
  102. handleShowAgentOrToolLog,
  103. }
  104. }