iteration.tsx 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. 'use client'
  2. import { useTranslation } from 'react-i18next'
  3. import type { FC } from 'react'
  4. import ToolCall from './tool-call'
  5. import Divider from '@/app/components/base/divider'
  6. import type { AgentIteration } from '@/models/log'
  7. import cn from '@/utils/classnames'
  8. type Props = {
  9. isFinal: boolean
  10. index: number
  11. iterationInfo: AgentIteration
  12. }
  13. const Iteration: FC<Props> = ({ iterationInfo, isFinal, index }) => {
  14. const { t } = useTranslation()
  15. return (
  16. <div className={cn('px-4 py-2')}>
  17. <div className='flex items-center'>
  18. {isFinal && (
  19. <div className='mr-3 shrink-0 text-xs font-semibold leading-[18px] text-text-tertiary'>{t('appLog.agentLogDetail.finalProcessing')}</div>
  20. )}
  21. {!isFinal && (
  22. <div className='mr-3 shrink-0 text-xs font-semibold leading-[18px] text-text-tertiary'>{`${t('appLog.agentLogDetail.iteration').toUpperCase()} ${index}`}</div>
  23. )}
  24. <Divider bgStyle='gradient' className='mx-0 h-[1px] grow'/>
  25. </div>
  26. <ToolCall
  27. isLLM
  28. isFinal={isFinal}
  29. tokens={iterationInfo.tokens}
  30. observation={iterationInfo.tool_raw.outputs}
  31. finalAnswer={iterationInfo.thought}
  32. toolCall={{
  33. status: 'success',
  34. tool_icon: null,
  35. }}
  36. />
  37. {iterationInfo.tool_calls.map((toolCall, index) => (
  38. <ToolCall
  39. isLLM={false}
  40. key={index}
  41. toolCall={toolCall}
  42. />
  43. ))}
  44. </div>
  45. )
  46. }
  47. export default Iteration