meta.tsx 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. 'use client'
  2. import type { FC } from 'react'
  3. import { useTranslation } from 'react-i18next'
  4. import useTimestamp from '@/hooks/use-timestamp'
  5. type Props = {
  6. status: string
  7. executor?: string
  8. startTime?: number
  9. time?: number
  10. tokens?: number
  11. steps?: number
  12. showSteps?: boolean
  13. }
  14. const MetaData: FC<Props> = ({
  15. status,
  16. executor,
  17. startTime,
  18. time,
  19. tokens,
  20. steps = 1,
  21. showSteps = true,
  22. }) => {
  23. const { t } = useTranslation()
  24. const { formatTime } = useTimestamp()
  25. return (
  26. <div className='relative'>
  27. <div className='h-6 py-1 text-text-tertiary system-xs-medium-uppercase'>{t('runLog.meta.title')}</div>
  28. <div className='py-1'>
  29. <div className='flex'>
  30. <div className='shrink-0 w-[104px] px-2 py-1.5 text-text-tertiary system-xs-regular truncate'>{t('runLog.meta.status')}</div>
  31. <div className='grow px-2 py-1.5 text-text-secondary system-xs-regular'>
  32. {status === 'running' && (
  33. <div className='my-1 w-16 h-2 rounded-sm bg-text-quaternary'/>
  34. )}
  35. {status === 'succeeded' && (
  36. <span>SUCCESS</span>
  37. )}
  38. {status === 'partial-succeeded' && (
  39. <span>PARTIAL SUCCESS</span>
  40. )}
  41. {status === 'exception' && (
  42. <span>EXCEPTION</span>
  43. )}
  44. {status === 'failed' && (
  45. <span>FAIL</span>
  46. )}
  47. {status === 'stopped' && (
  48. <span>STOP</span>
  49. )}
  50. </div>
  51. </div>
  52. <div className='flex'>
  53. <div className='shrink-0 w-[104px] px-2 py-1.5 text-text-tertiary system-xs-regular truncate'>{t('runLog.meta.executor')}</div>
  54. <div className='grow px-2 py-1.5 text-text-secondary system-xs-regular'>
  55. {status === 'running' && (
  56. <div className='my-1 w-[88px] h-2 rounded-sm bg-text-quaternary'/>
  57. )}
  58. {status !== 'running' && (
  59. <span>{executor || 'N/A'}</span>
  60. )}
  61. </div>
  62. </div>
  63. <div className='flex'>
  64. <div className='shrink-0 w-[104px] px-2 py-1.5 text-text-tertiary system-xs-regular truncate'>{t('runLog.meta.startTime')}</div>
  65. <div className='grow px-2 py-1.5 text-text-secondary system-xs-regular'>
  66. {status === 'running' && (
  67. <div className='my-1 w-[72px] h-2 rounded-sm bg-text-quaternary'/>
  68. )}
  69. {status !== 'running' && (
  70. <span>{startTime ? formatTime(startTime, t('appLog.dateTimeFormat') as string) : '-'}</span>
  71. )}
  72. </div>
  73. </div>
  74. <div className='flex'>
  75. <div className='shrink-0 w-[104px] px-2 py-1.5 text-text-tertiary system-xs-regular truncate'>{t('runLog.meta.time')}</div>
  76. <div className='grow px-2 py-1.5 text-text-secondary system-xs-regular'>
  77. {status === 'running' && (
  78. <div className='my-1 w-[72px] h-2 rounded-sm bg-text-quaternary'/>
  79. )}
  80. {status !== 'running' && (
  81. <span>{time ? `${time.toFixed(3)}s` : '-'}</span>
  82. )}
  83. </div>
  84. </div>
  85. <div className='flex'>
  86. <div className='shrink-0 w-[104px] px-2 py-1.5 text-text-tertiary system-xs-regular truncate'>{t('runLog.meta.tokens')}</div>
  87. <div className='grow px-2 py-1.5 text-text-secondary system-xs-regular'>
  88. {status === 'running' && (
  89. <div className='my-1 w-[48px] h-2 rounded-sm bg-text-quaternary'/>
  90. )}
  91. {status !== 'running' && (
  92. <span>{`${tokens || 0} Tokens`}</span>
  93. )}
  94. </div>
  95. </div>
  96. {showSteps && (
  97. <div className='flex'>
  98. <div className='shrink-0 w-[104px] px-2 py-1.5 text-text-tertiary system-xs-regular truncate'>{t('runLog.meta.steps')}</div>
  99. <div className='grow px-2 py-1.5 text-text-secondary system-xs-regular'>
  100. {status === 'running' && (
  101. <div className='my-1 w-[24px] h-2 rounded-sm bg-text-quaternary'/>
  102. )}
  103. {status !== 'running' && (
  104. <span>{steps}</span>
  105. )}
  106. </div>
  107. </div>
  108. )}
  109. </div>
  110. </div>
  111. )
  112. }
  113. export default MetaData