| import { memo } from 'react'; | |
| import { Markdown } from './Markdown'; | |
| import type { JSONValue } from 'ai'; | |
| interface AssistantMessageProps { | |
| content: string; | |
| annotations?: JSONValue[]; | |
| } | |
| export const AssistantMessage = memo(({ content, annotations }: AssistantMessageProps) => { | |
| const filteredAnnotations = (annotations?.filter( | |
| (annotation: JSONValue) => annotation && typeof annotation === 'object' && Object.keys(annotation).includes('type'), | |
| ) || []) as { type: string; value: any }[]; | |
| const usage: { | |
| completionTokens: number; | |
| promptTokens: number; | |
| totalTokens: number; | |
| } = filteredAnnotations.find((annotation) => annotation.type === 'usage')?.value; | |
| return ( | |
| <div className="overflow-hidden w-full"> | |
| {usage && ( | |
| <div className="text-sm text-bolt-elements-textSecondary mb-2"> | |
| Tokens: {usage.totalTokens} (prompt: {usage.promptTokens}, completion: {usage.completionTokens}) | |
| </div> | |
| )} | |
| <Markdown html>{content}</Markdown> | |
| </div> | |
| ); | |
| }); | |