@@ -9,27 +9,27 @@ import { Center, Flexbox } from 'react-layout-kit';
9
9
import { aiModelSelectors , useAiInfraStore } from '@/store/aiInfra' ;
10
10
import { useGlobalStore } from '@/store/global' ;
11
11
import { systemStatusSelectors } from '@/store/global/selectors' ;
12
- import { ModelTokensUsage } from '@/types/message' ;
12
+ import { MessageMetadata } from '@/types/message' ;
13
13
import { formatNumber } from '@/utils/format' ;
14
14
15
15
import ModelCard from './ModelCard' ;
16
16
import TokenProgress , { TokenProgressItem } from './TokenProgress' ;
17
17
import { getDetailsToken } from './tokens' ;
18
18
19
19
interface TokenDetailProps {
20
+ meta : MessageMetadata ;
20
21
model : string ;
21
22
provider : string ;
22
- usage : ModelTokensUsage ;
23
23
}
24
24
25
- const TokenDetail = memo < TokenDetailProps > ( ( { usage , model, provider } ) => {
25
+ const TokenDetail = memo < TokenDetailProps > ( ( { meta , model, provider } ) => {
26
26
const { t } = useTranslation ( 'chat' ) ;
27
27
const theme = useTheme ( ) ;
28
28
29
29
const modelCard = useAiInfraStore ( aiModelSelectors . getModelCard ( model , provider ) ) ;
30
30
const isShowCredit = useGlobalStore ( systemStatusSelectors . isShowCredit ) && ! ! modelCard ?. pricing ;
31
31
32
- const detailTokens = getDetailsToken ( usage , modelCard ) ;
32
+ const detailTokens = getDetailsToken ( meta , modelCard ) ;
33
33
const inputDetails = [
34
34
! ! detailTokens . inputAudio && {
35
35
color : theme . cyan9 ,
@@ -113,6 +113,10 @@ const TokenDetail = memo<TokenDetailProps>(({ usage, model, provider }) => {
113
113
detailTokens . totalTokens ! . credit / detailTokens . totalTokens ! . token ,
114
114
2 ,
115
115
) ;
116
+
117
+ const tps = meta ?. tps ? formatNumber ( meta . tps , 2 ) : undefined ;
118
+ const ttft = meta ?. ttft ? formatNumber ( meta . ttft / 1000 , 2 ) : undefined ;
119
+
116
120
return (
117
121
< Popover
118
122
arrow = { false }
@@ -170,6 +174,18 @@ const TokenDetail = memo<TokenDetailProps>(({ usage, model, provider }) => {
170
174
< div style = { { fontWeight : 500 } } > { averagePricing } </ div >
171
175
</ Flexbox >
172
176
) }
177
+ { tps && (
178
+ < Flexbox align = { 'center' } gap = { 4 } horizontal justify = { 'space-between' } >
179
+ < div style = { { color : theme . colorTextSecondary } } > { 'Token Speed (t/s)' } </ div >
180
+ < div style = { { fontWeight : 500 } } > { tps } </ div >
181
+ </ Flexbox >
182
+ ) }
183
+ { ttft && (
184
+ < Flexbox align = { 'center' } gap = { 4 } horizontal justify = { 'space-between' } >
185
+ < div style = { { color : theme . colorTextSecondary } } > { 'Delay (s)' } </ div >
186
+ < div style = { { fontWeight : 500 } } > { ttft } </ div >
187
+ </ Flexbox >
188
+ ) }
173
189
</ Flexbox >
174
190
</ Flexbox >
175
191
</ Flexbox >
0 commit comments