diff --git a/web-app/src/containers/ThreadContent.tsx b/web-app/src/containers/ThreadContent.tsx index 833846db1..66205248a 100644 --- a/web-app/src/containers/ThreadContent.tsx +++ b/web-app/src/containers/ThreadContent.tsx @@ -34,6 +34,9 @@ import { } from '@/components/ui/tooltip' import { formatDate } from '@/utils/formatDate' import { AvatarEmoji } from '@/containers/AvatarEmoji' + +import TokenSpeedIndicator from '@/containers/TokenSpeedIndicator' + import CodeEditor from '@uiw/react-textarea-code-editor' import '@uiw/react-textarea-code-editor/dist.css' @@ -360,8 +363,8 @@ export const ThreadContent = memo( className={cn( 'flex items-center gap-2', item.isLastMessage && - streamingContent && - 'opacity-0 visibility-hidden pointer-events-none' + streamingContent && + 'opacity-0 visibility-hidden pointer-events-none' )} > @@ -445,6 +448,10 @@ export const ThreadContent = memo( )} + + )} diff --git a/web-app/src/containers/TokenSpeedIndicator.tsx b/web-app/src/containers/TokenSpeedIndicator.tsx new file mode 100644 index 000000000..b1dfb841c --- /dev/null +++ b/web-app/src/containers/TokenSpeedIndicator.tsx @@ -0,0 +1,22 @@ +import { IconBrandSpeedtest } from '@tabler/icons-react' + +interface TokenSpeedIndicatorProps { + metadata?: Record +} + +export const TokenSpeedIndicator = ({ + metadata +}: TokenSpeedIndicatorProps) => { + const persistedTokenSpeed = (metadata?.tokenSpeed as { tokenSpeed: number })?.tokenSpeed + + return ( +
+ + + {Math.round(persistedTokenSpeed)} tokens/sec + +
+ ) +} + +export default TokenSpeedIndicator diff --git a/web-app/src/hooks/useChat.ts b/web-app/src/hooks/useChat.ts index 349b07f7a..4b0e3e6e8 100644 --- a/web-app/src/hooks/useChat.ts +++ b/web-app/src/hooks/useChat.ts @@ -401,8 +401,12 @@ export const useChat = () => { // Create a final content object for adding to the thread const finalContent = newAssistantThreadContent( activeThread.id, - accumulatedText + accumulatedText, + { + tokenSpeed: useAppState.getState().tokenSpeed, + } ) + builder.addAssistantMessage(accumulatedText, undefined, toolCalls) const updatedMessage = await postMessageProcessing( toolCalls,