diff --git a/web-app/src/containers/dialogs/MessageMetadataDialog.tsx b/web-app/src/containers/dialogs/MessageMetadataDialog.tsx
index 05ce29246..429c7c4b5 100644
--- a/web-app/src/containers/dialogs/MessageMetadataDialog.tsx
+++ b/web-app/src/containers/dialogs/MessageMetadataDialog.tsx
@@ -1,4 +1,4 @@
-import { useState } from 'react'
+import { useState, useMemo } from 'react'
import { useTranslation } from '@/i18n/react-i18next-compat'
import {
Dialog,
@@ -7,21 +7,96 @@ import {
DialogTitle,
DialogHeader,
} from '@/components/ui/dialog'
-import { IconInfoCircle } from '@tabler/icons-react'
+import {
+ IconInfoCircle,
+ IconRobot,
+ IconGauge,
+ IconId,
+ IconCalendar,
+ IconTemperature,
+ IconHierarchy,
+ IconTool,
+ IconBoxMultiple,
+ IconRuler,
+ IconMessageCircle,
+} from '@tabler/icons-react'
import {
Tooltip,
TooltipContent,
TooltipTrigger,
} from '@/components/ui/tooltip'
-import CodeEditor from '@uiw/react-textarea-code-editor'
-import '@uiw/react-textarea-code-editor/dist.css'
+// Removed CodeEditor and its styles
+
+// Type definitions for the provided metadata structure
+interface Parameters {
+ temperature: number
+ top_k: number
+ top_p: number
+}
+
+interface AssistantMetadata {
+ avatar: string
+ created_at: number
+ description: string
+ id: string
+ instructions: string
+ name: string
+ parameters: Parameters
+ tool_steps: number
+}
+
+interface TokenSpeedMetadata {
+ lastTimestamp: number
+ message: string
+ tokenCount: number
+ tokenSpeed: number
+}
+
+interface MessageMetadata {
+ assistant?: AssistantMetadata
+ tokenSpeed?: TokenSpeedMetadata
+}
interface MessageMetadataDialogProps {
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
- metadata: any
+ metadata: MessageMetadata // Use the specific interface
triggerElement?: React.ReactNode
}
+// --- Helper Components & Utilities ---
+
+// A utility component to display a single detail row
+const DetailItem: React.FC<{
+ icon: React.ReactNode
+ label: string
+ value: React.ReactNode
+}> = ({ icon, label, value }) => (
+
+
{icon}
+
+ {label}:
+
+ {value}
+
+
+
+)
+
+// Helper for formatting timestamps
+const formatDate = (timestamp: number) => {
+ if (!timestamp) return 'N/A'
+ return new Intl.DateTimeFormat('en-US', {
+ year: 'numeric',
+ month: 'short',
+ day: 'numeric',
+ hour: 'numeric',
+ minute: 'numeric',
+ second: 'numeric',
+ timeZoneName: 'short',
+ }).format(new Date(timestamp))
+}
+
+// --- Main Component ---
+
export function MessageMetadataDialog({
metadata,
triggerElement,
@@ -29,10 +104,12 @@ export function MessageMetadataDialog({
const { t } = useTranslation()
const [isOpen, setIsOpen] = useState(false)
+ const { assistant, tokenSpeed } = (metadata || {}) as MessageMetadata
+
const defaultTrigger = (
-
)
+ const formattedTokenSpeed = useMemo(() => {
+ if (tokenSpeed?.tokenSpeed === undefined) return 'N/A'
+ return (
+ new Intl.NumberFormat('en-US', {
+ style: 'decimal',
+ minimumFractionDigits: 2,
+ maximumFractionDigits: 2,
+ }).format(tokenSpeed.tokenSpeed) + ' tokens/s'
+ )
+ }, [tokenSpeed])
+
return (